diff --git a/packages/ckeditor5/dist/browser/index-editor.css b/packages/ckeditor5/dist/browser/index-editor.css index 843cdb81c..92c71984a 100644 --- a/packages/ckeditor5/dist/browser/index-editor.css +++ b/packages/ckeditor5/dist/browser/index-editor.css @@ -1,502 +1,626 @@ -.wrs_modal_overlay { -position: fixed; -font-family: arial, sans-serif; -top: 0; -right: 0; -left: 0; -bottom: 0; -background: rgba(0, 0, 0, 0.8); -z-index: 999998; -opacity: 0.65; -pointer-events: auto; -} -.wrs_modal_overlay.wrs_modal_ios { -visibility: hidden; -display: none; -} -.wrs_modal_overlay.wrs_modal_android { -visibility: hidden; -display: none; -} -.wrs_modal_overlay.wrs_modal_ios.moodle { -position: fixed; -} -.wrs_modal_overlay.wrs_modal_desktop.wrs_stack { -background: rgba(0, 0, 0, 0); -display: none; -} -.wrs_modal_overlay.wrs_modal_desktop.wrs_maximized { -background: rgba(0, 0, 0, 0.8); -} -.wrs_modal_overlay.wrs_modal_desktop.wrs_minimized { -background: rgba(0, 0, 0, 0); -display: none; -} -.wrs_modal_overlay.wrs_modal_desktop.wrs_closed { -background: rgba(0, 0, 0, 0); -display: none; -} -.wrs_modal_title { -color: #fff; -padding: 5px 0 5px 10px; --moz-user-select: none; --webkit-user-select: none; --ms-user-select: none; -user-select: none; -text-align: left; -} -.wrs_modal_close_button { -float: right; -cursor: pointer; -color: #fff; -padding: 5px 10px 5px 0; -margin: 10px 7px 0 0; -background-repeat: no-repeat; -} -.wrs_modal_minimize_button { -float: right; -cursor: pointer; -color: #fff; -padding: 5px 10px 5px 0; -top: inherit; -margin: 10px 7px 0 0; -} -.wrs_modal_stack_button { -float: right; -cursor: pointer; -color: #fff; -margin: 10px 7px 0 0; -padding: 5px 10px 5px 0; -top: inherit; -} -.wrs_modal_stack_button.wrs_stack { -visibility: hidden; -margin: 0; -padding: 0; -} -.wrs_modal_stack_button.wrs_minimized { -visibility: hidden; -margin: 0; -padding: 0; -} -.wrs_modal_maximize_button { -float: right; -cursor: pointer; -color: #fff; -margin: 10px 7px 0 0; -padding: 5px 10px 5px 0; -top: inherit; -} -.wrs_modal_maximize_button.wrs_maximized { -visibility: hidden; -margin: 0; -padding: 0; -} -.wrs_modal_title_bar { -display: block; -background-color: #778e9a; -} -.wrs_modal_dialogContainer { -border: none; -background: #fafafa; -z-index: 999999; -} -.wrs_modal_dialogContainer.wrs_modal_desktop { -font-size: 14px; -} -.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_maximized { -position: fixed; -} -.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_minimized { -position: fixed; -top: inherit; -margin: 0; -margin-right: 10px; -} -.wrs_modal_dialogContainer.wrs_closed { -visibility: hidden; -display: none; -opacity: 0; -} -.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_stack { -position: fixed; -bottom: 0; -right: 0; -box-shadow: rgba(0, 0, 0, 0.5) 0 2px 8px; -} -.wrs_modal_dialogContainer.wrs_drag { -box-shadow: rgba(0, 0, 0, 0.5) 0 2px 8px; -} -.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_drag { -box-shadow: rgba(0, 0, 0, 0.5) 0 2px 8px; -} -.wrs_modal_dialogContainer.wrs_modal_android { -margin: auto; -position: fixed; -width: 99%; -height: 99%; -overflow: hidden; -transform: translate(50%, -50%); -top: 50%; -right: 50% !important; -} -.wrs_modal_dialogContainer.wrs_modal_ios { -margin: auto; -position: fixed; -width: 100%; -height: 100%; -overflow: hidden; -transform: translate(50%, -50%); -top: 50%; -right: 50% !important; -} -.wrs_content_container.wrs_minimized { -display: none; -} -.wrs_content_container.wrs_modal_android { -width: 100%; -height: 0%; -flex-grow: 1; -display: flex; -flex-direction: column; -} -.wrs_content_container.wrs_modal_android > div:first-child { -flex-grow: 1; -} -.wrs_content_container.wrs_modal_ios > div:first-child { -flex-grow: 1; -} -.wrs_content_container.wrs_modal_desktop > div:first-child { -flex-grow: 1; -} -.wrs_modal_wrapper.wrs_modal_android { -margin: auto; -display: flex; -flex-direction: column; -height: 100%; -width: 100%; -} -.wrs_content_container.wrs_modal_desktop { -width: 100%; -flex-grow: 1; -display: flex; -flex-direction: column; -} -.wrs_content_container.wrs_modal_ios { -width: 100%; -height: 0%; -flex-grow: 1; -display: flex; -flex-direction: column; -} -.wrs_modal_wrapper.wrs_modal_ios { -margin: auto; -display: flex; -flex-direction: column; -height: 100%; -width: 100%; -} -.wrs_virtual_keyboard { -height: 100%; -width: 100%; -top: 0; -left: 50%; -transform: translate(-50%, 0%); -} -.wrs_modal_dialogContainer.wrs_modal_badStock { -width: 100%; -height: 280px; -margin: 0 auto; -border-width: 0; -} -.wrs_modal_wrapper.wrs_modal_badStock { -width: 100%; -height: 280px; -margin: 0 auto; -border-width: 0; -} -.wrs_noselect { --moz-user-select: none; --khtml-user-select: none; --webkit-user-select: none; --ms-user-select: none; -user-select: none; -} -.wrs_bottom_right_resizer { -width: 10px; -height: 10px; -color: #778e9a; -position: absolute; -right: 4px; -bottom: 8px; -cursor: se-resize; --moz-user-select: none; --webkit-user-select: none; --ms-user-select: none; -user-select: none; -} -.wrs_bottom_left_resizer { -width: 15px; -height: 15px; -color: #778e9a; -position: absolute; -left: 0; -top: 0; -cursor: se-resize; -} -.wrs_modal_controls { -height: 42px; -margin: 3px 0; -overflow: hidden; -line-height: normal; -} -.wrs_modal_links { -margin: 10px auto; -margin-bottom: 0; -font-family: arial, sans-serif; -padding: 6px; -display: inline; -float: right; -text-align: right; -} -.wrs_modal_links > a { -text-decoration: none; -color: #778e9a; -font-size: 16px; -} -.wrs_modal_button_cancel { -min-width: 80px; -font-size: 14px; -border-radius: 3px; -border: 1px solid #778e9a; -padding: 6px 8px; -margin: 10px auto; -margin-left: 5px; -margin-bottom: 0; -cursor: pointer; -font-family: arial, sans-serif; -background-color: #ddd; -height: 32px; -} -.wrs_modal_button_accept { -min-width: 80px; -font-size: 14px; -border-radius: 3px; -border: 1px solid #778e9a; -padding: 6px 8px; -margin: 10px auto; -margin-right: 5px; -margin-bottom: 0; -color: #fff; -background: #778e9a; -cursor: pointer; -font-family: arial, sans-serif; -height: 32px; -} -.wrs_editor_vertical_bar { -height: 20px; -float: right; -background: none; -width: 20px; -cursor: pointer; -} -.wrs_modal_buttons_container { -display: inline; -float: left; -} -.wrs_modal_buttons_container.wrs_modalAndroid { -padding-left: 6px; -} -.wrs_modal_buttons_container.wrs_modalDesktop { -padding-left: 0; -} -.wrs_modal_buttons_container > button { -line-height: normal; -background-image: none; -} -.wrs_modal_wrapper { -margin: 6px; -display: flex; -flex-direction: column; -} -.wrs_modal_wrapper.wrs_modal_desktop.wrs_minimized { -display: none; -} -.wrs_popupmessage_overlay_envolture { -display: none; -width: 100%; -} -.wrs_popupmessage_overlay { -position: absolute; -width: 100%; -height: 100%; -top: 0; -left: 0; -right: 0; -bottom: 0; -background-color: rgba(0, 0, 0, 0.5); -z-index: 4; -cursor: pointer; -} -.wrs_popupmessage_panel { -top: 50%; -left: 50%; -transform: translate(-50%, -50%); -position: absolute; -background: white; -max-width: 500px; -width: 75%; -border-radius: 2px; -padding: 20px; -font-family: sans-serif; -font-size: 15px; -text-align: left; -color: #2e2e2e; -z-index: 5; -max-height: 75%; -overflow: auto; -} -.wrs_popupmessage_button_area { -margin: 10px 0 0 0; -} -.wrs_panelContainer * { -border: 0; -} -.wrs_button_cancel { -min-width: 80px; -font-size: 14px; -border-radius: 3px; -border: 1px solid #778e9a; -padding: 6px 8px; -margin: 10px auto; -margin-left: 5px; -margin-bottom: 0; -cursor: pointer; -font-family: arial, sans-serif; -background-color: #ddd; -background-image: none; -height: 32px; -} -.wrs_button_accept { -min-width: 80px; -font-size: 14px; -border-radius: 3px; -border: 1px solid #778e9a; -padding: 6px 8px; -margin: 10px auto; -margin-right: 5px; -margin-bottom: 0; -color: #fff; -background: #778e9a; -cursor: pointer; -font-family: arial, sans-serif; -height: 32px; -} -.wrs_editor button { -box-shadow: none; -} -.wrs_editor .wrs_header button { -border-bottom: none; -border-bottom-left-radius: 0; -border-bottom-right-radius: 0; -} -.wrs_modal_overlay.wrs_modal_desktop.wrs_stack.wrs_overlay_active { -display: block; -} -.wrs_toolbar tr:focus { -background: none; -} -.wrs_toolbar tr:hover { -background: none; -} -.wrs_modal_rtl .wrs_modal_button_cancel { -margin-right: 5px; -margin-left: 0; -} -.wrs_modal_rtl .wrs_modal_button_accept { -margin-right: 0; -margin-left: 5px; -} -.wrs_modal_rtl .wrs_button_cancel { -margin-right: 5px; -margin-left: 0; -} -.wrs_modal_rtl .wrs_button_accept { -margin-right: 0; -margin-left: 5px; -} -.wrs_modal_offline { -display: none; -position: fixed; -z-index: 2; -padding-top: 150px; -left: 0; -top: 0; -width: 100%; -height: 100%; -overflow: auto; -background-color: rgb(0, 0, 0); -background-color: rgba(0, 0, 0, 0.4); -margin: auto; -} -.wrs_modal_content_offline { -margin: auto; -padding: 16px; -background: #fff7ed; -border-radius: 6px; -width: 517px; -height: 100px; -position: relative; -} -.wrs_modal_offline_close { -color: #c2410c; -font-size: 24px; -font-weight: bold; -left: 95.7%; -right: 2.08%; -top: 7.6%; -bottom: 75%; -font-family: "Inter"; -font-style: normal; -font-weight: 400; -position: absolute; -} -.wrs_modal_offline_warn { -position: absolute; -left: 2.08%; -right: 94%; -top: 11.6%; -bottom: 75%; -font-size: 24px; -color: #fb923c; -background-repeat: no-repeat; -} -.wrs_modal_offline_text_container { -position: absolute; -left: 6.8%; -right: 6.08%; -top: 10.4%; -bottom: 2%; -} -.wrs_modal_offline_text { -font-family: "Inter"; -font-style: normal; -font-weight: 400; -font-size: 14px; -line-height: 20px; -color: #c2410c; -} -.wrs_modal_offline_text_warn { -height: 25px; -font-family: "Inter"; -font-style: normal; -font-size: 14px; -line-height: 20px; -font-weight: bold; -color: #c2410c; -} -.wrs_modal_offline_close:hover { -color: #000; -text-decoration: none; -cursor: pointer; -} +.wrs_modal_overlay{ + position:fixed; + font-family:arial, sans-serif; + top:0; + right:0; + left:0; + bottom:0; + background:rgba(0, 0, 0, 0.8); + z-index:999998; + opacity:0.65; + pointer-events:auto; +} + +.wrs_modal_overlay.wrs_modal_ios{ + visibility:hidden; + display:none; +} + +.wrs_modal_overlay.wrs_modal_android{ + visibility:hidden; + display:none; +} + +.wrs_modal_overlay.wrs_modal_ios.moodle{ + position:fixed; +} + +.wrs_modal_overlay.wrs_modal_desktop.wrs_stack{ + background:rgba(0, 0, 0, 0); + display:none; +} + +.wrs_modal_overlay.wrs_modal_desktop.wrs_maximized{ + background:rgba(0, 0, 0, 0.8); +} + +.wrs_modal_overlay.wrs_modal_desktop.wrs_minimized{ + background:rgba(0, 0, 0, 0); + display:none; +} + +.wrs_modal_overlay.wrs_modal_desktop.wrs_closed{ + background:rgba(0, 0, 0, 0); + display:none; +} + +.wrs_modal_title{ + color:#fff; + padding:5px 0 5px 10px; + -moz-user-select:none; + -webkit-user-select:none; + -ms-user-select:none; + user-select:none; + text-align:left; +} + +.wrs_modal_close_button{ + float:right; + cursor:pointer; + color:#fff; + padding:5px 10px 5px 0; + margin:10px 7px 0 0; + background-repeat:no-repeat; +} + +.wrs_modal_minimize_button{ + float:right; + cursor:pointer; + color:#fff; + padding:5px 10px 5px 0; + top:inherit; + margin:10px 7px 0 0; +} + +.wrs_modal_stack_button{ + float:right; + cursor:pointer; + color:#fff; + margin:10px 7px 0 0; + padding:5px 10px 5px 0; + top:inherit; +} + +.wrs_modal_stack_button.wrs_stack{ + visibility:hidden; + margin:0; + padding:0; +} + +.wrs_modal_stack_button.wrs_minimized{ + visibility:hidden; + margin:0; + padding:0; +} + +.wrs_modal_maximize_button{ + float:right; + cursor:pointer; + color:#fff; + margin:10px 7px 0 0; + padding:5px 10px 5px 0; + top:inherit; +} + +.wrs_modal_maximize_button.wrs_maximized{ + visibility:hidden; + margin:0; + padding:0; +} + +.wrs_modal_title_bar{ + display:block; + background-color:#778e9a; +} + +.wrs_modal_dialogContainer{ + border:none; + background:#fafafa; + z-index:999999; +} + +.wrs_modal_dialogContainer.wrs_modal_desktop{ + font-size:14px; +} + +.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_maximized{ + position:fixed; +} + +.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_minimized{ + position:fixed; + top:inherit; + margin:0; + margin-right:10px; +} + +.wrs_modal_dialogContainer.wrs_closed{ + visibility:hidden; + display:none; + opacity:0; +} + +.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_stack{ + position:fixed; + bottom:0; + right:0; + box-shadow:rgba(0, 0, 0, 0.5) 0 2px 8px; +} + +.wrs_modal_dialogContainer.wrs_drag{ + box-shadow:rgba(0, 0, 0, 0.5) 0 2px 8px; +} + +.wrs_modal_dialogContainer.wrs_modal_desktop.wrs_drag{ + box-shadow:rgba(0, 0, 0, 0.5) 0 2px 8px; +} + +.wrs_modal_dialogContainer.wrs_modal_android{ + margin:auto; + position:fixed; + width:99%; + height:99%; + overflow:hidden; + transform:translate(50%, -50%); + top:50%; + right:50% !important; +} + +.wrs_modal_dialogContainer.wrs_modal_ios{ + margin:auto; + position:fixed; + width:100%; + height:100%; + overflow:hidden; + transform:translate(50%, -50%); + top:50%; + right:50% !important; +} + +.wrs_content_container.wrs_minimized{ + display:none; +} + +.wrs_content_container.wrs_modal_android{ + width:100%; + height:0%; + flex-grow:1; + display:flex; + flex-direction:column; +} + +.wrs_content_container.wrs_modal_android > div:first-child{ + flex-grow:1; +} + +.wrs_content_container.wrs_modal_ios > div:first-child{ + flex-grow:1; +} + +.wrs_content_container.wrs_modal_desktop > div:first-child{ + flex-grow:1; +} + +.wrs_modal_wrapper.wrs_modal_android{ + margin:auto; + display:flex; + flex-direction:column; + height:100%; + width:100%; +} + +.wrs_content_container.wrs_modal_desktop{ + width:100%; + flex-grow:1; + display:flex; + flex-direction:column; +} + +.wrs_content_container.wrs_modal_ios{ + width:100%; + height:0%; + flex-grow:1; + display:flex; + flex-direction:column; +} + +.wrs_modal_wrapper.wrs_modal_ios{ + margin:auto; + display:flex; + flex-direction:column; + height:100%; + width:100%; +} + +.wrs_virtual_keyboard{ + height:100%; + width:100%; + top:0; + left:50%; + transform:translate(-50%, 0%); +} + +@media all and (orientation: portrait){ + .wrs_modal_dialogContainer.wrs_modal_mobile{ + width:100vmin; + height:100vmin; + margin:auto; + border-width:0; + } + + .wrs_modal_wrapper.wrs_modal_mobile{ + width:100vmin; + height:100vmin; + margin:auto; + } +} + +@media all and (orientation: landscape){ + .wrs_modal_dialogContainer.wrs_modal_mobile{ + width:100vmin; + height:100vmin; + margin:auto; + border-width:0; + } + + .wrs_modal_wrapper.wrs_modal_mobile{ + width:100vmin; + height:100vmin; + margin:auto; + } +} + +.wrs_modal_dialogContainer.wrs_modal_badStock{ + width:100%; + height:280px; + margin:0 auto; + border-width:0; +} + +.wrs_modal_wrapper.wrs_modal_badStock{ + width:100%; + height:280px; + margin:0 auto; + border-width:0; +} + +.wrs_noselect{ + -moz-user-select:none; + -khtml-user-select:none; + -webkit-user-select:none; + -ms-user-select:none; + user-select:none; +} + +.wrs_bottom_right_resizer{ + width:10px; + height:10px; + color:#778e9a; + position:absolute; + right:4px; + bottom:8px; + cursor:se-resize; + -moz-user-select:none; + -webkit-user-select:none; + -ms-user-select:none; + user-select:none; +} + +.wrs_bottom_left_resizer{ + width:15px; + height:15px; + color:#778e9a; + position:absolute; + left:0; + top:0; + cursor:se-resize; +} + +.wrs_modal_controls{ + height:42px; + margin:3px 0; + overflow:hidden; + line-height:normal; +} + +.wrs_modal_links{ + margin:10px auto; + margin-bottom:0; + font-family:arial, sans-serif; + padding:6px; + display:inline; + float:right; + text-align:right; +} + +.wrs_modal_links > a{ + text-decoration:none; + color:#778e9a; + font-size:16px; +} + +.wrs_modal_button_cancel, +.wrs_modal_button_cancel:hover, +.wrs_modal_button_cancel:visited, +.wrs_modal_button_cancel:active, +.wrs_modal_button_cancel:focus{ + min-width:80px; + font-size:14px; + border-radius:3px; + border:1px solid #778e9a; + padding:6px 8px; + margin:10px auto; + margin-left:5px; + margin-bottom:0; + cursor:pointer; + font-family:arial, sans-serif; + background-color:#ddd; + height:32px; +} + +.wrs_modal_button_accept, +.wrs_modal_button_accept:hover, +.wrs_modal_button_accept:visited, +.wrs_modal_button_accept:active, +.wrs_modal_button_accept:focus{ + min-width:80px; + font-size:14px; + border-radius:3px; + border:1px solid #778e9a; + padding:6px 8px; + margin:10px auto; + margin-right:5px; + margin-bottom:0; + color:#fff; + background:#778e9a; + cursor:pointer; + font-family:arial, sans-serif; + height:32px; +} + +.wrs_editor_vertical_bar{ + height:20px; + float:right; + background:none; + width:20px; + cursor:pointer; +} + +.wrs_modal_buttons_container{ + display:inline; + float:left; +} + +.wrs_modal_buttons_container.wrs_modalAndroid{ + padding-left:6px; +} + +.wrs_modal_buttons_container.wrs_modalDesktop{ + padding-left:0; +} + +.wrs_modal_buttons_container > button{ + line-height:normal; + background-image:none; +} + +.wrs_modal_wrapper{ + margin:6px; + display:flex; + flex-direction:column; +} + +.wrs_modal_wrapper.wrs_modal_desktop.wrs_minimized{ + display:none; +} + +@media only screen and (max-device-width: 480px) and (orientation: portrait){ + #wrs_modal_wrapper{ + width:140%; + } +} + +.wrs_popupmessage_overlay_envolture{ + display:none; + width:100%; +} + +.wrs_popupmessage_overlay{ + position:absolute; + width:100%; + height:100%; + top:0; + left:0; + right:0; + bottom:0; + background-color:rgba(0, 0, 0, 0.5); + z-index:4; + cursor:pointer; +} + +.wrs_popupmessage_panel{ + top:50%; + left:50%; + transform:translate(-50%, -50%); + position:absolute; + background:white; + max-width:500px; + width:75%; + border-radius:2px; + padding:20px; + font-family:sans-serif; + font-size:15px; + text-align:left; + color:#2e2e2e; + z-index:5; + max-height:75%; + overflow:auto; +} + +.wrs_popupmessage_button_area{ + margin:10px 0 0 0; +} + +.wrs_panelContainer *{ + border:0; +} + +.wrs_button_cancel, +.wrs_button_cancel:hover, +.wrs_button_cancel:visited, +.wrs_button_cancel:active, +.wrs_button_cancel:focus{ + min-width:80px; + font-size:14px; + border-radius:3px; + border:1px solid #778e9a; + padding:6px 8px; + margin:10px auto; + margin-left:5px; + margin-bottom:0; + cursor:pointer; + font-family:arial, sans-serif; + background-color:#ddd; + background-image:none; + height:32px; +} + +.wrs_button_accept, +.wrs_button_accept:hover, +.wrs_button_accept:visited, +.wrs_button_accept:active, +.wrs_button_accept:focus{ + min-width:80px; + font-size:14px; + border-radius:3px; + border:1px solid #778e9a; + padding:6px 8px; + margin:10px auto; + margin-right:5px; + margin-bottom:0; + color:#fff; + background:#778e9a; + cursor:pointer; + font-family:arial, sans-serif; + height:32px; +} + +.wrs_editor button{ + box-shadow:none; +} + +.wrs_editor .wrs_header button{ + border-bottom:none; + border-bottom-left-radius:0; + border-bottom-right-radius:0; +} + +.wrs_modal_overlay.wrs_modal_desktop.wrs_stack.wrs_overlay_active{ + display:block; +} +.wrs_toolbar tr:focus{ + background:none; +} + +.wrs_toolbar tr:hover{ + background:none; +} +.wrs_modal_rtl .wrs_modal_button_cancel{ + margin-right:5px; + margin-left:0; +} + +.wrs_modal_rtl .wrs_modal_button_accept{ + margin-right:0; + margin-left:5px; +} + +.wrs_modal_rtl .wrs_button_cancel{ + margin-right:5px; + margin-left:0; +} + +.wrs_modal_rtl .wrs_button_accept{ + margin-right:0; + margin-left:5px; +} +.wrs_modal_offline{ + display:none; + position:fixed; + z-index:2; + padding-top:150px; + left:0; + top:0; + width:100%; + height:100%; + overflow:auto; + background-color:rgb(0, 0, 0); + background-color:rgba(0, 0, 0, 0.4); + margin:auto; +} +.wrs_modal_content_offline{ + margin:auto; + padding:16px; + background:#fff7ed; + border-radius:6px; + width:517px; + height:100px; + position:relative; +} +.wrs_modal_offline_close{ + color:#c2410c; + font-size:24px; + font-weight:bold; + left:95.7%; + right:2.08%; + top:7.6%; + bottom:75%; + font-family:"Inter"; + font-style:normal; + font-weight:400; + position:absolute; +} +.wrs_modal_offline_warn{ + position:absolute; + left:2.08%; + right:94%; + top:11.6%; + bottom:75%; + font-size:24px; + color:#fb923c; + background-repeat:no-repeat; +} + +.wrs_modal_offline_text_container{ + position:absolute; + left:6.8%; + right:6.08%; + top:10.4%; + bottom:2%; +} + +.wrs_modal_offline_text{ + font-family:"Inter"; + font-style:normal; + font-weight:400; + font-size:14px; + line-height:20px; + color:#c2410c; +} + +.wrs_modal_offline_text_warn{ + height:25px; + font-family:"Inter"; + font-style:normal; + font-size:14px; + line-height:20px; + font-weight:bold; + color:#c2410c; +} + +.wrs_modal_offline_close:hover, +.wrs_modal_offline_close:focus{ + color:#000; + text-decoration:none; + cursor:pointer; +} \ No newline at end of file diff --git a/packages/ckeditor5/dist/browser/index.js b/packages/ckeditor5/dist/browser/index.js index e5e7ca253..e06b368ad 100644 --- a/packages/ckeditor5/dist/browser/index.js +++ b/packages/ckeditor5/dist/browser/index.js @@ -1,2037 +1,1950 @@ -import { Command, Plugin } from "ckeditor5"; -import { ButtonView } from "ckeditor5"; -import { ClickObserver, XmlDataProcessor, UpcastWriter, HtmlDataProcessor } from "ckeditor5"; -import { Widget, viewToModelPositionOutsideModelElement, toWidget } from "ckeditor5"; +import { Command, Plugin } from 'ckeditor5'; +import { ButtonView } from 'ckeditor5'; +import { ClickObserver, XmlDataProcessor, UpcastWriter, HtmlDataProcessor } from 'ckeditor5'; +import { Widget, viewToModelPositionOutsideModelElement, toWidget } from 'ckeditor5'; -var commonjsGlobal = - typeof globalThis !== "undefined" - ? globalThis - : typeof window !== "undefined" - ? window - : typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : {}; +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; -var purify = { exports: {} }; +var purify = {exports: {}}; -(function (module, exports) { - (function (global, factory) { - module.exports = factory(); - })(commonjsGlobal, function () { - const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object; - let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports - let { apply, construct } = typeof Reflect !== "undefined" && Reflect; - if (!freeze) { - freeze = function freeze(x) { - return x; - }; - } - if (!seal) { - seal = function seal(x) { - return x; - }; - } - if (!apply) { - apply = function apply(fun, thisValue, args) { - return fun.apply(thisValue, args); - }; - } - if (!construct) { - construct = function construct(Func, args) { - return new Func(...args); - }; - } - const arrayForEach = unapply(Array.prototype.forEach); - const arrayPop = unapply(Array.prototype.pop); - const arrayPush = unapply(Array.prototype.push); - const stringToLowerCase = unapply(String.prototype.toLowerCase); - const stringToString = unapply(String.prototype.toString); - const stringMatch = unapply(String.prototype.match); - const stringReplace = unapply(String.prototype.replace); - const stringIndexOf = unapply(String.prototype.indexOf); - const stringTrim = unapply(String.prototype.trim); - const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty); - const regExpTest = unapply(RegExp.prototype.test); - const typeErrorCreate = unconstruct(TypeError); - /** - * Creates a new function that calls the given function with a specified thisArg and arguments. - * - * @param {Function} func - The function to be wrapped and called. - * @returns {Function} A new function that calls the given function with a specified thisArg and arguments. - */ function unapply(func) { - return function (thisArg) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - return apply(func, thisArg, args); - }; - } - /** - * Creates a new function that constructs an instance of the given constructor function with the provided arguments. - * - * @param {Function} func - The constructor function to be wrapped and called. - * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments. - */ function unconstruct(func) { - return function () { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - return construct(func, args); - }; - } - /** - * Add properties to a lookup table - * - * @param {Object} set - The set to which elements will be added. - * @param {Array} array - The array containing elements to be added to the set. - * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set. - * @returns {Object} The modified set with added elements. - */ function addToSet(set, array) { - let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase; - if (setPrototypeOf) { - // Make 'in' and truthy checks like Boolean(set.constructor) - // independent of any properties defined on Object.prototype. - // Prevent prototype setters from intercepting set as a this value. - setPrototypeOf(set, null); - } - let l = array.length; - while (l--) { - let element = array[l]; - if (typeof element === "string") { - const lcElement = transformCaseFunc(element); - if (lcElement !== element) { - // Config presets (e.g. tags.js, attrs.js) are immutable. - if (!isFrozen(array)) { - array[l] = lcElement; - } - element = lcElement; - } - } - set[element] = true; - } - return set; - } - /** - * Clean up an array to harden against CSPP - * - * @param {Array} array - The array to be cleaned. - * @returns {Array} The cleaned version of the array - */ function cleanArray(array) { - for (let index = 0; index < array.length; index++) { - const isPropertyExist = objectHasOwnProperty(array, index); - if (!isPropertyExist) { - array[index] = null; - } - } - return array; - } - /** - * Shallow clone an object - * - * @param {Object} object - The object to be cloned. - * @returns {Object} A new object that copies the original. - */ function clone(object) { - const newObject = create(null); - for (const [property, value] of entries(object)) { - const isPropertyExist = objectHasOwnProperty(object, property); - if (isPropertyExist) { - if (Array.isArray(value)) { - newObject[property] = cleanArray(value); - } else if (value && typeof value === "object" && value.constructor === Object) { - newObject[property] = clone(value); - } else { - newObject[property] = value; - } - } - } - return newObject; - } - /** - * This method automatically checks if the prop is function or getter and behaves accordingly. - * - * @param {Object} object - The object to look up the getter function in its prototype chain. - * @param {String} prop - The property name for which to find the getter function. - * @returns {Function} The getter function found in the prototype chain or a fallback function. - */ function lookupGetter(object, prop) { - while (object !== null) { - const desc = getOwnPropertyDescriptor(object, prop); - if (desc) { - if (desc.get) { - return unapply(desc.get); - } - if (typeof desc.value === "function") { - return unapply(desc.value); - } - } - object = getPrototypeOf(object); - } - function fallbackValue() { - return null; - } - return fallbackValue; - } - const html$1 = freeze([ - "a", - "abbr", - "acronym", - "address", - "area", - "article", - "aside", - "audio", - "b", - "bdi", - "bdo", - "big", - "blink", - "blockquote", - "body", - "br", - "button", - "canvas", - "caption", - "center", - "cite", - "code", - "col", - "colgroup", - "content", - "data", - "datalist", - "dd", - "decorator", - "del", - "details", - "dfn", - "dialog", - "dir", - "div", - "dl", - "dt", - "element", - "em", - "fieldset", - "figcaption", - "figure", - "font", - "footer", - "form", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "head", - "header", - "hgroup", - "hr", - "html", - "i", - "img", - "input", - "ins", - "kbd", - "label", - "legend", - "li", - "main", - "map", - "mark", - "marquee", - "menu", - "menuitem", - "meter", - "nav", - "nobr", - "ol", - "optgroup", - "option", - "output", - "p", - "picture", - "pre", - "progress", - "q", - "rp", - "rt", - "ruby", - "s", - "samp", - "section", - "select", - "shadow", - "small", - "source", - "spacer", - "span", - "strike", - "strong", - "style", - "sub", - "summary", - "sup", - "table", - "tbody", - "td", - "template", - "textarea", - "tfoot", - "th", - "thead", - "time", - "tr", - "track", - "tt", - "u", - "ul", - "var", - "video", - "wbr", - ]); - // SVG - const svg$1 = freeze([ - "svg", - "a", - "altglyph", - "altglyphdef", - "altglyphitem", - "animatecolor", - "animatemotion", - "animatetransform", - "circle", - "clippath", - "defs", - "desc", - "ellipse", - "filter", - "font", - "g", - "glyph", - "glyphref", - "hkern", - "image", - "line", - "lineargradient", - "marker", - "mask", - "metadata", - "mpath", - "path", - "pattern", - "polygon", - "polyline", - "radialgradient", - "rect", - "stop", - "style", - "switch", - "symbol", - "text", - "textpath", - "title", - "tref", - "tspan", - "view", - "vkern", - ]); - const svgFilters = freeze([ - "feBlend", - "feColorMatrix", - "feComponentTransfer", - "feComposite", - "feConvolveMatrix", - "feDiffuseLighting", - "feDisplacementMap", - "feDistantLight", - "feDropShadow", - "feFlood", - "feFuncA", - "feFuncB", - "feFuncG", - "feFuncR", - "feGaussianBlur", - "feImage", - "feMerge", - "feMergeNode", - "feMorphology", - "feOffset", - "fePointLight", - "feSpecularLighting", - "feSpotLight", - "feTile", - "feTurbulence", - ]); - // List of SVG elements that are disallowed by default. - // We still need to know them so that we can do namespace - // checks properly in case one wants to add them to - // allow-list. - const svgDisallowed = freeze([ - "animate", - "color-profile", - "cursor", - "discard", - "font-face", - "font-face-format", - "font-face-name", - "font-face-src", - "font-face-uri", - "foreignobject", - "hatch", - "hatchpath", - "mesh", - "meshgradient", - "meshpatch", - "meshrow", - "missing-glyph", - "script", - "set", - "solidcolor", - "unknown", - "use", - ]); - const mathMl$1 = freeze([ - "math", - "menclose", - "merror", - "mfenced", - "mfrac", - "mglyph", - "mi", - "mlabeledtr", - "mmultiscripts", - "mn", - "mo", - "mover", - "mpadded", - "mphantom", - "mroot", - "mrow", - "ms", - "mspace", - "msqrt", - "mstyle", - "msub", - "msup", - "msubsup", - "mtable", - "mtd", - "mtext", - "mtr", - "munder", - "munderover", - "mprescripts", - ]); - // Similarly to SVG, we want to know all MathML elements, - // even those that we disallow by default. - const mathMlDisallowed = freeze([ - "maction", - "maligngroup", - "malignmark", - "mlongdiv", - "mscarries", - "mscarry", - "msgroup", - "mstack", - "msline", - "msrow", - "semantics", - "annotation", - "annotation-xml", - "mprescripts", - "none", - ]); - const text = freeze(["#text"]); - const html = freeze([ - "accept", - "action", - "align", - "alt", - "autocapitalize", - "autocomplete", - "autopictureinpicture", - "autoplay", - "background", - "bgcolor", - "border", - "capture", - "cellpadding", - "cellspacing", - "checked", - "cite", - "class", - "clear", - "color", - "cols", - "colspan", - "controls", - "controlslist", - "coords", - "crossorigin", - "datetime", - "decoding", - "default", - "dir", - "disabled", - "disablepictureinpicture", - "disableremoteplayback", - "download", - "draggable", - "enctype", - "enterkeyhint", - "face", - "for", - "headers", - "height", - "hidden", - "high", - "href", - "hreflang", - "id", - "inputmode", - "integrity", - "ismap", - "kind", - "label", - "lang", - "list", - "loading", - "loop", - "low", - "max", - "maxlength", - "media", - "method", - "min", - "minlength", - "multiple", - "muted", - "name", - "nonce", - "noshade", - "novalidate", - "nowrap", - "open", - "optimum", - "pattern", - "placeholder", - "playsinline", - "popover", - "popovertarget", - "popovertargetaction", - "poster", - "preload", - "pubdate", - "radiogroup", - "readonly", - "rel", - "required", - "rev", - "reversed", - "role", - "rows", - "rowspan", - "spellcheck", - "scope", - "selected", - "shape", - "size", - "sizes", - "span", - "srclang", - "start", - "src", - "srcset", - "step", - "style", - "summary", - "tabindex", - "title", - "translate", - "type", - "usemap", - "valign", - "value", - "width", - "wrap", - "xmlns", - "slot", - ]); - const svg = freeze([ - "accent-height", - "accumulate", - "additive", - "alignment-baseline", - "ascent", - "attributename", - "attributetype", - "azimuth", - "basefrequency", - "baseline-shift", - "begin", - "bias", - "by", - "class", - "clip", - "clippathunits", - "clip-path", - "clip-rule", - "color", - "color-interpolation", - "color-interpolation-filters", - "color-profile", - "color-rendering", - "cx", - "cy", - "d", - "dx", - "dy", - "diffuseconstant", - "direction", - "display", - "divisor", - "dur", - "edgemode", - "elevation", - "end", - "fill", - "fill-opacity", - "fill-rule", - "filter", - "filterunits", - "flood-color", - "flood-opacity", - "font-family", - "font-size", - "font-size-adjust", - "font-stretch", - "font-style", - "font-variant", - "font-weight", - "fx", - "fy", - "g1", - "g2", - "glyph-name", - "glyphref", - "gradientunits", - "gradienttransform", - "height", - "href", - "id", - "image-rendering", - "in", - "in2", - "k", - "k1", - "k2", - "k3", - "k4", - "kerning", - "keypoints", - "keysplines", - "keytimes", - "lang", - "lengthadjust", - "letter-spacing", - "kernelmatrix", - "kernelunitlength", - "lighting-color", - "local", - "marker-end", - "marker-mid", - "marker-start", - "markerheight", - "markerunits", - "markerwidth", - "maskcontentunits", - "maskunits", - "max", - "mask", - "media", - "method", - "mode", - "min", - "name", - "numoctaves", - "offset", - "operator", - "opacity", - "order", - "orient", - "orientation", - "origin", - "overflow", - "paint-order", - "path", - "pathlength", - "patterncontentunits", - "patterntransform", - "patternunits", - "points", - "preservealpha", - "preserveaspectratio", - "primitiveunits", - "r", - "rx", - "ry", - "radius", - "refx", - "refy", - "repeatcount", - "repeatdur", - "restart", - "result", - "rotate", - "scale", - "seed", - "shape-rendering", - "specularconstant", - "specularexponent", - "spreadmethod", - "startoffset", - "stddeviation", - "stitchtiles", - "stop-color", - "stop-opacity", - "stroke-dasharray", - "stroke-dashoffset", - "stroke-linecap", - "stroke-linejoin", - "stroke-miterlimit", - "stroke-opacity", - "stroke", - "stroke-width", - "style", - "surfacescale", - "systemlanguage", - "tabindex", - "targetx", - "targety", - "transform", - "transform-origin", - "text-anchor", - "text-decoration", - "text-rendering", - "textlength", - "type", - "u1", - "u2", - "unicode", - "values", - "viewbox", - "visibility", - "version", - "vert-adv-y", - "vert-origin-x", - "vert-origin-y", - "width", - "word-spacing", - "wrap", - "writing-mode", - "xchannelselector", - "ychannelselector", - "x", - "x1", - "x2", - "xmlns", - "y", - "y1", - "y2", - "z", - "zoomandpan", - ]); - const mathMl = freeze([ - "accent", - "accentunder", - "align", - "bevelled", - "close", - "columnsalign", - "columnlines", - "columnspan", - "denomalign", - "depth", - "dir", - "display", - "displaystyle", - "encoding", - "fence", - "frame", - "height", - "href", - "id", - "largeop", - "length", - "linethickness", - "lspace", - "lquote", - "mathbackground", - "mathcolor", - "mathsize", - "mathvariant", - "maxsize", - "minsize", - "movablelimits", - "notation", - "numalign", - "open", - "rowalign", - "rowlines", - "rowspacing", - "rowspan", - "rspace", - "rquote", - "scriptlevel", - "scriptminsize", - "scriptsizemultiplier", - "selection", - "separator", - "separators", - "stretchy", - "subscriptshift", - "supscriptshift", - "symmetric", - "voffset", - "width", - "xmlns", - ]); - const xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]); - // eslint-disable-next-line unicorn/better-regex - const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode - const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); - const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm); - const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape - const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape - const IS_ALLOWED_URI = seal( - /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i, // eslint-disable-line no-useless-escape - ); - const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); - const ATTR_WHITESPACE = seal( - /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g, // eslint-disable-line no-control-regex - ); - const DOCTYPE_NAME = seal(/^html$/i); - const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i); - var EXPRESSIONS = /*#__PURE__*/ Object.freeze({ - __proto__: null, - MUSTACHE_EXPR: MUSTACHE_EXPR, - ERB_EXPR: ERB_EXPR, - TMPLIT_EXPR: TMPLIT_EXPR, - DATA_ATTR: DATA_ATTR, - ARIA_ATTR: ARIA_ATTR, - IS_ALLOWED_URI: IS_ALLOWED_URI, - IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA, - ATTR_WHITESPACE: ATTR_WHITESPACE, - DOCTYPE_NAME: DOCTYPE_NAME, - CUSTOM_ELEMENT: CUSTOM_ELEMENT, - }); - // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType - const NODE_TYPE = { - element: 1, - attribute: 2, - text: 3, - cdataSection: 4, - entityReference: 5, - // Deprecated - entityNode: 6, - // Deprecated - progressingInstruction: 7, - comment: 8, - document: 9, - documentType: 10, - documentFragment: 11, - notation: 12, // Deprecated - }; - const getGlobal = function getGlobal() { - return typeof window === "undefined" ? null : window; - }; - /** - * Creates a no-op policy for internal use only. - * Don't export this function outside this module! - * @param {TrustedTypePolicyFactory} trustedTypes The policy factory. - * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix). - * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types - * are not supported or creating the policy failed). - */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) { - if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") { - return null; - } - // Allow the callers to control the unique policy name - // by adding a data-tt-policy-suffix to the script element with the DOMPurify. - // Policy creation with duplicate names throws in Trusted Types. - let suffix = null; - const ATTR_NAME = "data-tt-policy-suffix"; - if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) { - suffix = purifyHostElement.getAttribute(ATTR_NAME); - } - const policyName = "dompurify" + (suffix ? "#" + suffix : ""); - try { - return trustedTypes.createPolicy(policyName, { - createHTML(html) { - return html; - }, - createScriptURL(scriptUrl) { - return scriptUrl; - }, - }); - } catch (_) { - // Policy creation failed (most likely another DOMPurify script has - // already run). Skip creating the policy, as this will only cause errors - // if TT are enforced. - console.warn("TrustedTypes policy " + policyName + " could not be created."); - return null; - } - }; - function createDOMPurify() { - let window1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); - const DOMPurify = (root) => createDOMPurify(root); - /** - * Version label, exposed for easier checks - * if DOMPurify is up to date or not - */ DOMPurify.version = "3.1.5"; - /** - * Array of elements that DOMPurify removed during sanitation. - * Empty if nothing was removed. - */ DOMPurify.removed = []; - if (!window1 || !window1.document || window1.document.nodeType !== NODE_TYPE.document) { - // Not running in a browser, provide a factory function - // so that you can pass your own Window - DOMPurify.isSupported = false; - return DOMPurify; - } - let { document } = window1; - const originalDocument = document; - const currentScript = originalDocument.currentScript; - const { - DocumentFragment, - HTMLTemplateElement, - Node, - Element, - NodeFilter, - NamedNodeMap = window1.NamedNodeMap || window1.MozNamedAttrMap, - HTMLFormElement, - DOMParser, - trustedTypes, - } = window1; - const ElementPrototype = Element.prototype; - const cloneNode = lookupGetter(ElementPrototype, "cloneNode"); - const getNextSibling = lookupGetter(ElementPrototype, "nextSibling"); - const getChildNodes = lookupGetter(ElementPrototype, "childNodes"); - const getParentNode = lookupGetter(ElementPrototype, "parentNode"); - // As per issue #47, the web-components registry is inherited by a - // new document created via createHTMLDocument. As per the spec - // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) - // a new empty registry is used when creating a template contents owner - // document, so we use that as our parent document to ensure nothing - // is inherited. - if (typeof HTMLTemplateElement === "function") { - const template = document.createElement("template"); - if (template.content && template.content.ownerDocument) { - document = template.content.ownerDocument; - } - } - let trustedTypesPolicy; - let emptyHTML = ""; - const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document; - const { importNode } = originalDocument; - let hooks = {}; - /** - * Expose whether this browser supports running the full DOMPurify. - */ DOMPurify.isSupported = - typeof entries === "function" && - typeof getParentNode === "function" && - implementation && - implementation.createHTMLDocument !== undefined; - const { - MUSTACHE_EXPR, - ERB_EXPR, - TMPLIT_EXPR, - DATA_ATTR, - ARIA_ATTR, - IS_SCRIPT_OR_DATA, - ATTR_WHITESPACE, - CUSTOM_ELEMENT, - } = EXPRESSIONS; - let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS; - /** - * We consider the elements and attributes below to be safe. Ideally - * don't add any new ones but feel free to remove unwanted ones. - */ /* allowed element names */ let ALLOWED_TAGS = null; - const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]); - /* Allowed attribute names */ let ALLOWED_ATTR = null; - const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]); - /* - * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements. - * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements) - * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list) - * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`. - */ let CUSTOM_ELEMENT_HANDLING = Object.seal( - create(null, { - tagNameCheck: { - writable: true, - configurable: false, - enumerable: true, - value: null, - }, - attributeNameCheck: { - writable: true, - configurable: false, - enumerable: true, - value: null, - }, - allowCustomizedBuiltInElements: { - writable: true, - configurable: false, - enumerable: true, - value: false, - }, - }), - ); - /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null; - /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null; - /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true; - /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true; - /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false; - /* Decide if self-closing tags in attributes are allowed. - * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true; - /* Output should be safe for common template engines. - * This means, DOMPurify removes data attributes, mustaches and ERB - */ let SAFE_FOR_TEMPLATES = false; - /* Output should be safe even for XML used within HTML and alike. - * This means, DOMPurify removes comments when containing risky content. - */ let SAFE_FOR_XML = true; - /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false; - /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false; - /* Decide if all elements (e.g. style, script) must be children of - * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false; - /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html - * string (or a TrustedHTML object if Trusted Types are supported). - * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead - */ let RETURN_DOM = false; - /* Decide if a DOM `DocumentFragment` should be returned, instead of a html - * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false; - /* Try to return a Trusted Type object instead of a string, return a string in - * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false; - /* Output should be free from DOM clobbering attacks? - * This sanitizes markups named with colliding, clobberable built-in DOM APIs. - */ let SANITIZE_DOM = true; - /* Achieve full DOM Clobbering protection by isolating the namespace of named - * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules. - * - * HTML/DOM spec rules that enable DOM Clobbering: - * - Named Access on Window (§7.3.3) - * - DOM Tree Accessors (§3.1.5) - * - Form Element Parent-Child Relations (§4.10.3) - * - Iframe srcdoc / Nested WindowProxies (§4.8.5) - * - HTMLCollection (§4.2.10.2) - * - * Namespace isolation is implemented by prefixing `id` and `name` attributes - * with a constant string, i.e., `user-content-` - */ let SANITIZE_NAMED_PROPS = false; - const SANITIZE_NAMED_PROPS_PREFIX = "user-content-"; - /* Keep element content when removing element? */ let KEEP_CONTENT = true; - /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead - * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false; - /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {}; - /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null; - const DEFAULT_FORBID_CONTENTS = addToSet({}, [ - "annotation-xml", - "audio", - "colgroup", - "desc", - "foreignobject", - "head", - "iframe", - "math", - "mi", - "mn", - "mo", - "ms", - "mtext", - "noembed", - "noframes", - "noscript", - "plaintext", - "script", - "style", - "svg", - "template", - "thead", - "title", - "video", - "xmp", - ]); - /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null; - const DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]); - /* Attributes safe for values like "javascript:" */ let URI_SAFE_ATTRIBUTES = null; - const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [ - "alt", - "class", - "for", - "id", - "label", - "name", - "pattern", - "placeholder", - "role", - "summary", - "title", - "value", - "style", - "xmlns", - ]); - const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML"; - const SVG_NAMESPACE = "http://www.w3.org/2000/svg"; - const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; - /* Document namespace */ let NAMESPACE = HTML_NAMESPACE; - let IS_EMPTY_INPUT = false; - /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null; - const DEFAULT_ALLOWED_NAMESPACES = addToSet( - {}, - [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], - stringToString, - ); - /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null; - const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"]; - const DEFAULT_PARSER_MEDIA_TYPE = "text/html"; - let transformCaseFunc = null; - /* Keep a reference to config to pass to hooks */ let CONFIG = null; - /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = - document.createElement("form"); - const isRegexOrFunction = function isRegexOrFunction(testValue) { - return testValue instanceof RegExp || testValue instanceof Function; - }; - /** - * _parseConfig - * - * @param {Object} cfg optional config literal - */ // eslint-disable-next-line complexity - const _parseConfig = function _parseConfig() { - let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - if (CONFIG && CONFIG === cfg) { - return; - } - /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== "object") { - cfg = {}; - } - /* Shield configuration object from prototype pollution */ cfg = clone(cfg); - PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes - SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 - ? DEFAULT_PARSER_MEDIA_TYPE - : cfg.PARSER_MEDIA_TYPE; - // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is. - transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase; - /* Set configuration parameters */ ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") - ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) - : DEFAULT_ALLOWED_TAGS; - ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") - ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) - : DEFAULT_ALLOWED_ATTR; - ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") - ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) - : DEFAULT_ALLOWED_NAMESPACES; - URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") - ? addToSet( - clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent - cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent - transformCaseFunc, // eslint-disable-line indent - ) // eslint-disable-line indent - : DEFAULT_URI_SAFE_ATTRIBUTES; - DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") - ? addToSet( - clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent - cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent - transformCaseFunc, // eslint-disable-line indent - ) // eslint-disable-line indent - : DEFAULT_DATA_URI_TAGS; - FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") - ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) - : DEFAULT_FORBID_CONTENTS; - FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {}; - FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {}; - USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false; - ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true - ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true - ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false - ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true - SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false - SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true - WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false - RETURN_DOM = cfg.RETURN_DOM || false; // Default false - RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false - RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false - FORCE_BODY = cfg.FORCE_BODY || false; // Default false - SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true - SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false - KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true - IN_PLACE = cfg.IN_PLACE || false; // Default false - IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI; - NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; - CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { - CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; - } - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { - CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; - } - if ( - cfg.CUSTOM_ELEMENT_HANDLING && - typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean" - ) { - CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = - cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; - } - if (SAFE_FOR_TEMPLATES) { - ALLOW_DATA_ATTR = false; - } - if (RETURN_DOM_FRAGMENT) { - RETURN_DOM = true; - } - /* Parse profile info */ if (USE_PROFILES) { - ALLOWED_TAGS = addToSet({}, text); - ALLOWED_ATTR = []; - if (USE_PROFILES.html === true) { - addToSet(ALLOWED_TAGS, html$1); - addToSet(ALLOWED_ATTR, html); - } - if (USE_PROFILES.svg === true) { - addToSet(ALLOWED_TAGS, svg$1); - addToSet(ALLOWED_ATTR, svg); - addToSet(ALLOWED_ATTR, xml); - } - if (USE_PROFILES.svgFilters === true) { - addToSet(ALLOWED_TAGS, svgFilters); - addToSet(ALLOWED_ATTR, svg); - addToSet(ALLOWED_ATTR, xml); - } - if (USE_PROFILES.mathMl === true) { - addToSet(ALLOWED_TAGS, mathMl$1); - addToSet(ALLOWED_ATTR, mathMl); - addToSet(ALLOWED_ATTR, xml); - } - } - /* Merge configuration parameters */ if (cfg.ADD_TAGS) { - if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { - ALLOWED_TAGS = clone(ALLOWED_TAGS); - } - addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); - } - if (cfg.ADD_ATTR) { - if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { - ALLOWED_ATTR = clone(ALLOWED_ATTR); - } - addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); - } - if (cfg.ADD_URI_SAFE_ATTR) { - addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); - } - if (cfg.FORBID_CONTENTS) { - if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { - FORBID_CONTENTS = clone(FORBID_CONTENTS); - } - addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); - } - /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) { - ALLOWED_TAGS["#text"] = true; - } - /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) { - addToSet(ALLOWED_TAGS, ["html", "head", "body"]); - } - /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) { - addToSet(ALLOWED_TAGS, ["tbody"]); - delete FORBID_TAGS.tbody; - } - if (cfg.TRUSTED_TYPES_POLICY) { - if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") { - throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); - } - if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") { - throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); - } - // Overwrite existing TrustedTypes policy. - trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; - // Sign local variables required by `sanitize`. - emptyHTML = trustedTypesPolicy.createHTML(""); - } else { - // Uninitialized policy, attempt to initialize the internal dompurify policy. - if (trustedTypesPolicy === undefined) { - trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript); - } - // If creating the internal policy succeeded sign internal variables. - if (trustedTypesPolicy !== null && typeof emptyHTML === "string") { - emptyHTML = trustedTypesPolicy.createHTML(""); - } - } - // Prevent further manipulation of configuration. - // Not available in IE8, Safari 5, etc. - if (freeze) { - freeze(cfg); - } - CONFIG = cfg; - }; - const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]); - const HTML_INTEGRATION_POINTS = addToSet({}, ["foreignobject", "annotation-xml"]); - // Certain elements are allowed in both SVG and HTML - // namespace. We need to specify them explicitly - // so that they don't get erroneously deleted from - // HTML namespace. - const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]); - /* Keep track of all possible SVG and MathML tags - * so that we can perform the namespace checks - * correctly. */ const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]); - const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]); - /** - * @param {Element} element a DOM element whose namespace is being checked - * @returns {boolean} Return false if the element has a - * namespace that a spec-compliant parser would never - * return. Return true otherwise. - */ const _checkValidNamespace = function _checkValidNamespace(element) { - let parent = getParentNode(element); - // In JSDOM, if we're inside shadow DOM, then parentNode - // can be null. We just simulate parent in this case. - if (!parent || !parent.tagName) { - parent = { - namespaceURI: NAMESPACE, - tagName: "template", - }; - } - const tagName = stringToLowerCase(element.tagName); - const parentTagName = stringToLowerCase(parent.tagName); - if (!ALLOWED_NAMESPACES[element.namespaceURI]) { - return false; - } - if (element.namespaceURI === SVG_NAMESPACE) { - // The only way to switch from HTML namespace to SVG - // is via . If it happens via any other tag, then - // it should be killed. - if (parent.namespaceURI === HTML_NAMESPACE) { - return tagName === "svg"; - } - // The only way to switch from MathML to SVG is via` - // svg if parent is either or MathML - // text integration points. - if (parent.namespaceURI === MATHML_NAMESPACE) { - return ( - tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) - ); - } - // We only allow elements that are defined in SVG - // spec. All others are disallowed in SVG namespace. - return Boolean(ALL_SVG_TAGS[tagName]); - } - if (element.namespaceURI === MATHML_NAMESPACE) { - // The only way to switch from HTML namespace to MathML - // is via . If it happens via any other tag, then - // it should be killed. - if (parent.namespaceURI === HTML_NAMESPACE) { - return tagName === "math"; - } - // The only way to switch from SVG to MathML is via - // and HTML integration points - if (parent.namespaceURI === SVG_NAMESPACE) { - return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName]; - } - // We only allow elements that are defined in MathML - // spec. All others are disallowed in MathML namespace. - return Boolean(ALL_MATHML_TAGS[tagName]); - } - if (element.namespaceURI === HTML_NAMESPACE) { - // The only way to switch from SVG to HTML is via - // HTML integration points, and from MathML to HTML - // is via MathML text integration points - if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { - return false; - } - if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { - return false; - } - // We disallow tags that are specific for MathML - // or SVG and should never appear in HTML namespace - return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); - } - // For XHTML and XML documents that support custom namespaces - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) { - return true; - } - // The code should never reach this place (this means - // that the element somehow got namespace that is not - // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES). - // Return false just in case. - return false; - }; - /** - * _forceRemove - * - * @param {Node} node a DOM node - */ const _forceRemove = function _forceRemove(node) { - arrayPush(DOMPurify.removed, { - element: node, - }); - try { - // eslint-disable-next-line unicorn/prefer-dom-node-remove - node.parentNode.removeChild(node); - } catch (_) { - node.remove(); - } - }; - /** - * _removeAttribute - * - * @param {String} name an Attribute name - * @param {Node} node a DOM node - */ const _removeAttribute = function _removeAttribute(name, node) { - try { - arrayPush(DOMPurify.removed, { - attribute: node.getAttributeNode(name), - from: node, - }); - } catch (_) { - arrayPush(DOMPurify.removed, { - attribute: null, - from: node, - }); - } - node.removeAttribute(name); - // We void attribute values for unremovable "is"" attributes - if (name === "is" && !ALLOWED_ATTR[name]) { - if (RETURN_DOM || RETURN_DOM_FRAGMENT) { - try { - _forceRemove(node); - } catch (_) {} - } else { - try { - node.setAttribute(name, ""); - } catch (_) {} - } - } - }; - /** - * _initDocument - * - * @param {String} dirty a string of dirty markup - * @return {Document} a DOM, filled with the dirty markup - */ const _initDocument = function _initDocument(dirty) { - /* Create a HTML document */ let doc = null; - let leadingWhitespace = null; - if (FORCE_BODY) { - dirty = "" + dirty; - } else { - /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = stringMatch( - dirty, - /^[\r\n\t ]+/, - ); - leadingWhitespace = matches && matches[0]; - } - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) { - // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict) - dirty = '' + dirty + ""; - } - const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; - /* - * Use the DOMParser API by default, fallback later if needs be - * DOMParser not work for svg when has multiple root element. - */ if (NAMESPACE === HTML_NAMESPACE) { - try { - doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); - } catch (_) {} - } - /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) { - doc = implementation.createDocument(NAMESPACE, "template", null); - try { - doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; - } catch (_) { - // Syntax error if dirtyPayload is invalid xml - } - } - const body = doc.body || doc.documentElement; - if (dirty && leadingWhitespace) { - body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); - } - /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) { - return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0]; - } - return WHOLE_DOCUMENT ? doc.documentElement : body; - }; - /** - * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. - * - * @param {Node} root The root element or node to start traversing on. - * @return {NodeIterator} The created NodeIterator - */ const _createNodeIterator = function _createNodeIterator(root) { - return createNodeIterator.call( - root.ownerDocument || root, - root, // eslint-disable-next-line no-bitwise - NodeFilter.SHOW_ELEMENT | - NodeFilter.SHOW_COMMENT | - NodeFilter.SHOW_TEXT | - NodeFilter.SHOW_PROCESSING_INSTRUCTION | - NodeFilter.SHOW_CDATA_SECTION, - null, +(function(module, exports) { + (function(global, factory) { + module.exports = factory() ; + })(commonjsGlobal, function() { + const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object; + let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports + let { apply, construct } = typeof Reflect !== 'undefined' && Reflect; + if (!freeze) { + freeze = function freeze(x) { + return x; + }; + } + if (!seal) { + seal = function seal(x) { + return x; + }; + } + if (!apply) { + apply = function apply(fun, thisValue, args) { + return fun.apply(thisValue, args); + }; + } + if (!construct) { + construct = function construct(Func, args) { + return new Func(...args); + }; + } + const arrayForEach = unapply(Array.prototype.forEach); + const arrayPop = unapply(Array.prototype.pop); + const arrayPush = unapply(Array.prototype.push); + const stringToLowerCase = unapply(String.prototype.toLowerCase); + const stringToString = unapply(String.prototype.toString); + const stringMatch = unapply(String.prototype.match); + const stringReplace = unapply(String.prototype.replace); + const stringIndexOf = unapply(String.prototype.indexOf); + const stringTrim = unapply(String.prototype.trim); + const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty); + const regExpTest = unapply(RegExp.prototype.test); + const typeErrorCreate = unconstruct(TypeError); + /** + * Creates a new function that calls the given function with a specified thisArg and arguments. + * + * @param {Function} func - The function to be wrapped and called. + * @returns {Function} A new function that calls the given function with a specified thisArg and arguments. + */ function unapply(func) { + return function(thisArg) { + for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){ + args[_key - 1] = arguments[_key]; + } + return apply(func, thisArg, args); + }; + } + /** + * Creates a new function that constructs an instance of the given constructor function with the provided arguments. + * + * @param {Function} func - The constructor function to be wrapped and called. + * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments. + */ function unconstruct(func) { + return function() { + for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){ + args[_key2] = arguments[_key2]; + } + return construct(func, args); + }; + } + /** + * Add properties to a lookup table + * + * @param {Object} set - The set to which elements will be added. + * @param {Array} array - The array containing elements to be added to the set. + * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set. + * @returns {Object} The modified set with added elements. + */ function addToSet(set, array) { + let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase; + if (setPrototypeOf) { + // Make 'in' and truthy checks like Boolean(set.constructor) + // independent of any properties defined on Object.prototype. + // Prevent prototype setters from intercepting set as a this value. + setPrototypeOf(set, null); + } + let l = array.length; + while(l--){ + let element = array[l]; + if (typeof element === 'string') { + const lcElement = transformCaseFunc(element); + if (lcElement !== element) { + // Config presets (e.g. tags.js, attrs.js) are immutable. + if (!isFrozen(array)) { + array[l] = lcElement; + } + element = lcElement; + } + } + set[element] = true; + } + return set; + } + /** + * Clean up an array to harden against CSPP + * + * @param {Array} array - The array to be cleaned. + * @returns {Array} The cleaned version of the array + */ function cleanArray(array) { + for(let index = 0; index < array.length; index++){ + const isPropertyExist = objectHasOwnProperty(array, index); + if (!isPropertyExist) { + array[index] = null; + } + } + return array; + } + /** + * Shallow clone an object + * + * @param {Object} object - The object to be cloned. + * @returns {Object} A new object that copies the original. + */ function clone(object) { + const newObject = create(null); + for (const [property, value] of entries(object)){ + const isPropertyExist = objectHasOwnProperty(object, property); + if (isPropertyExist) { + if (Array.isArray(value)) { + newObject[property] = cleanArray(value); + } else if (value && typeof value === 'object' && value.constructor === Object) { + newObject[property] = clone(value); + } else { + newObject[property] = value; + } + } + } + return newObject; + } + /** + * This method automatically checks if the prop is function or getter and behaves accordingly. + * + * @param {Object} object - The object to look up the getter function in its prototype chain. + * @param {String} prop - The property name for which to find the getter function. + * @returns {Function} The getter function found in the prototype chain or a fallback function. + */ function lookupGetter(object, prop) { + while(object !== null){ + const desc = getOwnPropertyDescriptor(object, prop); + if (desc) { + if (desc.get) { + return unapply(desc.get); + } + if (typeof desc.value === 'function') { + return unapply(desc.value); + } + } + object = getPrototypeOf(object); + } + function fallbackValue() { + return null; + } + return fallbackValue; + } + const html$1 = freeze([ + 'a', + 'abbr', + 'acronym', + 'address', + 'area', + 'article', + 'aside', + 'audio', + 'b', + 'bdi', + 'bdo', + 'big', + 'blink', + 'blockquote', + 'body', + 'br', + 'button', + 'canvas', + 'caption', + 'center', + 'cite', + 'code', + 'col', + 'colgroup', + 'content', + 'data', + 'datalist', + 'dd', + 'decorator', + 'del', + 'details', + 'dfn', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'element', + 'em', + 'fieldset', + 'figcaption', + 'figure', + 'font', + 'footer', + 'form', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hgroup', + 'hr', + 'html', + 'i', + 'img', + 'input', + 'ins', + 'kbd', + 'label', + 'legend', + 'li', + 'main', + 'map', + 'mark', + 'marquee', + 'menu', + 'menuitem', + 'meter', + 'nav', + 'nobr', + 'ol', + 'optgroup', + 'option', + 'output', + 'p', + 'picture', + 'pre', + 'progress', + 'q', + 'rp', + 'rt', + 'ruby', + 's', + 'samp', + 'section', + 'select', + 'shadow', + 'small', + 'source', + 'spacer', + 'span', + 'strike', + 'strong', + 'style', + 'sub', + 'summary', + 'sup', + 'table', + 'tbody', + 'td', + 'template', + 'textarea', + 'tfoot', + 'th', + 'thead', + 'time', + 'tr', + 'track', + 'tt', + 'u', + 'ul', + 'var', + 'video', + 'wbr' + ]); + // SVG + const svg$1 = freeze([ + 'svg', + 'a', + 'altglyph', + 'altglyphdef', + 'altglyphitem', + 'animatecolor', + 'animatemotion', + 'animatetransform', + 'circle', + 'clippath', + 'defs', + 'desc', + 'ellipse', + 'filter', + 'font', + 'g', + 'glyph', + 'glyphref', + 'hkern', + 'image', + 'line', + 'lineargradient', + 'marker', + 'mask', + 'metadata', + 'mpath', + 'path', + 'pattern', + 'polygon', + 'polyline', + 'radialgradient', + 'rect', + 'stop', + 'style', + 'switch', + 'symbol', + 'text', + 'textpath', + 'title', + 'tref', + 'tspan', + 'view', + 'vkern' + ]); + const svgFilters = freeze([ + 'feBlend', + 'feColorMatrix', + 'feComponentTransfer', + 'feComposite', + 'feConvolveMatrix', + 'feDiffuseLighting', + 'feDisplacementMap', + 'feDistantLight', + 'feDropShadow', + 'feFlood', + 'feFuncA', + 'feFuncB', + 'feFuncG', + 'feFuncR', + 'feGaussianBlur', + 'feImage', + 'feMerge', + 'feMergeNode', + 'feMorphology', + 'feOffset', + 'fePointLight', + 'feSpecularLighting', + 'feSpotLight', + 'feTile', + 'feTurbulence' + ]); + // List of SVG elements that are disallowed by default. + // We still need to know them so that we can do namespace + // checks properly in case one wants to add them to + // allow-list. + const svgDisallowed = freeze([ + 'animate', + 'color-profile', + 'cursor', + 'discard', + 'font-face', + 'font-face-format', + 'font-face-name', + 'font-face-src', + 'font-face-uri', + 'foreignobject', + 'hatch', + 'hatchpath', + 'mesh', + 'meshgradient', + 'meshpatch', + 'meshrow', + 'missing-glyph', + 'script', + 'set', + 'solidcolor', + 'unknown', + 'use' + ]); + const mathMl$1 = freeze([ + 'math', + 'menclose', + 'merror', + 'mfenced', + 'mfrac', + 'mglyph', + 'mi', + 'mlabeledtr', + 'mmultiscripts', + 'mn', + 'mo', + 'mover', + 'mpadded', + 'mphantom', + 'mroot', + 'mrow', + 'ms', + 'mspace', + 'msqrt', + 'mstyle', + 'msub', + 'msup', + 'msubsup', + 'mtable', + 'mtd', + 'mtext', + 'mtr', + 'munder', + 'munderover', + 'mprescripts' + ]); + // Similarly to SVG, we want to know all MathML elements, + // even those that we disallow by default. + const mathMlDisallowed = freeze([ + 'maction', + 'maligngroup', + 'malignmark', + 'mlongdiv', + 'mscarries', + 'mscarry', + 'msgroup', + 'mstack', + 'msline', + 'msrow', + 'semantics', + 'annotation', + 'annotation-xml', + 'mprescripts', + 'none' + ]); + const text = freeze([ + '#text' + ]); + const html = freeze([ + 'accept', + 'action', + 'align', + 'alt', + 'autocapitalize', + 'autocomplete', + 'autopictureinpicture', + 'autoplay', + 'background', + 'bgcolor', + 'border', + 'capture', + 'cellpadding', + 'cellspacing', + 'checked', + 'cite', + 'class', + 'clear', + 'color', + 'cols', + 'colspan', + 'controls', + 'controlslist', + 'coords', + 'crossorigin', + 'datetime', + 'decoding', + 'default', + 'dir', + 'disabled', + 'disablepictureinpicture', + 'disableremoteplayback', + 'download', + 'draggable', + 'enctype', + 'enterkeyhint', + 'face', + 'for', + 'headers', + 'height', + 'hidden', + 'high', + 'href', + 'hreflang', + 'id', + 'inputmode', + 'integrity', + 'ismap', + 'kind', + 'label', + 'lang', + 'list', + 'loading', + 'loop', + 'low', + 'max', + 'maxlength', + 'media', + 'method', + 'min', + 'minlength', + 'multiple', + 'muted', + 'name', + 'nonce', + 'noshade', + 'novalidate', + 'nowrap', + 'open', + 'optimum', + 'pattern', + 'placeholder', + 'playsinline', + 'popover', + 'popovertarget', + 'popovertargetaction', + 'poster', + 'preload', + 'pubdate', + 'radiogroup', + 'readonly', + 'rel', + 'required', + 'rev', + 'reversed', + 'role', + 'rows', + 'rowspan', + 'spellcheck', + 'scope', + 'selected', + 'shape', + 'size', + 'sizes', + 'span', + 'srclang', + 'start', + 'src', + 'srcset', + 'step', + 'style', + 'summary', + 'tabindex', + 'title', + 'translate', + 'type', + 'usemap', + 'valign', + 'value', + 'width', + 'wrap', + 'xmlns', + 'slot' + ]); + const svg = freeze([ + 'accent-height', + 'accumulate', + 'additive', + 'alignment-baseline', + 'ascent', + 'attributename', + 'attributetype', + 'azimuth', + 'basefrequency', + 'baseline-shift', + 'begin', + 'bias', + 'by', + 'class', + 'clip', + 'clippathunits', + 'clip-path', + 'clip-rule', + 'color', + 'color-interpolation', + 'color-interpolation-filters', + 'color-profile', + 'color-rendering', + 'cx', + 'cy', + 'd', + 'dx', + 'dy', + 'diffuseconstant', + 'direction', + 'display', + 'divisor', + 'dur', + 'edgemode', + 'elevation', + 'end', + 'fill', + 'fill-opacity', + 'fill-rule', + 'filter', + 'filterunits', + 'flood-color', + 'flood-opacity', + 'font-family', + 'font-size', + 'font-size-adjust', + 'font-stretch', + 'font-style', + 'font-variant', + 'font-weight', + 'fx', + 'fy', + 'g1', + 'g2', + 'glyph-name', + 'glyphref', + 'gradientunits', + 'gradienttransform', + 'height', + 'href', + 'id', + 'image-rendering', + 'in', + 'in2', + 'k', + 'k1', + 'k2', + 'k3', + 'k4', + 'kerning', + 'keypoints', + 'keysplines', + 'keytimes', + 'lang', + 'lengthadjust', + 'letter-spacing', + 'kernelmatrix', + 'kernelunitlength', + 'lighting-color', + 'local', + 'marker-end', + 'marker-mid', + 'marker-start', + 'markerheight', + 'markerunits', + 'markerwidth', + 'maskcontentunits', + 'maskunits', + 'max', + 'mask', + 'media', + 'method', + 'mode', + 'min', + 'name', + 'numoctaves', + 'offset', + 'operator', + 'opacity', + 'order', + 'orient', + 'orientation', + 'origin', + 'overflow', + 'paint-order', + 'path', + 'pathlength', + 'patterncontentunits', + 'patterntransform', + 'patternunits', + 'points', + 'preservealpha', + 'preserveaspectratio', + 'primitiveunits', + 'r', + 'rx', + 'ry', + 'radius', + 'refx', + 'refy', + 'repeatcount', + 'repeatdur', + 'restart', + 'result', + 'rotate', + 'scale', + 'seed', + 'shape-rendering', + 'specularconstant', + 'specularexponent', + 'spreadmethod', + 'startoffset', + 'stddeviation', + 'stitchtiles', + 'stop-color', + 'stop-opacity', + 'stroke-dasharray', + 'stroke-dashoffset', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-miterlimit', + 'stroke-opacity', + 'stroke', + 'stroke-width', + 'style', + 'surfacescale', + 'systemlanguage', + 'tabindex', + 'targetx', + 'targety', + 'transform', + 'transform-origin', + 'text-anchor', + 'text-decoration', + 'text-rendering', + 'textlength', + 'type', + 'u1', + 'u2', + 'unicode', + 'values', + 'viewbox', + 'visibility', + 'version', + 'vert-adv-y', + 'vert-origin-x', + 'vert-origin-y', + 'width', + 'word-spacing', + 'wrap', + 'writing-mode', + 'xchannelselector', + 'ychannelselector', + 'x', + 'x1', + 'x2', + 'xmlns', + 'y', + 'y1', + 'y2', + 'z', + 'zoomandpan' + ]); + const mathMl = freeze([ + 'accent', + 'accentunder', + 'align', + 'bevelled', + 'close', + 'columnsalign', + 'columnlines', + 'columnspan', + 'denomalign', + 'depth', + 'dir', + 'display', + 'displaystyle', + 'encoding', + 'fence', + 'frame', + 'height', + 'href', + 'id', + 'largeop', + 'length', + 'linethickness', + 'lspace', + 'lquote', + 'mathbackground', + 'mathcolor', + 'mathsize', + 'mathvariant', + 'maxsize', + 'minsize', + 'movablelimits', + 'notation', + 'numalign', + 'open', + 'rowalign', + 'rowlines', + 'rowspacing', + 'rowspan', + 'rspace', + 'rquote', + 'scriptlevel', + 'scriptminsize', + 'scriptsizemultiplier', + 'selection', + 'separator', + 'separators', + 'stretchy', + 'subscriptshift', + 'supscriptshift', + 'symmetric', + 'voffset', + 'width', + 'xmlns' + ]); + const xml = freeze([ + 'xlink:href', + 'xml:id', + 'xlink:title', + 'xml:space', + 'xmlns:xlink' + ]); + // eslint-disable-next-line unicorn/better-regex + const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode + const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); + const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm); + const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape + const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape + const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape ); - }; - /** - * _isClobbered - * - * @param {Node} elm element to check for clobbering attacks - * @return {Boolean} true if clobbered, false if safe - */ const _isClobbered = function _isClobbered(elm) { - return ( - elm instanceof HTMLFormElement && - (typeof elm.nodeName !== "string" || - typeof elm.textContent !== "string" || - typeof elm.removeChild !== "function" || - !(elm.attributes instanceof NamedNodeMap) || - typeof elm.removeAttribute !== "function" || - typeof elm.setAttribute !== "function" || - typeof elm.namespaceURI !== "string" || - typeof elm.insertBefore !== "function" || - typeof elm.hasChildNodes !== "function") + const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); + const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex ); - }; - /** - * Checks whether the given object is a DOM node. - * - * @param {Node} object object to check whether it's a DOM node - * @return {Boolean} true is object is a DOM node - */ const _isNode = function _isNode(object) { - return typeof Node === "function" && object instanceof Node; - }; - /** - * _executeHook - * Execute user configurable hooks - * - * @param {String} entryPoint Name of the hook's entry point - * @param {Node} currentNode node to work on with the hook - * @param {Object} data additional hook parameters - */ const _executeHook = function _executeHook(entryPoint, currentNode, data) { - if (!hooks[entryPoint]) { - return; - } - arrayForEach(hooks[entryPoint], (hook) => { - hook.call(DOMPurify, currentNode, data, CONFIG); - }); - }; - /** - * _sanitizeElements - * - * @protect nodeName - * @protect textContent - * @protect removeChild - * - * @param {Node} currentNode to check for permission to exist - * @return {Boolean} true if node was killed, false if left alive - */ const _sanitizeElements = function _sanitizeElements(currentNode) { - let content = null; - /* Execute a hook if present */ _executeHook("beforeSanitizeElements", currentNode, null); - /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) { - _forceRemove(currentNode); - return true; - } - /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName); - /* Execute a hook if present */ _executeHook("uponSanitizeElement", currentNode, { - tagName, - allowedTags: ALLOWED_TAGS, + const DOCTYPE_NAME = seal(/^html$/i); + const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i); + var EXPRESSIONS = /*#__PURE__*/ Object.freeze({ + __proto__: null, + MUSTACHE_EXPR: MUSTACHE_EXPR, + ERB_EXPR: ERB_EXPR, + TMPLIT_EXPR: TMPLIT_EXPR, + DATA_ATTR: DATA_ATTR, + ARIA_ATTR: ARIA_ATTR, + IS_ALLOWED_URI: IS_ALLOWED_URI, + IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA, + ATTR_WHITESPACE: ATTR_WHITESPACE, + DOCTYPE_NAME: DOCTYPE_NAME, + CUSTOM_ELEMENT: CUSTOM_ELEMENT }); - /* Detect mXSS attempts abusing namespace confusion */ if ( - currentNode.hasChildNodes() && - !_isNode(currentNode.firstElementChild) && - regExpTest(/<[/\w]/g, currentNode.innerHTML) && - regExpTest(/<[/\w]/g, currentNode.textContent) - ) { - _forceRemove(currentNode); - return true; - } - /* Remove any ocurrence of processing instructions */ if ( - currentNode.nodeType === NODE_TYPE.progressingInstruction - ) { - _forceRemove(currentNode); - return true; - } - /* Remove any kind of possibly harmful comments */ if ( - SAFE_FOR_XML && - currentNode.nodeType === NODE_TYPE.comment && - regExpTest(/<[/\w]/g, currentNode.data) - ) { - _forceRemove(currentNode); - return true; - } - /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { - /* Check if we have a custom element to handle */ if ( - !FORBID_TAGS[tagName] && - _isBasicCustomElement(tagName) - ) { - if ( - CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName) - ) { - return false; + // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType + const NODE_TYPE = { + element: 1, + attribute: 2, + text: 3, + cdataSection: 4, + entityReference: 5, + // Deprecated + entityNode: 6, + // Deprecated + progressingInstruction: 7, + comment: 8, + document: 9, + documentType: 10, + documentFragment: 11, + notation: 12 // Deprecated + }; + const getGlobal = function getGlobal() { + return typeof window === 'undefined' ? null : window; + }; + /** + * Creates a no-op policy for internal use only. + * Don't export this function outside this module! + * @param {TrustedTypePolicyFactory} trustedTypes The policy factory. + * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix). + * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types + * are not supported or creating the policy failed). + */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) { + if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') { + return null; + } + // Allow the callers to control the unique policy name + // by adding a data-tt-policy-suffix to the script element with the DOMPurify. + // Policy creation with duplicate names throws in Trusted Types. + let suffix = null; + const ATTR_NAME = 'data-tt-policy-suffix'; + if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) { + suffix = purifyHostElement.getAttribute(ATTR_NAME); + } + const policyName = 'dompurify' + (suffix ? '#' + suffix : ''); + try { + return trustedTypes.createPolicy(policyName, { + createHTML (html) { + return html; + }, + createScriptURL (scriptUrl) { + return scriptUrl; + } + }); + } catch (_) { + // Policy creation failed (most likely another DOMPurify script has + // already run). Skip creating the policy, as this will only cause errors + // if TT are enforced. + console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); + return null; } - if ( - CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName) - ) { - return false; - } - } - /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) { - const parentNode = getParentNode(currentNode) || currentNode.parentNode; - const childNodes = getChildNodes(currentNode) || currentNode.childNodes; - if (childNodes && parentNode) { - const childCount = childNodes.length; - for (let i = childCount - 1; i >= 0; --i) { - const childClone = cloneNode(childNodes[i], true); - childClone.__removalCount = (currentNode.__removalCount || 0) + 1; - parentNode.insertBefore(childClone, getNextSibling(currentNode)); - } - } - } - _forceRemove(currentNode); - return true; - } - /* Check whether element has a valid namespace */ if ( - currentNode instanceof Element && - !_checkValidNamespace(currentNode) - ) { - _forceRemove(currentNode); - return true; - } - /* Make sure that older browsers don't get fallback-tag mXSS */ if ( - (tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && - regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML) - ) { - _forceRemove(currentNode); - return true; - } - /* Sanitize element content to be template-safe */ if ( - SAFE_FOR_TEMPLATES && - currentNode.nodeType === NODE_TYPE.text - ) { - /* Get the element's text content */ content = currentNode.textContent; - arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => { - content = stringReplace(content, expr, " "); - }); - if (currentNode.textContent !== content) { - arrayPush(DOMPurify.removed, { - element: currentNode.cloneNode(), - }); - currentNode.textContent = content; - } - } - /* Execute a hook if present */ _executeHook("afterSanitizeElements", currentNode, null); - return false; - }; - /** - * _isValidAttribute - * - * @param {string} lcTag Lowercase tag name of containing element. - * @param {string} lcName Lowercase attribute name. - * @param {string} value Attribute value. - * @return {Boolean} Returns true if `value` is valid, otherwise false. - */ // eslint-disable-next-line complexity - const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { - /* Make sure attribute cannot clobber */ if ( - SANITIZE_DOM && - (lcName === "id" || lcName === "name") && - (value in document || value in formElement) - ) { - return false; - } - /* Allow valid data-* attributes: At least one character after "-" - (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) - XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) - We don't need to check the value; it's always URI safe. */ if ( - ALLOW_DATA_ATTR && - !FORBID_ATTR[lcName] && - regExpTest(DATA_ATTR, lcName) - ); - else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)); - else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { - if ( - // First condition does a very basic check if a) it's basically a valid custom element tagname AND - // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck - // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck - (_isBasicCustomElement(lcTag) && - ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) || - (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) && - ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) || - (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) || // Alternative, second condition checks if it's an `is`-attribute, AND - // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck - (lcName === "is" && - CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && - ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) || - (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)))) - ); - else { - return false; - } - /* Check value is safe. First, is attr inert? If so, is safe */ - } else if (URI_SAFE_ATTRIBUTES[lcName]); - else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ""))); - else if ( - (lcName === "src" || lcName === "xlink:href" || lcName === "href") && - lcTag !== "script" && - stringIndexOf(value, "data:") === 0 && - DATA_URI_TAGS[lcTag] - ); - else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ""))); - else if (value) { - return false; - } else; - return true; - }; - /** - * _isBasicCustomElement - * checks if at least one dash is included in tagName, and it's not the first char - * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name - * - * @param {string} tagName name of the tag of the node to sanitize - * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false. - */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) { - return tagName !== "annotation-xml" && stringMatch(tagName, CUSTOM_ELEMENT); - }; - /** - * _sanitizeAttributes - * - * @protect attributes - * @protect nodeName - * @protect removeAttribute - * @protect setAttribute - * - * @param {Node} currentNode to sanitize - */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) { - /* Execute a hook if present */ _executeHook("beforeSanitizeAttributes", currentNode, null); - const { attributes } = currentNode; - /* Check if we have attributes; if not we might have a text node */ if (!attributes) { - return; - } - const hookEvent = { - attrName: "", - attrValue: "", - keepAttr: true, - allowedAttributes: ALLOWED_ATTR, }; - let l = attributes.length; - /* Go backwards over all attributes; safely remove bad ones */ while (l--) { - const attr = attributes[l]; - const { name, namespaceURI, value: attrValue } = attr; - const lcName = transformCaseFunc(name); - let value = name === "value" ? attrValue : stringTrim(attrValue); - /* Execute a hook if present */ hookEvent.attrName = lcName; - hookEvent.attrValue = value; - hookEvent.keepAttr = true; - hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set - _executeHook("uponSanitizeAttribute", currentNode, hookEvent); - value = hookEvent.attrValue; - /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) { - continue; - } - /* Remove attribute */ _removeAttribute(name, currentNode); - /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) { - continue; - } - /* Work around a security issue in jQuery 3.0 */ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) { - _removeAttribute(name, currentNode); - continue; - } - /* Work around a security issue with comments inside attributes */ if ( - SAFE_FOR_XML && - regExpTest(/((--!?|])>)|<\/(style|title)/i, value) - ) { - _removeAttribute(name, currentNode); - continue; - } - /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) { - arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => { - value = stringReplace(value, expr, " "); - }); - } - /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName); - if (!_isValidAttribute(lcTag, lcName, value)) { - continue; - } - /* Full DOM Clobbering protection via namespace isolation, - * Prefix id and name attributes with `user-content-` - */ if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) { - // Remove the attribute with this value - _removeAttribute(name, currentNode); - // Prefix the value and later re-create the attribute with the sanitized value - value = SANITIZE_NAMED_PROPS_PREFIX + value; - } - /* Handle attributes that require Trusted Types */ if ( - trustedTypesPolicy && - typeof trustedTypes === "object" && - typeof trustedTypes.getAttributeType === "function" - ) { - if (namespaceURI); - else { - switch (trustedTypes.getAttributeType(lcTag, lcName)) { - case "TrustedHTML": { - value = trustedTypesPolicy.createHTML(value); - break; - } - case "TrustedScriptURL": { - value = trustedTypesPolicy.createScriptURL(value); - break; - } - } - } - } - /* Handle invalid data-* attribute set by try-catching it */ try { - if (namespaceURI) { - currentNode.setAttributeNS(namespaceURI, name, value); - } else { - /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ currentNode.setAttribute( - name, - value, - ); + function createDOMPurify() { + let window1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); + const DOMPurify = (root)=>createDOMPurify(root); + /** + * Version label, exposed for easier checks + * if DOMPurify is up to date or not + */ DOMPurify.version = '3.1.6'; + /** + * Array of elements that DOMPurify removed during sanitation. + * Empty if nothing was removed. + */ DOMPurify.removed = []; + if (!window1 || !window1.document || window1.document.nodeType !== NODE_TYPE.document) { + // Not running in a browser, provide a factory function + // so that you can pass your own Window + DOMPurify.isSupported = false; + return DOMPurify; } - if (_isClobbered(currentNode)) { - _forceRemove(currentNode); - } else { - arrayPop(DOMPurify.removed); - } - } catch (_) {} - } - /* Execute a hook if present */ _executeHook("afterSanitizeAttributes", currentNode, null); - }; - /** - * _sanitizeShadowDOM - * - * @param {DocumentFragment} fragment to iterate over recursively - */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { - let shadowNode = null; - const shadowIterator = _createNodeIterator(fragment); - /* Execute a hook if present */ _executeHook("beforeSanitizeShadowDOM", fragment, null); - while ((shadowNode = shadowIterator.nextNode())) { - /* Execute a hook if present */ _executeHook("uponSanitizeShadowNode", shadowNode, null); - /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) { - continue; - } - /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) { - _sanitizeShadowDOM(shadowNode.content); - } - /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode); - } - /* Execute a hook if present */ _executeHook("afterSanitizeShadowDOM", fragment, null); - }; - /** - * Sanitize - * Public method providing core sanitation functionality - * - * @param {String|Node} dirty string or DOM node - * @param {Object} cfg object - */ // eslint-disable-next-line complexity - DOMPurify.sanitize = function (dirty) { - let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let body = null; - let importedNode = null; - let currentNode = null; - let returnNode = null; - /* Make sure we have a string to sanitize. + let { document } = window1; + const originalDocument = document; + const currentScript = originalDocument.currentScript; + const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window1.NamedNodeMap || window1.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window1; + const ElementPrototype = Element.prototype; + const cloneNode = lookupGetter(ElementPrototype, 'cloneNode'); + const remove = lookupGetter(ElementPrototype, 'remove'); + const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling'); + const getChildNodes = lookupGetter(ElementPrototype, 'childNodes'); + const getParentNode = lookupGetter(ElementPrototype, 'parentNode'); + // As per issue #47, the web-components registry is inherited by a + // new document created via createHTMLDocument. As per the spec + // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) + // a new empty registry is used when creating a template contents owner + // document, so we use that as our parent document to ensure nothing + // is inherited. + if (typeof HTMLTemplateElement === 'function') { + const template = document.createElement('template'); + if (template.content && template.content.ownerDocument) { + document = template.content.ownerDocument; + } + } + let trustedTypesPolicy; + let emptyHTML = ''; + const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document; + const { importNode } = originalDocument; + let hooks = {}; + /** + * Expose whether this browser supports running the full DOMPurify. + */ DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined; + const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, CUSTOM_ELEMENT } = EXPRESSIONS; + let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS; + /** + * We consider the elements and attributes below to be safe. Ideally + * don't add any new ones but feel free to remove unwanted ones. + */ /* allowed element names */ let ALLOWED_TAGS = null; + const DEFAULT_ALLOWED_TAGS = addToSet({}, [ + ...html$1, + ...svg$1, + ...svgFilters, + ...mathMl$1, + ...text + ]); + /* Allowed attribute names */ let ALLOWED_ATTR = null; + const DEFAULT_ALLOWED_ATTR = addToSet({}, [ + ...html, + ...svg, + ...mathMl, + ...xml + ]); + /* + * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements. + * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements) + * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list) + * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`. + */ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, { + tagNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + attributeNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + allowCustomizedBuiltInElements: { + writable: true, + configurable: false, + enumerable: true, + value: false + } + })); + /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null; + /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null; + /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true; + /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true; + /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false; + /* Decide if self-closing tags in attributes are allowed. + * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true; + /* Output should be safe for common template engines. + * This means, DOMPurify removes data attributes, mustaches and ERB + */ let SAFE_FOR_TEMPLATES = false; + /* Output should be safe even for XML used within HTML and alike. + * This means, DOMPurify removes comments when containing risky content. + */ let SAFE_FOR_XML = true; + /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false; + /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false; + /* Decide if all elements (e.g. style, script) must be children of + * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false; + /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported). + * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead + */ let RETURN_DOM = false; + /* Decide if a DOM `DocumentFragment` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false; + /* Try to return a Trusted Type object instead of a string, return a string in + * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false; + /* Output should be free from DOM clobbering attacks? + * This sanitizes markups named with colliding, clobberable built-in DOM APIs. + */ let SANITIZE_DOM = true; + /* Achieve full DOM Clobbering protection by isolating the namespace of named + * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules. + * + * HTML/DOM spec rules that enable DOM Clobbering: + * - Named Access on Window (§7.3.3) + * - DOM Tree Accessors (§3.1.5) + * - Form Element Parent-Child Relations (§4.10.3) + * - Iframe srcdoc / Nested WindowProxies (§4.8.5) + * - HTMLCollection (§4.2.10.2) + * + * Namespace isolation is implemented by prefixing `id` and `name` attributes + * with a constant string, i.e., `user-content-` + */ let SANITIZE_NAMED_PROPS = false; + const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-'; + /* Keep element content when removing element? */ let KEEP_CONTENT = true; + /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead + * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false; + /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {}; + /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null; + const DEFAULT_FORBID_CONTENTS = addToSet({}, [ + 'annotation-xml', + 'audio', + 'colgroup', + 'desc', + 'foreignobject', + 'head', + 'iframe', + 'math', + 'mi', + 'mn', + 'mo', + 'ms', + 'mtext', + 'noembed', + 'noframes', + 'noscript', + 'plaintext', + 'script', + 'style', + 'svg', + 'template', + 'thead', + 'title', + 'video', + 'xmp' + ]); + /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null; + const DEFAULT_DATA_URI_TAGS = addToSet({}, [ + 'audio', + 'video', + 'img', + 'source', + 'image', + 'track' + ]); + /* Attributes safe for values like "javascript:" */ let URI_SAFE_ATTRIBUTES = null; + const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [ + 'alt', + 'class', + 'for', + 'id', + 'label', + 'name', + 'pattern', + 'placeholder', + 'role', + 'summary', + 'title', + 'value', + 'style', + 'xmlns' + ]); + const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; + const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; + const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; + /* Document namespace */ let NAMESPACE = HTML_NAMESPACE; + let IS_EMPTY_INPUT = false; + /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null; + const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [ + MATHML_NAMESPACE, + SVG_NAMESPACE, + HTML_NAMESPACE + ], stringToString); + /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null; + const SUPPORTED_PARSER_MEDIA_TYPES = [ + 'application/xhtml+xml', + 'text/html' + ]; + const DEFAULT_PARSER_MEDIA_TYPE = 'text/html'; + let transformCaseFunc = null; + /* Keep a reference to config to pass to hooks */ let CONFIG = null; + /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = document.createElement('form'); + const isRegexOrFunction = function isRegexOrFunction(testValue) { + return testValue instanceof RegExp || testValue instanceof Function; + }; + /** + * _parseConfig + * + * @param {Object} cfg optional config literal + */ // eslint-disable-next-line complexity + const _parseConfig = function _parseConfig() { + let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (CONFIG && CONFIG === cfg) { + return; + } + /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== 'object') { + cfg = {}; + } + /* Shield configuration object from prototype pollution */ cfg = clone(cfg); + PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes + SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE; + // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is. + transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase; + /* Set configuration parameters */ ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS; + ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR; + ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES; + URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent + cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent + transformCaseFunc // eslint-disable-line indent + ) // eslint-disable-line indent + : DEFAULT_URI_SAFE_ATTRIBUTES; + DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent + cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent + transformCaseFunc // eslint-disable-line indent + ) // eslint-disable-line indent + : DEFAULT_DATA_URI_TAGS; + FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS; + FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {}; + FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {}; + USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false; + ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true + ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true + ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false + ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true + SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false + SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true + WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false + RETURN_DOM = cfg.RETURN_DOM || false; // Default false + RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false + RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false + FORCE_BODY = cfg.FORCE_BODY || false; // Default false + SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true + SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false + KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true + IN_PLACE = cfg.IN_PLACE || false; // Default false + IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI; + NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; + CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { + CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { + CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') { + CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; + } + if (SAFE_FOR_TEMPLATES) { + ALLOW_DATA_ATTR = false; + } + if (RETURN_DOM_FRAGMENT) { + RETURN_DOM = true; + } + /* Parse profile info */ if (USE_PROFILES) { + ALLOWED_TAGS = addToSet({}, text); + ALLOWED_ATTR = []; + if (USE_PROFILES.html === true) { + addToSet(ALLOWED_TAGS, html$1); + addToSet(ALLOWED_ATTR, html); + } + if (USE_PROFILES.svg === true) { + addToSet(ALLOWED_TAGS, svg$1); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.svgFilters === true) { + addToSet(ALLOWED_TAGS, svgFilters); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.mathMl === true) { + addToSet(ALLOWED_TAGS, mathMl$1); + addToSet(ALLOWED_ATTR, mathMl); + addToSet(ALLOWED_ATTR, xml); + } + } + /* Merge configuration parameters */ if (cfg.ADD_TAGS) { + if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { + ALLOWED_TAGS = clone(ALLOWED_TAGS); + } + addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); + } + if (cfg.ADD_ATTR) { + if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { + ALLOWED_ATTR = clone(ALLOWED_ATTR); + } + addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); + } + if (cfg.ADD_URI_SAFE_ATTR) { + addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); + } + if (cfg.FORBID_CONTENTS) { + if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { + FORBID_CONTENTS = clone(FORBID_CONTENTS); + } + addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); + } + /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) { + ALLOWED_TAGS['#text'] = true; + } + /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) { + addToSet(ALLOWED_TAGS, [ + 'html', + 'head', + 'body' + ]); + } + /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) { + addToSet(ALLOWED_TAGS, [ + 'tbody' + ]); + delete FORBID_TAGS.tbody; + } + if (cfg.TRUSTED_TYPES_POLICY) { + if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') { + throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); + } + if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') { + throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); + } + // Overwrite existing TrustedTypes policy. + trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; + // Sign local variables required by `sanitize`. + emptyHTML = trustedTypesPolicy.createHTML(''); + } else { + // Uninitialized policy, attempt to initialize the internal dompurify policy. + if (trustedTypesPolicy === undefined) { + trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript); + } + // If creating the internal policy succeeded sign internal variables. + if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') { + emptyHTML = trustedTypesPolicy.createHTML(''); + } + } + // Prevent further manipulation of configuration. + // Not available in IE8, Safari 5, etc. + if (freeze) { + freeze(cfg); + } + CONFIG = cfg; + }; + const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [ + 'mi', + 'mo', + 'mn', + 'ms', + 'mtext' + ]); + const HTML_INTEGRATION_POINTS = addToSet({}, [ + 'foreignobject', + 'annotation-xml' + ]); + // Certain elements are allowed in both SVG and HTML + // namespace. We need to specify them explicitly + // so that they don't get erroneously deleted from + // HTML namespace. + const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [ + 'title', + 'style', + 'font', + 'a', + 'script' + ]); + /* Keep track of all possible SVG and MathML tags + * so that we can perform the namespace checks + * correctly. */ const ALL_SVG_TAGS = addToSet({}, [ + ...svg$1, + ...svgFilters, + ...svgDisallowed + ]); + const ALL_MATHML_TAGS = addToSet({}, [ + ...mathMl$1, + ...mathMlDisallowed + ]); + /** + * @param {Element} element a DOM element whose namespace is being checked + * @returns {boolean} Return false if the element has a + * namespace that a spec-compliant parser would never + * return. Return true otherwise. + */ const _checkValidNamespace = function _checkValidNamespace(element) { + let parent = getParentNode(element); + // In JSDOM, if we're inside shadow DOM, then parentNode + // can be null. We just simulate parent in this case. + if (!parent || !parent.tagName) { + parent = { + namespaceURI: NAMESPACE, + tagName: 'template' + }; + } + const tagName = stringToLowerCase(element.tagName); + const parentTagName = stringToLowerCase(parent.tagName); + if (!ALLOWED_NAMESPACES[element.namespaceURI]) { + return false; + } + if (element.namespaceURI === SVG_NAMESPACE) { + // The only way to switch from HTML namespace to SVG + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'svg'; + } + // The only way to switch from MathML to SVG is via` + // svg if parent is either or MathML + // text integration points. + if (parent.namespaceURI === MATHML_NAMESPACE) { + return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); + } + // We only allow elements that are defined in SVG + // spec. All others are disallowed in SVG namespace. + return Boolean(ALL_SVG_TAGS[tagName]); + } + if (element.namespaceURI === MATHML_NAMESPACE) { + // The only way to switch from HTML namespace to MathML + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'math'; + } + // The only way to switch from SVG to MathML is via + // and HTML integration points + if (parent.namespaceURI === SVG_NAMESPACE) { + return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName]; + } + // We only allow elements that are defined in MathML + // spec. All others are disallowed in MathML namespace. + return Boolean(ALL_MATHML_TAGS[tagName]); + } + if (element.namespaceURI === HTML_NAMESPACE) { + // The only way to switch from SVG to HTML is via + // HTML integration points, and from MathML to HTML + // is via MathML text integration points + if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { + return false; + } + if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { + return false; + } + // We disallow tags that are specific for MathML + // or SVG and should never appear in HTML namespace + return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); + } + // For XHTML and XML documents that support custom namespaces + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) { + return true; + } + // The code should never reach this place (this means + // that the element somehow got namespace that is not + // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES). + // Return false just in case. + return false; + }; + /** + * _forceRemove + * + * @param {Node} node a DOM node + */ const _forceRemove = function _forceRemove(node) { + arrayPush(DOMPurify.removed, { + element: node + }); + try { + // eslint-disable-next-line unicorn/prefer-dom-node-remove + getParentNode(node).removeChild(node); + } catch (_) { + remove(node); + } + }; + /** + * _removeAttribute + * + * @param {String} name an Attribute name + * @param {Node} node a DOM node + */ const _removeAttribute = function _removeAttribute(name, node) { + try { + arrayPush(DOMPurify.removed, { + attribute: node.getAttributeNode(name), + from: node + }); + } catch (_) { + arrayPush(DOMPurify.removed, { + attribute: null, + from: node + }); + } + node.removeAttribute(name); + // We void attribute values for unremovable "is"" attributes + if (name === 'is' && !ALLOWED_ATTR[name]) { + if (RETURN_DOM || RETURN_DOM_FRAGMENT) { + try { + _forceRemove(node); + } catch (_) {} + } else { + try { + node.setAttribute(name, ''); + } catch (_) {} + } + } + }; + /** + * _initDocument + * + * @param {String} dirty a string of dirty markup + * @return {Document} a DOM, filled with the dirty markup + */ const _initDocument = function _initDocument(dirty) { + /* Create a HTML document */ let doc = null; + let leadingWhitespace = null; + if (FORCE_BODY) { + dirty = '' + dirty; + } else { + /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = stringMatch(dirty, /^[\r\n\t ]+/); + leadingWhitespace = matches && matches[0]; + } + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) { + // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict) + dirty = '' + dirty + ''; + } + const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; + /* + * Use the DOMParser API by default, fallback later if needs be + * DOMParser not work for svg when has multiple root element. + */ if (NAMESPACE === HTML_NAMESPACE) { + try { + doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); + } catch (_) {} + } + /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) { + doc = implementation.createDocument(NAMESPACE, 'template', null); + try { + doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; + } catch (_) { + // Syntax error if dirtyPayload is invalid xml + } + } + const body = doc.body || doc.documentElement; + if (dirty && leadingWhitespace) { + body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); + } + /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) { + return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; + } + return WHOLE_DOCUMENT ? doc.documentElement : body; + }; + /** + * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. + * + * @param {Node} root The root element or node to start traversing on. + * @return {NodeIterator} The created NodeIterator + */ const _createNodeIterator = function _createNodeIterator(root) { + return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise + NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null); + }; + /** + * _isClobbered + * + * @param {Node} elm element to check for clobbering attacks + * @return {Boolean} true if clobbered, false if safe + */ const _isClobbered = function _isClobbered(elm) { + return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function'); + }; + /** + * Checks whether the given object is a DOM node. + * + * @param {Node} object object to check whether it's a DOM node + * @return {Boolean} true is object is a DOM node + */ const _isNode = function _isNode(object) { + return typeof Node === 'function' && object instanceof Node; + }; + /** + * _executeHook + * Execute user configurable hooks + * + * @param {String} entryPoint Name of the hook's entry point + * @param {Node} currentNode node to work on with the hook + * @param {Object} data additional hook parameters + */ const _executeHook = function _executeHook(entryPoint, currentNode, data) { + if (!hooks[entryPoint]) { + return; + } + arrayForEach(hooks[entryPoint], (hook)=>{ + hook.call(DOMPurify, currentNode, data, CONFIG); + }); + }; + /** + * _sanitizeElements + * + * @protect nodeName + * @protect textContent + * @protect removeChild + * + * @param {Node} currentNode to check for permission to exist + * @return {Boolean} true if node was killed, false if left alive + */ const _sanitizeElements = function _sanitizeElements(currentNode) { + let content = null; + /* Execute a hook if present */ _executeHook('beforeSanitizeElements', currentNode, null); + /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + return true; + } + /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName); + /* Execute a hook if present */ _executeHook('uponSanitizeElement', currentNode, { + tagName, + allowedTags: ALLOWED_TAGS + }); + /* Detect mXSS attempts abusing namespace confusion */ if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { + _forceRemove(currentNode); + return true; + } + /* Remove any occurrence of processing instructions */ if (currentNode.nodeType === NODE_TYPE.progressingInstruction) { + _forceRemove(currentNode); + return true; + } + /* Remove any kind of possibly harmful comments */ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) { + _forceRemove(currentNode); + return true; + } + /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { + /* Check if we have a custom element to handle */ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) { + if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) { + return false; + } + if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) { + return false; + } + } + /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) { + const parentNode = getParentNode(currentNode) || currentNode.parentNode; + const childNodes = getChildNodes(currentNode) || currentNode.childNodes; + if (childNodes && parentNode) { + const childCount = childNodes.length; + for(let i = childCount - 1; i >= 0; --i){ + const childClone = cloneNode(childNodes[i], true); + childClone.__removalCount = (currentNode.__removalCount || 0) + 1; + parentNode.insertBefore(childClone, getNextSibling(currentNode)); + } + } + } + _forceRemove(currentNode); + return true; + } + /* Check whether element has a valid namespace */ if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) { + _forceRemove(currentNode); + return true; + } + /* Make sure that older browsers don't get fallback-tag mXSS */ if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) { + _forceRemove(currentNode); + return true; + } + /* Sanitize element content to be template-safe */ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) { + /* Get the element's text content */ content = currentNode.textContent; + arrayForEach([ + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR + ], (expr)=>{ + content = stringReplace(content, expr, ' '); + }); + if (currentNode.textContent !== content) { + arrayPush(DOMPurify.removed, { + element: currentNode.cloneNode() + }); + currentNode.textContent = content; + } + } + /* Execute a hook if present */ _executeHook('afterSanitizeElements', currentNode, null); + return false; + }; + /** + * _isValidAttribute + * + * @param {string} lcTag Lowercase tag name of containing element. + * @param {string} lcName Lowercase attribute name. + * @param {string} value Attribute value. + * @return {Boolean} Returns true if `value` is valid, otherwise false. + */ // eslint-disable-next-line complexity + const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { + /* Make sure attribute cannot clobber */ if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) { + return false; + } + /* Allow valid data-* attributes: At least one character after "-" + (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) + XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) + We don't need to check the value; it's always URI safe. */ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; + else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; + else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { + if (// First condition does a very basic check if a) it's basically a valid custom element tagname AND + // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck + _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND + // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; + else { + return false; + } + /* Check value is safe. First, is attr inert? If so, is safe */ } else if (URI_SAFE_ATTRIBUTES[lcName]) ; + else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; + else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; + else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; + else if (value) { + return false; + } else ; + return true; + }; + /** + * _isBasicCustomElement + * checks if at least one dash is included in tagName, and it's not the first char + * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name + * + * @param {string} tagName name of the tag of the node to sanitize + * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false. + */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) { + return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT); + }; + /** + * _sanitizeAttributes + * + * @protect attributes + * @protect nodeName + * @protect removeAttribute + * @protect setAttribute + * + * @param {Node} currentNode to sanitize + */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) { + /* Execute a hook if present */ _executeHook('beforeSanitizeAttributes', currentNode, null); + const { attributes } = currentNode; + /* Check if we have attributes; if not we might have a text node */ if (!attributes) { + return; + } + const hookEvent = { + attrName: '', + attrValue: '', + keepAttr: true, + allowedAttributes: ALLOWED_ATTR + }; + let l = attributes.length; + /* Go backwards over all attributes; safely remove bad ones */ while(l--){ + const attr = attributes[l]; + const { name, namespaceURI, value: attrValue } = attr; + const lcName = transformCaseFunc(name); + let value = name === 'value' ? attrValue : stringTrim(attrValue); + /* Execute a hook if present */ hookEvent.attrName = lcName; + hookEvent.attrValue = value; + hookEvent.keepAttr = true; + hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set + _executeHook('uponSanitizeAttribute', currentNode, hookEvent); + value = hookEvent.attrValue; + /* Work around a security issue with comments inside attributes */ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) { + continue; + } + /* Remove attribute */ _removeAttribute(name, currentNode); + /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) { + continue; + } + /* Work around a security issue in jQuery 3.0 */ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) { + arrayForEach([ + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR + ], (expr)=>{ + value = stringReplace(value, expr, ' '); + }); + } + /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName); + if (!_isValidAttribute(lcTag, lcName, value)) { + continue; + } + /* Full DOM Clobbering protection via namespace isolation, + * Prefix id and name attributes with `user-content-` + */ if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) { + // Remove the attribute with this value + _removeAttribute(name, currentNode); + // Prefix the value and later re-create the attribute with the sanitized value + value = SANITIZE_NAMED_PROPS_PREFIX + value; + } + /* Handle attributes that require Trusted Types */ if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') { + if (namespaceURI) ; + else { + switch(trustedTypes.getAttributeType(lcTag, lcName)){ + case 'TrustedHTML': + { + value = trustedTypesPolicy.createHTML(value); + break; + } + case 'TrustedScriptURL': + { + value = trustedTypesPolicy.createScriptURL(value); + break; + } + } + } + } + /* Handle invalid data-* attribute set by try-catching it */ try { + if (namespaceURI) { + currentNode.setAttributeNS(namespaceURI, name, value); + } else { + /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ currentNode.setAttribute(name, value); + } + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + } else { + arrayPop(DOMPurify.removed); + } + } catch (_) {} + } + /* Execute a hook if present */ _executeHook('afterSanitizeAttributes', currentNode, null); + }; + /** + * _sanitizeShadowDOM + * + * @param {DocumentFragment} fragment to iterate over recursively + */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { + let shadowNode = null; + const shadowIterator = _createNodeIterator(fragment); + /* Execute a hook if present */ _executeHook('beforeSanitizeShadowDOM', fragment, null); + while(shadowNode = shadowIterator.nextNode()){ + /* Execute a hook if present */ _executeHook('uponSanitizeShadowNode', shadowNode, null); + /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) { + continue; + } + /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) { + _sanitizeShadowDOM(shadowNode.content); + } + /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode); + } + /* Execute a hook if present */ _executeHook('afterSanitizeShadowDOM', fragment, null); + }; + /** + * Sanitize + * Public method providing core sanitation functionality + * + * @param {String|Node} dirty string or DOM node + * @param {Object} cfg object + */ // eslint-disable-next-line complexity + DOMPurify.sanitize = function(dirty) { + let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + let body = null; + let importedNode = null; + let currentNode = null; + let returnNode = null; + /* Make sure we have a string to sanitize. DO NOT return early, as this will return the wrong type if the user has requested a DOM object rather than a string */ IS_EMPTY_INPUT = !dirty; - if (IS_EMPTY_INPUT) { - dirty = ""; - } - /* Stringify, in case dirty is an object */ if (typeof dirty !== "string" && !_isNode(dirty)) { - if (typeof dirty.toString === "function") { - dirty = dirty.toString(); - if (typeof dirty !== "string") { - throw typeErrorCreate("dirty is not a string, aborting"); - } - } else { - throw typeErrorCreate("toString is not a function"); - } - } - /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) { - return dirty; - } - /* Assign config vars */ if (!SET_CONFIG) { - _parseConfig(cfg); - } - /* Clean up removed elements */ DOMPurify.removed = []; - /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === "string") { - IN_PLACE = false; - } - if (IN_PLACE) { - /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) { - const tagName = transformCaseFunc(dirty.nodeName); - if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { - throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place"); - } - } - } else if (dirty instanceof Node) { - /* If dirty is a DOM element, append to an empty document to avoid - elements being stripped by the parser */ body = _initDocument(""); - importedNode = body.ownerDocument.importNode(dirty, true); - if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") { - /* Node is already a body, use as is */ body = importedNode; - } else if (importedNode.nodeName === "HTML") { - body = importedNode; - } else { - // eslint-disable-next-line unicorn/prefer-dom-node-append - body.appendChild(importedNode); - } - } else { - /* Exit directly if we have nothing to do */ if ( - !RETURN_DOM && - !SAFE_FOR_TEMPLATES && - !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes - dirty.indexOf("<") === -1 - ) { - return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty; - } - /* Initialize the document to work on */ body = _initDocument(dirty); - /* Check we have a DOM node from the data */ if (!body) { - return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : ""; - } - } - /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) { - _forceRemove(body.firstChild); - } - /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body); - /* Now start iterating over the created document */ while ((currentNode = nodeIterator.nextNode())) { - /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) { - continue; - } - /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) { - _sanitizeShadowDOM(currentNode.content); - } - /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode); - } - /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) { - return dirty; - } - /* Return sanitized string or DOM */ if (RETURN_DOM) { - if (RETURN_DOM_FRAGMENT) { - returnNode = createDocumentFragment.call(body.ownerDocument); - while (body.firstChild) { - // eslint-disable-next-line unicorn/prefer-dom-node-append - returnNode.appendChild(body.firstChild); - } - } else { - returnNode = body; - } - if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) { - /* + if (IS_EMPTY_INPUT) { + dirty = ''; + } + /* Stringify, in case dirty is an object */ if (typeof dirty !== 'string' && !_isNode(dirty)) { + if (typeof dirty.toString === 'function') { + dirty = dirty.toString(); + if (typeof dirty !== 'string') { + throw typeErrorCreate('dirty is not a string, aborting'); + } + } else { + throw typeErrorCreate('toString is not a function'); + } + } + /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) { + return dirty; + } + /* Assign config vars */ if (!SET_CONFIG) { + _parseConfig(cfg); + } + /* Clean up removed elements */ DOMPurify.removed = []; + /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === 'string') { + IN_PLACE = false; + } + if (IN_PLACE) { + /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) { + const tagName = transformCaseFunc(dirty.nodeName); + if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { + throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place'); + } + } + } else if (dirty instanceof Node) { + /* If dirty is a DOM element, append to an empty document to avoid + elements being stripped by the parser */ body = _initDocument(''); + importedNode = body.ownerDocument.importNode(dirty, true); + if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') { + /* Node is already a body, use as is */ body = importedNode; + } else if (importedNode.nodeName === 'HTML') { + body = importedNode; + } else { + // eslint-disable-next-line unicorn/prefer-dom-node-append + body.appendChild(importedNode); + } + } else { + /* Exit directly if we have nothing to do */ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes + dirty.indexOf('<') === -1) { + return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty; + } + /* Initialize the document to work on */ body = _initDocument(dirty); + /* Check we have a DOM node from the data */ if (!body) { + return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : ''; + } + } + /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) { + _forceRemove(body.firstChild); + } + /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body); + /* Now start iterating over the created document */ while(currentNode = nodeIterator.nextNode()){ + /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) { + continue; + } + /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) { + _sanitizeShadowDOM(currentNode.content); + } + /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode); + } + /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) { + return dirty; + } + /* Return sanitized string or DOM */ if (RETURN_DOM) { + if (RETURN_DOM_FRAGMENT) { + returnNode = createDocumentFragment.call(body.ownerDocument); + while(body.firstChild){ + // eslint-disable-next-line unicorn/prefer-dom-node-append + returnNode.appendChild(body.firstChild); + } + } else { + returnNode = body; + } + if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) { + /* AdoptNode() is not used because internal state is not reset (e.g. the past names map of a HTMLFormElement), this is safe in theory but we would rather not risk another attack vector. The state that is cloned by importNode() is explicitly defined by the specs. */ returnNode = importNode.call(originalDocument, returnNode, true); - } - return returnNode; - } - let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; - /* Serialize doctype if allowed */ if ( - WHOLE_DOCUMENT && - ALLOWED_TAGS["!doctype"] && - body.ownerDocument && - body.ownerDocument.doctype && - body.ownerDocument.doctype.name && - regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name) - ) { - serializedHTML = "\n" + serializedHTML; - } - /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) { - arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => { - serializedHTML = stringReplace(serializedHTML, expr, " "); - }); - } - return trustedTypesPolicy && RETURN_TRUSTED_TYPE - ? trustedTypesPolicy.createHTML(serializedHTML) - : serializedHTML; - }; - /** - * Public method to set the configuration once - * setConfig - * - * @param {Object} cfg configuration object - */ DOMPurify.setConfig = function () { - let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - _parseConfig(cfg); - SET_CONFIG = true; - }; - /** - * Public method to remove the configuration - * clearConfig - * - */ DOMPurify.clearConfig = function () { - CONFIG = null; - SET_CONFIG = false; - }; - /** - * Public method to check if an attribute value is valid. - * Uses last set config, if any. Otherwise, uses config defaults. - * isValidAttribute - * - * @param {String} tag Tag name of containing element. - * @param {String} attr Attribute name. - * @param {String} value Attribute value. - * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false. - */ DOMPurify.isValidAttribute = function (tag, attr, value) { - /* Initialize shared config vars if necessary. */ if (!CONFIG) { - _parseConfig({}); - } - const lcTag = transformCaseFunc(tag); - const lcName = transformCaseFunc(attr); - return _isValidAttribute(lcTag, lcName, value); - }; - /** - * AddHook - * Public method to add DOMPurify hooks - * - * @param {String} entryPoint entry point for the hook to add - * @param {Function} hookFunction function to execute - */ DOMPurify.addHook = function (entryPoint, hookFunction) { - if (typeof hookFunction !== "function") { - return; - } - hooks[entryPoint] = hooks[entryPoint] || []; - arrayPush(hooks[entryPoint], hookFunction); - }; - /** - * RemoveHook - * Public method to remove a DOMPurify hook at a given entryPoint - * (pops it from the stack of hooks if more are present) - * - * @param {String} entryPoint entry point for the hook to remove - * @return {Function} removed(popped) hook - */ DOMPurify.removeHook = function (entryPoint) { - if (hooks[entryPoint]) { - return arrayPop(hooks[entryPoint]); - } - }; - /** - * RemoveHooks - * Public method to remove all DOMPurify hooks at a given entryPoint - * - * @param {String} entryPoint entry point for the hooks to remove - */ DOMPurify.removeHooks = function (entryPoint) { - if (hooks[entryPoint]) { - hooks[entryPoint] = []; - } - }; - /** - * RemoveAllHooks - * Public method to remove all DOMPurify hooks - */ DOMPurify.removeAllHooks = function () { - hooks = {}; - }; - return DOMPurify; - } - var purify = createDOMPurify(); - return purify; - }); + } + return returnNode; + } + let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; + /* Serialize doctype if allowed */ if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) { + serializedHTML = '\n' + serializedHTML; + } + /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) { + arrayForEach([ + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR + ], (expr)=>{ + serializedHTML = stringReplace(serializedHTML, expr, ' '); + }); + } + return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML; + }; + /** + * Public method to set the configuration once + * setConfig + * + * @param {Object} cfg configuration object + */ DOMPurify.setConfig = function() { + let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + _parseConfig(cfg); + SET_CONFIG = true; + }; + /** + * Public method to remove the configuration + * clearConfig + * + */ DOMPurify.clearConfig = function() { + CONFIG = null; + SET_CONFIG = false; + }; + /** + * Public method to check if an attribute value is valid. + * Uses last set config, if any. Otherwise, uses config defaults. + * isValidAttribute + * + * @param {String} tag Tag name of containing element. + * @param {String} attr Attribute name. + * @param {String} value Attribute value. + * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false. + */ DOMPurify.isValidAttribute = function(tag, attr, value) { + /* Initialize shared config vars if necessary. */ if (!CONFIG) { + _parseConfig({}); + } + const lcTag = transformCaseFunc(tag); + const lcName = transformCaseFunc(attr); + return _isValidAttribute(lcTag, lcName, value); + }; + /** + * AddHook + * Public method to add DOMPurify hooks + * + * @param {String} entryPoint entry point for the hook to add + * @param {Function} hookFunction function to execute + */ DOMPurify.addHook = function(entryPoint, hookFunction) { + if (typeof hookFunction !== 'function') { + return; + } + hooks[entryPoint] = hooks[entryPoint] || []; + arrayPush(hooks[entryPoint], hookFunction); + }; + /** + * RemoveHook + * Public method to remove a DOMPurify hook at a given entryPoint + * (pops it from the stack of hooks if more are present) + * + * @param {String} entryPoint entry point for the hook to remove + * @return {Function} removed(popped) hook + */ DOMPurify.removeHook = function(entryPoint) { + if (hooks[entryPoint]) { + return arrayPop(hooks[entryPoint]); + } + }; + /** + * RemoveHooks + * Public method to remove all DOMPurify hooks at a given entryPoint + * + * @param {String} entryPoint entry point for the hooks to remove + */ DOMPurify.removeHooks = function(entryPoint) { + if (hooks[entryPoint]) { + hooks[entryPoint] = []; + } + }; + /** + * RemoveAllHooks + * Public method to remove all DOMPurify hooks + */ DOMPurify.removeAllHooks = function() { + hooks = {}; + }; + return DOMPurify; + } + var purify = createDOMPurify(); + return purify; + }); + })(purify); var purifyExports = purify.exports; @@ -2040,248 +1953,248 @@ var purifyExports = purify.exports; * If a constant should be used across different classes should be defined using attribute * accessors. */ class Constants { - /** + /** * Safe XML entities. * @type {Object} */ static get safeXmlCharactersEntities() { - return { - tagOpener: "«", - tagCloser: "»", - doubleQuote: "¨", - realDoubleQuote: """, - }; - } - /** + return { + tagOpener: "«", + tagCloser: "»", + doubleQuote: "¨", + realDoubleQuote: """ + }; + } + /** * Blackboard invalid safe characters. * @type {Object} */ static get safeBadBlackboardCharacters() { - return { - ltElement: "«mo»<«/mo»", - gtElement: "«mo»>«/mo»", - ampElement: "«mo»&«/mo»", - }; - } - /** + return { + ltElement: "«mo»<«/mo»", + gtElement: "«mo»>«/mo»", + ampElement: "«mo»&«/mo»" + }; + } + /** * Blackboard valid safe characters. * @type{Object} */ static get safeGoodBlackboardCharacters() { - return { - ltElement: "«mo»§lt;«/mo»", - gtElement: "«mo»§gt;«/mo»", - ampElement: "«mo»§amp;«/mo»", - }; - } - /** + return { + ltElement: "«mo»§lt;«/mo»", + gtElement: "«mo»§gt;«/mo»", + ampElement: "«mo»§amp;«/mo»" + }; + } + /** * Standard XML special characters. * @type {Object} */ static get xmlCharacters() { - return { - id: "xmlCharacters", - tagOpener: "<", - tagCloser: ">", - doubleQuote: '"', - ampersand: "&", - quote: "'", - }; - } - /** + return { + id: "xmlCharacters", + tagOpener: "<", + tagCloser: ">", + doubleQuote: '"', + ampersand: "&", + quote: "'" + }; + } + /** * Safe XML special characters. This characters are used instead the standard * the standard to parse the MathML if safeXML save mode is enable. Each XML * special character have a UTF-8 representation. * @type {Object} */ static get safeXmlCharacters() { - return { - id: "safeXmlCharacters", - tagOpener: "«", - tagCloser: "»", - doubleQuote: "¨", - ampersand: "§", - quote: "`", - realDoubleQuote: "¨", - }; - } + return { + id: "safeXmlCharacters", + tagOpener: "«", + tagCloser: "»", + doubleQuote: "¨", + ampersand: "§", + quote: "`", + realDoubleQuote: "¨" + }; + } } /** * @classdesc * This class represents a class to manage MathML objects. */ class MathML { - /** + /** * Checks if the mathml at position i is inside an HTML attribute or not. * @param {string} content - a string containing MathML code. * @param {number} i - search index. * @return {boolean} true if is inside an HTML attribute. false otherwise. */ static isMathmlInAttribute(content, i) { - // Regex = - // '^[\'"][\\s]*=[\\s]*[\\w-]+([\\s]*("[^"]*"|\'[^\']*\')[\\s]* - // =[\\s]*[\\w-]+[\\s]*)*[\\s]+gmi<'; - const mathAtt = "['\"][\\s]*=[\\s]*[\\w-]+"; // "=att OR '=att - const attContent = "\"[^\"]*\"|'[^']*'"; // "blabla" OR 'blabla' - const att = `[\\s]*(${attContent})[\\s]*=[\\s]*[\\w-]+[\\s]*`; // "blabla"=att OR 'blabla'=att - const atts = `('${att}')*`; // "blabla"=att1 "blabla"=att2 - const regex = `^${mathAtt}${atts}[\\s]+gmi<`; // "=att "blabla"=att1 "blabla"=att2 gmi< . - const expression = new RegExp(regex); - const actualContent = content.substring(0, i); - const reversed = actualContent.split("").reverse().join(""); - const exists = expression.test(reversed); - return exists; - } - /** + // Regex = + // '^[\'"][\\s]*=[\\s]*[\\w-]+([\\s]*("[^"]*"|\'[^\']*\')[\\s]* + // =[\\s]*[\\w-]+[\\s]*)*[\\s]+gmi<'; + const mathAtt = "['\"][\\s]*=[\\s]*[\\w-]+"; // "=att OR '=att + const attContent = "\"[^\"]*\"|'[^']*'"; // "blabla" OR 'blabla' + const att = `[\\s]*(${attContent})[\\s]*=[\\s]*[\\w-]+[\\s]*`; // "blabla"=att OR 'blabla'=att + const atts = `('${att}')*`; // "blabla"=att1 "blabla"=att2 + const regex = `^${mathAtt}${atts}[\\s]+gmi<`; // "=att "blabla"=att1 "blabla"=att2 gmi< . + const expression = new RegExp(regex); + const actualContent = content.substring(0, i); + const reversed = actualContent.split("").reverse().join(""); + const exists = expression.test(reversed); + return exists; + } + /** * Decodes an encoded MathML with standard XML tags. * We use these entities because IE doesn't support html entities * on its attributes sometimes. Yes, sometimes. * @param {string} input - string to be decoded. * @return {string} decoded string. */ static safeXmlDecode(input) { - let { tagOpener } = Constants.safeXmlCharactersEntities; - let { tagCloser } = Constants.safeXmlCharactersEntities; - let { doubleQuote } = Constants.safeXmlCharactersEntities; - let { realDoubleQuote } = Constants.safeXmlCharactersEntities; - // Decoding entities. - input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); - input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); - input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); - // Added to fix problem due to import from 1.9.x. - input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote); - // Blackboard. - const { ltElement } = Constants.safeBadBlackboardCharacters; - const { gtElement } = Constants.safeBadBlackboardCharacters; - const { ampElement } = Constants.safeBadBlackboardCharacters; - if ("_wrs_blackboard" in window && window._wrs_blackboard) { - input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement); - input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement); - input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement); - } - ({ tagOpener } = Constants.safeXmlCharacters); - ({ tagCloser } = Constants.safeXmlCharacters); - ({ doubleQuote } = Constants.safeXmlCharacters); - ({ realDoubleQuote } = Constants.safeXmlCharacters); - const { ampersand } = Constants.safeXmlCharacters; - const { quote } = Constants.safeXmlCharacters; - // Decoding characters. - input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener); - input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser); - input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote); - input = input.split(ampersand).join(Constants.xmlCharacters.ampersand); - input = input.split(quote).join(Constants.xmlCharacters.quote); - // We are replacing $ by & when its part of an entity for retro-compatibility. - // Now, the standard is replace § by &. - let returnValue = ""; - let currentEntity = null; - for (let i = 0; i < input.length; i += 1) { - const character = input.charAt(i); - if (currentEntity == null) { - if (character === "$") { - currentEntity = ""; - } else { - returnValue += character; - } - } else if (character === ";") { - returnValue += `&${currentEntity}`; - currentEntity = null; - } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) { - // Character is part of an entity. - currentEntity += character; - } else { - returnValue += `$${currentEntity}`; // Is not an entity. - currentEntity = null; - i -= 1; // Parse again the current character. - } - } - return returnValue; - } - /** + let { tagOpener } = Constants.safeXmlCharactersEntities; + let { tagCloser } = Constants.safeXmlCharactersEntities; + let { doubleQuote } = Constants.safeXmlCharactersEntities; + let { realDoubleQuote } = Constants.safeXmlCharactersEntities; + // Decoding entities. + input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); + input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); + input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); + // Added to fix problem due to import from 1.9.x. + input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote); + // Blackboard. + const { ltElement } = Constants.safeBadBlackboardCharacters; + const { gtElement } = Constants.safeBadBlackboardCharacters; + const { ampElement } = Constants.safeBadBlackboardCharacters; + if ("_wrs_blackboard" in window && window._wrs_blackboard) { + input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement); + input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement); + input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement); + } + ({ tagOpener } = Constants.safeXmlCharacters); + ({ tagCloser } = Constants.safeXmlCharacters); + ({ doubleQuote } = Constants.safeXmlCharacters); + ({ realDoubleQuote } = Constants.safeXmlCharacters); + const { ampersand } = Constants.safeXmlCharacters; + const { quote } = Constants.safeXmlCharacters; + // Decoding characters. + input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener); + input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser); + input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote); + input = input.split(ampersand).join(Constants.xmlCharacters.ampersand); + input = input.split(quote).join(Constants.xmlCharacters.quote); + // We are replacing $ by & when its part of an entity for retro-compatibility. + // Now, the standard is replace § by &. + let returnValue = ""; + let currentEntity = null; + for(let i = 0; i < input.length; i += 1){ + const character = input.charAt(i); + if (currentEntity == null) { + if (character === "$") { + currentEntity = ""; + } else { + returnValue += character; + } + } else if (character === ";") { + returnValue += `&${currentEntity}`; + currentEntity = null; + } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) { + // Character is part of an entity. + currentEntity += character; + } else { + returnValue += `$${currentEntity}`; // Is not an entity. + currentEntity = null; + i -= 1; // Parse again the current character. + } + } + return returnValue; + } + /** * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags. * We use these entities because IE doesn't support html entities on its attributes sometimes. * @param {string} input - input string to be encoded * @returns {string} encoded string. */ static safeXmlEncode(input) { - const { tagOpener } = Constants.xmlCharacters; - const { tagCloser } = Constants.xmlCharacters; - const { doubleQuote } = Constants.xmlCharacters; - const { ampersand } = Constants.xmlCharacters; - const { quote } = Constants.xmlCharacters; - input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); - input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); - input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); - input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand); - input = input.split(quote).join(Constants.safeXmlCharacters.quote); - return input; - } - /** + const { tagOpener } = Constants.xmlCharacters; + const { tagCloser } = Constants.xmlCharacters; + const { doubleQuote } = Constants.xmlCharacters; + const { ampersand } = Constants.xmlCharacters; + const { quote } = Constants.xmlCharacters; + input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); + input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); + input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); + input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand); + input = input.split(quote).join(Constants.safeXmlCharacters.quote); + return input; + } + /** * Converts special symbols (> 128) to entities and replaces all textual * entities by its number entities. * @param {string} mathml - MathML string containing - or not - special symbols * @returns {string} MathML with all textual entities replaced. */ static mathMLEntities(mathml) { - let toReturn = ""; - for (let i = 0; i < mathml.length; i += 1) { - const character = mathml.charAt(i); - // Parsing > 128 characters. - if (mathml.codePointAt(i) > 128) { - toReturn += `&#${mathml.codePointAt(i)};`; - // For UTF-32 characters we need to move the index one position. - if (mathml.codePointAt(i) > 0xffff) { - i += 1; - } - } else if (character === "&") { - const end = mathml.indexOf(";", i + 1); - if (end >= 0) { - const container = document.createElement("span"); - container.innerHTML = mathml.substring(i, end + 1); - toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`; - i = end; - } else { - toReturn += character; + let toReturn = ""; + for(let i = 0; i < mathml.length; i += 1){ + const character = mathml.charAt(i); + // Parsing > 128 characters. + if (mathml.codePointAt(i) > 128) { + toReturn += `&#${mathml.codePointAt(i)};`; + // For UTF-32 characters we need to move the index one position. + if (mathml.codePointAt(i) > 0xffff) { + i += 1; + } + } else if (character === "&") { + const end = mathml.indexOf(";", i + 1); + if (end >= 0) { + const container = document.createElement("span"); + container.innerHTML = mathml.substring(i, end + 1); + toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`; + i = end; + } else { + toReturn += character; + } + } else { + toReturn += character; + } } - } else { - toReturn += character; - } + return toReturn; } - return toReturn; - } - /** + /** * Add a custom editor name with the prefix wrs_ to a MathML class attribute. * @param {string} mathml - a MathML string created with a custom editor, like chemistry. * @param {string} customEditor - custom editor name. * @returns {string} MathML string with his class containing the editor toolbar string. */ static addCustomEditorClassAttribute(mathml, customEditor) { - let toReturn = ""; - const start = mathml.indexOf(""); - if (mathml.indexOf("class") === -1) { - // Adding custom editor type. - toReturn = `${mathml.substr(start, end)} class="wrs_${customEditor}">`; - toReturn += mathml.substr(end + 1, mathml.length); - return toReturn; - } + let toReturn = ""; + const start = mathml.indexOf(""); + if (mathml.indexOf("class") === -1) { + // Adding custom editor type. + toReturn = `${mathml.substr(start, end)} class="wrs_${customEditor}">`; + toReturn += mathml.substr(end + 1, mathml.length); + return toReturn; + } + } + return mathml; } - return mathml; - } - /** + /** * Remove a custom editor name from the MathML class attribute. * @param {string} mathml - a MathML string. * @param {string} customEditor - custom editor name. * @returns {string} The input MathML without customEditor name in his class. */ static removeCustomEditorClassAttribute(mathml, customEditor) { - // Discard MathML without the specified class. - if (mathml.indexOf("class") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) { - return mathml; - } - // Trivial case: class attribute value equal to editor name. Then - // class attribute is removed. - // First try to remove it with a space before if there is one - // Otherwise without the space - if (mathml.indexOf(` class="wrs_${customEditor}"`) !== -1) { - return mathml.replace(` class="wrs_${customEditor}"`, ""); - } else if (mathml.indexOf(`class="wrs_${customEditor}"`) !== -1) { - return mathml.replace(`class="wrs_${customEditor}"`, ""); - } - // Non Trivial case: class attribute contains editor name. - return mathml.replace(`wrs_${customEditor}`, ""); - } - /** + // Discard MathML without the specified class. + if (mathml.indexOf("class") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) { + return mathml; + } + // Trivial case: class attribute value equal to editor name. Then + // class attribute is removed. + // First try to remove it with a space before if there is one + // Otherwise without the space + if (mathml.indexOf(` class="wrs_${customEditor}"`) !== -1) { + return mathml.replace(` class="wrs_${customEditor}"`, ""); + } else if (mathml.indexOf(`class="wrs_${customEditor}"`) !== -1) { + return mathml.replace(`class="wrs_${customEditor}"`, ""); + } + // Non Trivial case: class attribute contains editor name. + return mathml.replace(`wrs_${customEditor}`, ""); + } + /** * Adds annotation tag in MathML element. * @param {String} mathml - valid MathML. * @param {String} content - value to put inside annotation tag. @@ -2289,70 +2202,70 @@ var purifyExports = purify.exports; * @returns {String} - 'mathml' with an annotation that contains * 'content' and encoding 'encoding'. */ static addAnnotation(mathml, content, annotationEncoding) { - // If contains annotation, also contains semantics tag. - const containsAnnotation = mathml.indexOf(""); - mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`; - } else if (MathML.isEmpty(mathml)) { - const endIndexInline = mathml.indexOf("/>"); - const endIndexNonInline = mathml.indexOf(">"); - const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline; - mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`; - } else { - const beginMathMLContent = mathml.indexOf(">") + 1; - const endMathmlContent = mathml.lastIndexOf(""); - const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent); - mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len - } - return mathmlWithAnnotation; - } - /** + // If contains annotation, also contains semantics tag. + const containsAnnotation = mathml.indexOf(""); + mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`; + } else if (MathML.isEmpty(mathml)) { + const endIndexInline = mathml.indexOf("/>"); + const endIndexNonInline = mathml.indexOf(">"); + const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline; + mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`; + } else { + const beginMathMLContent = mathml.indexOf(">") + 1; + const endMathmlContent = mathml.lastIndexOf(""); + const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent); + mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len + } + return mathmlWithAnnotation; + } + /** * Removes specific annotation tag in MathML element. * In case of remove the unique annotation, also is removed semantics tag. * @param {String} mathml - valid MathML. * @param {String} annotationEncoding - annotation encoding to remove. * @returns {String} - 'mathml' without the annotation encoding specified. */ static removeAnnotation(mathml, annotationEncoding) { - let mathmlWithoutAnnotation = mathml; - const openAnnotationTag = ``; - const closeAnnotationTag = ""; - const startAnnotationIndex = mathml.indexOf(openAnnotationTag); - if (startAnnotationIndex !== -1) { - let differentAnnotationFound = false; - let differentAnnotationIndex = mathml.indexOf("`; + const closeAnnotationTag = ""; + const startAnnotationIndex = mathml.indexOf(openAnnotationTag); + if (startAnnotationIndex !== -1) { + let differentAnnotationFound = false; + let differentAnnotationIndex = mathml.indexOf("\s*?()?/gm; - // If `mrow` is found right after the `annotation` ending tag, it's removed as well - // alongside `semantics` closing tag and the whole `annotation` tag and its contents. - const semanticsEndingTagRegex = /(<\/mrow>)?\s*/gm; - return mathml.replace(semanticsStartingTagRegex, "").replace(semanticsEndingTagRegex, ""); - } - /** + // If `mrow` is found right before the `semantics` starting tag, it's removed as well + const semanticsStartingTagRegex = /\s*?()?/gm; + // If `mrow` is found right after the `annotation` ending tag, it's removed as well + // alongside `semantics` closing tag and the whole `annotation` tag and its contents. + const semanticsEndingTagRegex = /(<\/mrow>)?\s*/gm; + return mathml.replace(semanticsStartingTagRegex, "").replace(semanticsEndingTagRegex, ""); + } + /** * Transforms all xml mathml occurrences that contain semantics to the same * xml mathml occurrences without semantics. * @param {string} text - string that can contain xml mathml occurrences. @@ -2361,49 +2274,49 @@ var purifyExports = purify.exports; * xmlCharacters by default. * @returns {string} - 'text' with all xml mathml occurrences without annotation tag. */ static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) { - const mathTagStart = `${characters.tagOpener}math`; - const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; - const mathTagEndline = `/${characters.tagCloser}`; - const { tagCloser } = characters; - const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`; - const annotationTagStart = `${characters.tagOpener}annotation encoding=`; - let output = ""; - let start = text.indexOf(mathTagStart); - let end = 0; - while (start !== -1) { - output += text.substring(end, start); - // MathML can be written as '' or ''. - const mathTagEndIndex = text.indexOf(mathTagEnd, start); - const mathTagEndlineIndex = text.indexOf(mathTagEndline, start); - const firstTagCloser = text.indexOf(tagCloser, start); - if (mathTagEndIndex !== -1) { - end = mathTagEndIndex; - } else if (mathTagEndlineIndex === firstTagCloser - 1) { - end = mathTagEndlineIndex; - } - const semanticsIndex = text.indexOf(semanticsTagStart, start); - if (semanticsIndex !== -1) { - const mmlTagStart = text.substring(start, semanticsIndex); - const annotationIndex = text.indexOf(annotationTagStart, start); - if (annotationIndex !== -1) { - const startIndex = semanticsIndex + semanticsTagStart.length; - const mmlContent = text.substring(startIndex, annotationIndex); - output += mmlTagStart + mmlContent + mathTagEnd; - start = text.indexOf(mathTagStart, start + mathTagStart.length); - end += mathTagEnd.length; - } else { - end = start; - start = text.indexOf(mathTagStart, start + mathTagStart.length); - } - } else { - end = start; - start = text.indexOf(mathTagStart, start + mathTagStart.length); - } - } - output += text.substring(end, text.length); - return output; - } - /** + const mathTagStart = `${characters.tagOpener}math`; + const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; + const mathTagEndline = `/${characters.tagCloser}`; + const { tagCloser } = characters; + const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`; + const annotationTagStart = `${characters.tagOpener}annotation encoding=`; + let output = ""; + let start = text.indexOf(mathTagStart); + let end = 0; + while(start !== -1){ + output += text.substring(end, start); + // MathML can be written as '' or ''. + const mathTagEndIndex = text.indexOf(mathTagEnd, start); + const mathTagEndlineIndex = text.indexOf(mathTagEndline, start); + const firstTagCloser = text.indexOf(tagCloser, start); + if (mathTagEndIndex !== -1) { + end = mathTagEndIndex; + } else if (mathTagEndlineIndex === firstTagCloser - 1) { + end = mathTagEndlineIndex; + } + const semanticsIndex = text.indexOf(semanticsTagStart, start); + if (semanticsIndex !== -1) { + const mmlTagStart = text.substring(start, semanticsIndex); + const annotationIndex = text.indexOf(annotationTagStart, start); + if (annotationIndex !== -1) { + const startIndex = semanticsIndex + semanticsTagStart.length; + const mmlContent = text.substring(startIndex, annotationIndex); + output += mmlTagStart + mmlContent + mathTagEnd; + start = text.indexOf(mathTagStart, start + mathTagStart.length); + end += mathTagEnd.length; + } else { + end = start; + start = text.indexOf(mathTagStart, start + mathTagStart.length); + } + } else { + end = start; + start = text.indexOf(mathTagStart, start + mathTagStart.length); + } + } + output += text.substring(end, text.length); + return output; + } + /** * Returns true if a MathML contains a certain class. * @param {string} mathML - input MathML. * @param {string} className - className. @@ -2411,126 +2324,126 @@ var purifyExports = purify.exports; * false otherwise. * @static */ static containClass(mathML, className) { - const classIndex = mathML.indexOf("class"); - if (classIndex === -1) { - return false; - } - const classTagEndIndex = mathML.indexOf(">", classIndex); - const classTag = mathML.substring(classIndex, classTagEndIndex); - if (classTag.indexOf(className) !== -1) { - return true; - } - return false; - } - /** + const classIndex = mathML.indexOf("class"); + if (classIndex === -1) { + return false; + } + const classTagEndIndex = mathML.indexOf(">", classIndex); + const classTag = mathML.substring(classIndex, classTagEndIndex); + if (classTag.indexOf(className) !== -1) { + return true; + } + return false; + } + /** * Returns true if mathml is empty. Otherwise, false. * @param {string} mathml - valid MathML with standard XML tags. * @returns {boolean} - true if mathml is empty. Otherwise, false. */ static isEmpty(mathml) { - // MathML can have the shape or ''. - const closeTag = ">"; - const closeTagInline = "/>"; - const firstCloseTagIndex = mathml.indexOf(closeTag); - const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline); - let empty = false; - // MathML is always empty in the second shape. - if (firstCloseTagInlineIndex !== -1) { - if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) { - empty = true; - } - } - // MathML is always empty in the first shape when there aren't elements - // between math tags. - if (!empty) { - const mathTagEndRegex = new RegExp(""); - const mathTagEndArray = mathTagEndRegex.exec(mathml); - if (mathTagEndArray) { - empty = firstCloseTagIndex + 1 === mathTagEndArray.index; - } - } - return empty; - } - /** + // MathML can have the shape or ''. + const closeTag = ">"; + const closeTagInline = "/>"; + const firstCloseTagIndex = mathml.indexOf(closeTag); + const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline); + let empty = false; + // MathML is always empty in the second shape. + if (firstCloseTagInlineIndex !== -1) { + if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) { + empty = true; + } + } + // MathML is always empty in the first shape when there aren't elements + // between math tags. + if (!empty) { + const mathTagEndRegex = new RegExp(""); + const mathTagEndArray = mathTagEndRegex.exec(mathml); + if (mathTagEndArray) { + empty = firstCloseTagIndex + 1 === mathTagEndArray.index; + } + } + return empty; + } + /** * Encodes html entities inside properties. * @param {String} mathml - valid MathML with standard XML tags. * @returns {String} - 'mathml' with property entities encoded. */ static encodeProperties(mathml) { - // Search all the properties. - const regex = /\w+=".*?"/g; - // Encode html entities. - const replacer = (match) => { - // It has the shape: - // . - const quoteIndex = match.indexOf('"'); - const propertyValue = match.substring(quoteIndex + 1, match.length - 1); - const propertyValueEncoded = Util.htmlEntities(propertyValue); - const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}"`; - return matchEncoded; - }; - const mathmlEncoded = mathml.replace(regex, replacer); - return mathmlEncoded; - } + // Search all the properties. + const regex = /\w+=".*?"/g; + // Encode html entities. + const replacer = (match)=>{ + // It has the shape: + // . + const quoteIndex = match.indexOf('"'); + const propertyValue = match.substring(quoteIndex + 1, match.length - 1); + const propertyValueEncoded = Util.htmlEntities(propertyValue); + const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}"`; + return matchEncoded; + }; + const mathmlEncoded = mathml.replace(regex, replacer); + return mathmlEncoded; + } } /** * This class represents the configuration class. * Usually used to retrieve configuration properties generated in the backend into the frontend. */ class Configuration { - /** + /** * Adds a properties object to {@link Configuration.properties}. * @param {Object} properties - properties to append to current properties. */ static addConfiguration(properties) { - Object.assign(Configuration.properties, properties); - } - /** + Object.assign(Configuration.properties, properties); + } + /** * Static property. * The configuration properties object. * @private * @type {Object} */ static get properties() { - return Configuration._properties; - } - /** + return Configuration._properties; + } + /** * Static property setter. * Set configuration properties. * @param {Object} value - The property value. * @ignore */ static set properties(value) { - Configuration._properties = value; - } - /** + Configuration._properties = value; + } + /** * Returns the value of a property key. * @param {String} key - Property key * @returns {String} Property value */ static get(key) { - if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) { - // Backwards compatibility. - if (Object.prototype.hasOwnProperty.call(Configuration.properties, "_wrs_conf_")) { - return Configuration.properties[`_wrs_conf_${key}`]; - } - return false; - } - return Configuration.properties[key]; - } - /** + if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) { + // Backwards compatibility. + if (Object.prototype.hasOwnProperty.call(Configuration.properties, "_wrs_conf_")) { + return Configuration.properties[`_wrs_conf_${key}`]; + } + return false; + } + return Configuration.properties[key]; + } + /** * Adds a new property to Configuration class. * @param {String} key - Property key. * @param {Object} value - Property value. */ static set(key, value) { - Configuration.properties[key] = value; - } - /** + Configuration.properties[key] = value; + } + /** * Updates a property object value with new values. * @param {String} key - The property key to be updated. * @param {Object} propertyValue - Object containing the new values. */ static update(key, propertyValue) { - if (!Configuration.get(key)) { - Configuration.set(key, propertyValue); - } else { - const updateProperty = Object.assign(Configuration.get(key), propertyValue); - Configuration.set(key, updateProperty); + if (!Configuration.get(key)) { + Configuration.set(key, propertyValue); + } else { + const updateProperty = Object.assign(Configuration.get(key), propertyValue); + Configuration.set(key, updateProperty); + } } - } } /** * Static properties object. Stores all configuration properties. @@ -2540,36 +2453,36 @@ var purifyExports = purify.exports; */ Configuration._properties = {}; class TextCache { - /** + /** * @classdesc * This class represent a client-side text cache class. Contains pairs of * strings (key/value) which can be retrieved in any moment. Usually used * to store AJAX responses for text services like mathml2latex * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class). * @constructs - */ constructor() { - /** + */ constructor(){ + /** * Cache array property storing the cache entries. * @type {Array.} */ this.cache = []; - } - /** + } + /** * This method populates a key/value pair into the {@link this.cache} property. * @param {String} key - Cache key, usually the service string parameter. * @param {String} value - Cache value, usually the service response. */ populate(key, value) { - this.cache[key] = value; - } - /** + this.cache[key] = value; + } + /** * Returns the cache value associated to certain cache key. * @param {String} key - Cache key, usually the service string parameter. * @return {String} value - Cache value, if exists. False otherwise. */ get(key) { - if (Object.prototype.hasOwnProperty.call(this.cache, key)) { - return this.cache[key]; + if (Object.prototype.hasOwnProperty.call(this.cache, key)) { + return this.cache[key]; + } + return false; } - return false; - } } /** @@ -2578,47 +2491,47 @@ class TextCache { * @property {String} Listener.eventName - The listener name. * @property {Function} Listener.callback - The listener callback function. */ class Listeners { - /** + /** * @classdesc * This class represents a custom listeners manager. * @constructs - */ constructor() { - /** + */ constructor(){ + /** * Array containing all custom listeners. * @type {Object[]} */ this.listeners = []; - } - /** + } + /** * Add a listener to Listener class. * @param {Object} listener - A listener object. */ add(listener) { - this.listeners.push(listener); - } - /** + this.listeners.push(listener); + } + /** * Fires MathType event listeners * @param {String} eventName - event name * @param {Event} event - event object. * @return {boolean} false if event has been prevented. true otherwise. */ fire(eventName, event) { - for (let i = 0; i < this.listeners.length && !event.cancelled; i += 1) { - if (this.listeners[i].eventName === eventName) { - // Calling listener. - this.listeners[i].callback(event); - } - } - return event.defaultPrevented; - } - /** + for(let i = 0; i < this.listeners.length && !event.cancelled; i += 1){ + if (this.listeners[i].eventName === eventName) { + // Calling listener. + this.listeners[i].callback(event); + } + } + return event.defaultPrevented; + } + /** * Creates a new listener object. * @param {string} eventName - Event name. * @param {Object} callback - Callback function. * @returns {object} the listener object. */ static newListener(eventName, callback) { - const listener = {}; - listener.eventName = eventName; - listener.callback = callback; - return listener; - } + const listener = {}; + listener.eventName = eventName; + listener.callback = callback; + return listener; + } } /** @@ -2630,128 +2543,128 @@ class TextCache { * Class representing a serviceProvider. A serviceProvider is a class containing * an arbitrary number of services with the correspondent path. */ class ServiceProvider { - /** + /** * Returns Service Provider listeners. * @type {Listeners} */ static get listeners() { - return ServiceProvider._listeners; - } - /** + return ServiceProvider._listeners; + } + /** * Adds a {@link Listener} instance to {@link ServiceProvider} class. * @param {Listener} listener - Instance of {@link Listener}. */ static addListener(listener) { - ServiceProvider.listeners.add(listener); - } - /** + ServiceProvider.listeners.add(listener); + } + /** * Fires events in Service Provider. * @param {String} eventName - Event name. * @param {Event} event - Event object. */ static fireEvent(eventName, event) { - ServiceProvider.listeners.fire(eventName, event); - } - /** + ServiceProvider.listeners.fire(eventName, event); + } + /** * Service parameters. * @type {ServiceProviderProperties} * */ static get parameters() { - return ServiceProvider._parameters; - } - /** + return ServiceProvider._parameters; + } + /** * Service parameters. * @private * @type {ServiceProviderProperties} */ static set parameters(parameters) { - ServiceProvider._parameters = parameters; - } - /** + ServiceProvider._parameters = parameters; + } + /** * Static property. * Return service provider paths. * @private * @type {String} */ static get servicePaths() { - return ServiceProvider._servicePaths; - } - /** + return ServiceProvider._servicePaths; + } + /** * Static property setter. * Set service paths. * @param {String} value - The property value. * @ignore */ static set servicePaths(value) { - ServiceProvider._servicePaths = value; - } - /** + ServiceProvider._servicePaths = value; + } + /** * Adds a new service to the ServiceProvider. * @param {String} service - Service name. * @param {String} path - Service path. * @static */ static setServicePath(service, path) { - ServiceProvider.servicePaths[service] = path; - } - /** + ServiceProvider.servicePaths[service] = path; + } + /** * Returns the service path for a certain service. * @param {String} serviceName - Service name. * @returns {String} The service path. * @static */ static getServicePath(serviceName) { - return ServiceProvider.servicePaths[serviceName]; - } - /** + return ServiceProvider.servicePaths[serviceName]; + } + /** * Static property. * Service provider integration path. * @type {String} */ static get integrationPath() { - return ServiceProvider._integrationPath; - } - /** + return ServiceProvider._integrationPath; + } + /** * Static property setter. * Set service provider integration path. * @param {String} value - The property value. * @ignore */ static set integrationPath(value) { - ServiceProvider._integrationPath = value; - } - /** + ServiceProvider._integrationPath = value; + } + /** * Returns the server URL in the form protocol://serverName:serverPort. * @return {String} The client side server path. */ static getServerURL() { - const url = window.location.href; - const arr = url.split("/"); - const result = `${arr[0]}//${arr[2]}`; - return result; - } - /** + const url = window.location.href; + const arr = url.split("/"); + const result = `${arr[0]}//${arr[2]}`; + return result; + } + /** * Inits {@link this} class. Uses {@link this.integrationPath} as * base path to generate all backend services paths. * @param {Object} parameters - Function parameters. * @param {String} parameters.integrationPath - Service path. */ static init(parameters) { - ServiceProvider.parameters = parameters; - // Services path (tech dependant). - let configurationURI = ServiceProvider.createServiceURI("configurationjs"); - let createImageURI = ServiceProvider.createServiceURI("createimage"); - let showImageURI = ServiceProvider.createServiceURI("showimage"); - let getMathMLURI = ServiceProvider.createServiceURI("getmathml"); - let serviceURI = ServiceProvider.createServiceURI("service"); - // Some backend integrations (like Java o Ruby) have an absolute backend path, - // for example: /app/service. For them we calculate the absolute URL path, i.e - // protocol://domain:port/app/service - if (ServiceProvider.parameters.URI.indexOf("/") === 0) { - const serverPath = ServiceProvider.getServerURL(); - configurationURI = serverPath + configurationURI; - showImageURI = serverPath + showImageURI; - createImageURI = serverPath + createImageURI; - getMathMLURI = serverPath + getMathMLURI; - serviceURI = serverPath + serviceURI; - } - ServiceProvider.setServicePath("configurationjs", configurationURI); - ServiceProvider.setServicePath("showimage", showImageURI); - ServiceProvider.setServicePath("createimage", createImageURI); - ServiceProvider.setServicePath("service", serviceURI); - ServiceProvider.setServicePath("getmathml", getMathMLURI); - ServiceProvider.setServicePath("configurationjs", configurationURI); - ServiceProvider.listeners.fire("onInit", {}); - } - /** + ServiceProvider.parameters = parameters; + // Services path (tech dependant). + let configurationURI = ServiceProvider.createServiceURI("configurationjs"); + let createImageURI = ServiceProvider.createServiceURI("createimage"); + let showImageURI = ServiceProvider.createServiceURI("showimage"); + let getMathMLURI = ServiceProvider.createServiceURI("getmathml"); + let serviceURI = ServiceProvider.createServiceURI("service"); + // Some backend integrations (like Java o Ruby) have an absolute backend path, + // for example: /app/service. For them we calculate the absolute URL path, i.e + // protocol://domain:port/app/service + if (ServiceProvider.parameters.URI.indexOf("/") === 0) { + const serverPath = ServiceProvider.getServerURL(); + configurationURI = serverPath + configurationURI; + showImageURI = serverPath + showImageURI; + createImageURI = serverPath + createImageURI; + getMathMLURI = serverPath + getMathMLURI; + serviceURI = serverPath + serviceURI; + } + ServiceProvider.setServicePath("configurationjs", configurationURI); + ServiceProvider.setServicePath("showimage", showImageURI); + ServiceProvider.setServicePath("createimage", createImageURI); + ServiceProvider.setServicePath("service", serviceURI); + ServiceProvider.setServicePath("getmathml", getMathMLURI); + ServiceProvider.setServicePath("configurationjs", configurationURI); + ServiceProvider.listeners.fire("onInit", {}); + } + /** * Gets the content from an URL. * @param {String} url - Target URL. * @param {Object} [postVariables] - Object containing post variables. @@ -2760,86 +2673,86 @@ class TextCache { * @private * @static */ static getUrl(url, postVariables) { - const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); - const httpRequest = Util.createHttpRequest(); - if (httpRequest) { - if (typeof postVariables === "undefined" || typeof postVariables === "undefined") { - httpRequest.open("GET", url, false); - } else if (url.substr(0, 1) === "/" || url.substr(0, 7) === "http://" || url.substr(0, 8) === "https://") { - httpRequest.open("POST", url, false); - } else { - httpRequest.open("POST", currentPath + url, false); - } - let header = Configuration.get("customHeaders"); - if (header) { - if (typeof header === "string") { - header = Util.convertStringToObject(header); - } - Object.entries(header).forEach(([key, val]) => httpRequest.setRequestHeader(key, val)); - } - if (typeof postVariables !== "undefined" && postVariables) { - httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); - httpRequest.send(Util.httpBuildQuery(postVariables)); - } else { - httpRequest.send(null); - } - return httpRequest.responseText; - } - return ""; - } - /** + const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); + const httpRequest = Util.createHttpRequest(); + if (httpRequest) { + if (typeof postVariables === "undefined" || typeof postVariables === "undefined") { + httpRequest.open("GET", url, false); + } else if (url.substr(0, 1) === "/" || url.substr(0, 7) === "http://" || url.substr(0, 8) === "https://") { + httpRequest.open("POST", url, false); + } else { + httpRequest.open("POST", currentPath + url, false); + } + let header = Configuration.get("customHeaders"); + if (header) { + if (typeof header === "string") { + header = Util.convertStringToObject(header); + } + Object.entries(header).forEach(([key, val])=>httpRequest.setRequestHeader(key, val)); + } + if (typeof postVariables !== "undefined" && postVariables) { + httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + httpRequest.send(Util.httpBuildQuery(postVariables)); + } else { + httpRequest.send(null); + } + return httpRequest.responseText; + } + return ""; + } + /** * Returns the response text of a certain service. * @param {String} service - Service name. * @param {String} postVariables - Post variables. * @param {Boolean} get - True if the request is GET instead of POST. false otherwise. * @returns {String} Service response text. */ static getService(service, postVariables, get) { - let response; - if (get === true) { - const getVariables = postVariables ? `?${postVariables}` : ""; - const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`; - response = ServiceProvider.getUrl(serviceUrl); - } else { - const serviceUrl = ServiceProvider.getServicePath(service); - response = ServiceProvider.getUrl(serviceUrl, postVariables); + let response; + if (get === true) { + const getVariables = postVariables ? `?${postVariables}` : ""; + const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`; + response = ServiceProvider.getUrl(serviceUrl); + } else { + const serviceUrl = ServiceProvider.getServicePath(service); + response = ServiceProvider.getUrl(serviceUrl, postVariables); + } + return response; } - return response; - } - /** + /** * Returns the server language of a certain service. The possible values * are: php, aspx, java and ruby. * This method has backward compatibility purposes. * @param {String} service - The configuration service. * @returns {String} - The server technology associated with the configuration service. */ static getServerLanguageFromService(service) { - if (service.indexOf(".php") !== -1) { - return "php"; - } - if (service.indexOf(".aspx") !== -1) { - return "aspx"; - } - if (service.indexOf("wirispluginengine") !== -1) { - return "ruby"; + if (service.indexOf(".php") !== -1) { + return "php"; + } + if (service.indexOf(".aspx") !== -1) { + return "aspx"; + } + if (service.indexOf("wirispluginengine") !== -1) { + return "ruby"; + } + return "java"; } - return "java"; - } - /** + /** * Returns the URI associated with a certain service. * @param {String} service - The service name. * @return {String} The service path. */ static createServiceURI(service) { - const extension = ServiceProvider.serverExtension(); - return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension; - } - static serverExtension() { - if (ServiceProvider.parameters.server.indexOf("php") !== -1) { - return ".php"; - } - if (ServiceProvider.parameters.server.indexOf("aspx") !== -1) { - return ".aspx"; - } - return ""; - } + const extension = ServiceProvider.serverExtension(); + return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension; + } + static serverExtension() { + if (ServiceProvider.parameters.server.indexOf("php") !== -1) { + return ".php"; + } + if (ServiceProvider.parameters.server.indexOf("aspx") !== -1) { + return ".aspx"; + } + return ""; + } } /** * @property {String} service - The service name. @@ -2867,49 +2780,49 @@ class TextCache { * This class represents a LaTeX parser. Manages the services which allows to convert * LaTeX into MathML and MathML into LaTeX. */ class Latex { - /** + /** * Static property. * Return latex cache. * @private * @type {Cache} */ static get cache() { - return Latex._cache; - } - /** + return Latex._cache; + } + /** * Static property setter. * Set latex cache. * @param {Cache} value - The property value. * @ignore */ static set cache(value) { - Latex._cache = value; - } - /** + Latex._cache = value; + } + /** * Converts MathML to LaTeX by calling mathml2latex service. For text services * we call a text service with the param mathml2latex. * @param {String} mathml - MathML String. * @return {String} LaTeX string generated by the MathML argument. */ static getLatexFromMathML(mathml) { - const mathmlWithoutSemantics = MathML.removeSemantics(mathml); - /** + const mathmlWithoutSemantics = MathML.removeSemantics(mathml); + /** * @type {TextCache} */ const { cache } = Latex; - const data = { - service: "mathml2latex", - mml: mathmlWithoutSemantics, - }; - const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); - // TODO: Error handling. - let latex = ""; - if (jsonResponse.status === "ok") { - latex = jsonResponse.result.text; - const latexHtmlEntitiesEncoded = Util.htmlEntities(latex); - // Inserting LaTeX semantics. - const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, "LaTeX"); - cache.populate(latex, mathmlWithSemantics); - } - return latex; - } - /** + const data = { + service: "mathml2latex", + mml: mathmlWithoutSemantics + }; + const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); + // TODO: Error handling. + let latex = ""; + if (jsonResponse.status === "ok") { + latex = jsonResponse.result.text; + const latexHtmlEntitiesEncoded = Util.htmlEntities(latex); + // Inserting LaTeX semantics. + const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, "LaTeX"); + cache.populate(latex, mathmlWithSemantics); + } + return latex; + } + /** * Converts LaTeX to MathML by calling latex2mathml service. For text services * we call a text service with the param latex2mathml. * @param {String} latex - String containing a LaTeX formula. @@ -2917,41 +2830,41 @@ class TextCache { * - If true LaTeX would me included into MathML semantics. * @return {String} MathML string generated by the LaTeX argument. */ static getMathMLFromLatex(latex, includeLatexOnSemantics) { - /** + /** * @type {TextCache} */ const latexCache = Latex.cache; - if (Latex.cache.get(latex)) { - return Latex.cache.get(latex); - } - const data = { - service: "latex2mathml", - latex, - }; - if (includeLatexOnSemantics) { - data.saveLatex = ""; - } - const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); - let output; - if (jsonResponse.status === "ok") { - let mathml = jsonResponse.result.text; - mathml = mathml.split("\r").join("").split("\n").join(" "); - // Populate LatexCache. - if (mathml.indexOf("semantics") === -1 && mathml.indexOf("annotation") === -1) { - const content = Util.htmlEntities(latex); - mathml = MathML.addAnnotation(mathml, content, "LaTeX"); - output = mathml; - } else { - output = mathml; - } - if (!latexCache.get(latex)) { - latexCache.populate(latex, mathml); - } - } else { - output = `$$${latex}$$`; + if (Latex.cache.get(latex)) { + return Latex.cache.get(latex); + } + const data = { + service: "latex2mathml", + latex + }; + if (includeLatexOnSemantics) { + data.saveLatex = ""; + } + const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); + let output; + if (jsonResponse.status === "ok") { + let mathml = jsonResponse.result.text; + mathml = mathml.split("\r").join("").split("\n").join(" "); + // Populate LatexCache. + if (mathml.indexOf("semantics") === -1 && mathml.indexOf("annotation") === -1) { + const content = Util.htmlEntities(latex); + mathml = MathML.addAnnotation(mathml, content, "LaTeX"); + output = mathml; + } else { + output = mathml; + } + if (!latexCache.get(latex)) { + latexCache.populate(latex, mathml); + } + } else { + output = `$$${latex}$$`; + } + return output; } - return output; - } - /** + /** * Converts all occurrences of MathML code to LaTeX. * The MathML code should containing to be converted. * @param {String} content - A string containing MathML valid code. @@ -2959,45 +2872,45 @@ class TextCache { * @return {String} A string containing all MathML annotated occurrences * replaced by the corresponding LaTeX code. */ static parseMathmlToLatex(content, characters) { - let output = ""; - const mathTagBegin = `${characters.tagOpener}math`; - const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; - const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`; - const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`; - let start = content.indexOf(mathTagBegin); - let end = 0; - let mathml; - let startAnnotation; - let closeAnnotation; - while (start !== -1) { - output += content.substring(end, start); - end = content.indexOf(mathTagEnd, start); - if (end === -1) { - end = content.length - 1; - } else { - end += mathTagEnd.length; - } - mathml = content.substring(start, end); - startAnnotation = mathml.indexOf(openTarget); - if (startAnnotation !== -1) { - startAnnotation += openTarget.length; - closeAnnotation = mathml.indexOf(closeTarget); - let latex = mathml.substring(startAnnotation, closeAnnotation); - if (characters === Constants.safeXmlCharacters) { - latex = MathML.safeXmlDecode(latex); - } - output += `$$${latex}$$`; - // Populate latex into cache. - Latex.cache.populate(latex, mathml); - } else { - output += mathml; - } - start = content.indexOf(mathTagBegin, end); - } - output += content.substring(end, content.length); - return output; - } - /** + let output = ""; + const mathTagBegin = `${characters.tagOpener}math`; + const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; + const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`; + const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`; + let start = content.indexOf(mathTagBegin); + let end = 0; + let mathml; + let startAnnotation; + let closeAnnotation; + while(start !== -1){ + output += content.substring(end, start); + end = content.indexOf(mathTagEnd, start); + if (end === -1) { + end = content.length - 1; + } else { + end += mathTagEnd.length; + } + mathml = content.substring(start, end); + startAnnotation = mathml.indexOf(openTarget); + if (startAnnotation !== -1) { + startAnnotation += openTarget.length; + closeAnnotation = mathml.indexOf(closeTarget); + let latex = mathml.substring(startAnnotation, closeAnnotation); + if (characters === Constants.safeXmlCharacters) { + latex = MathML.safeXmlDecode(latex); + } + output += `$$${latex}$$`; + // Populate latex into cache. + Latex.cache.populate(latex, mathml); + } else { + output += mathml; + } + start = content.indexOf(mathTagBegin, end); + } + output += content.substring(end, content.length); + return output; + } + /** * Extracts the latex of a determined position in a text. * @param {Node} textNode - textNode to extract the LaTeX * @param {Number} caretPosition - Starting position to find LaTeX. @@ -3007,23 +2920,23 @@ class TextCache { * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found. * @static */ static getLatexFromTextNode(textNode, caretPosition, latexTags) { - // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument). - // Tags used for LaTeX formulas. - const defaultLatexTags = { - open: "$$", - close: "$$", - }; - // latexTags is an optional parameter. If is not set, use default latexTags. - if (typeof latexTags === "undefined" || latexTags == null) { - latexTags = defaultLatexTags; - } - // Looking for the first textNode. - let startNode = textNode; - while (startNode.previousSibling && startNode.previousSibling.nodeType === 3) { - // TEXT_NODE. - startNode = startNode.previousSibling; - } - /** + // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument). + // Tags used for LaTeX formulas. + const defaultLatexTags = { + open: "$$", + close: "$$" + }; + // latexTags is an optional parameter. If is not set, use default latexTags. + if (typeof latexTags === "undefined" || latexTags == null) { + latexTags = defaultLatexTags; + } + // Looking for the first textNode. + let startNode = textNode; + while(startNode.previousSibling && startNode.previousSibling.nodeType === 3){ + // TEXT_NODE. + startNode = startNode.previousSibling; + } + /** * Returns the next latex position and node from a specific node and position. * @param {Node} currentNode - Node where searching latex. * @param {Number} currentPosition - Current position inside the currentNode. @@ -3032,21 +2945,21 @@ class TextCache { * @param {Boolean} tag - Tag containing the current search. * @returns {Object} Object containing the current node and the position. */ function getNextLatexPosition(currentNode, currentPosition, tag) { - let position = currentNode.nodeValue.indexOf(tag, currentPosition); - while (position === -1) { - currentNode = currentNode.nextSibling; - if (!currentNode) { - // TEXT_NODE. - return null; // Not found. + let position = currentNode.nodeValue.indexOf(tag, currentPosition); + while(position === -1){ + currentNode = currentNode.nextSibling; + if (!currentNode) { + // TEXT_NODE. + return null; // Not found. + } + position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1; + } + return { + node: currentNode, + position + }; } - position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1; - } - return { - node: currentNode, - position, - }; - } - /** + /** * Determines if a node is previous, or not, to a second one. * @param {Node} node - Start node. * @param {Number} position - Start node position. @@ -3054,57 +2967,57 @@ class TextCache { * @param {Number} endPosition - End node position. * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise. */ function isPrevious(node, position, endNode, endPosition) { - if (node === endNode) { - return position <= endPosition; - } - while (node && node !== endNode) { - node = node.nextSibling; - } - return node === endNode; - } - let start; - let end = { - node: startNode, - position: 0, - }; - // Is supposed that open and close tags has the same length. - const tagLength = latexTags.open.length; - do { - start = getNextLatexPosition(end.node, end.position, latexTags.open); - if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) { - return null; - } - end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close); - if (end == null) { - return null; - } - end.position += tagLength; - } while (isPrevious(end.node, end.position, textNode, caretPosition)); - // Isolating latex. - let latex; - if (start.node === end.node) { - latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength); - } else { - const index = start.position + tagLength; - latex = start.node.nodeValue.substring(index, start.node.nodeValue.length); - let currentNode = start.node; - do { - currentNode = currentNode.nextSibling; - if (currentNode === end.node) { - latex += end.node.nodeValue.substring(0, end.position - tagLength); + if (node === endNode) { + return position <= endPosition; + } + while(node && node !== endNode){ + node = node.nextSibling; + } + return node === endNode; + } + let start; + let end = { + node: startNode, + position: 0 + }; + // Is supposed that open and close tags has the same length. + const tagLength = latexTags.open.length; + do { + start = getNextLatexPosition(end.node, end.position, latexTags.open); + if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) { + return null; + } + end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close); + if (end == null) { + return null; + } + end.position += tagLength; + }while (isPrevious(end.node, end.position, textNode, caretPosition)) + // Isolating latex. + let latex; + if (start.node === end.node) { + latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength); } else { - latex += currentNode.nodeValue ? currentNode.nodeValue : ""; + const index = start.position + tagLength; + latex = start.node.nodeValue.substring(index, start.node.nodeValue.length); + let currentNode = start.node; + do { + currentNode = currentNode.nextSibling; + if (currentNode === end.node) { + latex += end.node.nodeValue.substring(0, end.position - tagLength); + } else { + latex += currentNode.nodeValue ? currentNode.nodeValue : ""; + } + }while (currentNode !== end.node) } - } while (currentNode !== end.node); + return { + latex, + startNode: start.node, + startPosition: start.position, + endNode: end.node, + endPosition: end.position + }; } - return { - latex, - startNode: start.node, - startPosition: start.position, - endNode: end.node, - endPosition: end.position, - }; - } } /** * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string. @@ -3113,999 +3026,972 @@ class TextCache { */ Latex._cache = new TextCache(); var ar = { - latex: "LaTeX", - cancel: "إلغاء", - accept: "إدراج", - manual: "الدليل", - insert_math: "إدراج صيغة رياضية - MathType", - insert_chem: "إدراج صيغة كيميائية - ChemType", - minimize: "تصغير", - maximize: "تكبير", - fullscreen: "ملء الشاشة", - exit_fullscreen: "الخروج من ملء الشاشة", - close: "إغلاق", - mathtype: "MathType", - title_modalwindow: "نافذة MathType مشروطة", - close_modal_warning: "هل تريد المغادرة بالتأكيد؟ ستُفقد التغييرات التي أجريتها.", - latex_name_label: "صيغة Latex", - browser_no_compatible: "المستعرض غير متوافق مع تقنية AJAX. الرجاء استخدام أحدث إصدار من Mozilla Firefox.", - error_convert_accessibility: "حدث خطأ أثناء التحويل من MathML إلى نص قابل للاستخدام.", - exception_cross_site: "البرمجة النصية للمواقع المشتركة مسموح بها لـ HTTP فقط.", - exception_high_surrogate: "المركّب المرتفع غير متبوع بمركّب منخفض في fixedCharCodeAt()‎", - exception_string_length: "سلسلة غير صالحة. يجب أن يكون الطول من مضاعفات العدد 4", - exception_key_nonobject: "Object.keys مستدعاة على غير كائن", - exception_null_or_undefined: " هذا فارغ أو غير محدد", - exception_not_function: " ليست دالة", - exception_invalid_date_format: "تنسيق تاريخ غير صالح: ", - exception_casting: "لا يمكن الصياغة ", - exception_casting_to: " إلى ", + latex: "LaTeX", + cancel: "إلغاء", + accept: "إدراج", + manual: "الدليل", + insert_math: "إدراج صيغة رياضية - MathType", + insert_chem: "إدراج صيغة كيميائية - ChemType", + minimize: "تصغير", + maximize: "تكبير", + fullscreen: "ملء الشاشة", + exit_fullscreen: "الخروج من ملء الشاشة", + close: "إغلاق", + mathtype: "MathType", + title_modalwindow: "نافذة MathType مشروطة", + close_modal_warning: "هل تريد المغادرة بالتأكيد؟ ستُفقد التغييرات التي أجريتها.", + latex_name_label: "صيغة Latex", + browser_no_compatible: "المستعرض غير متوافق مع تقنية AJAX. الرجاء استخدام أحدث إصدار من Mozilla Firefox.", + error_convert_accessibility: "حدث خطأ أثناء التحويل من MathML إلى نص قابل للاستخدام.", + exception_cross_site: "البرمجة النصية للمواقع المشتركة مسموح بها لـ HTTP فقط.", + exception_high_surrogate: "المركّب المرتفع غير متبوع بمركّب منخفض في fixedCharCodeAt()‎", + exception_string_length: "سلسلة غير صالحة. يجب أن يكون الطول من مضاعفات العدد 4", + exception_key_nonobject: "Object.keys مستدعاة على غير كائن", + exception_null_or_undefined: " هذا فارغ أو غير محدد", + exception_not_function: " ليست دالة", + exception_invalid_date_format: "تنسيق تاريخ غير صالح: ", + exception_casting: "لا يمكن الصياغة ", + exception_casting_to: " إلى " }; var ca = { - latex: "LaTeX", - cancel: "Cancel·lar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir fórmula matemàtica - MathType", - insert_chem: "Inserir fórmula química - ChemType", - minimize: "Minimitza", - maximize: "Maximitza", - fullscreen: "Pantalla completa", - exit_fullscreen: "Sortir de la pantalla complera", - close: "Tanca", - mathtype: "MathType", - title_modalwindow: " Finestra modal de MathType", - close_modal_warning: "N'estàs segur que vols sortir? Es perdran els canvis que has fet.", - latex_name_label: "Fórmula en Latex", - browser_no_compatible: - "El teu navegador no és compatible amb AJAX. Si us plau, usa la darrera versió de Mozilla Firefox.", - error_convert_accessibility: "Error en convertir de MathML a text accessible.", - exception_cross_site: "Els scripts de llocs creuats només estan permesos per HTTP.", - exception_high_surrogate: "Subrogat alt no seguit de subrogat baix a fixedCharCodeAt()", - exception_string_length: "Cadena invàlida. La longitud ha de ser un múltiple de 4", - exception_key_nonobject: "Object.keys anomenat a non-object", - exception_null_or_undefined: " això és null o no definit", - exception_not_function: " no és una funció", - exception_invalid_date_format: "Format de data invàlid : ", - exception_casting: "No es pot emetre ", - exception_casting_to: " a ", + latex: "LaTeX", + cancel: "Cancel·lar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir fórmula matemàtica - MathType", + insert_chem: "Inserir fórmula química - ChemType", + minimize: "Minimitza", + maximize: "Maximitza", + fullscreen: "Pantalla completa", + exit_fullscreen: "Sortir de la pantalla complera", + close: "Tanca", + mathtype: "MathType", + title_modalwindow: " Finestra modal de MathType", + close_modal_warning: "N'estàs segur que vols sortir? Es perdran els canvis que has fet.", + latex_name_label: "Fórmula en Latex", + browser_no_compatible: "El teu navegador no és compatible amb AJAX. Si us plau, usa la darrera versió de Mozilla Firefox.", + error_convert_accessibility: "Error en convertir de MathML a text accessible.", + exception_cross_site: "Els scripts de llocs creuats només estan permesos per HTTP.", + exception_high_surrogate: "Subrogat alt no seguit de subrogat baix a fixedCharCodeAt()", + exception_string_length: "Cadena invàlida. La longitud ha de ser un múltiple de 4", + exception_key_nonobject: "Object.keys anomenat a non-object", + exception_null_or_undefined: " això és null o no definit", + exception_not_function: " no és una funció", + exception_invalid_date_format: "Format de data invàlid : ", + exception_casting: "No es pot emetre ", + exception_casting_to: " a " }; var cs = { - latex: "LaTeX", - cancel: "Storno", - accept: "Vložit", - manual: "Příručka", - insert_math: "Vložit matematický vzorec - MathType", - insert_chem: "Vložení chemického vzorce – ChemType", - minimize: "Minimalizovat", - maximize: "Maximalizovat", - fullscreen: "Celá obrazovka", - exit_fullscreen: "Opustit režim celé obrazovky", - close: "Zavřít", - mathtype: "MathType", - title_modalwindow: "Modální okno MathType", - close_modal_warning: "Opravdu chcete okno zavřít? Provedené změny budou ztraceny.", - latex_name_label: "Vzorec v LaTeXu", - browser_no_compatible: - "Váš prohlížeč nepodporuje technologii AJAX. Použijte nejnovější verzi prohlížeče Mozilla Firefox.", - error_convert_accessibility: "Při převodu kódu MathML na čitelný text došlo k chybě.", - exception_cross_site: "Skriptování mezi více servery je povoleno jen v HTTP.", - exception_high_surrogate: "Ve funkci fixedCharCodeAt() nenásleduje po první části kódu znaku druhá část", - exception_string_length: "Neplatný řetězec. Délka musí být násobkem 4.", - exception_key_nonobject: "Funkce Object.keys byla použita pro prvek, který není objektem", - exception_null_or_undefined: " hodnota je null nebo není definovaná", - exception_not_function: " není funkce", - exception_invalid_date_format: "Neplatný formát data: ", - exception_casting: "Nelze přetypovat ", - exception_casting_to: " na ", + latex: "LaTeX", + cancel: "Storno", + accept: "Vložit", + manual: "Příručka", + insert_math: "Vložit matematický vzorec - MathType", + insert_chem: "Vložení chemického vzorce – ChemType", + minimize: "Minimalizovat", + maximize: "Maximalizovat", + fullscreen: "Celá obrazovka", + exit_fullscreen: "Opustit režim celé obrazovky", + close: "Zavřít", + mathtype: "MathType", + title_modalwindow: "Modální okno MathType", + close_modal_warning: "Opravdu chcete okno zavřít? Provedené změny budou ztraceny.", + latex_name_label: "Vzorec v LaTeXu", + browser_no_compatible: "Váš prohlížeč nepodporuje technologii AJAX. Použijte nejnovější verzi prohlížeče Mozilla Firefox.", + error_convert_accessibility: "Při převodu kódu MathML na čitelný text došlo k chybě.", + exception_cross_site: "Skriptování mezi více servery je povoleno jen v HTTP.", + exception_high_surrogate: "Ve funkci fixedCharCodeAt() nenásleduje po první části kódu znaku druhá část", + exception_string_length: "Neplatný řetězec. Délka musí být násobkem 4.", + exception_key_nonobject: "Funkce Object.keys byla použita pro prvek, který není objektem", + exception_null_or_undefined: " hodnota je null nebo není definovaná", + exception_not_function: " není funkce", + exception_invalid_date_format: "Neplatný formát data: ", + exception_casting: "Nelze přetypovat ", + exception_casting_to: " na " }; var da = { - latex: "LaTeX", - cancel: "Annuller", - accept: "Indsæt", - manual: "Brugervejledning", - insert_math: "Indsæt matematisk formel - MathType", - insert_chem: "Indsæt en kemisk formel - ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fuld skærm", - exit_fullscreen: "Afslut Fuld skærm", - close: "Luk", - mathtype: "MathType", - title_modalwindow: "MathType-modalvindue", - close_modal_warning: "Er du sikker på, du vil lukke? Dine ændringer går tabt.", - latex_name_label: "LaTex-formel", - browser_no_compatible: - "Din browser er ikke kompatibel med AJAX-teknologi. Brug den nyeste version af Mozilla Firefox.", - error_convert_accessibility: "Fejl under konvertering fra MathML til tilgængelig tekst.", - exception_cross_site: "Scripts på tværs af websteder er kun tilladt for HTTP.", - exception_high_surrogate: "Et højt erstatningstegn er ikke fulgt af et lavt erstatningstegn i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Længden skal være et multiplum af 4", - exception_key_nonobject: "Object.keys kaldet ved ikke-objekt", - exception_null_or_undefined: " dette er nul eller ikke defineret", - exception_not_function: " er ikke en funktion", - exception_invalid_date_format: "Ugyldigt datoformat: ", - exception_casting: "Kan ikke beregne ", - exception_casting_to: " til ", + latex: "LaTeX", + cancel: "Annuller", + accept: "Indsæt", + manual: "Brugervejledning", + insert_math: "Indsæt matematisk formel - MathType", + insert_chem: "Indsæt en kemisk formel - ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fuld skærm", + exit_fullscreen: "Afslut Fuld skærm", + close: "Luk", + mathtype: "MathType", + title_modalwindow: "MathType-modalvindue", + close_modal_warning: "Er du sikker på, du vil lukke? Dine ændringer går tabt.", + latex_name_label: "LaTex-formel", + browser_no_compatible: "Din browser er ikke kompatibel med AJAX-teknologi. Brug den nyeste version af Mozilla Firefox.", + error_convert_accessibility: "Fejl under konvertering fra MathML til tilgængelig tekst.", + exception_cross_site: "Scripts på tværs af websteder er kun tilladt for HTTP.", + exception_high_surrogate: "Et højt erstatningstegn er ikke fulgt af et lavt erstatningstegn i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Længden skal være et multiplum af 4", + exception_key_nonobject: "Object.keys kaldet ved ikke-objekt", + exception_null_or_undefined: " dette er nul eller ikke defineret", + exception_not_function: " er ikke en funktion", + exception_invalid_date_format: "Ugyldigt datoformat: ", + exception_casting: "Kan ikke beregne ", + exception_casting_to: " til " }; var de = { - latex: "LaTeX", - cancel: "Abbrechen", - accept: "Einfügen", - manual: "Handbuch", - insert_math: "Mathematische Formel einfügen - MathType", - insert_chem: "Eine chemische Formel einfügen – ChemType", - minimize: "Verkleinern", - maximize: "Vergrößern", - fullscreen: "Vollbild", - exit_fullscreen: "Vollbild schließen", - close: "Schließen", - mathtype: "MathType", - title_modalwindow: "Modales MathType-Fenster", - close_modal_warning: - "Bist du sicher, dass du das Programm verlassen willst? Alle vorgenommenen Änderungen gehen damit verloren.", - latex_name_label: "Latex-Formel", - browser_no_compatible: - "Dein Browser ist nicht mit der AJAX-Technologie kompatibel. Verwende bitte die neueste Version von Mozilla Firefox.", - error_convert_accessibility: "Fehler beim Konvertieren von MathML in barrierefreien Text.", - exception_cross_site: "Cross-Site-Scripting ist nur bei HTTP zulässig.", - exception_high_surrogate: "Hoher Ersatz bei bei festerZeichenkodierungbei() nicht von niedrigem Ersatz befolgt.", - exception_string_length: "Ungültige Zeichenfolge. Länge muss ein Vielfaches von 4 sein.", - exception_key_nonobject: "Object.keys wurde für ein Nicht-Objekt aufgerufen.", - exception_null_or_undefined: " Das ist Null oder nicht definiert.", - exception_not_function: " ist keine Funktion", - exception_invalid_date_format: "Ungültiges Datumsformat: ", - exception_casting: "Umwandlung nicht möglich ", - exception_casting_to: " zu ", + latex: "LaTeX", + cancel: "Abbrechen", + accept: "Einfügen", + manual: "Handbuch", + insert_math: "Mathematische Formel einfügen - MathType", + insert_chem: "Eine chemische Formel einfügen – ChemType", + minimize: "Verkleinern", + maximize: "Vergrößern", + fullscreen: "Vollbild", + exit_fullscreen: "Vollbild schließen", + close: "Schließen", + mathtype: "MathType", + title_modalwindow: "Modales MathType-Fenster", + close_modal_warning: "Bist du sicher, dass du das Programm verlassen willst? Alle vorgenommenen Änderungen gehen damit verloren.", + latex_name_label: "Latex-Formel", + browser_no_compatible: "Dein Browser ist nicht mit der AJAX-Technologie kompatibel. Verwende bitte die neueste Version von Mozilla Firefox.", + error_convert_accessibility: "Fehler beim Konvertieren von MathML in barrierefreien Text.", + exception_cross_site: "Cross-Site-Scripting ist nur bei HTTP zulässig.", + exception_high_surrogate: "Hoher Ersatz bei bei festerZeichenkodierungbei() nicht von niedrigem Ersatz befolgt.", + exception_string_length: "Ungültige Zeichenfolge. Länge muss ein Vielfaches von 4 sein.", + exception_key_nonobject: "Object.keys wurde für ein Nicht-Objekt aufgerufen.", + exception_null_or_undefined: " Das ist Null oder nicht definiert.", + exception_not_function: " ist keine Funktion", + exception_invalid_date_format: "Ungültiges Datumsformat: ", + exception_casting: "Umwandlung nicht möglich ", + exception_casting_to: " zu " }; var el = { - latex: "LaTeX", - cancel: "Άκυρο", - accept: "Εισαγωγή", - manual: "Χειροκίνητα", - insert_math: "Εισαγωγή μαθηματικού τύπου - MathType", - insert_chem: "Εισαγωγή χημικού τύπου - ChemType", - minimize: "Ελαχιστοποίηση", - maximize: "Μεγιστοποίηση", - fullscreen: "Πλήρης οθόνη", - exit_fullscreen: "Έξοδος από πλήρη οθόνη", - close: "Κλείσιμο", - mathtype: "MathType", - title_modalwindow: "Τροπικό παράθυρο MathType", - close_modal_warning: "Επιθυμείτε σίγουρα αποχώρηση; Θα χαθούν οι αλλαγές που έχετε κάνει.", - latex_name_label: "Τύπος LaTeX", - browser_no_compatible: - "Το πρόγραμμα περιήγησής σας δεν είναι συμβατό με την τεχνολογία AJAX. Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Mozilla Firefox.", - error_convert_accessibility: "Σφάλμα κατά τη μετατροπή από MathML σε προσβάσιμο κείμενο.", - exception_cross_site: "Το XSS (Cross site scripting) επιτρέπεται μόνο για HTTP.", - exception_high_surrogate: "Το υψηλό υποκατάστατο δεν ακολουθείται από χαμηλό υποκατάστατο στο fixedCharCodeAt()", - exception_string_length: "Μη έγκυρη συμβολοσειρά. Το μήκος πρέπει να είναι πολλαπλάσιο του 4", - exception_key_nonobject: "Έγινε κλήση του Object.keys σε μη αντικείμενο", - exception_null_or_undefined: " αυτό είναι μηδενικό ή δεν έχει οριστεί", - exception_not_function: " δεν είναι συνάρτηση", - exception_invalid_date_format: "Μη έγκυρη μορφή ημερομηνίας: ", - exception_casting: "Δεν είναι δυνατή η μετατροπή ", - exception_casting_to: " σε ", + latex: "LaTeX", + cancel: "Άκυρο", + accept: "Εισαγωγή", + manual: "Χειροκίνητα", + insert_math: "Εισαγωγή μαθηματικού τύπου - MathType", + insert_chem: "Εισαγωγή χημικού τύπου - ChemType", + minimize: "Ελαχιστοποίηση", + maximize: "Μεγιστοποίηση", + fullscreen: "Πλήρης οθόνη", + exit_fullscreen: "Έξοδος από πλήρη οθόνη", + close: "Κλείσιμο", + mathtype: "MathType", + title_modalwindow: "Τροπικό παράθυρο MathType", + close_modal_warning: "Επιθυμείτε σίγουρα αποχώρηση; Θα χαθούν οι αλλαγές που έχετε κάνει.", + latex_name_label: "Τύπος LaTeX", + browser_no_compatible: "Το πρόγραμμα περιήγησής σας δεν είναι συμβατό με την τεχνολογία AJAX. Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Mozilla Firefox.", + error_convert_accessibility: "Σφάλμα κατά τη μετατροπή από MathML σε προσβάσιμο κείμενο.", + exception_cross_site: "Το XSS (Cross site scripting) επιτρέπεται μόνο για HTTP.", + exception_high_surrogate: "Το υψηλό υποκατάστατο δεν ακολουθείται από χαμηλό υποκατάστατο στο fixedCharCodeAt()", + exception_string_length: "Μη έγκυρη συμβολοσειρά. Το μήκος πρέπει να είναι πολλαπλάσιο του 4", + exception_key_nonobject: "Έγινε κλήση του Object.keys σε μη αντικείμενο", + exception_null_or_undefined: " αυτό είναι μηδενικό ή δεν έχει οριστεί", + exception_not_function: " δεν είναι συνάρτηση", + exception_invalid_date_format: "Μη έγκυρη μορφή ημερομηνίας: ", + exception_casting: "Δεν είναι δυνατή η μετατροπή ", + exception_casting_to: " σε " }; var en = { - latex: "LaTeX", - cancel: "Cancel", - accept: "Insert", - manual: "Manual", - insert_math: "Insert a math equation - MathType", - insert_chem: "Insert a chemistry formula - ChemType", - minimize: "Minimize", - maximize: "Maximize", - fullscreen: "Full-screen", - exit_fullscreen: "Exit full-screen", - close: "Close", - mathtype: "MathType", - title_modalwindow: "MathType modal window", - close_modal_warning: "Are you sure you want to leave? The changes you made will be lost.", - latex_name_label: "Latex Formula", - browser_no_compatible: - "Your browser is not compatible with AJAX technology. Please, use the latest version of Mozilla Firefox.", - error_convert_accessibility: "Error converting from MathML to accessible text.", - exception_cross_site: "Cross site scripting is only allowed for HTTP.", - exception_high_surrogate: "High surrogate not followed by low surrogate in fixedCharCodeAt()", - exception_string_length: "Invalid string. Length must be a multiple of 4", - exception_key_nonobject: "Object.keys called on non-object", - exception_null_or_undefined: " this is null or not defined", - exception_not_function: " is not a function", - exception_invalid_date_format: "Invalid date format : ", - exception_casting: "Cannot cast ", - exception_casting_to: " to ", + latex: "LaTeX", + cancel: "Cancel", + accept: "Insert", + manual: "Manual", + insert_math: "Insert a math equation - MathType", + insert_chem: "Insert a chemistry formula - ChemType", + minimize: "Minimize", + maximize: "Maximize", + fullscreen: "Full-screen", + exit_fullscreen: "Exit full-screen", + close: "Close", + mathtype: "MathType", + title_modalwindow: "MathType modal window", + close_modal_warning: "Are you sure you want to leave? The changes you made will be lost.", + latex_name_label: "Latex Formula", + browser_no_compatible: "Your browser is not compatible with AJAX technology. Please, use the latest version of Mozilla Firefox.", + error_convert_accessibility: "Error converting from MathML to accessible text.", + exception_cross_site: "Cross site scripting is only allowed for HTTP.", + exception_high_surrogate: "High surrogate not followed by low surrogate in fixedCharCodeAt()", + exception_string_length: "Invalid string. Length must be a multiple of 4", + exception_key_nonobject: "Object.keys called on non-object", + exception_null_or_undefined: " this is null or not defined", + exception_not_function: " is not a function", + exception_invalid_date_format: "Invalid date format : ", + exception_casting: "Cannot cast ", + exception_casting_to: " to " }; var es = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Insertar", - manual: "Manual", - insert_math: "Insertar fórmula matemática - MathType", - insert_chem: "Insertar fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Pantalla completa", - exit_fullscreen: "Salir de pantalla completa", - close: "Cerrar", - mathtype: "MathType", - title_modalwindow: "Ventana modal de MathType", - close_modal_warning: "Seguro que quieres cerrar? Los cambios que has hecho se perderán", - latex_name_label: "Formula en Latex", - browser_no_compatible: - "Tu navegador no es complatible con AJAX. Por favor, usa la última version de Mozilla Firefox.", - error_convert_accessibility: "Error conviertiendo una fórmula MathML a texto accesible.", - exception_cross_site: "Cross site scripting solo está permitido para HTTP.", - exception_high_surrogate: "Subrogado alto no seguido por subrogado bajo en fixedCharCodeAt()", - exception_string_length: "Cadena no válida. La longitud debe ser múltiplo de 4", - exception_key_nonobject: "Object.keys called on non-object", - exception_null_or_undefined: " esto es null o no definido", - exception_not_function: " no es una función", - exception_invalid_date_format: "Formato de fecha inválido: ", - exception_casting: "No se puede emitir", - exception_casting_to: " a ", + latex: "LaTeX", + cancel: "Cancelar", + accept: "Insertar", + manual: "Manual", + insert_math: "Insertar fórmula matemática - MathType", + insert_chem: "Insertar fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Pantalla completa", + exit_fullscreen: "Salir de pantalla completa", + close: "Cerrar", + mathtype: "MathType", + title_modalwindow: "Ventana modal de MathType", + close_modal_warning: "Seguro que quieres cerrar? Los cambios que has hecho se perderán", + latex_name_label: "Formula en Latex", + browser_no_compatible: "Tu navegador no es complatible con AJAX. Por favor, usa la última version de Mozilla Firefox.", + error_convert_accessibility: "Error conviertiendo una fórmula MathML a texto accesible.", + exception_cross_site: "Cross site scripting solo está permitido para HTTP.", + exception_high_surrogate: "Subrogado alto no seguido por subrogado bajo en fixedCharCodeAt()", + exception_string_length: "Cadena no válida. La longitud debe ser múltiplo de 4", + exception_key_nonobject: "Object.keys called on non-object", + exception_null_or_undefined: " esto es null o no definido", + exception_not_function: " no es una función", + exception_invalid_date_format: "Formato de fecha inválido: ", + exception_casting: "No se puede emitir", + exception_casting_to: " a " }; var et = { - latex: "LaTeX", - cancel: "Loobu", - accept: "Lisa", - manual: "Käsiraamat", - insert_math: "Lisa matemaatiline valem – WIRIS", - insert_chem: "Lisa keemiline valem – ChemType", - minimize: "Minimeeri", - maximize: "Maksimeeri", - fullscreen: "Täiskuva", - exit_fullscreen: "Välju täiskuvalt", - close: "Sule", - mathtype: "MathType", - title_modalwindow: "MathType'i modaalaken", - close_modal_warning: "Kas soovite kindlasti lahkuda? Tehtud muudatused lähevad kaduma.", - latex_name_label: "Latexi valem", - browser_no_compatible: - "Teie brauser ei ühildu AJAXi tehnoloogiaga. Palun kasutage Mozilla Firefoxi uusimat versiooni.", - error_convert_accessibility: "Tõrge teisendamisel MathML-ist muudetavaks tekstiks.", - exception_cross_site: "Ristskriptimine on lubatud ainult HTTP kasutamisel.", - exception_high_surrogate: "Funktsioonis fixedCharCodeAt() ei järgne kõrgemale asendusliikmele madalam asendusliige.", - exception_string_length: "Vigane string. Pikkus peab olema 4 kordne.", - exception_key_nonobject: "Protseduur Object.keys kutsuti mitteobjekti korral.", - exception_null_or_undefined: " see on null või määramata", - exception_not_function: " ei ole funktsioon", - exception_invalid_date_format: "Sobimatu kuupäeva kuju: ", - exception_casting: "Esitamine ei õnnestu ", - exception_casting_to: " – ", + latex: "LaTeX", + cancel: "Loobu", + accept: "Lisa", + manual: "Käsiraamat", + insert_math: "Lisa matemaatiline valem – WIRIS", + insert_chem: "Lisa keemiline valem – ChemType", + minimize: "Minimeeri", + maximize: "Maksimeeri", + fullscreen: "Täiskuva", + exit_fullscreen: "Välju täiskuvalt", + close: "Sule", + mathtype: "MathType", + title_modalwindow: "MathType'i modaalaken", + close_modal_warning: "Kas soovite kindlasti lahkuda? Tehtud muudatused lähevad kaduma.", + latex_name_label: "Latexi valem", + browser_no_compatible: "Teie brauser ei ühildu AJAXi tehnoloogiaga. Palun kasutage Mozilla Firefoxi uusimat versiooni.", + error_convert_accessibility: "Tõrge teisendamisel MathML-ist muudetavaks tekstiks.", + exception_cross_site: "Ristskriptimine on lubatud ainult HTTP kasutamisel.", + exception_high_surrogate: "Funktsioonis fixedCharCodeAt() ei järgne kõrgemale asendusliikmele madalam asendusliige.", + exception_string_length: "Vigane string. Pikkus peab olema 4 kordne.", + exception_key_nonobject: "Protseduur Object.keys kutsuti mitteobjekti korral.", + exception_null_or_undefined: " see on null või määramata", + exception_not_function: " ei ole funktsioon", + exception_invalid_date_format: "Sobimatu kuupäeva kuju: ", + exception_casting: "Esitamine ei õnnestu ", + exception_casting_to: " – " }; var eu = { - latex: "LaTeX", - cancel: "Ezeztatu", - accept: "Txertatu", - manual: "Gida", - insert_math: "Txertatu matematikako formula - MathType", - insert_chem: "Txertatu formula kimiko bat - ChemType", - minimize: "Ikonotu", - maximize: "Maximizatu", - fullscreen: "Pantaila osoa", - exit_fullscreen: "Irten pantaila osotik", - close: "Itxi", - mathtype: "MathType", - title_modalwindow: "MathType leiho modala", - close_modal_warning: "Ziur irten nahi duzula? Egiten dituzun aldaketak galdu egingo dira.", - latex_name_label: "LaTex Formula", - browser_no_compatible: - "Zure arakatzailea ez da bateragarria AJAX teknologiarekin. Erabili Mozilla Firefoxen azken bertsioa.", - error_convert_accessibility: "Errorea MathMLtik testu irisgarrira bihurtzean.", - exception_cross_site: "Gune arteko scriptak HTTPrako soilik onartzen dira.", - exception_high_surrogate: "Ordezko baxuak ez dio ordezko altuari jarraitzen, hemen: fixedCharCodeAt()", - exception_string_length: "Kate baliogabea. Luzerak 4ren multiploa izan behar du", - exception_key_nonobject: "Object.keys deitu zaio objektua ez den zerbaiti", - exception_null_or_undefined: " nulua edo definitu gabea da", - exception_not_function: " ez da funtzio bat", - exception_invalid_date_format: "Data-formatu baliogabea : ", - exception_casting: "Ezin da igorri ", - exception_casting_to: " honi ", + latex: "LaTeX", + cancel: "Ezeztatu", + accept: "Txertatu", + manual: "Gida", + insert_math: "Txertatu matematikako formula - MathType", + insert_chem: "Txertatu formula kimiko bat - ChemType", + minimize: "Ikonotu", + maximize: "Maximizatu", + fullscreen: "Pantaila osoa", + exit_fullscreen: "Irten pantaila osotik", + close: "Itxi", + mathtype: "MathType", + title_modalwindow: "MathType leiho modala", + close_modal_warning: "Ziur irten nahi duzula? Egiten dituzun aldaketak galdu egingo dira.", + latex_name_label: "LaTex Formula", + browser_no_compatible: "Zure arakatzailea ez da bateragarria AJAX teknologiarekin. Erabili Mozilla Firefoxen azken bertsioa.", + error_convert_accessibility: "Errorea MathMLtik testu irisgarrira bihurtzean.", + exception_cross_site: "Gune arteko scriptak HTTPrako soilik onartzen dira.", + exception_high_surrogate: "Ordezko baxuak ez dio ordezko altuari jarraitzen, hemen: fixedCharCodeAt()", + exception_string_length: "Kate baliogabea. Luzerak 4ren multiploa izan behar du", + exception_key_nonobject: "Object.keys deitu zaio objektua ez den zerbaiti", + exception_null_or_undefined: " nulua edo definitu gabea da", + exception_not_function: " ez da funtzio bat", + exception_invalid_date_format: "Data-formatu baliogabea : ", + exception_casting: "Ezin da igorri ", + exception_casting_to: " honi " }; var fi = { - latex: "LaTeX", - cancel: "Peruuta", - accept: "Lisää", - manual: "Manual", - insert_math: "Liitä matemaattinen kaava - MathType", - insert_chem: "Lisää kemian kaava - ChemType", - minimize: "Pienennä", - maximize: "Suurenna", - fullscreen: "Koko ruutu", - exit_fullscreen: "Poistu koko ruudun tilasta", - close: "Sulje", - mathtype: "MathType", - title_modalwindow: "MathTypen modaalinen ikkuna", - close_modal_warning: "Oletko varma, että haluat poistua? Menetät tekemäsi muutokset.", - latex_name_label: "Latex-kaava", - browser_no_compatible: "Selaimesi ei tue AJAX-tekniikkaa. Ole hyvä ja käytä uusinta Firefox-versiota.", - error_convert_accessibility: "Virhe muunnettaessa MathML:stä tekstiksi.", - exception_cross_site: "Cross site scripting sallitaan vain HTTP:llä.", - exception_high_surrogate: "fixedCharCodeAt(): yläsijaismerkkiä ei seurannut alasijaismerkki", - exception_string_length: "Epäkelpo merkkijono. Pituuden on oltava 4:n kerrannainen", - exception_key_nonobject: "Object.keys kutsui muuta kuin oliota", - exception_null_or_undefined: " tämä on null tai ei määritelty", - exception_not_function: " ei ole funktio", - exception_invalid_date_format: "Virheellinen päivämäärämuoto : ", - exception_casting: "Ei voida muuntaa tyyppiä ", - exception_casting_to: " tyyppiin ", + latex: "LaTeX", + cancel: "Peruuta", + accept: "Lisää", + manual: "Manual", + insert_math: "Liitä matemaattinen kaava - MathType", + insert_chem: "Lisää kemian kaava - ChemType", + minimize: "Pienennä", + maximize: "Suurenna", + fullscreen: "Koko ruutu", + exit_fullscreen: "Poistu koko ruudun tilasta", + close: "Sulje", + mathtype: "MathType", + title_modalwindow: "MathTypen modaalinen ikkuna", + close_modal_warning: "Oletko varma, että haluat poistua? Menetät tekemäsi muutokset.", + latex_name_label: "Latex-kaava", + browser_no_compatible: "Selaimesi ei tue AJAX-tekniikkaa. Ole hyvä ja käytä uusinta Firefox-versiota.", + error_convert_accessibility: "Virhe muunnettaessa MathML:stä tekstiksi.", + exception_cross_site: "Cross site scripting sallitaan vain HTTP:llä.", + exception_high_surrogate: "fixedCharCodeAt(): yläsijaismerkkiä ei seurannut alasijaismerkki", + exception_string_length: "Epäkelpo merkkijono. Pituuden on oltava 4:n kerrannainen", + exception_key_nonobject: "Object.keys kutsui muuta kuin oliota", + exception_null_or_undefined: " tämä on null tai ei määritelty", + exception_not_function: " ei ole funktio", + exception_invalid_date_format: "Virheellinen päivämäärämuoto : ", + exception_casting: "Ei voida muuntaa tyyppiä ", + exception_casting_to: " tyyppiin " }; var fr = { - latex: "LaTeX", - cancel: "Annuler", - accept: "Insérer", - manual: "Manuel", - insert_math: "Insérer une formule mathématique - MathType", - insert_chem: "Insérer une formule chimique - ChemType", - minimize: "Minimiser", - maximize: "Maximiser", - fullscreen: "Plein écran", - exit_fullscreen: "Quitter le plein écran", - close: "Fermer", - mathtype: "MathType", - title_modalwindow: "Fenêtre modale MathType", - close_modal_warning: "Confirmez-vous vouloir fermer ? Les changements effectués seront perdus.", - latex_name_label: "Formule LaTeX", - browser_no_compatible: - "Votre navigateur n’est pas compatible avec la technologie AJAX. Veuillez utiliser la dernière version de Mozilla Firefox.", - error_convert_accessibility: "Une erreur de conversion du format MathML en texte accessible est survenue.", - exception_cross_site: "Le cross-site scripting n’est autorisé que pour HTTP.", - exception_high_surrogate: "Substitut élevé non suivi d’un substitut inférieur dans fixedCharCodeAt()", - exception_string_length: "Chaîne non valide. Longueur limitée aux multiples de 4", - exception_key_nonobject: "Object.keys appelé sur un non-objet", - exception_null_or_undefined: " nul ou non défini", - exception_not_function: " n’est pas une fonction", - exception_invalid_date_format: "Format de date non valide : ", - exception_casting: "Impossible de convertir ", - exception_casting_to: " sur ", + latex: "LaTeX", + cancel: "Annuler", + accept: "Insérer", + manual: "Manuel", + insert_math: "Insérer une formule mathématique - MathType", + insert_chem: "Insérer une formule chimique - ChemType", + minimize: "Minimiser", + maximize: "Maximiser", + fullscreen: "Plein écran", + exit_fullscreen: "Quitter le plein écran", + close: "Fermer", + mathtype: "MathType", + title_modalwindow: "Fenêtre modale MathType", + close_modal_warning: "Confirmez-vous vouloir fermer ? Les changements effectués seront perdus.", + latex_name_label: "Formule LaTeX", + browser_no_compatible: "Votre navigateur n’est pas compatible avec la technologie AJAX. Veuillez utiliser la dernière version de Mozilla Firefox.", + error_convert_accessibility: "Une erreur de conversion du format MathML en texte accessible est survenue.", + exception_cross_site: "Le cross-site scripting n’est autorisé que pour HTTP.", + exception_high_surrogate: "Substitut élevé non suivi d’un substitut inférieur dans fixedCharCodeAt()", + exception_string_length: "Chaîne non valide. Longueur limitée aux multiples de 4", + exception_key_nonobject: "Object.keys appelé sur un non-objet", + exception_null_or_undefined: " nul ou non défini", + exception_not_function: " n’est pas une fonction", + exception_invalid_date_format: "Format de date non valide : ", + exception_casting: "Impossible de convertir ", + exception_casting_to: " sur " }; var gl = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir unha fórmula matemática - MathType", - insert_chem: "Inserir unha fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Pantalla completa", - exit_fullscreen: "Saír da pantalla completa", - close: "Pechar", - mathtype: "MathType", - title_modalwindow: "Ventá modal de MathType", - close_modal_warning: "Seguro que quere saír? Perderanse os cambios realizados.", - latex_name_label: "Fórmula Latex", - browser_no_compatible: - "O seu explorador non é compatible coa tecnoloxía AJAX. Use a versión máis recente de Mozilla Firefox.", - error_convert_accessibility: "Erro ao converter de MathML a texto accesible.", - exception_cross_site: "Os scripts de sitios só se permiten para HTTP.", - exception_high_surrogate: "Suplente superior non seguido por suplente inferior en fixedCharCodeAt()", - exception_string_length: "Cadea non válida. A lonxitude debe ser un múltiplo de 4", - exception_key_nonobject: "Claves de obxecto chamadas en non obxecto", - exception_null_or_undefined: " nulo ou non definido", - exception_not_function: " non é unha función", - exception_invalid_date_format: "Formato de data non válido: ", - exception_casting: "Non se pode converter ", - exception_casting_to: " a ", + latex: "LaTeX", + cancel: "Cancelar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir unha fórmula matemática - MathType", + insert_chem: "Inserir unha fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Pantalla completa", + exit_fullscreen: "Saír da pantalla completa", + close: "Pechar", + mathtype: "MathType", + title_modalwindow: "Ventá modal de MathType", + close_modal_warning: "Seguro que quere saír? Perderanse os cambios realizados.", + latex_name_label: "Fórmula Latex", + browser_no_compatible: "O seu explorador non é compatible coa tecnoloxía AJAX. Use a versión máis recente de Mozilla Firefox.", + error_convert_accessibility: "Erro ao converter de MathML a texto accesible.", + exception_cross_site: "Os scripts de sitios só se permiten para HTTP.", + exception_high_surrogate: "Suplente superior non seguido por suplente inferior en fixedCharCodeAt()", + exception_string_length: "Cadea non válida. A lonxitude debe ser un múltiplo de 4", + exception_key_nonobject: "Claves de obxecto chamadas en non obxecto", + exception_null_or_undefined: " nulo ou non definido", + exception_not_function: " non é unha función", + exception_invalid_date_format: "Formato de data non válido: ", + exception_casting: "Non se pode converter ", + exception_casting_to: " a " }; var he = { - latex: "LaTeX", - cancel: "ביטול", - accept: "עדכון", - manual: "ידני", - insert_math: "הוספת נוסחה מתמטית - MathType", - insert_chem: "הוספת כתיבה כימית - ChemType", - minimize: "מזערי", - maximize: "מרבי", - fullscreen: "מסך מלא", - exit_fullscreen: "יציאה ממצב מסך מלא", - close: "סגירה", - mathtype: "MathType", - title_modalwindow: "חלון מודאלי של MathType", - close_modal_warning: "האם לצאת? שינויים אשר בוצעו ימחקו.", - latex_name_label: "נוסחת Latex", - browser_no_compatible: "הדפדפן שלך אינו תואם לטכנולוגיית AJAX. יש להשתמש בגרסה העדכנית ביותר של Mozilla Firefox.", - error_convert_accessibility: "שגיאה בהמרה מ-MathML לטקסט נגיש.", - exception_cross_site: "סקריפטינג חוצה-אתרים מורשה עבור HTTP בלבד.", - exception_high_surrogate: "ערך ממלא מקום גבוה אינו מופיע אחרי ערך ממלא מקום נמוך ב-fixedCharCodeAt()‎", - exception_string_length: "מחרוזת לא חוקית. האורך חייב להיות כפולה של 4", - exception_key_nonobject: "בוצעה קריאה אל Object.keys ברכיב שאינו אובייקט", - exception_null_or_undefined: " הוא Null או לא מוגדר", - exception_not_function: "איננה פונקציה", - exception_invalid_date_format: "תסדיר תאריך אינו תקין : ", - exception_casting: "לא ניתן להמיר ", - exception_casting_to: " ל ", + latex: "LaTeX", + cancel: "ביטול", + accept: "עדכון", + manual: "ידני", + insert_math: "הוספת נוסחה מתמטית - MathType", + insert_chem: "הוספת כתיבה כימית - ChemType", + minimize: "מזערי", + maximize: "מרבי", + fullscreen: "מסך מלא", + exit_fullscreen: "יציאה ממצב מסך מלא", + close: "סגירה", + mathtype: "MathType", + title_modalwindow: "חלון מודאלי של MathType", + close_modal_warning: "האם לצאת? שינויים אשר בוצעו ימחקו.", + latex_name_label: "נוסחת Latex", + browser_no_compatible: "הדפדפן שלך אינו תואם לטכנולוגיית AJAX. יש להשתמש בגרסה העדכנית ביותר של Mozilla Firefox.", + error_convert_accessibility: "שגיאה בהמרה מ-MathML לטקסט נגיש.", + exception_cross_site: "סקריפטינג חוצה-אתרים מורשה עבור HTTP בלבד.", + exception_high_surrogate: "ערך ממלא מקום גבוה אינו מופיע אחרי ערך ממלא מקום נמוך ב-fixedCharCodeAt()‎", + exception_string_length: "מחרוזת לא חוקית. האורך חייב להיות כפולה של 4", + exception_key_nonobject: "בוצעה קריאה אל Object.keys ברכיב שאינו אובייקט", + exception_null_or_undefined: " הוא Null או לא מוגדר", + exception_not_function: "איננה פונקציה", + exception_invalid_date_format: "תסדיר תאריך אינו תקין : ", + exception_casting: "לא ניתן להמיר ", + exception_casting_to: " ל " }; var hr = { - latex: "LaTeX", - cancel: "Poništi", - accept: "Umetni", - manual: "Priručnik", - insert_math: "Umetnite matematičku formulu - MathType", - insert_chem: "Umetnite kemijsku formulu - ChemType", - minimize: "Minimiziraj", - maximize: "Maksimiziraj", - fullscreen: "Cijeli zaslon", - exit_fullscreen: "Izlaz iz prikaza na cijelom zaslonu", - close: "Zatvori", - mathtype: "MathType", - title_modalwindow: "MathType modalni prozor", - close_modal_warning: "Sigurno želite zatvoriti? Izgubit će se unesene promjene.", - latex_name_label: "Latex formula", - browser_no_compatible: - "Vaš preglednik nije kompatibilan s AJAX tehnologijom. Upotrijebite najnoviju verziju Mozilla Firefoxa.", - error_convert_accessibility: "Pogreška konverzije iz MathML-a u dostupni tekst.", - exception_cross_site: "Skriptiranje na različitim web-mjestima dopušteno je samo za HTTP.", - exception_high_surrogate: "Iza visoke zamjene ne slijedi niska zamjena u fixedCharCodeAt()", - exception_string_length: "Nevažeći niz. Duljina mora biti višekratnik broja 4", - exception_key_nonobject: "Object.keys pozvano na ne-objekt", - exception_null_or_undefined: " ovo je nula ili nije definirano", - exception_not_function: " nije funkcija", - exception_invalid_date_format: "Nevažeći format datuma : ", - exception_casting: "Ne može se poslati ", - exception_casting_to: " na ", + latex: "LaTeX", + cancel: "Poništi", + accept: "Umetni", + manual: "Priručnik", + insert_math: "Umetnite matematičku formulu - MathType", + insert_chem: "Umetnite kemijsku formulu - ChemType", + minimize: "Minimiziraj", + maximize: "Maksimiziraj", + fullscreen: "Cijeli zaslon", + exit_fullscreen: "Izlaz iz prikaza na cijelom zaslonu", + close: "Zatvori", + mathtype: "MathType", + title_modalwindow: "MathType modalni prozor", + close_modal_warning: "Sigurno želite zatvoriti? Izgubit će se unesene promjene.", + latex_name_label: "Latex formula", + browser_no_compatible: "Vaš preglednik nije kompatibilan s AJAX tehnologijom. Upotrijebite najnoviju verziju Mozilla Firefoxa.", + error_convert_accessibility: "Pogreška konverzije iz MathML-a u dostupni tekst.", + exception_cross_site: "Skriptiranje na različitim web-mjestima dopušteno je samo za HTTP.", + exception_high_surrogate: "Iza visoke zamjene ne slijedi niska zamjena u fixedCharCodeAt()", + exception_string_length: "Nevažeći niz. Duljina mora biti višekratnik broja 4", + exception_key_nonobject: "Object.keys pozvano na ne-objekt", + exception_null_or_undefined: " ovo je nula ili nije definirano", + exception_not_function: " nije funkcija", + exception_invalid_date_format: "Nevažeći format datuma : ", + exception_casting: "Ne može se poslati ", + exception_casting_to: " na " }; var hu = { - latex: "LaTeX", - cancel: "Mégsem", - accept: "Beszúrás", - manual: "Kézikönyv", - insert_math: "Matematikai képlet beszúrása - MathType", - insert_chem: "Kémiai képet beillesztése - ChemType", - minimize: "Kis méret", - maximize: "Nagy méret", - fullscreen: "Teljes képernyő", - exit_fullscreen: "Teljes képernyő elhagyása", - close: "Bezárás", - mathtype: "MathType", - title_modalwindow: "MathType modális ablak", - close_modal_warning: "Biztosan kilép? A módosítások el fognak veszni.", - latex_name_label: "Latex képlet", - browser_no_compatible: - "A böngészője nem kompatibilis az AJAX technológiával. Használja a Mozilla Firefox legújabb verzióját.", - error_convert_accessibility: "Hiba lépett fel a MathML szöveggé történő konvertálása során.", - exception_cross_site: "Az oldalak közti scriptelés csak HTTP esetén engedélyezett.", - exception_high_surrogate: - "A magas helyettesítő karaktert nem alacsony helyettesítő karakter követi a fixedCharCodeAt() esetében", - exception_string_length: "Érvénytelen karakterlánc. A hossznak a 4 többszörösének kell lennie", - exception_key_nonobject: "Az Object.keys egy nem objektumra került meghívásra", - exception_null_or_undefined: " null vagy nem definiált", - exception_not_function: " nem függvény", - exception_invalid_date_format: "Érvénytelen dátumformátum: ", - exception_casting: "Nem alkalmazható ", - exception_casting_to: " erre ", + latex: "LaTeX", + cancel: "Mégsem", + accept: "Beszúrás", + manual: "Kézikönyv", + insert_math: "Matematikai képlet beszúrása - MathType", + insert_chem: "Kémiai képet beillesztése - ChemType", + minimize: "Kis méret", + maximize: "Nagy méret", + fullscreen: "Teljes képernyő", + exit_fullscreen: "Teljes képernyő elhagyása", + close: "Bezárás", + mathtype: "MathType", + title_modalwindow: "MathType modális ablak", + close_modal_warning: "Biztosan kilép? A módosítások el fognak veszni.", + latex_name_label: "Latex képlet", + browser_no_compatible: "A böngészője nem kompatibilis az AJAX technológiával. Használja a Mozilla Firefox legújabb verzióját.", + error_convert_accessibility: "Hiba lépett fel a MathML szöveggé történő konvertálása során.", + exception_cross_site: "Az oldalak közti scriptelés csak HTTP esetén engedélyezett.", + exception_high_surrogate: "A magas helyettesítő karaktert nem alacsony helyettesítő karakter követi a fixedCharCodeAt() esetében", + exception_string_length: "Érvénytelen karakterlánc. A hossznak a 4 többszörösének kell lennie", + exception_key_nonobject: "Az Object.keys egy nem objektumra került meghívásra", + exception_null_or_undefined: " null vagy nem definiált", + exception_not_function: " nem függvény", + exception_invalid_date_format: "Érvénytelen dátumformátum: ", + exception_casting: "Nem alkalmazható ", + exception_casting_to: " erre " }; var id = { - latex: "LaTeX", - cancel: "Membatalkan", - accept: "Masukkan", - manual: "Manual", - insert_math: "Masukkan rumus matematika - MathType", - insert_chem: "Masukkan rumus kimia - ChemType", - minimize: "Minikan", - maximize: "Perbesar", - fullscreen: "Layar penuh", - exit_fullscreen: "Keluar layar penuh", - close: "Tutup", - mathtype: "MathType", - title_modalwindow: "Jendela modal MathType", - close_modal_warning: "Anda yakin ingin keluar? Anda akan kehilangan perubahan yang Anda buat.", - latex_name_label: "Rumus Latex", - browser_no_compatible: - "Penjelajah Anda tidak kompatibel dengan teknologi AJAX. Harap gunakan Mozilla Firefox versi terbaru.", - error_convert_accessibility: "Kesalahan konversi dari MathML menjadi teks yang dapat diakses.", - exception_cross_site: "Skrip lintas situs hanya diizinkan untuk HTTP.", - exception_high_surrogate: "Pengganti tinggi tidak diikuti oleh pengganti rendah di fixedCharCodeAt()", - exception_string_length: "String tidak valid. Panjang harus kelipatan 4", - exception_key_nonobject: "Object.keys meminta nonobjek", - exception_null_or_undefined: " ini tidak berlaku atau tidak didefinisikan", - exception_not_function: " bukan sebuah fungsi", - exception_invalid_date_format: "Format tanggal tidak valid : ", - exception_casting: "Tidak dapat mentransmisikan ", - exception_casting_to: " untuk ", + latex: "LaTeX", + cancel: "Membatalkan", + accept: "Masukkan", + manual: "Manual", + insert_math: "Masukkan rumus matematika - MathType", + insert_chem: "Masukkan rumus kimia - ChemType", + minimize: "Minikan", + maximize: "Perbesar", + fullscreen: "Layar penuh", + exit_fullscreen: "Keluar layar penuh", + close: "Tutup", + mathtype: "MathType", + title_modalwindow: "Jendela modal MathType", + close_modal_warning: "Anda yakin ingin keluar? Anda akan kehilangan perubahan yang Anda buat.", + latex_name_label: "Rumus Latex", + browser_no_compatible: "Penjelajah Anda tidak kompatibel dengan teknologi AJAX. Harap gunakan Mozilla Firefox versi terbaru.", + error_convert_accessibility: "Kesalahan konversi dari MathML menjadi teks yang dapat diakses.", + exception_cross_site: "Skrip lintas situs hanya diizinkan untuk HTTP.", + exception_high_surrogate: "Pengganti tinggi tidak diikuti oleh pengganti rendah di fixedCharCodeAt()", + exception_string_length: "String tidak valid. Panjang harus kelipatan 4", + exception_key_nonobject: "Object.keys meminta nonobjek", + exception_null_or_undefined: " ini tidak berlaku atau tidak didefinisikan", + exception_not_function: " bukan sebuah fungsi", + exception_invalid_date_format: "Format tanggal tidak valid : ", + exception_casting: "Tidak dapat mentransmisikan ", + exception_casting_to: " untuk " }; var it = { - latex: "LaTeX", - cancel: "Annulla", - accept: "Inserisci", - manual: "Manuale", - insert_math: "Inserisci una formula matematica - MathType", - insert_chem: "Inserisci una formula chimica - ChemType", - minimize: "Riduci a icona", - maximize: "Ingrandisci", - fullscreen: "Schermo intero", - exit_fullscreen: "Esci da schermo intero", - close: "Chiudi", - mathtype: "MathType", - title_modalwindow: "Finestra modale di MathType", - close_modal_warning: "Confermi di voler uscire? Le modifiche effettuate andranno perse.", - latex_name_label: "Formula LaTeX", - browser_no_compatible: - "Il tuo browser non è compatibile con la tecnologia AJAX. Utilizza la versione più recente di Mozilla Firefox.", - error_convert_accessibility: "Errore durante la conversione da MathML in testo accessibile.", - exception_cross_site: "Lo scripting tra siti è consentito solo per HTTP.", - exception_high_surrogate: "Surrogato alto non seguito da surrogato basso in fixedCharCodeAt()", - exception_string_length: "Stringa non valida. La lunghezza deve essere un multiplo di 4", - exception_key_nonobject: "Metodo Object.keys richiamato in un elemento non oggetto", - exception_null_or_undefined: " questo è un valore null o non definito", - exception_not_function: " non è una funzione", - exception_invalid_date_format: "Formato di data non valido: ", - exception_casting: "Impossibile eseguire il cast ", - exception_casting_to: " a ", + latex: "LaTeX", + cancel: "Annulla", + accept: "Inserisci", + manual: "Manuale", + insert_math: "Inserisci una formula matematica - MathType", + insert_chem: "Inserisci una formula chimica - ChemType", + minimize: "Riduci a icona", + maximize: "Ingrandisci", + fullscreen: "Schermo intero", + exit_fullscreen: "Esci da schermo intero", + close: "Chiudi", + mathtype: "MathType", + title_modalwindow: "Finestra modale di MathType", + close_modal_warning: "Confermi di voler uscire? Le modifiche effettuate andranno perse.", + latex_name_label: "Formula LaTeX", + browser_no_compatible: "Il tuo browser non è compatibile con la tecnologia AJAX. Utilizza la versione più recente di Mozilla Firefox.", + error_convert_accessibility: "Errore durante la conversione da MathML in testo accessibile.", + exception_cross_site: "Lo scripting tra siti è consentito solo per HTTP.", + exception_high_surrogate: "Surrogato alto non seguito da surrogato basso in fixedCharCodeAt()", + exception_string_length: "Stringa non valida. La lunghezza deve essere un multiplo di 4", + exception_key_nonobject: "Metodo Object.keys richiamato in un elemento non oggetto", + exception_null_or_undefined: " questo è un valore null o non definito", + exception_not_function: " non è una funzione", + exception_invalid_date_format: "Formato di data non valido: ", + exception_casting: "Impossibile eseguire il cast ", + exception_casting_to: " a " }; var ja = { - latex: "LaTeX", - cancel: "キャンセル", - accept: "挿入", - manual: "マニュアル", - insert_math: "数式を挿入 - MathType", - insert_chem: "化学式を挿入 - ChemType", - minimize: "最小化", - maximize: "最大化", - fullscreen: "全画面表示", - exit_fullscreen: "全画面表示を解除", - close: "閉じる", - mathtype: "MathType", - title_modalwindow: "MathType モードウィンドウ", - close_modal_warning: "このページから移動してもよろしいですか?変更内容は失われます。", - latex_name_label: "LaTeX 数式", - browser_no_compatible: - "お使いのブラウザは、AJAX 技術と互換性がありません。Mozilla Firefox の最新バージョンをご使用ください。", - error_convert_accessibility: "MathML からアクセシブルなテキストへの変換中にエラーが発生しました。", - exception_cross_site: "クロスサイトスクリプティングは、HTTP のみに許可されています。", - exception_high_surrogate: "fixedCharCodeAt()で上位サロゲートの後に下位サロゲートがありません", - exception_string_length: "無効な文字列です。長さは4の倍数である必要があります", - exception_key_nonobject: "Object.keys が非オブジェクトで呼び出されました", - exception_null_or_undefined: " null であるか、定義されていません", - exception_not_function: " は関数ではありません", - exception_invalid_date_format: "無効な日付形式: ", - exception_casting: "次にキャスト ", - exception_casting_to: " できません ", + latex: "LaTeX", + cancel: "キャンセル", + accept: "挿入", + manual: "マニュアル", + insert_math: "数式を挿入 - MathType", + insert_chem: "化学式を挿入 - ChemType", + minimize: "最小化", + maximize: "最大化", + fullscreen: "全画面表示", + exit_fullscreen: "全画面表示を解除", + close: "閉じる", + mathtype: "MathType", + title_modalwindow: "MathType モードウィンドウ", + close_modal_warning: "このページから移動してもよろしいですか?変更内容は失われます。", + latex_name_label: "LaTeX 数式", + browser_no_compatible: "お使いのブラウザは、AJAX 技術と互換性がありません。Mozilla Firefox の最新バージョンをご使用ください。", + error_convert_accessibility: "MathML からアクセシブルなテキストへの変換中にエラーが発生しました。", + exception_cross_site: "クロスサイトスクリプティングは、HTTP のみに許可されています。", + exception_high_surrogate: "fixedCharCodeAt()で上位サロゲートの後に下位サロゲートがありません", + exception_string_length: "無効な文字列です。長さは4の倍数である必要があります", + exception_key_nonobject: "Object.keys が非オブジェクトで呼び出されました", + exception_null_or_undefined: " null であるか、定義されていません", + exception_not_function: " は関数ではありません", + exception_invalid_date_format: "無効な日付形式: ", + exception_casting: "次にキャスト ", + exception_casting_to: " できません " }; var ko = { - latex: "LaTeX", - cancel: "취소", - accept: "삽입", - manual: "설명서", - insert_math: "수학 공식 삽입 - MathType", - insert_chem: "화학 공식 입력하기 - ChemType", - minimize: "최소화", - maximize: "최대화", - fullscreen: "전체 화면", - exit_fullscreen: "전체 화면 나가기", - close: "닫기", - mathtype: "MathType", - title_modalwindow: "MathType 모달 창", - close_modal_warning: "정말로 나가시겠습니까? 변경 사항이 손실됩니다.", - latex_name_label: "Latex 공식", - browser_no_compatible: "사용자의 브라우저는 AJAX 기술과 호환되지 않습니다. Mozilla Firefox 최신 버전을 사용하십시오.", - error_convert_accessibility: "MathML로부터 접근 가능한 텍스트로 오류 변환.", - exception_cross_site: "사이트 교차 스크립팅은 HTTP 환경에서만 사용할 수 있습니다.", - exception_high_surrogate: "fixedCharCodeAt()에서는 상위 서러게이트 뒤에 하위 서러게이트가 붙지 않습니다", - exception_string_length: "유효하지 않은 스트링입니다. 길이는 4의 배수여야 합니다", - exception_key_nonobject: "Object.keys가 non-object를 요청하였습니다", - exception_null_or_undefined: " Null값이거나 정의되지 않았습니다", - exception_not_function: " 함수가 아닙니다", - exception_invalid_date_format: "유효하지 않은 날짜 포맷 : ", - exception_casting: "캐스팅할 수 없습니다 ", - exception_casting_to: " (으)로 ", + latex: "LaTeX", + cancel: "취소", + accept: "삽입", + manual: "설명서", + insert_math: "수학 공식 삽입 - MathType", + insert_chem: "화학 공식 입력하기 - ChemType", + minimize: "최소화", + maximize: "최대화", + fullscreen: "전체 화면", + exit_fullscreen: "전체 화면 나가기", + close: "닫기", + mathtype: "MathType", + title_modalwindow: "MathType 모달 창", + close_modal_warning: "정말로 나가시겠습니까? 변경 사항이 손실됩니다.", + latex_name_label: "Latex 공식", + browser_no_compatible: "사용자의 브라우저는 AJAX 기술과 호환되지 않습니다. Mozilla Firefox 최신 버전을 사용하십시오.", + error_convert_accessibility: "MathML로부터 접근 가능한 텍스트로 오류 변환.", + exception_cross_site: "사이트 교차 스크립팅은 HTTP 환경에서만 사용할 수 있습니다.", + exception_high_surrogate: "fixedCharCodeAt()에서는 상위 서러게이트 뒤에 하위 서러게이트가 붙지 않습니다", + exception_string_length: "유효하지 않은 스트링입니다. 길이는 4의 배수여야 합니다", + exception_key_nonobject: "Object.keys가 non-object를 요청하였습니다", + exception_null_or_undefined: " Null값이거나 정의되지 않았습니다", + exception_not_function: " 함수가 아닙니다", + exception_invalid_date_format: "유효하지 않은 날짜 포맷 : ", + exception_casting: "캐스팅할 수 없습니다 ", + exception_casting_to: " (으)로 " }; var nl = { - latex: "LaTeX", - cancel: "Annuleren", - insert_chem: "Een scheikundige formule invoegen - ChemType", - minimize: "Minimaliseer", - maximize: "Maximaliseer", - fullscreen: "Schermvullend", - exit_fullscreen: "Verlaat volledig scherm", - close: "Sluit", - mathtype: "MathType", - title_modalwindow: "Modaal venster MathType", - close_modal_warning: "Weet je zeker dat je de app wilt sluiten? De gemaakte wijzigingen gaan verloren.", - latex_name_label: "LaTeX-formule", - browser_no_compatible: - "Je browser is niet compatibel met AJAX-technologie. Gebruik de meest recente versie van Mozilla Firefox.", - error_convert_accessibility: "Fout bij conversie van MathML naar toegankelijke tekst.", - exception_cross_site: "Cross-site scripting is alleen toegestaan voor HTTP.", - exception_high_surrogate: "Hoog surrogaat niet gevolgd door laag surrogaat in fixedCharCodeAt()", - exception_string_length: "Ongeldige tekenreeks. Lengte moet een veelvoud van 4 zijn", - exception_key_nonobject: "Object.keys opgeroepen voor niet-object", - exception_null_or_undefined: " dit is nul of niet gedefinieerd", - exception_not_function: " is geen functie", - exception_invalid_date_format: "Ongeldige datumnotatie: ", - exception_casting: "Kan niet weergeven ", - exception_casting_to: " op ", + latex: "LaTeX", + cancel: "Annuleren", + insert_chem: "Een scheikundige formule invoegen - ChemType", + minimize: "Minimaliseer", + maximize: "Maximaliseer", + fullscreen: "Schermvullend", + exit_fullscreen: "Verlaat volledig scherm", + close: "Sluit", + mathtype: "MathType", + title_modalwindow: "Modaal venster MathType", + close_modal_warning: "Weet je zeker dat je de app wilt sluiten? De gemaakte wijzigingen gaan verloren.", + latex_name_label: "LaTeX-formule", + browser_no_compatible: "Je browser is niet compatibel met AJAX-technologie. Gebruik de meest recente versie van Mozilla Firefox.", + error_convert_accessibility: "Fout bij conversie van MathML naar toegankelijke tekst.", + exception_cross_site: "Cross-site scripting is alleen toegestaan voor HTTP.", + exception_high_surrogate: "Hoog surrogaat niet gevolgd door laag surrogaat in fixedCharCodeAt()", + exception_string_length: "Ongeldige tekenreeks. Lengte moet een veelvoud van 4 zijn", + exception_key_nonobject: "Object.keys opgeroepen voor niet-object", + exception_null_or_undefined: " dit is nul of niet gedefinieerd", + exception_not_function: " is geen functie", + exception_invalid_date_format: "Ongeldige datumnotatie: ", + exception_casting: "Kan niet weergeven ", + exception_casting_to: " op " }; var no = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Set inn", - manual: "Håndbok", - insert_math: "Sett inn matematikkformel - MathType", - insert_chem: "Set inn ein kjemisk formel – ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fullskjerm", - exit_fullscreen: "Avslutt fullskjerm", - close: "Lukk", - mathtype: "MathType", - title_modalwindow: "Modalt MathType-vindu", - close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", - latex_name_label: "LaTeX-formel", - browser_no_compatible: - "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", - error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", - exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", - exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", - exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", - exception_null_or_undefined: " dette er null eller ikkje definert", - exception_not_function: " er ikkje ein funksjon", - exception_invalid_date_format: "Ugyldig datoformat: ", - exception_casting: "Kan ikkje bruka casting ", - exception_casting_to: " til ", + latex: "LaTeX", + cancel: "Avbryt", + accept: "Set inn", + manual: "Håndbok", + insert_math: "Sett inn matematikkformel - MathType", + insert_chem: "Set inn ein kjemisk formel – ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fullskjerm", + exit_fullscreen: "Avslutt fullskjerm", + close: "Lukk", + mathtype: "MathType", + title_modalwindow: "Modalt MathType-vindu", + close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", + latex_name_label: "LaTeX-formel", + browser_no_compatible: "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", + error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", + exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", + exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", + exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", + exception_null_or_undefined: " dette er null eller ikkje definert", + exception_not_function: " er ikkje ein funksjon", + exception_invalid_date_format: "Ugyldig datoformat: ", + exception_casting: "Kan ikkje bruka casting ", + exception_casting_to: " til " }; var nb = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Insert", - manual: "Håndbok", - insert_math: "Sett inn matematikkformel - MathType", - insert_chem: "Sett inn en kjemisk formel – ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fullskjerm", - exit_fullscreen: "Avslutt fullskjerm", - close: "Lukk", - mathtype: "MathType", - title_modalwindow: "Modalt MathType-vindu", - close_modal_warning: "Er du sikker på at du vil gå ut? Endringene du har gjort, vil gå tapt.", - latex_name_label: "LaTeX-formel", - browser_no_compatible: - "Nettleseren er ikke kompatibel med AJAX-teknologien. Bruk den nyeste versjonen av Mozilla Firefox.", - error_convert_accessibility: "Feil under konvertering fra MathML til tilgjengelig tekst.", - exception_cross_site: "Skripting på tvers av nettsteder er bare tillatt med HTTP.", - exception_high_surrogate: "Høyt surrogat etterfølges ikke av lavt surrogat i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Lengden må være delelig på 4", - exception_key_nonobject: "Object.keys kalte på et ikke-objekt", - exception_null_or_undefined: " dette er null eller ikke definert", - exception_not_function: " er ikke en funksjon", - exception_invalid_date_format: "Ugyldig datoformat: ", - exception_casting: "Kan ikke bruke casting ", - exception_casting_to: " til ", + latex: "LaTeX", + cancel: "Avbryt", + accept: "Insert", + manual: "Håndbok", + insert_math: "Sett inn matematikkformel - MathType", + insert_chem: "Sett inn en kjemisk formel – ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fullskjerm", + exit_fullscreen: "Avslutt fullskjerm", + close: "Lukk", + mathtype: "MathType", + title_modalwindow: "Modalt MathType-vindu", + close_modal_warning: "Er du sikker på at du vil gå ut? Endringene du har gjort, vil gå tapt.", + latex_name_label: "LaTeX-formel", + browser_no_compatible: "Nettleseren er ikke kompatibel med AJAX-teknologien. Bruk den nyeste versjonen av Mozilla Firefox.", + error_convert_accessibility: "Feil under konvertering fra MathML til tilgjengelig tekst.", + exception_cross_site: "Skripting på tvers av nettsteder er bare tillatt med HTTP.", + exception_high_surrogate: "Høyt surrogat etterfølges ikke av lavt surrogat i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Lengden må være delelig på 4", + exception_key_nonobject: "Object.keys kalte på et ikke-objekt", + exception_null_or_undefined: " dette er null eller ikke definert", + exception_not_function: " er ikke en funksjon", + exception_invalid_date_format: "Ugyldig datoformat: ", + exception_casting: "Kan ikke bruke casting ", + exception_casting_to: " til " }; var nn = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Set inn", - manual: "Håndbok", - insert_math: "Sett inn matematikkformel - MathType", - insert_chem: "Set inn ein kjemisk formel – ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fullskjerm", - exit_fullscreen: "Avslutt fullskjerm", - close: "Lukk", - mathtype: "MathType", - title_modalwindow: "Modalt MathType-vindu", - close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", - latex_name_label: "LaTeX-formel", - browser_no_compatible: - "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", - error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", - exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", - exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", - exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", - exception_null_or_undefined: " dette er null eller ikkje definert", - exception_not_function: " er ikkje ein funksjon", - exception_invalid_date_format: "Ugyldig datoformat: ", - exception_casting: "Kan ikkje bruka casting ", - exception_casting_to: " til ", + latex: "LaTeX", + cancel: "Avbryt", + accept: "Set inn", + manual: "Håndbok", + insert_math: "Sett inn matematikkformel - MathType", + insert_chem: "Set inn ein kjemisk formel – ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fullskjerm", + exit_fullscreen: "Avslutt fullskjerm", + close: "Lukk", + mathtype: "MathType", + title_modalwindow: "Modalt MathType-vindu", + close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", + latex_name_label: "LaTeX-formel", + browser_no_compatible: "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", + error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", + exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", + exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", + exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", + exception_null_or_undefined: " dette er null eller ikkje definert", + exception_not_function: " er ikkje ein funksjon", + exception_invalid_date_format: "Ugyldig datoformat: ", + exception_casting: "Kan ikkje bruka casting ", + exception_casting_to: " til " }; var pl = { - latex: "LaTeX", - cancel: "Anuluj", - accept: "Wstaw", - manual: "Instrukcja", - insert_math: "Wstaw formułę matematyczną - MathType", - insert_chem: "Wstaw wzór chemiczny — ChemType", - minimize: "Minimalizuj", - maximize: "Maksymalizuj", - fullscreen: "Pełny ekran", - exit_fullscreen: "Opuść tryb pełnoekranowy", - close: "Zamknij", - mathtype: "MathType", - title_modalwindow: "Okno modalne MathType", - close_modal_warning: "Czy na pewno chcesz zamknąć? Wprowadzone zmiany zostaną utracone.", - latex_name_label: "Wzór Latex", - browser_no_compatible: "Twoja przeglądarka jest niezgodna z technologią AJAX Użyj najnowszej wersji Mozilla Firefox.", - error_convert_accessibility: "Błąd podczas konwertowania z formatu MathML na dostępny tekst.", - exception_cross_site: "Krzyżowanie skryptów witryny jest dozwolone tylko dla HTTP.", - exception_high_surrogate: "Brak niskiego surogatu po wysokim surogacie w fixedCharCodeAt()", - exception_string_length: "Niewłaściwy ciąg znaków. Długość musi być wielokrotnością liczby 4.", - exception_key_nonobject: "Argumentem wywołanej funkcji Object.key nie jest obiekt.", - exception_null_or_undefined: " jest zerowy lub niezdefiniowany", - exception_not_function: " nie jest funkcją", - exception_invalid_date_format: "Nieprawidłowy format daty: ", - exception_casting: "Nie można rzutować ", - exception_casting_to: " na ", + latex: "LaTeX", + cancel: "Anuluj", + accept: "Wstaw", + manual: "Instrukcja", + insert_math: "Wstaw formułę matematyczną - MathType", + insert_chem: "Wstaw wzór chemiczny — ChemType", + minimize: "Minimalizuj", + maximize: "Maksymalizuj", + fullscreen: "Pełny ekran", + exit_fullscreen: "Opuść tryb pełnoekranowy", + close: "Zamknij", + mathtype: "MathType", + title_modalwindow: "Okno modalne MathType", + close_modal_warning: "Czy na pewno chcesz zamknąć? Wprowadzone zmiany zostaną utracone.", + latex_name_label: "Wzór Latex", + browser_no_compatible: "Twoja przeglądarka jest niezgodna z technologią AJAX Użyj najnowszej wersji Mozilla Firefox.", + error_convert_accessibility: "Błąd podczas konwertowania z formatu MathML na dostępny tekst.", + exception_cross_site: "Krzyżowanie skryptów witryny jest dozwolone tylko dla HTTP.", + exception_high_surrogate: "Brak niskiego surogatu po wysokim surogacie w fixedCharCodeAt()", + exception_string_length: "Niewłaściwy ciąg znaków. Długość musi być wielokrotnością liczby 4.", + exception_key_nonobject: "Argumentem wywołanej funkcji Object.key nie jest obiekt.", + exception_null_or_undefined: " jest zerowy lub niezdefiniowany", + exception_not_function: " nie jest funkcją", + exception_invalid_date_format: "Nieprawidłowy format daty: ", + exception_casting: "Nie można rzutować ", + exception_casting_to: " na " }; var pt = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir fórmula matemática - MathType", - insert_chem: "Inserir uma fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Ecrã completo", - exit_fullscreen: "Sair do ecrã completo", - close: "Fechar", - mathtype: "MathType", - title_modalwindow: "Janela modal do MathType", - close_modal_warning: "Pretende sair? As alterações efetuadas serão perdidas.", - latex_name_label: "Fórmula Latex", - browser_no_compatible: - "O seu navegador não é compatível com a tecnologia AJAX. Utilize a versão mais recente do Mozilla Firefox.", - error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", - exception_cross_site: "O processamento de scripts em vários sites só é permitido para HTTP.", - exception_high_surrogate: "Substituto alto não seguido por um substituto baixo em fixedCharCodeAt()", - exception_string_length: "Cadeia inválida. O comprimento tem de ser um múltiplo de 4", - exception_key_nonobject: "Object.keys chamou um não-objeto", - exception_null_or_undefined: " é nulo ou não está definido", - exception_not_function: " não é uma função", - exception_invalid_date_format: "Formato de data inválido: ", - exception_casting: "Não é possível adicionar ", - exception_casting_to: " até ", + latex: "LaTeX", + cancel: "Cancelar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir fórmula matemática - MathType", + insert_chem: "Inserir uma fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Ecrã completo", + exit_fullscreen: "Sair do ecrã completo", + close: "Fechar", + mathtype: "MathType", + title_modalwindow: "Janela modal do MathType", + close_modal_warning: "Pretende sair? As alterações efetuadas serão perdidas.", + latex_name_label: "Fórmula Latex", + browser_no_compatible: "O seu navegador não é compatível com a tecnologia AJAX. Utilize a versão mais recente do Mozilla Firefox.", + error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", + exception_cross_site: "O processamento de scripts em vários sites só é permitido para HTTP.", + exception_high_surrogate: "Substituto alto não seguido por um substituto baixo em fixedCharCodeAt()", + exception_string_length: "Cadeia inválida. O comprimento tem de ser um múltiplo de 4", + exception_key_nonobject: "Object.keys chamou um não-objeto", + exception_null_or_undefined: " é nulo ou não está definido", + exception_not_function: " não é uma função", + exception_invalid_date_format: "Formato de data inválido: ", + exception_casting: "Não é possível adicionar ", + exception_casting_to: " até " }; var pt_br = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir fórmula matemática - MathType", - insert_chem: "Insira uma fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Tela cheia", - exit_fullscreen: "Sair de tela cheia", - close: "Fechar", - mathtype: "MathType", - title_modalwindow: "Janela modal do MathType", - close_modal_warning: "Tem certeza de que deseja sair? Todas as alterações serão perdidas.", - latex_name_label: "Fórmula LaTeX", - browser_no_compatible: - "O navegador não é compatível com a tecnologia AJAX. Use a versão mais recente do Mozilla Firefox.", - error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", - exception_cross_site: "O uso de scripts entre sites só é permitido para HTTP.", - exception_high_surrogate: "High surrogate não seguido de low surrogate em fixedCharCodeAt()", - exception_string_length: "String inválida. O comprimento deve ser um múltiplo de 4", - exception_key_nonobject: "Object.keys chamados em não objeto", - exception_null_or_undefined: " isto é nulo ou não definido", - exception_not_function: " não é uma função", - exception_invalid_date_format: "Formato de data inválido: ", - exception_casting: "Não é possível transmitir ", - exception_casting_to: " para ", + latex: "LaTeX", + cancel: "Cancelar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir fórmula matemática - MathType", + insert_chem: "Insira uma fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Tela cheia", + exit_fullscreen: "Sair de tela cheia", + close: "Fechar", + mathtype: "MathType", + title_modalwindow: "Janela modal do MathType", + close_modal_warning: "Tem certeza de que deseja sair? Todas as alterações serão perdidas.", + latex_name_label: "Fórmula LaTeX", + browser_no_compatible: "O navegador não é compatível com a tecnologia AJAX. Use a versão mais recente do Mozilla Firefox.", + error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", + exception_cross_site: "O uso de scripts entre sites só é permitido para HTTP.", + exception_high_surrogate: "High surrogate não seguido de low surrogate em fixedCharCodeAt()", + exception_string_length: "String inválida. O comprimento deve ser um múltiplo de 4", + exception_key_nonobject: "Object.keys chamados em não objeto", + exception_null_or_undefined: " isto é nulo ou não definido", + exception_not_function: " não é uma função", + exception_invalid_date_format: "Formato de data inválido: ", + exception_casting: "Não é possível transmitir ", + exception_casting_to: " para " }; var ro = { - latex: "LaTeX", - cancel: "Anulare", - accept: "Inserați", - manual: "Ghid", - insert_math: "Inserați o formulă matematică - MathType", - insert_chem: "Inserați o formulă chimică - ChemType", - minimize: "Minimizați", - maximize: "Maximizați", - fullscreen: "Afișați pe tot ecranul", - exit_fullscreen: "Opriți afișarea pe tot ecranul", - close: "Închideți", - mathtype: "MathType", - title_modalwindow: "Fereastră modală MathType", - close_modal_warning: "Sigur doriți să ieșiți? Modificările realizate se vor pierde.", - latex_name_label: "Formulă Latex", - browser_no_compatible: - "Browserul dvs. nu este compatibil cu tehnologia AJAX. Utilizați cea mai recentă versiune de Mozilla Firefox.", - error_convert_accessibility: "Eroare la convertirea din MathML în text accesibil.", - exception_cross_site: "Scriptarea între site‑uri este permisă doar pentru HTTP.", - exception_high_surrogate: "Surogatul superior nu este urmat de un surogat inferior în fixedCharCodeAt()", - exception_string_length: "Șir nevalid. Lungimea trebuie să fie multiplu de 4", - exception_key_nonobject: "Object.keys a apelat un non-obiect", - exception_null_or_undefined: " este null sau nu este definit", - exception_not_function: " nu este funcție", - exception_invalid_date_format: "Format de dată nevalid: ", - exception_casting: "nu se poate difuza ", - exception_casting_to: " către ", + latex: "LaTeX", + cancel: "Anulare", + accept: "Inserați", + manual: "Ghid", + insert_math: "Inserați o formulă matematică - MathType", + insert_chem: "Inserați o formulă chimică - ChemType", + minimize: "Minimizați", + maximize: "Maximizați", + fullscreen: "Afișați pe tot ecranul", + exit_fullscreen: "Opriți afișarea pe tot ecranul", + close: "Închideți", + mathtype: "MathType", + title_modalwindow: "Fereastră modală MathType", + close_modal_warning: "Sigur doriți să ieșiți? Modificările realizate se vor pierde.", + latex_name_label: "Formulă Latex", + browser_no_compatible: "Browserul dvs. nu este compatibil cu tehnologia AJAX. Utilizați cea mai recentă versiune de Mozilla Firefox.", + error_convert_accessibility: "Eroare la convertirea din MathML în text accesibil.", + exception_cross_site: "Scriptarea între site‑uri este permisă doar pentru HTTP.", + exception_high_surrogate: "Surogatul superior nu este urmat de un surogat inferior în fixedCharCodeAt()", + exception_string_length: "Șir nevalid. Lungimea trebuie să fie multiplu de 4", + exception_key_nonobject: "Object.keys a apelat un non-obiect", + exception_null_or_undefined: " este null sau nu este definit", + exception_not_function: " nu este funcție", + exception_invalid_date_format: "Format de dată nevalid: ", + exception_casting: "nu se poate difuza ", + exception_casting_to: " către " }; var ru = { - latex: "LaTeX", - cancel: "отмена", - accept: "Вставка", - manual: "вручную", - insert_math: "Вставить математическую формулу: WIRIS", - insert_chem: "Вставить химическую формулу — ChemType", - minimize: "Свернуть", - maximize: "Развернуть", - fullscreen: "На весь экран", - exit_fullscreen: "Выйти из полноэкранного режима", - close: "Закрыть", - mathtype: "MathType", - title_modalwindow: "Режимное окно MathType", - close_modal_warning: "Вы уверены, что хотите выйти? Все внесенные изменения будут утрачены.", - latex_name_label: "Формула Latex", - browser_no_compatible: "Ваш браузер несовместим с технологией AJAX. Используйте последнюю версию Mozilla Firefox.", - error_convert_accessibility: "При преобразовании формулы в текст допустимого формата произошла ошибка.", - exception_cross_site: "Межсайтовые сценарии доступны только для HTTP.", - exception_high_surrogate: - "Младший символ-заместитель не сопровождает старший символ-заместитель в исправленном методе CharCodeAt()", - exception_string_length: "Недопустимая строка. Длинна должна быть кратной 4.", - exception_key_nonobject: "Метод Object.keys вызван не для объекта", - exception_null_or_undefined: " значение пустое или не определено", - exception_not_function: " не функция", - exception_invalid_date_format: "Недопустимый формат даты: ", - exception_casting: "Не удается привести ", - exception_casting_to: " к ", + latex: "LaTeX", + cancel: "отмена", + accept: "Вставка", + manual: "вручную", + insert_math: "Вставить математическую формулу: WIRIS", + insert_chem: "Вставить химическую формулу — ChemType", + minimize: "Свернуть", + maximize: "Развернуть", + fullscreen: "На весь экран", + exit_fullscreen: "Выйти из полноэкранного режима", + close: "Закрыть", + mathtype: "MathType", + title_modalwindow: "Режимное окно MathType", + close_modal_warning: "Вы уверены, что хотите выйти? Все внесенные изменения будут утрачены.", + latex_name_label: "Формула Latex", + browser_no_compatible: "Ваш браузер несовместим с технологией AJAX. Используйте последнюю версию Mozilla Firefox.", + error_convert_accessibility: "При преобразовании формулы в текст допустимого формата произошла ошибка.", + exception_cross_site: "Межсайтовые сценарии доступны только для HTTP.", + exception_high_surrogate: "Младший символ-заместитель не сопровождает старший символ-заместитель в исправленном методе CharCodeAt()", + exception_string_length: "Недопустимая строка. Длинна должна быть кратной 4.", + exception_key_nonobject: "Метод Object.keys вызван не для объекта", + exception_null_or_undefined: " значение пустое или не определено", + exception_not_function: " не функция", + exception_invalid_date_format: "Недопустимый формат даты: ", + exception_casting: "Не удается привести ", + exception_casting_to: " к " }; var sv = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Infoga", - manual: "Bruksanvisning", - insert_math: "Infoga matematisk formel - MathType", - insert_chem: "Infoga en kemiformel – ChemType", - minimize: "Minimera", - maximize: "Maximera", - fullscreen: "Helskärm", - exit_fullscreen: "Stäng helskärm", - close: "Stäng", - mathtype: "MathType", - title_modalwindow: "MathType modulfönster", - close_modal_warning: "Vill du avsluta? Inga ändringar kommer att sparas.", - latex_name_label: "Latex-formel", - browser_no_compatible: - "Din webbläsare är inte kompatibel med AJAX-teknik. Använd den senaste versionen av Mozilla Firefox.", - error_convert_accessibility: "Det uppstod ett fel vid konvertering från MathML till åtkomlig text.", - exception_cross_site: "Skriptkörning över flera sajter är endast tillåtet för HTTP.", - exception_high_surrogate: "Hög surrogat följs inte av låg surrogat i fixedCharCodeAt()", - exception_string_length: "Ogiltig sträng. Längden måste vara en multipel av 4", - exception_key_nonobject: "Object.keys anropade icke-objekt", - exception_null_or_undefined: " det är null eller inte definierat", - exception_not_function: " är inte en funktion", - exception_invalid_date_format: "Ogiltigt datumformat: ", - exception_casting: "Går inte att konvertera ", - exception_casting_to: " till ", + latex: "LaTeX", + cancel: "Avbryt", + accept: "Infoga", + manual: "Bruksanvisning", + insert_math: "Infoga matematisk formel - MathType", + insert_chem: "Infoga en kemiformel – ChemType", + minimize: "Minimera", + maximize: "Maximera", + fullscreen: "Helskärm", + exit_fullscreen: "Stäng helskärm", + close: "Stäng", + mathtype: "MathType", + title_modalwindow: "MathType modulfönster", + close_modal_warning: "Vill du avsluta? Inga ändringar kommer att sparas.", + latex_name_label: "Latex-formel", + browser_no_compatible: "Din webbläsare är inte kompatibel med AJAX-teknik. Använd den senaste versionen av Mozilla Firefox.", + error_convert_accessibility: "Det uppstod ett fel vid konvertering från MathML till åtkomlig text.", + exception_cross_site: "Skriptkörning över flera sajter är endast tillåtet för HTTP.", + exception_high_surrogate: "Hög surrogat följs inte av låg surrogat i fixedCharCodeAt()", + exception_string_length: "Ogiltig sträng. Längden måste vara en multipel av 4", + exception_key_nonobject: "Object.keys anropade icke-objekt", + exception_null_or_undefined: " det är null eller inte definierat", + exception_not_function: " är inte en funktion", + exception_invalid_date_format: "Ogiltigt datumformat: ", + exception_casting: "Går inte att konvertera ", + exception_casting_to: " till " }; var tr = { - latex: "LaTeX", - cancel: "Vazgeç", - accept: "Ekle", - manual: "Kılavuz", - insert_math: "Matematik formülü ekle - MathType", - insert_chem: "Kimya formülü ekleyin - ChemType", - minimize: "Simge Durumuna Küçült", - maximize: "Ekranı Kapla", - fullscreen: "Tam Ekran", - exit_fullscreen: "Tam Ekrandan Çık", - close: "Kapat", - mathtype: "MathType", - title_modalwindow: "MathType kalıcı penceresi", - close_modal_warning: "Çıkmak istediğinizden emin misiniz? Yaptığınız değişiklikler kaybolacak.", - latex_name_label: "Latex Formülü", - browser_no_compatible: - "Tarayıcınız AJAX teknolojisiyle uyumlu değil. Lütfen en güncel Mozilla Firefox sürümünü kullanın.", - error_convert_accessibility: "MathML biçiminden erişilebilir metne dönüştürme hatası.", - exception_cross_site: "Siteler arası komut dosyası yazma işlemine yalnızca HTTP için izin verilir.", - exception_high_surrogate: "fixedCharCodeAt() fonksiyonunda üst vekilin ardından alt vekil gelmiyor", - exception_string_length: "Geçersiz dizgi. Uzunluk, 4'ün katlarından biri olmalıdır", - exception_key_nonobject: "Nesne olmayan öğe üzerinde Object.keys çağrıldı", - exception_null_or_undefined: " bu değer boş veya tanımlanmamış", - exception_not_function: " bir fonksiyon değil", - exception_invalid_date_format: "Geçersiz tarih biçimi: ", - exception_casting: "Tür dönüştürülemiyor ", - exception_casting_to: " hedef: ", + latex: "LaTeX", + cancel: "Vazgeç", + accept: "Ekle", + manual: "Kılavuz", + insert_math: "Matematik formülü ekle - MathType", + insert_chem: "Kimya formülü ekleyin - ChemType", + minimize: "Simge Durumuna Küçült", + maximize: "Ekranı Kapla", + fullscreen: "Tam Ekran", + exit_fullscreen: "Tam Ekrandan Çık", + close: "Kapat", + mathtype: "MathType", + title_modalwindow: "MathType kalıcı penceresi", + close_modal_warning: "Çıkmak istediğinizden emin misiniz? Yaptığınız değişiklikler kaybolacak.", + latex_name_label: "Latex Formülü", + browser_no_compatible: "Tarayıcınız AJAX teknolojisiyle uyumlu değil. Lütfen en güncel Mozilla Firefox sürümünü kullanın.", + error_convert_accessibility: "MathML biçiminden erişilebilir metne dönüştürme hatası.", + exception_cross_site: "Siteler arası komut dosyası yazma işlemine yalnızca HTTP için izin verilir.", + exception_high_surrogate: "fixedCharCodeAt() fonksiyonunda üst vekilin ardından alt vekil gelmiyor", + exception_string_length: "Geçersiz dizgi. Uzunluk, 4'ün katlarından biri olmalıdır", + exception_key_nonobject: "Nesne olmayan öğe üzerinde Object.keys çağrıldı", + exception_null_or_undefined: " bu değer boş veya tanımlanmamış", + exception_not_function: " bir fonksiyon değil", + exception_invalid_date_format: "Geçersiz tarih biçimi: ", + exception_casting: "Tür dönüştürülemiyor ", + exception_casting_to: " hedef: " }; var zh = { - latex: "LaTeX", - cancel: "取消", - accept: "插入", - manual: "手册", - insert_math: "插入数学公式 - MathType", - insert_chem: "插入化学分子式 - ChemType", - minimize: "最小化", - maximize: "最大化", - fullscreen: "全屏幕", - exit_fullscreen: "退出全屏幕", - close: "关闭", - mathtype: "MathType", - title_modalwindow: "MathType 模式窗口", - close_modal_warning: "您确定要离开吗?您所做的修改将丢失。", - latex_name_label: "Latex 分子式", - browser_no_compatible: "您的浏览器不兼容 AJAX 技术。请使用最新版 Mozilla Firefox。", - error_convert_accessibility: "将 MathML 转换为可访问文本时出错。", - exception_cross_site: "仅 HTTP 允许跨站脚本。", - exception_high_surrogate: "fixedCharCodeAt() 中的高位代理之后未跟随低位代理", - exception_string_length: "无效字符串。长度必须是 4 的倍数", - exception_key_nonobject: "非对象调用了 Object.keys", - exception_null_or_undefined: " 该值为空或未定义", - exception_not_function: " 不是一个函数", - exception_invalid_date_format: "无效日期格式: ", - exception_casting: "无法转换 ", - exception_casting_to: " 为 ", + latex: "LaTeX", + cancel: "取消", + accept: "插入", + manual: "手册", + insert_math: "插入数学公式 - MathType", + insert_chem: "插入化学分子式 - ChemType", + minimize: "最小化", + maximize: "最大化", + fullscreen: "全屏幕", + exit_fullscreen: "退出全屏幕", + close: "关闭", + mathtype: "MathType", + title_modalwindow: "MathType 模式窗口", + close_modal_warning: "您确定要离开吗?您所做的修改将丢失。", + latex_name_label: "Latex 分子式", + browser_no_compatible: "您的浏览器不兼容 AJAX 技术。请使用最新版 Mozilla Firefox。", + error_convert_accessibility: "将 MathML 转换为可访问文本时出错。", + exception_cross_site: "仅 HTTP 允许跨站脚本。", + exception_high_surrogate: "fixedCharCodeAt() 中的高位代理之后未跟随低位代理", + exception_string_length: "无效字符串。长度必须是 4 的倍数", + exception_key_nonobject: "非对象调用了 Object.keys", + exception_null_or_undefined: " 该值为空或未定义", + exception_not_function: " 不是一个函数", + exception_invalid_date_format: "无效日期格式: ", + exception_casting: "无法转换 ", + exception_casting_to: " 为 " }; var translations = { - ar: ar, - ca: ca, - cs: cs, - da: da, - de: de, - el: el, - en: en, - es: es, - et: et, - eu: eu, - fi: fi, - fr: fr, - gl: gl, - he: he, - hr: hr, - hu: hu, - id: id, - it: it, - ja: ja, - ko: ko, - nl: nl, - no: no, - nb: nb, - nn: nn, - pl: pl, - pt: pt, - pt_br: pt_br, - ro: ro, - ru: ru, - sv: sv, - tr: tr, - zh: zh, - "": {}, + ar: ar, + ca: ca, + cs: cs, + da: da, + de: de, + el: el, + en: en, + es: es, + et: et, + eu: eu, + fi: fi, + fr: fr, + gl: gl, + he: he, + hr: hr, + hu: hu, + id: id, + it: it, + ja: ja, + ko: ko, + nl: nl, + no: no, + nb: nb, + nn: nn, + pl: pl, + pt: pt, + pt_br: pt_br, + ro: ro, + ru: ru, + sv: sv, + tr: tr, + zh: zh, + "": { +} }; /** * This class represents a string manager. It's used to load localized strings. */ class StringManager { - constructor() { - throw new Error("Static class StringManager can not be instantiated."); - } - /** + constructor(){ + throw new Error("Static class StringManager can not be instantiated."); + } + /** * Returns the associated value of certain string key. If the associated value * doesn't exits returns the original key. * @param {string} key - string key * @param {string} lang - DEFAULT = null. Specify the language to translate the string * @returns {string} correspondent value. If doesn't exists original key. */ static get(key, lang) { - // Default language definition - let { language } = this; - // If parameter language, use it - if (lang) { - language = lang; - } - // Cut down on strings. e.g. en_US -> en - if (language && language.length > 2) { - language = language.slice(0, 2); - } - // Check if we support the language - if (!this.strings.hasOwnProperty(language)) { - // eslint-disable-line no-prototype-builtins - console.warn(`Unknown language ${language} set in StringManager.`); - language = "en"; - } - // Check if the key is supported in the given language - if (!this.strings[language].hasOwnProperty(key)) { - // eslint-disable-line no-prototype-builtins - console.warn(`Unknown key ${key} for language ${language} in StringManager.`); - return key; - } - return this.strings[language][key]; - } + // Default language definition + let { language } = this; + // If parameter language, use it + if (lang) { + language = lang; + } + // Cut down on strings. e.g. en_US -> en + if (language && language.length > 2) { + language = language.slice(0, 2); + } + // Check if we support the language + if (!this.strings.hasOwnProperty(language)) { + // eslint-disable-line no-prototype-builtins + console.warn(`Unknown language ${language} set in StringManager.`); + language = "en"; + } + // Check if the key is supported in the given language + if (!this.strings[language].hasOwnProperty(key)) { + // eslint-disable-line no-prototype-builtins + console.warn(`Unknown key ${key} for language ${language} in StringManager.`); + return key; + } + return this.strings[language][key]; + } } /** * Dictionary of dictionaries: @@ -4120,48 +4006,48 @@ var translations = { /** * This class represents an utility class. */ class Util { - /** + /** * Fires an event in a target. * @param {EventTarget} eventTarget - target where event should be fired. * @param {string} eventName event to fire. * @static */ static fireEvent(eventTarget, eventName) { - if (document.createEvent) { - const eventObject = document.createEvent("HTMLEvents"); - eventObject.initEvent(eventName, true, true); - return !eventTarget.dispatchEvent(eventObject); - } - const eventObject = document.createEventObject(); - return eventTarget.fireEvent(`on${eventName}`, eventObject); - } - /** + if (document.createEvent) { + const eventObject = document.createEvent("HTMLEvents"); + eventObject.initEvent(eventName, true, true); + return !eventTarget.dispatchEvent(eventObject); + } + const eventObject = document.createEventObject(); + return eventTarget.fireEvent(`on${eventName}`, eventObject); + } + /** * Cross-browser addEventListener/attachEvent function. * @param {EventTarget} eventTarget - target to add the event. * @param {string} eventName - specifies the type of event. * @param {Function} callBackFunction - callback function. * @static */ static addEvent(eventTarget, eventName, callBackFunction) { - if (eventTarget.addEventListener) { - eventTarget.addEventListener(eventName, callBackFunction, true); - } else if (eventTarget.attachEvent) { - // Backwards compatibility. - eventTarget.attachEvent(`on${eventName}`, callBackFunction); - } - } - /** + if (eventTarget.addEventListener) { + eventTarget.addEventListener(eventName, callBackFunction, true); + } else if (eventTarget.attachEvent) { + // Backwards compatibility. + eventTarget.attachEvent(`on${eventName}`, callBackFunction); + } + } + /** * Cross-browser removeEventListener/detachEvent function. * @param {EventTarget} eventTarget - target to add the event. * @param {string} eventName - specifies the type of event. * @param {Function} callBackFunction - function to remove from the event target. * @static */ static removeEvent(eventTarget, eventName, callBackFunction) { - if (eventTarget.removeEventListener) { - eventTarget.removeEventListener(eventName, callBackFunction, true); - } else if (eventTarget.detachEvent) { - eventTarget.detachEvent(`on${eventName}`, callBackFunction); + if (eventTarget.removeEventListener) { + eventTarget.removeEventListener(eventName, callBackFunction, true); + } else if (eventTarget.detachEvent) { + eventTarget.detachEvent(`on${eventName}`, callBackFunction); + } } - } - /** + /** * Adds the a callback function, for a certain event target, to the following event types: * - dblclick * - mousedown @@ -4172,37 +4058,37 @@ var translations = { * @param {Function} mouseupHandler - function to run when on mouseup event. * @static */ static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) { - if (doubleClickHandler) { - this.callbackDblclick = (event) => { - const realEvent = event || window.event; - const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; - doubleClickHandler(element, realEvent); - }; - Util.addEvent(eventTarget, "dblclick", this.callbackDblclick); - } - if (mousedownHandler) { - this.callbackMousedown = (event) => { - const realEvent = event || window.event; - const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; - mousedownHandler(element, realEvent); - }; - Util.addEvent(eventTarget, "mousedown", this.callbackMousedown); - } - if (mouseupHandler) { - this.callbackMouseup = (event) => { - const realEvent = event || window.event; - const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; - mouseupHandler(element, realEvent); - }; - // Chrome doesn't trigger this event for eventTarget if we release the mouse button - // while the mouse is outside the editor text field. - // This is a workaround: we trigger the event independently of where the mouse - // is when we release its button. - Util.addEvent(document, "mouseup", this.callbackMouseup); - Util.addEvent(eventTarget, "mouseup", this.callbackMouseup); - } - } - /** + if (doubleClickHandler) { + this.callbackDblclick = (event)=>{ + const realEvent = event || window.event; + const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; + doubleClickHandler(element, realEvent); + }; + Util.addEvent(eventTarget, "dblclick", this.callbackDblclick); + } + if (mousedownHandler) { + this.callbackMousedown = (event)=>{ + const realEvent = event || window.event; + const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; + mousedownHandler(element, realEvent); + }; + Util.addEvent(eventTarget, "mousedown", this.callbackMousedown); + } + if (mouseupHandler) { + this.callbackMouseup = (event)=>{ + const realEvent = event || window.event; + const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; + mouseupHandler(element, realEvent); + }; + // Chrome doesn't trigger this event for eventTarget if we release the mouse button + // while the mouse is outside the editor text field. + // This is a workaround: we trigger the event independently of where the mouse + // is when we release its button. + Util.addEvent(document, "mouseup", this.callbackMouseup); + Util.addEvent(eventTarget, "mouseup", this.callbackMouseup); + } + } + /** * Remove all callback function, for a certain event target, to the following event types: * - dblclick * - mousedown @@ -4210,96 +4096,93 @@ var translations = { * @param {EventTarget} eventTarget - event target. * @static */ static removeElementEvents(eventTarget) { - Util.removeEvent(eventTarget, "dblclick", this.callbackDblclick); - Util.removeEvent(eventTarget, "mousedown", this.callbackMousedown); - Util.removeEvent(document, "mouseup", this.callbackMouseup); - Util.removeEvent(eventTarget, "mouseup", this.callbackMouseup); - } - /** + Util.removeEvent(eventTarget, "dblclick", this.callbackDblclick); + Util.removeEvent(eventTarget, "mousedown", this.callbackMousedown); + Util.removeEvent(document, "mouseup", this.callbackMouseup); + Util.removeEvent(eventTarget, "mouseup", this.callbackMouseup); + } + /** * Adds a class name to a HTMLElement. * @param {HTMLElement} element - the HTML element. * @param {string} className - the class name. * @static */ static addClass(element, className) { - if (!Util.containsClass(element, className)) { - element.className += ` ${className}`; + if (!Util.containsClass(element, className)) { + element.className += ` ${className}`; + } } - } - /** + /** * Checks if a HTMLElement contains a certain class. * @param {HTMLElement} element - the HTML element. * @param {string} className - the className. * @returns {boolean} true if the HTMLElement contains the class name. false otherwise. * @static */ static containsClass(element, className) { - if (element == null || !("className" in element)) { - return false; - } - const currentClasses = element.className.split(" "); - for (let i = currentClasses.length - 1; i >= 0; i -= 1) { - if (currentClasses[i] === className) { - return true; - } - } - return false; - } - /** + if (element == null || !("className" in element)) { + return false; + } + const currentClasses = element.className.split(" "); + for(let i = currentClasses.length - 1; i >= 0; i -= 1){ + if (currentClasses[i] === className) { + return true; + } + } + return false; + } + /** * Remove a certain class for a HTMLElement. * @param {HTMLElement} element - the HTML element. * @param {string} className - the class name. * @static */ static removeClass(element, className) { - let newClassName = ""; - const classes = element.className.split(" "); - for (let i = 0; i < classes.length; i += 1) { - if (classes[i] !== className) { - newClassName += `${classes[i]} `; - } - } - element.className = newClassName.trim(); - } - /** + let newClassName = ""; + const classes = element.className.split(" "); + for(let i = 0; i < classes.length; i += 1){ + if (classes[i] !== className) { + newClassName += `${classes[i]} `; + } + } + element.className = newClassName.trim(); + } + /** * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's * used to parse old applets. * @param {string} text - string containing safeXml characters * @returns {string} a string with safeXml characters parsed. * @static */ static convertOldXmlinitialtextAttribute(text) { - // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x. - // This could be removed in future. - const val = "value="; - const xitpos = text.indexOf("xmlinitialtext"); - const valpos = text.indexOf(val, xitpos); - const quote = text.charAt(valpos + val.length); - const startquote = valpos + val.length + 1; - const endquote = text.indexOf(quote, startquote); - const value = text.substring(startquote, endquote); - let newvalue = value.split("«").join("§lt;"); - newvalue = newvalue.split("»").join("§gt;"); - newvalue = newvalue.split("&").join("§"); - newvalue = newvalue.split("¨").join("§quot;"); - text = text.split(value).join(newvalue); - return text; - } - /** + // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x. + // This could be removed in future. + const val = "value="; + const xitpos = text.indexOf("xmlinitialtext"); + const valpos = text.indexOf(val, xitpos); + const quote = text.charAt(valpos + val.length); + const startquote = valpos + val.length + 1; + const endquote = text.indexOf(quote, startquote); + const value = text.substring(startquote, endquote); + let newvalue = value.split("«").join("§lt;"); + newvalue = newvalue.split("»").join("§gt;"); + newvalue = newvalue.split("&").join("§"); + newvalue = newvalue.split("¨").join("§quot;"); + text = text.split(value).join(newvalue); + return text; + } + /** * Convert a string representation of key-value pairs to an object. * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2' * @returns {Object} - Object containing the key-value pairs */ static convertStringToObject(keyValueString) { - if (!keyValueString || typeof keyValueString !== "string") { - return {}; - } - return keyValueString - .split(",") - .map((pair) => pair.trim().split("=")) - .reduce((resultObject, [key, value]) => { - if (key && value) { - resultObject[key] = value; - } - return resultObject; - }, {}); - } - /** + if (!keyValueString || typeof keyValueString !== "string") { + return {}; + } + return keyValueString.split(",").map((pair)=>pair.trim().split("=")).reduce((resultObject, [key, value])=>{ + if (key && value) { + resultObject[key] = value; + } + return resultObject; + }, {}); + } + /** * Cross-browser solution for creating new elements. * @param {string} tagName - tag name of the wished element. * @param {Object} attributes - an object where each key is a wished @@ -4310,286 +4193,289 @@ var translations = { * @returns {Element} The DOM element with the specified attributes assigned. * @static */ static createElement(tagName, attributes, creator) { - if (attributes === undefined) { - attributes = {}; - } - if (creator === undefined) { - creator = document; - } - let element; - /* + if (attributes === undefined) { + attributes = {}; + } + if (creator === undefined) { + creator = document; + } + let element; + /* * Internet Explorer fix: * If you create a new object dynamically, you can't set a non-standard attribute. * For example, you can't set the "src" attribute on an "applet" object. * Other browsers will throw an exception and will run the standard code. */ try { - let html = `<${tagName}`; - Object.keys(attributes).forEach((attributeName) => { - html += ` ${attributeName}="${Util.htmlEntities(attributes[attributeName])}"`; - }); - html += ">"; - element = creator.createElement(html); - } catch (e) { - element = creator.createElement(tagName); - Object.keys(attributes).forEach((attributeName) => { - element.setAttribute(attributeName, attributes[attributeName]); - }); - } - return element; - } - /** + let html = `<${tagName}`; + Object.keys(attributes).forEach((attributeName)=>{ + html += ` ${attributeName}="${Util.htmlEntities(attributes[attributeName])}"`; + }); + html += ">"; + element = creator.createElement(html); + } catch (e) { + element = creator.createElement(tagName); + Object.keys(attributes).forEach((attributeName)=>{ + element.setAttribute(attributeName, attributes[attributeName]); + }); + } + return element; + } + /** * Creates new HTML from it's HTML code as string. * @param {string} objectCode - html code * @returns {Element} the HTML element. * @static */ static createObject(objectCode, creator) { - if (creator === undefined) { - creator = document; - } - // Internet Explorer can't include "param" tag when is setting an innerHTML property. - objectCode = objectCode - .split("").join("").split("").join(""); - objectCode = objectCode - .split("").join("
").split("").join("
"); - const container = Util.createElement("div", {}, creator); - container.innerHTML = objectCode; - function recursiveParamsFix(object) { - if (object.getAttribute && object.getAttribute("wirisObject") === "WirisParam") { - const attributesParsed = {}; - for (let i = 0; i < object.attributes.length; i += 1) { - if (object.attributes[i].nodeValue !== null) { - attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; - } - } - const param = Util.createElement("param", attributesParsed, creator); - // IE fix. - if (param.NAME) { - param.name = param.NAME; - param.value = param.VALUE; - } - param.removeAttribute("wirisObject"); - object.parentNode.replaceChild(param, object); - } else if (object.getAttribute && object.getAttribute("wirisObject") === "WirisApplet") { - const attributesParsed = {}; - for (let i = 0; i < object.attributes.length; i += 1) { - if (object.attributes[i].nodeValue !== null) { - attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; - } - } - const applet = Util.createElement("applet", attributesParsed, creator); - applet.removeAttribute("wirisObject"); - for (let i = 0; i < object.childNodes.length; i += 1) { - recursiveParamsFix(object.childNodes[i]); - if (object.childNodes[i].nodeName.toLowerCase() === "param") { - applet.appendChild(object.childNodes[i]); - i -= 1; // When we insert the object child into the applet, object loses one child. - } - } - object.parentNode.replaceChild(applet, object); - } else { - for (let i = 0; i < object.childNodes.length; i += 1) { - recursiveParamsFix(object.childNodes[i]); - } - } - } - recursiveParamsFix(container); - return container.firstChild; - } - /** + if (creator === undefined) { + creator = document; + } + // Internet Explorer can't include "param" tag when is setting an innerHTML property. + objectCode = objectCode.split("").join("").split("").join(""); + objectCode = objectCode.split("").join("
").split("").join("
"); + const container = Util.createElement("div", {}, creator); + container.innerHTML = objectCode; + function recursiveParamsFix(object) { + if (object.getAttribute && object.getAttribute("wirisObject") === "WirisParam") { + const attributesParsed = {}; + for(let i = 0; i < object.attributes.length; i += 1){ + if (object.attributes[i].nodeValue !== null) { + attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; + } + } + const param = Util.createElement("param", attributesParsed, creator); + // IE fix. + if (param.NAME) { + param.name = param.NAME; + param.value = param.VALUE; + } + param.removeAttribute("wirisObject"); + object.parentNode.replaceChild(param, object); + } else if (object.getAttribute && object.getAttribute("wirisObject") === "WirisApplet") { + const attributesParsed = {}; + for(let i = 0; i < object.attributes.length; i += 1){ + if (object.attributes[i].nodeValue !== null) { + attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; + } + } + const applet = Util.createElement("applet", attributesParsed, creator); + applet.removeAttribute("wirisObject"); + for(let i = 0; i < object.childNodes.length; i += 1){ + recursiveParamsFix(object.childNodes[i]); + if (object.childNodes[i].nodeName.toLowerCase() === "param") { + applet.appendChild(object.childNodes[i]); + i -= 1; // When we insert the object child into the applet, object loses one child. + } + } + object.parentNode.replaceChild(applet, object); + } else { + for(let i = 0; i < object.childNodes.length; i += 1){ + recursiveParamsFix(object.childNodes[i]); + } + } + } + recursiveParamsFix(container); + return container.firstChild; + } + /** * Converts an Element to its HTML code. * @param {Element} element - entry element. * @return {string} the HTML code of the input element. * @static */ static createObjectCode(element) { - // In case that the image was not created, the object can be null or undefined. - if (typeof element === "undefined" || element === null) { - return null; - } - if (element.nodeType === 1) { - // ELEMENT_NODE. - let output = `<${element.tagName}`; - for (let i = 0; i < element.attributes.length; i += 1) { - if (element.attributes[i].specified) { - output += ` ${element.attributes[i].name}="${Util.htmlEntities(element.attributes[i].value)}"`; - } - } - if (element.childNodes.length > 0) { - output += ">"; - for (let i = 0; i < element.childNodes.length; i += 1) { - output += Util.createObject(element.childNodes[i]); - } - output += ``; - } else if (element.nodeName === "DIV" || element.nodeName === "SCRIPT") { - output += `>`; - } else { - output += "/>"; - } - return output; - } - if (element.nodeType === 3) { - // TEXT_NODE. - return Util.htmlEntities(element.nodeValue); - } - return ""; - } - /** + // In case that the image was not created, the object can be null or undefined. + if (typeof element === "undefined" || element === null) { + return null; + } + if (element.nodeType === 1) { + // ELEMENT_NODE. + let output = `<${element.tagName}`; + for(let i = 0; i < element.attributes.length; i += 1){ + if (element.attributes[i].specified) { + output += ` ${element.attributes[i].name}="${Util.htmlEntities(element.attributes[i].value)}"`; + } + } + if (element.childNodes.length > 0) { + output += ">"; + for(let i = 0; i < element.childNodes.length; i += 1){ + output += Util.createObject(element.childNodes[i]); + } + output += ``; + } else if (element.nodeName === "DIV" || element.nodeName === "SCRIPT") { + output += `>`; + } else { + output += "/>"; + } + return output; + } + if (element.nodeType === 3) { + // TEXT_NODE. + return Util.htmlEntities(element.nodeValue); + } + return ""; + } + /** * Concatenates two URL paths. * @param {string} path1 - first URL path * @param {string} path2 - second URL path * @returns {string} new URL. */ static concatenateUrl(path1, path2) { - let separator = ""; - if (path1.indexOf("/") !== path1.length && path2.indexOf("/") !== 0) { - separator = "/"; + let separator = ""; + if (path1.indexOf("/") !== path1.length && path2.indexOf("/") !== 0) { + separator = "/"; + } + return (path1 + separator + path2).replace(/([^:]\/)\/+/g, "$1"); } - return (path1 + separator + path2).replace(/([^:]\/)\/+/g, "$1"); - } - /** + /** * Parses a text and replaces all HTML special characters by their correspondent entities. * @param {string} input - text to be parsed. * @returns {string} the input text with all their special characters replaced by their entities. * @static */ static htmlEntities(input) { - return input.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join("""); - } - /** + return input.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join("""); + } + /** * Sanitize HTML to prevent XSS injections. * @param {string} html - html to be sanitize. * @returns {string} html sanitized. * @static */ static htmlSanitize(html) { - let annotationRegex = /\/; - // Get all the annotation content including the tags. - let annotation = html.match(annotationRegex); - // Sanitize html code without removing our supported MathML tags and attributes. - html = purifyExports.sanitize(html, { - ADD_TAGS: ["semantics", "annotation", "mstack", "msline", "msrow"], - ADD_ATTR: ["linebreak", "charalign", "stackalign"], - }); - // Readd old annotation content. - return html.replace(annotationRegex, annotation); - } - /** + let annotationRegex = /\/; + // Get all the annotation content including the tags. + let annotation = html.match(annotationRegex); + // Sanitize html code without removing our supported MathML tags and attributes. + html = purifyExports.sanitize(html, { + ADD_TAGS: [ + "semantics", + "annotation", + "mstack", + "msline", + "msrow", + "none" + ], + ADD_ATTR: [ + "linebreak", + "charalign", + "stackalign" + ] + }); + // Readd old annotation content. + return html.replace(annotationRegex, annotation); + } + /** * Parses a text and replaces all the HTML entities by their characters. * @param {string} input - text to be parsed * @returns {string} the input text with all their entities replaced by characters. * @static */ static htmlEntitiesDecode(input) { - // Textarea element decodes when inner html is set. - const textarea = document.createElement("textarea"); - textarea.innerHTML = input; - return textarea.value; - } - /** + // Textarea element decodes when inner html is set. + const textarea = document.createElement("textarea"); + textarea.innerHTML = input; + return textarea.value; + } + /** * Returns a cross-browser http request. * @return {object} httpRequest request object. * @returns {XMLHttpRequest|ActiveXObject} the proper request object. */ static createHttpRequest() { - const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); - if (currentPath.substr(0, 7) === "file://") { - throw StringManager.get("exception_cross_site"); - } - if (typeof XMLHttpRequest !== "undefined") { - return new XMLHttpRequest(); - } - try { - return new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { - try { - return new ActiveXObject("Microsoft.XMLHTTP"); - } catch (oc) { - return null; - } + const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); + if (currentPath.substr(0, 7) === "file://") { + throw StringManager.get("exception_cross_site"); + } + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } + try { + return new ActiveXObject("Msxml2.XMLHTTP"); + } catch (e) { + try { + return new ActiveXObject("Microsoft.XMLHTTP"); + } catch (oc) { + return null; + } + } } - } - /** + /** * Converts a hash to a HTTP query. * @param {Object[]} properties - a key/value object. * @returns {string} a HTTP query containing all the key value pairs with * all the special characters replaced by their entities. * @static */ static httpBuildQuery(properties) { - let result = ""; - Object.keys(properties).forEach((i) => { - if (properties[i] != null) { - result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`; - } - }); - // Deleting last '&' empty character. - if (result.substring(result.length - 1) === "&") { - result = result.substring(0, result.length - 1); + let result = ""; + Object.keys(properties).forEach((i)=>{ + if (properties[i] != null) { + result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`; + } + }); + // Deleting last '&' empty character. + if (result.substring(result.length - 1) === "&") { + result = result.substring(0, result.length - 1); + } + return result; } - return result; - } - /** + /** * Convert a hash to string sorting keys to get a deterministic output * @param {Object[]} hash - a key/value object. * @returns {string} a string with the form key1=value1...keyn=valuen * @static */ static propertiesToString(hash) { - // 1. Sort keys. We sort the keys because we want a deterministic output. - const keys = []; - Object.keys(hash).forEach((key) => { - if (Object.prototype.hasOwnProperty.call(hash, key)) { - keys.push(key); - } - }); - const n = keys.length; - for (let i = 0; i < n; i += 1) { - for (let j = i + 1; j < n; j += 1) { - const s1 = keys[i]; - const s2 = keys[j]; - if (Util.compareStrings(s1, s2) > 0) { - // Swap. - keys[i] = s2; - keys[j] = s1; - } - } - } - // 2. Generate output. - let output = ""; - for (let i = 0; i < n; i += 1) { - const key = keys[i]; - output += key; - output += "="; - let value = hash[key]; - value = value.replace("\\", "\\\\"); - value = value.replace("\n", "\\n"); - value = value.replace("\r", "\\r"); - value = value.replace("\t", "\\t"); - output += value; - output += "\n"; - } - return output; - } - /** + // 1. Sort keys. We sort the keys because we want a deterministic output. + const keys = []; + Object.keys(hash).forEach((key)=>{ + if (Object.prototype.hasOwnProperty.call(hash, key)) { + keys.push(key); + } + }); + const n = keys.length; + for(let i = 0; i < n; i += 1){ + for(let j = i + 1; j < n; j += 1){ + const s1 = keys[i]; + const s2 = keys[j]; + if (Util.compareStrings(s1, s2) > 0) { + // Swap. + keys[i] = s2; + keys[j] = s1; + } + } + } + // 2. Generate output. + let output = ""; + for(let i = 0; i < n; i += 1){ + const key = keys[i]; + output += key; + output += "="; + let value = hash[key]; + value = value.replace("\\", "\\\\"); + value = value.replace("\n", "\\n"); + value = value.replace("\r", "\\r"); + value = value.replace("\t", "\\t"); + output += value; + output += "\n"; + } + return output; + } + /** * Compare two strings using charCodeAt method * @param {string} a - first string to compare. * @param {string} b - second string to compare. * @returns {number} the difference between a and b * @static */ static compareStrings(a, b) { - let i; - const an = a.length; - const bn = b.length; - const n = an > bn ? bn : an; - for (i = 0; i < n; i += 1) { - const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i); - if (c !== 0) { - return c; - } - } - return a.length - b.length; - } - /** + let i; + const an = a.length; + const bn = b.length; + const n = an > bn ? bn : an; + for(i = 0; i < n; i += 1){ + const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i); + if (c !== 0) { + return c; + } + } + return a.length - b.length; + } + /** * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters. * @param {string} string - input string * @param {number} idx - an integer greater than or equal to 0 @@ -4597,50 +4483,50 @@ var translations = { * @returns {number} an integer representing the UTF-16 code of the string at the given index. * @static */ static fixedCharCodeAt(string, idx) { - idx = idx || 0; - const code = string.charCodeAt(idx); - let hi; - let low; - /* High surrogate (could change last hex to 0xDB7F to treat high + idx = idx || 0; + const code = string.charCodeAt(idx); + let hi; + let low; + /* High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters) */ if (code >= 0xd800 && code <= 0xdbff) { - hi = code; - low = string.charCodeAt(idx + 1); - if (Number.isNaN(low)) { - throw StringManager.get("exception_high_surrogate"); - } - return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000; - } - if (code >= 0xdc00 && code <= 0xdfff) { - // Low surrogate. - /* We return false to allow loops to skip this iteration since should have + hi = code; + low = string.charCodeAt(idx + 1); + if (Number.isNaN(low)) { + throw StringManager.get("exception_high_surrogate"); + } + return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000; + } + if (code >= 0xdc00 && code <= 0xdfff) { + // Low surrogate. + /* We return false to allow loops to skip this iteration since should have already handled high surrogate above in the previous iteration. */ return false; + } + return code; } - return code; - } - /** + /** * Returns an URL with it's query params converted into array. * @param {string} url - input URL. * @returns {Object[]} an array containing all URL query params. * @static */ static urlToAssArray(url) { - let i; - i = url.indexOf("?"); - if (i > 0) { - const query = url.substring(i + 1); - const ss = query.split("&"); - const h = {}; - for (i = 0; i < ss.length; i += 1) { - const s = ss[i]; - const kv = s.split("="); - if (kv.length > 1) { - h[kv[0]] = decodeURIComponent(kv[1].replace(/\+/g, " ")); - } - } - return h; - } - return {}; - } - /** + let i; + i = url.indexOf("?"); + if (i > 0) { + const query = url.substring(i + 1); + const ss = query.split("&"); + const h = {}; + for(i = 0; i < ss.length; i += 1){ + const s = ss[i]; + const kv = s.split("="); + if (kv.length > 1) { + h[kv[0]] = decodeURIComponent(kv[1].replace(/\+/g, " ")); + } + } + return h; + } + return {}; + } + /** * Returns an encoded URL by replacing each instance of certain characters by * one, two, three or four escape sequences using encodeURIComponent method. * !'()* . will not be encoded. @@ -4649,13 +4535,13 @@ var translations = { * @returns {string} URL with it's special characters replaced. * @static */ static urlEncode(clearString) { - let output = ""; - // Method encodeURIComponent doesn't encode !'()*~ . - output = encodeURIComponent(clearString); - return output; - } - // TODO: To parser? - /** + let output = ""; + // Method encodeURIComponent doesn't encode !'()*~ . + output = encodeURIComponent(clearString); + return output; + } + // TODO: To parser? + /** * Converts the HTML of a image into the output code that WIRIS must return. * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula) * or the Wiriscas attribute of a WIRIS applet. @@ -4665,61 +4551,58 @@ var translations = { * @returns {string} the XML or safeXML of a WIRIS image. * @static */ static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) { - const imgObject = Util.createObject(imgCode); - if (imgObject) { - if ( - imgObject.className === Configuration.get("imageClassName") || - imgObject.getAttribute(Configuration.get("imageMathmlAttribute")) - ) { - if (!convertToXml) { - return imgCode; - } - const dataMathML = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); - // To handle annotations, first we need the MathML in XML. - let mathML = MathML.safeXmlDecode(dataMathML); - if (!Configuration.get("saveHandTraces")) { - mathML = MathML.removeAnnotation(mathML, "application/json"); - } - if (mathML == null) { - mathML = imgObject.getAttribute("alt"); - } - if (convertToSafeXml) { - const safeMathML = MathML.safeXmlEncode(mathML); - return safeMathML; - } - return mathML; - } - } - return imgCode; - } - /** + const imgObject = Util.createObject(imgCode); + if (imgObject) { + if (imgObject.className === Configuration.get("imageClassName") || imgObject.getAttribute(Configuration.get("imageMathmlAttribute"))) { + if (!convertToXml) { + return imgCode; + } + const dataMathML = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); + // To handle annotations, first we need the MathML in XML. + let mathML = MathML.safeXmlDecode(dataMathML); + if (!Configuration.get("saveHandTraces")) { + mathML = MathML.removeAnnotation(mathML, "application/json"); + } + if (mathML == null) { + mathML = imgObject.getAttribute("alt"); + } + if (convertToSafeXml) { + const safeMathML = MathML.safeXmlEncode(mathML); + return safeMathML; + } + return mathML; + } + } + return imgCode; + } + /** * Gets the node length in characters. * @param {Node} node - HTML node. * @returns {number} node length. * @static */ static getNodeLength(node) { - const staticNodeLengths = { - IMG: 1, - BR: 1, - }; - if (node.nodeType === 3) { - // TEXT_NODE. - return node.nodeValue.length; - } - if (node.nodeType === 1) { - // ELEMENT_NODE. - let length = staticNodeLengths[node.nodeName.toUpperCase()]; - if (length === undefined) { - length = 0; - } - for (let i = 0; i < node.childNodes.length; i += 1) { - length += Util.getNodeLength(node.childNodes[i]); - } - return length; - } - return 0; - } - /** + const staticNodeLengths = { + IMG: 1, + BR: 1 + }; + if (node.nodeType === 3) { + // TEXT_NODE. + return node.nodeValue.length; + } + if (node.nodeType === 1) { + // ELEMENT_NODE. + let length = staticNodeLengths[node.nodeName.toUpperCase()]; + if (length === undefined) { + length = 0; + } + for(let i = 0; i < node.childNodes.length; i += 1){ + length += Util.getNodeLength(node.childNodes[i]); + } + return length; + } + return 0; + } + /** * Gets a selected node or text from an editable HTMLElement. * If the caret is on a text node, concatenates it with all the previous and next text nodes. * @param {HTMLElement} target - the editable HTMLElement. @@ -4730,113 +4613,106 @@ var translations = { * element or the keys 'node' and 'caretPosition' if the element is text. * @static */ static getSelectedItem(target, isIframe, forceGetSelection) { - let windowTarget; - if (isIframe) { - windowTarget = target.contentWindow; - windowTarget.focus(); - } else { - windowTarget = window; - target.focus(); - } - if (document.selection && !forceGetSelection) { - const range = windowTarget.document.selection.createRange(); - if (range.parentElement) { - if (range.htmlText.length > 0) { - if (range.text.length === 0) { - return Util.getSelectedItem(target, isIframe, true); - } - return null; - } - windowTarget.document.execCommand("InsertImage", false, "#"); - let temporalObject = range.parentElement(); - if (temporalObject.nodeName.toUpperCase() !== "IMG") { - // IE9 fix: parentElement() does not return the IMG node, - // returns the parent DIV node. In IE < 9, pasteHTML does not work well. - range.pasteHTML(''); - temporalObject = windowTarget.document.getElementById("wrs_openEditorWindow_temporalObject"); - } - let node; - let caretPosition; - if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) { - // TEXT_NODE. - node = temporalObject.nextSibling; - caretPosition = 0; - } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) { - node = temporalObject.previousSibling; - caretPosition = node.nodeValue.length; + let windowTarget; + if (isIframe) { + windowTarget = target.contentWindow; + windowTarget.focus(); } else { - node = windowTarget.document.createTextNode(""); - temporalObject.parentNode.insertBefore(node, temporalObject); - caretPosition = 0; + windowTarget = window; + target.focus(); + } + if (document.selection && !forceGetSelection) { + const range = windowTarget.document.selection.createRange(); + if (range.parentElement) { + if (range.htmlText.length > 0) { + if (range.text.length === 0) { + return Util.getSelectedItem(target, isIframe, true); + } + return null; + } + windowTarget.document.execCommand("InsertImage", false, "#"); + let temporalObject = range.parentElement(); + if (temporalObject.nodeName.toUpperCase() !== "IMG") { + // IE9 fix: parentElement() does not return the IMG node, + // returns the parent DIV node. In IE < 9, pasteHTML does not work well. + range.pasteHTML(''); + temporalObject = windowTarget.document.getElementById("wrs_openEditorWindow_temporalObject"); + } + let node; + let caretPosition; + if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) { + // TEXT_NODE. + node = temporalObject.nextSibling; + caretPosition = 0; + } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) { + node = temporalObject.previousSibling; + caretPosition = node.nodeValue.length; + } else { + node = windowTarget.document.createTextNode(""); + temporalObject.parentNode.insertBefore(node, temporalObject); + caretPosition = 0; + } + temporalObject.parentNode.removeChild(temporalObject); + return { + node, + caretPosition + }; + } + if (range.length > 1) { + return null; + } + return { + node: range.item(0) + }; } - temporalObject.parentNode.removeChild(temporalObject); - return { - node, - caretPosition, - }; - } - if (range.length > 1) { - return null; - } - return { - node: range.item(0), - }; - } - if (windowTarget.getSelection) { - let range; - const selection = windowTarget.getSelection(); - try { - range = selection.getRangeAt(0); - } catch (e) { - range = windowTarget.document.createRange(); - } - const node = range.startContainer; - if (node.nodeType === 3) { - // TEXT_NODE. - return { - node, - caretPosition: range.startOffset, - }; - } - if (node !== range.endContainer) { - return null; - } - if (node.nodeType === 1) { - // ELEMENT_NODE. - const position = range.startOffset; - if (node.childNodes[position]) { - // In case that a formula is detected but not selected, - // we create an empty span where we could insert the new formula. - if (range.startOffset === range.endOffset) { - if ( - position !== 0 && - node.childNodes[position - 1].localName === "span" && - node.childNodes[position].classList?.contains("Wirisformula") - ) { - node.childNodes[position - 1].remove(); - return Util.getSelectedItem(target, isIframe, forceGetSelection); - } else if (node.childNodes[position].classList?.contains("Wirisformula")) { - if ( - (position > 0 && node.childNodes[position - 1].classList?.contains("Wirisformula")) || - position === 0 - ) { - var emptySpan = document.createElement("span"); - node.insertBefore(emptySpan, node.childNodes[position]); + if (windowTarget.getSelection) { + let range; + const selection = windowTarget.getSelection(); + try { + range = selection.getRangeAt(0); + } catch (e) { + range = windowTarget.document.createRange(); + } + const node = range.startContainer; + if (node.nodeType === 3) { + // TEXT_NODE. return { - node: node.childNodes[position], + node, + caretPosition: range.startOffset }; - } } - } - return { - node: node.childNodes[position], - }; + if (node !== range.endContainer) { + return null; + } + if (node.nodeType === 1) { + // ELEMENT_NODE. + const position = range.startOffset; + if (node.childNodes[position]) { + // In case that a formula is detected but not selected, + // we create an empty span where we could insert the new formula. + if (range.startOffset === range.endOffset) { + if (position !== 0 && node.childNodes[position - 1].localName === "span" && node.childNodes[position].classList?.contains("Wirisformula")) { + node.childNodes[position - 1].remove(); + return Util.getSelectedItem(target, isIframe, forceGetSelection); + } else if (node.childNodes[position].classList?.contains("Wirisformula")) { + if (position > 0 && node.childNodes[position - 1].classList?.contains("Wirisformula") || position === 0) { + var emptySpan = document.createElement("span"); + node.insertBefore(emptySpan, node.childNodes[position]); + return { + node: node.childNodes[position] + }; + } + } + } + return { + node: node.childNodes[position] + }; + } + } } - } + return null; } - return null; - } - /** + /** * Returns null if there isn't any item or if it is malformed. * Otherwise returns an object containing the node with the MathML image * and the cursor position inside the textarea. @@ -4846,19 +4722,19 @@ var translations = { * text node. * @static */ static getSelectedItemOnTextarea(textarea) { - const textNode = document.createTextNode(textarea.value); - const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart); - if (textNodeValues === null) { - return null; + const textNode = document.createTextNode(textarea.value); + const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart); + if (textNodeValues === null) { + return null; + } + return { + node: textNode, + caretPosition: textarea.selectionStart, + startPosition: textNodeValues.startPosition, + endPosition: textNodeValues.endPosition + }; } - return { - node: textNode, - caretPosition: textarea.selectionStart, - startPosition: textNodeValues.startPosition, - endPosition: textNodeValues.endPosition, - }; - } - /** + /** * Looks for elements that match the given name in a HTML code string. * Important: this function is very concrete for WIRIS code. * It takes as preconditions lots of behaviors that are not the general case. @@ -4868,154 +4744,147 @@ var translations = { * @return {Object[]} an object containing all HTML elements of code matching the name argument. * @static */ static getElementsByNameFromString(code, name, autoClosed) { - const elements = []; - code = code.toLowerCase(); - name = name.toLowerCase(); - let start = code.indexOf(`<${name} `); - while (start !== -1) { - // Look for nodes. - let endString; - if (autoClosed) { - endString = ">"; - } else { - endString = ``; - } - let end = code.indexOf(endString, start); - if (end !== -1) { - end += endString.length; - elements.push({ - start, - end, - }); - } else { - end = start + 1; - } - start = code.indexOf(`<${name} `, end); - } - return elements; - } - /** + const elements = []; + code = code.toLowerCase(); + name = name.toLowerCase(); + let start = code.indexOf(`<${name} `); + while(start !== -1){ + // Look for nodes. + let endString; + if (autoClosed) { + endString = ">"; + } else { + endString = ``; + } + let end = code.indexOf(endString, start); + if (end !== -1) { + end += endString.length; + elements.push({ + start, + end + }); + } else { + end = start + 1; + } + start = code.indexOf(`<${name} `, end); + } + return elements; + } + /** * Returns the numeric value of a base64 character. * @param {string} character - base64 character. * @returns {number} base64 character numeric value. * @static */ static decode64(character) { - const PLUS = "+".charCodeAt(0); - const SLASH = "/".charCodeAt(0); - const NUMBER = "0".charCodeAt(0); - const LOWER = "a".charCodeAt(0); - const UPPER = "A".charCodeAt(0); - const PLUS_URL_SAFE = "-".charCodeAt(0); - const SLASH_URL_SAFE = "_".charCodeAt(0); - const code = character.charCodeAt(0); - if (code === PLUS || code === PLUS_URL_SAFE) { - return 62; // Char '+'. - } - if (code === SLASH || code === SLASH_URL_SAFE) { - return 63; // Char '/'. - } - if (code < NUMBER) { - return -1; // No match. - } - if (code < NUMBER + 10) { - return code - NUMBER + 26 + 26; - } - if (code < UPPER + 26) { - return code - UPPER; - } - if (code < LOWER + 26) { - return code - LOWER + 26; - } - return null; - } - /** + const PLUS = "+".charCodeAt(0); + const SLASH = "/".charCodeAt(0); + const NUMBER = "0".charCodeAt(0); + const LOWER = "a".charCodeAt(0); + const UPPER = "A".charCodeAt(0); + const PLUS_URL_SAFE = "-".charCodeAt(0); + const SLASH_URL_SAFE = "_".charCodeAt(0); + const code = character.charCodeAt(0); + if (code === PLUS || code === PLUS_URL_SAFE) { + return 62; // Char '+'. + } + if (code === SLASH || code === SLASH_URL_SAFE) { + return 63; // Char '/'. + } + if (code < NUMBER) { + return -1; // No match. + } + if (code < NUMBER + 10) { + return code - NUMBER + 26 + 26; + } + if (code < UPPER + 26) { + return code - UPPER; + } + if (code < LOWER + 26) { + return code - LOWER + 26; + } + return null; + } + /** * Converts a base64 string to a array of bytes. * @param {string} b64String - base64 string. * @param {number} length - dimension of byte array (by default whole string). * @return {Object[]} the resultant byte array. * @static */ static b64ToByteArray(b64String, length) { - let tmp; - if (b64String.length % 4 > 0) { - throw new Error("Invalid string. Length must be a multiple of 4"); // Tipped base64. Length is fixed. - } - const arr = []; - let l; - let placeHolders; - if (!length) { - // All b64String string. - if (b64String.charAt(b64String.length - 2) === "=") { - placeHolders = 2; - } else if (b64String.charAt(b64String.length - 1) === "=") { - placeHolders = 1; - } else { - placeHolders = 0; - } - l = placeHolders > 0 ? b64String.length - 4 : b64String.length; - } else { - l = length; - } - let i; - for (i = 0; i < l; i += 4) { - // Ignoring code checker standards (bitewise operators). - // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information. - // @codingStandardsIgnoreStart - // eslint-disable-next-line max-len - tmp = - (Util.decode64(b64String.charAt(i)) << 18) | - (Util.decode64(b64String.charAt(i + 1)) << 12) | - (Util.decode64(b64String.charAt(i + 2)) << 6) | - Util.decode64(b64String.charAt(i + 3)); - arr.push((tmp >> 16) & 0xff); - arr.push((tmp >> 8) & 0xff); - arr.push(tmp & 0xff); - // @codingStandardsIgnoreEnd - } - if (placeHolders) { - if (placeHolders === 2) { - // Ignoring code checker standards (bitewise operators). - // @codingStandardsIgnoreStart - // eslint-disable-next-line max-len - tmp = (Util.decode64(b64String.charAt(i)) << 2) | (Util.decode64(b64String.charAt(i + 1)) >> 4); - arr.push(tmp & 0xff); - } else if (placeHolders === 1) { - // eslint-disable-next-line max-len - tmp = - (Util.decode64(b64String.charAt(i)) << 10) | - (Util.decode64(b64String.charAt(i + 1)) << 4) | - (Util.decode64(b64String.charAt(i + 2)) >> 2); - arr.push((tmp >> 8) & 0xff); - arr.push(tmp & 0xff); + let tmp; + if (b64String.length % 4 > 0) { + throw new Error("Invalid string. Length must be a multiple of 4"); // Tipped base64. Length is fixed. + } + const arr = []; + let l; + let placeHolders; + if (!length) { + // All b64String string. + if (b64String.charAt(b64String.length - 2) === "=") { + placeHolders = 2; + } else if (b64String.charAt(b64String.length - 1) === "=") { + placeHolders = 1; + } else { + placeHolders = 0; + } + l = placeHolders > 0 ? b64String.length - 4 : b64String.length; + } else { + l = length; + } + let i; + for(i = 0; i < l; i += 4){ + // Ignoring code checker standards (bitewise operators). + // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information. + // @codingStandardsIgnoreStart + // eslint-disable-next-line max-len + tmp = Util.decode64(b64String.charAt(i)) << 18 | Util.decode64(b64String.charAt(i + 1)) << 12 | Util.decode64(b64String.charAt(i + 2)) << 6 | Util.decode64(b64String.charAt(i + 3)); + arr.push(tmp >> 16 & 0xff); + arr.push(tmp >> 8 & 0xff); + arr.push(tmp & 0xff); // @codingStandardsIgnoreEnd - } + } + if (placeHolders) { + if (placeHolders === 2) { + // Ignoring code checker standards (bitewise operators). + // @codingStandardsIgnoreStart + // eslint-disable-next-line max-len + tmp = Util.decode64(b64String.charAt(i)) << 2 | Util.decode64(b64String.charAt(i + 1)) >> 4; + arr.push(tmp & 0xff); + } else if (placeHolders === 1) { + // eslint-disable-next-line max-len + tmp = Util.decode64(b64String.charAt(i)) << 10 | Util.decode64(b64String.charAt(i + 1)) << 4 | Util.decode64(b64String.charAt(i + 2)) >> 2; + arr.push(tmp >> 8 & 0xff); + arr.push(tmp & 0xff); + // @codingStandardsIgnoreEnd + } + } + return arr; } - return arr; - } - /** + /** * Returns the first 32-bit signed integer from a byte array. * @param {Object[]} bytes - array of bytes. * @returns {number} the 32-bit signed integer. * @static */ static readInt32(bytes) { - if (bytes.length < 4) { - return false; - } - const int32 = bytes.splice(0, 4); - // @codingStandardsIgnoreStart¡ - return (int32[0] << 24) | (int32[1] << 16) | (int32[2] << 8) | (int32[3] << 0); + if (bytes.length < 4) { + return false; + } + const int32 = bytes.splice(0, 4); + // @codingStandardsIgnoreStart¡ + return int32[0] << 24 | int32[1] << 16 | int32[2] << 8 | int32[3] << 0; // @codingStandardsIgnoreEnd - } - /** + } + /** * Read the first byte from a byte array. * @param {Object} bytes - input byte array. * @returns {number} first byte of the byte array. * @static */ static readByte(bytes) { - // @codingStandardsIgnoreStart - return bytes.shift() << 0; + // @codingStandardsIgnoreStart + return bytes.shift() << 0; // @codingStandardsIgnoreEnd - } - /** + } + /** * Read an arbitrary number of bytes, from a fixed position on a byte array. * @param {Object[]} bytes - byte array. * @param {number} pos - start position. @@ -5023,30 +4892,30 @@ var translations = { * @returns {Object[]} the byte array. * @static */ static readBytes(bytes, pos, len) { - return bytes.splice(pos, len); - } - /** + return bytes.splice(pos, len); + } + /** * Inserts or modifies formulas or CAS on a textarea. * @param {HTMLTextAreaElement} textarea - textarea target. * @param {string} text - text to add in the textarea. For example, to add the link to the image, * call this function as (textarea, Parser.createImageSrc(mathml)); * @static */ static updateTextArea(textarea, text) { - if (textarea && text) { - textarea.focus(); - if (textarea.selectionStart != null) { - const { selectionEnd } = textarea; - const selectionStart = textarea.value.substring(0, textarea.selectionStart); - const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length); - textarea.value = selectionStart + text + selectionEndSub; - textarea.selectionEnd = selectionEnd + text.length; - } else { - const selection = document.selection.createRange(); - selection.text = text; - } - } - } - /** + if (textarea && text) { + textarea.focus(); + if (textarea.selectionStart != null) { + const { selectionEnd } = textarea; + const selectionStart = textarea.value.substring(0, textarea.selectionStart); + const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length); + textarea.value = selectionStart + text + selectionEndSub; + textarea.selectionEnd = selectionEnd + text.length; + } else { + const selection = document.selection.createRange(); + selection.text = text; + } + } + } + /** * Modifies existing formula on a textarea. * @param {HTMLTextAreaElement} textarea - text area target. * @param {string} text - text to add in the textarea. For example, if you want to add the link @@ -5056,26 +4925,26 @@ var translations = { * @param {number} end - ending index from textarea where it needs to be replaced by text * @static */ static updateExistingTextOnTextarea(textarea, text, start, end) { - textarea.focus(); - const textareaStart = textarea.value.substring(0, start); - textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length); - textarea.selectionEnd = start + text.length; - } - /** + textarea.focus(); + const textareaStart = textarea.value.substring(0, start); + textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length); + textarea.selectionEnd = start + text.length; + } + /** * Add a parameter with it's correspondent value to an URL (GET). * @param {string} path - URL path * @param {string} parameter - parameter * @param {string} value - value * @static */ static addArgument(path, parameter, value) { - let sep; - if (path.indexOf("?") > 0) { - sep = "&"; - } else { - sep = "?"; + let sep; + if (path.indexOf("?") > 0) { + sep = "&"; + } else { + sep = "?"; + } + return `${path + sep + parameter}=${value}`; } - return `${path + sep + parameter}=${value}`; - } } /** @@ -5093,248 +4962,246 @@ var translations = { * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64. * - A link to the showimage service. */ class Image { - /** + /** * Removes data attributes from an image. * @param {HTMLImageElement} img - Image where remove data attributes. */ static removeImgDataAttributes(img) { - const attributesToRemove = []; - const { attributes } = img; - Object.keys(attributes).forEach((key) => { - const attribute = attributes[key]; - if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf("data-") === 0) { - // Is preferred keep an array and remove after the search - // because when attribute is removed the array of attributes - // is modified. - attributesToRemove.push(attribute.name); - } - }); - attributesToRemove.forEach((attribute) => { - img.removeAttribute(attribute); - }); - } - /** + const attributesToRemove = []; + const { attributes } = img; + Object.keys(attributes).forEach((key)=>{ + const attribute = attributes[key]; + if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf("data-") === 0) { + // Is preferred keep an array and remove after the search + // because when attribute is removed the array of attributes + // is modified. + attributesToRemove.push(attribute.name); + } + }); + attributesToRemove.forEach((attribute)=>{ + img.removeAttribute(attribute); + }); + } + /** * @static * Clones all MathType image attributes from a HTMLImageElement to another. * @param {HTMLImageElement} originImg - The original image. * @param {HTMLImageElement} destImg - The destination image. */ static clone(originImg, destImg) { - const customEditorAttributeName = Configuration.get("imageCustomEditorName"); - if (!originImg.hasAttribute(customEditorAttributeName)) { - destImg.removeAttribute(customEditorAttributeName); - } - const mathmlAttributeName = Configuration.get("imageMathmlAttribute"); - const imgAttributes = [ - mathmlAttributeName, - customEditorAttributeName, - "alt", - "height", - "width", - "style", - "src", - "role", - ]; - imgAttributes.forEach((iterator) => { - const originAttribute = originImg.getAttribute(iterator); - if (originAttribute) { - destImg.setAttribute(iterator, originAttribute); - } - }); - } - /** + const customEditorAttributeName = Configuration.get("imageCustomEditorName"); + if (!originImg.hasAttribute(customEditorAttributeName)) { + destImg.removeAttribute(customEditorAttributeName); + } + const mathmlAttributeName = Configuration.get("imageMathmlAttribute"); + const imgAttributes = [ + mathmlAttributeName, + customEditorAttributeName, + "alt", + "height", + "width", + "style", + "src", + "role" + ]; + imgAttributes.forEach((iterator)=>{ + const originAttribute = originImg.getAttribute(iterator); + if (originAttribute) { + destImg.setAttribute(iterator, originAttribute); + } + }); + } + /** * Determines whether an img src contains an SVG. * @param {HTMLImageElement} img the img element to inspect * @returns true if the img src contains an SVG, false otherwise */ static isSvg(img) { - return img.src.startsWith("data:image/svg+xml;"); - } - /** + return img.src.startsWith("data:image/svg+xml;"); + } + /** * Determines whether an img src is encoded in base64 or not. * @param {HTMLImageElement} img the img element to inspect * @returns true if the img src is encoded in base64, false otherwise */ static isBase64(img) { - return img.src.startsWith("data:image/svg+xml;base64,") || img.src.startsWith("data:image/png;base64,"); - } - /** + return img.src.startsWith("data:image/svg+xml;base64,") || img.src.startsWith("data:image/png;base64,"); + } + /** * Calculates the metrics of a MathType image given the the service response and the image format. * @param {HTMLImageElement} img - The HTMLImageElement. * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL. * @param {Boolean} jsonResponse - True the response of the image service is a * JSON object. False otherwise. */ static setImgSize(img, uri, jsonResponse) { - let ar; - let base64String; - let bytes; - let svgString; - if (jsonResponse) { - // Cleaning data:image/png;base64. - if (Image.isSvg(img)) { - // SVG format. - // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string. - if (!Image.isBase64(img)) { - ar = Image.getMetricsFromSvgString(uri); + let ar; + let base64String; + let bytes; + let svgString; + if (jsonResponse) { + // Cleaning data:image/png;base64. + if (Image.isSvg(img)) { + // SVG format. + // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string. + if (!Image.isBase64(img)) { + ar = Image.getMetricsFromSvgString(uri); + } else { + base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); + svgString = ""; + bytes = Util.b64ToByteArray(base64String, base64String.length); + for(let i = 0; i < bytes.length; i += 1){ + svgString += String.fromCharCode(bytes[i]); + } + ar = Image.getMetricsFromSvgString(svgString); + } + // PNG format: we store all metrics information in the first 88 bytes. + } else { + base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); + bytes = Util.b64ToByteArray(base64String, 88); + ar = Image.getMetricsFromBytes(bytes); + } + // Backwards compatibility: we store the metrics into createimage response. } else { - base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); - svgString = ""; - bytes = Util.b64ToByteArray(base64String, base64String.length); - for (let i = 0; i < bytes.length; i += 1) { - svgString += String.fromCharCode(bytes[i]); - } - ar = Image.getMetricsFromSvgString(svgString); - } - // PNG format: we store all metrics information in the first 88 bytes. - } else { - base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); - bytes = Util.b64ToByteArray(base64String, 88); - ar = Image.getMetricsFromBytes(bytes); - } - // Backwards compatibility: we store the metrics into createimage response. - } else { - ar = Util.urlToAssArray(uri); - } - let width = ar.cw; - if (!width) { - return; - } - let height = ar.ch; - let baseline = ar.cb; - const { dpi } = ar; - if (dpi) { - width = (width * 96) / dpi; - height = (height * 96) / dpi; - baseline = (baseline * 96) / dpi; - } - img.width = width; - img.height = height; - img.style.verticalAlign = `-${height - baseline}px`; - } - /** + ar = Util.urlToAssArray(uri); + } + let width = ar.cw; + if (!width) { + return; + } + let height = ar.ch; + let baseline = ar.cb; + const { dpi } = ar; + if (dpi) { + width = width * 96 / dpi; + height = height * 96 / dpi; + baseline = baseline * 96 / dpi; + } + img.width = width; + img.height = height; + img.style.verticalAlign = `-${height - baseline}px`; + } + /** * Calculates the metrics of an image which has been resized. Is used to restore the original * metrics of a resized image. * @param {HTMLImageElement } img - The resized HTMLImageElement. */ static fixAfterResize(img) { - img.removeAttribute("style"); - img.removeAttribute("width"); - img.removeAttribute("height"); - // In order to avoid resize with max-width css property. - img.style.maxWidth = "none"; - const processImg = (img) => { - if (img.src.indexOf("data:image") !== -1) { - if (img.src.indexOf("data:image/svg+xml") !== -1) { - // Image is in base64: decode it in order to calculate the size, and then bring it back to base64 - // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it - // (which would actually make more sense for readibility and efficiency). - if (img.src.indexOf("data:image/svg+xml;base64,") !== -1) { - // 'data:image/svg+xml;base64,'.length === 26 - const base64String = img.getAttribute("src").substring(26); - const svgString = window.atob(base64String); - const encodedSvgString = encodeURIComponent(svgString); - img.setAttribute("src", `data:image/svg+xml;charset=utf8,${encodedSvgString}`); - // 'data:image/svg+xml;charset=utf8,'.length === 32. - const svg = decodeURIComponent(img.src.substring(32, img.src.length)); - Image.setImgSize(img, svg, true); - // Return src to base64! - img.setAttribute("src", `data:image/svg+xml;base64,${base64String}`); - } else { - // 'data:image/svg+xml;charset=utf8,'.length === 32. - const svg = decodeURIComponent(img.src.substring(32, img.src.length)); - Image.setImgSize(img, svg, true); - } + img.removeAttribute("style"); + img.removeAttribute("width"); + img.removeAttribute("height"); + // In order to avoid resize with max-width css property. + img.style.maxWidth = "none"; + const processImg = (img)=>{ + if (img.src.indexOf("data:image") !== -1) { + if (img.src.indexOf("data:image/svg+xml") !== -1) { + // Image is in base64: decode it in order to calculate the size, and then bring it back to base64 + // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it + // (which would actually make more sense for readibility and efficiency). + if (img.src.indexOf("data:image/svg+xml;base64,") !== -1) { + // 'data:image/svg+xml;base64,'.length === 26 + const base64String = img.getAttribute("src").substring(26); + const svgString = window.atob(base64String); + const encodedSvgString = encodeURIComponent(svgString); + img.setAttribute("src", `data:image/svg+xml;charset=utf8,${encodedSvgString}`); + // 'data:image/svg+xml;charset=utf8,'.length === 32. + const svg = decodeURIComponent(img.src.substring(32, img.src.length)); + Image.setImgSize(img, svg, true); + // Return src to base64! + img.setAttribute("src", `data:image/svg+xml;base64,${base64String}`); + } else { + // 'data:image/svg+xml;charset=utf8,'.length === 32. + const svg = decodeURIComponent(img.src.substring(32, img.src.length)); + Image.setImgSize(img, svg, true); + } + } else { + // 'data:image/png;base64,' === 22. + const base64 = img.src.substring(22, img.src.length); + Image.setImgSize(img, base64, true); + } + } else { + Image.setImgSize(img, img.src); + } + }; + // If the image doesn't contain a blob, just process it normally + if (img.src.indexOf("blob:") === -1) { + processImg(img); + // if it does contain a blob, then read that, replace the src with the decoded content, and process it } else { - // 'data:image/png;base64,' === 22. - const base64 = img.src.substring(22, img.src.length); - Image.setImgSize(img, base64, true); + let reader = new FileReader(); + reader.onload = function() { + img.setAttribute("src", reader.result); + processImg(img); + }; + fetch(img.src).then((r)=>r.blob()).then((blob)=>{ + reader.readAsDataURL(blob); + }); } - } else { - Image.setImgSize(img, img.src); - } - }; - // If the image doesn't contain a blob, just process it normally - if (img.src.indexOf("blob:") === -1) { - processImg(img); - // if it does contain a blob, then read that, replace the src with the decoded content, and process it - } else { - let reader = new FileReader(); - reader.onload = function () { - img.setAttribute("src", reader.result); - processImg(img); - }; - fetch(img.src) - .then((r) => r.blob()) - .then((blob) => { - reader.readAsDataURL(blob); - }); } - } - /** + /** * Returns the metrics (height, width and baseline) contained in a SVG image generated * by the MathType image service. This image contains as an extra custom attribute: * the baseline (wrs:baseline). * @param {String} svgString - The SVG image. * @return {Array} - The image metrics. */ static getMetricsFromSvgString(svgString) { - let first = svgString.indexOf('height="'); - let last = svgString.indexOf('"', first + 8, svgString.length); - const height = svgString.substring(first + 8, last); - first = svgString.indexOf('width="'); - last = svgString.indexOf('"', first + 7, svgString.length); - const width = svgString.substring(first + 7, last); - first = svgString.indexOf('wrs:baseline="'); - last = svgString.indexOf('"', first + 14, svgString.length); - const baseline = svgString.substring(first + 14, last); - if (typeof width !== "undefined") { - const arr = []; - arr.cw = width; - arr.ch = height; - if (typeof baseline !== "undefined") { - arr.cb = baseline; - } - return arr; - } - return []; - } - /** + let first = svgString.indexOf('height="'); + let last = svgString.indexOf('"', first + 8, svgString.length); + const height = svgString.substring(first + 8, last); + first = svgString.indexOf('width="'); + last = svgString.indexOf('"', first + 7, svgString.length); + const width = svgString.substring(first + 7, last); + first = svgString.indexOf('wrs:baseline="'); + last = svgString.indexOf('"', first + 14, svgString.length); + const baseline = svgString.substring(first + 14, last); + if (typeof width !== "undefined") { + const arr = []; + arr.cw = width; + arr.ch = height; + if (typeof baseline !== "undefined") { + arr.cb = baseline; + } + return arr; + } + return []; + } + /** * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array. * @param {Array.} bytes - png byte array. * @return {Array} The png metrics. */ static getMetricsFromBytes(bytes) { - Util.readBytes(bytes, 0, 8); - let width; - let height; - let typ; - let baseline; - let dpi; - while (bytes.length >= 4) { - typ = Util.readInt32(bytes); - if (typ === 0x49484452) { - width = Util.readInt32(bytes); - height = Util.readInt32(bytes); - // Read 5 bytes. - Util.readInt32(bytes); - Util.readByte(bytes); - } else if (typ === 0x62615345) { - // Baseline: 'baSE'. - baseline = Util.readInt32(bytes); - } else if (typ === 0x70485973) { - // Dpis: 'pHYs'. - dpi = Util.readInt32(bytes); - dpi = Math.round(dpi / 39.37); - Util.readInt32(bytes); - Util.readByte(bytes); - } - Util.readInt32(bytes); - } - if (typeof width !== "undefined") { - const arr = []; - arr.cw = width; - arr.ch = height; - arr.dpi = dpi; - if (baseline) { - arr.cb = baseline; - } - return arr; - } - return []; - } + Util.readBytes(bytes, 0, 8); + let width; + let height; + let typ; + let baseline; + let dpi; + while(bytes.length >= 4){ + typ = Util.readInt32(bytes); + if (typ === 0x49484452) { + width = Util.readInt32(bytes); + height = Util.readInt32(bytes); + // Read 5 bytes. + Util.readInt32(bytes); + Util.readByte(bytes); + } else if (typ === 0x62615345) { + // Baseline: 'baSE'. + baseline = Util.readInt32(bytes); + } else if (typ === 0x70485973) { + // Dpis: 'pHYs'. + dpi = Util.readInt32(bytes); + dpi = Math.round(dpi / 39.37); + Util.readInt32(bytes); + Util.readByte(bytes); + } + Util.readInt32(bytes); + } + if (typeof width !== "undefined") { + const arr = []; + arr.cw = width; + arr.ch = height; + arr.dpi = dpi; + if (baseline) { + arr.cb = baseline; + } + return arr; + } + return []; + } } /** @@ -5342,55 +5209,55 @@ var translations = { * This class represents MathType accessible class. Converts MathML to accessible text and manages * the associated client-side cache. */ class Accessibility { - /** + /** * Static property. * Accessibility cache, each entry contains a MathML and its correspondent accessibility text. * @type {TextCache} */ static get cache() { - return Accessibility._cache; - } - /** + return Accessibility._cache; + } + /** * Static property setter. * Set accessibility cache. * @param {TextCahe} value - The property value. * @ignore */ static set cache(value) { - Accessibility._cache = value; - } - /** + Accessibility._cache = value; + } + /** * Converts MathML strings to its accessible text representation. * @param {String} mathML - MathML to be converted to accessible text. * @param {String} [language] - Language of the accessible text. 'en' by default. * @param {Array.} [data] - Parameters to send to mathml2accessible service. * @return {String} Accessibility text. */ static mathMLToAccessible(mathML, language, data) { - if (typeof language === "undefined") { - language = "en"; - } - // Check MathML class. If the class is chemistry, - // we add chemistry to data to force accessibility service - // to load chemistry grammar. - if (MathML.containClass(mathML, "wrs_chemistry")) { - data.mode = "chemistry"; - } - // Ignore accesibility styles - data.ignoreStyles = true; - let accessibleText = ""; - if (Accessibility.cache.get(mathML)) { - accessibleText = Accessibility.cache.get(mathML); - } else { - data.service = "mathml2accessible"; - data.lang = language; - const accessibleJsonResponse = JSON.parse(ServiceProvider.getService("service", data)); - if (accessibleJsonResponse.status !== "error") { - accessibleText = accessibleJsonResponse.result.text; - Accessibility.cache.populate(mathML, accessibleText); - } else { - accessibleText = StringManager.get("error_convert_accessibility"); - } - } - return accessibleText; - } + if (typeof language === "undefined") { + language = "en"; + } + // Check MathML class. If the class is chemistry, + // we add chemistry to data to force accessibility service + // to load chemistry grammar. + if (MathML.containClass(mathML, "wrs_chemistry")) { + data.mode = "chemistry"; + } + // Ignore accesibility styles + data.ignoreStyles = true; + let accessibleText = ""; + if (Accessibility.cache.get(mathML)) { + accessibleText = Accessibility.cache.get(mathML); + } else { + data.service = "mathml2accessible"; + data.lang = language; + const accessibleJsonResponse = JSON.parse(ServiceProvider.getService("service", data)); + if (accessibleJsonResponse.status !== "error") { + accessibleText = accessibleJsonResponse.result.text; + Accessibility.cache.populate(mathML, accessibleText); + } else { + accessibleText = StringManager.get("error_convert_accessibility"); + } + } + return accessibleText; + } } /** * Contains an instance of TextCache class to manage the JavaScript accessible cache. @@ -5405,7 +5272,7 @@ var translations = { * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured * in the backend. */ class Parser { - /** + /** * Converts a MathML string to an img element. * @param {Document} creator - Document object to call createElement method. * @param {string} mathml - MathML code @@ -5414,87 +5281,80 @@ var translations = { * @returns {HTMLImageElement} the formula image corresponding to initial MathML string. * @static */ static mathmlToImgObject(creator, mathml, wirisProperties, language) { - const imgObject = creator.createElement("img"); - imgObject.align = "middle"; - imgObject.style.maxWidth = "none"; - let data = wirisProperties || {}; - // Take into account the backend config - const wirisEditorProperties = Configuration.get("editorParameters"); - data = { - ...wirisEditorProperties, - ...data, - }; - data.mml = mathml; - data.lang = language; - // Request metrics of the generated image. - data.metrics = "true"; - data.centerbaseline = "false"; - // Full base64 method (edit & save). - if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { - data.base64 = true; - } - // Render js params: _wrs_int_wirisProperties contains some js render params. - // Since MathML can support render params, js params should be send only to editor. - imgObject.className = Configuration.get("imageClassName"); - if (mathml.indexOf('class="') !== -1) { - // We check here if the MathML has been created from a customEditor (such chemistry) - // to add custom editor name attribute to img object (if necessary). - let mathmlSubstring = mathml.substring(mathml.indexOf('class="') + 'class="'.length, mathml.length); - mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('"')); - mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length); - imgObject.setAttribute(Configuration.get("imageCustomEditorName"), mathmlSubstring); - } - // Performance enabled. - if ( - Configuration.get("wirisPluginPerformance") && - (Configuration.get("saveMode") === "xml" || Configuration.get("saveMode") === "safeXml") - ) { - let result = JSON.parse(Parser.createShowImageSrc(data, language)); - if (result.status === "warning") { - // POST call. - // if the mathml is malformed, this function will throw an exception. - try { - result = JSON.parse(ServiceProvider.getService("showimage", data)); - } catch (e) { - return null; - } - } - ({ result } = result); - if (result.format === "png") { - imgObject.src = `data:image/png;base64,${result.content}`; - } else { - imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`; - } - imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); - Image.setImgSize(imgObject, result.content, true); - if (Configuration.get("enableAccessibility")) { - if (typeof result.alt === "undefined") { - imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); + const imgObject = creator.createElement("img"); + imgObject.align = "middle"; + imgObject.style.maxWidth = "none"; + let data = wirisProperties || {}; + // Take into account the backend config + const wirisEditorProperties = Configuration.get("editorParameters"); + data = { + ...wirisEditorProperties, + ...data + }; + data.mml = mathml; + data.lang = language; + // Request metrics of the generated image. + data.metrics = "true"; + data.centerbaseline = "false"; + // Full base64 method (edit & save). + if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { + data.base64 = true; + } + // Render js params: _wrs_int_wirisProperties contains some js render params. + // Since MathML can support render params, js params should be send only to editor. + imgObject.className = Configuration.get("imageClassName"); + if (mathml.indexOf('class="') !== -1) { + // We check here if the MathML has been created from a customEditor (such chemistry) + // to add custom editor name attribute to img object (if necessary). + let mathmlSubstring = mathml.substring(mathml.indexOf('class="') + 'class="'.length, mathml.length); + mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('"')); + mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length); + imgObject.setAttribute(Configuration.get("imageCustomEditorName"), mathmlSubstring); + } + // Performance enabled. + if (Configuration.get("wirisPluginPerformance") && (Configuration.get("saveMode") === "xml" || Configuration.get("saveMode") === "safeXml")) { + let result = JSON.parse(Parser.createShowImageSrc(data, language)); + if (result.status === "warning") { + // POST call. + // if the mathml is malformed, this function will throw an exception. + try { + result = JSON.parse(ServiceProvider.getService("showimage", data)); + } catch (e) { + return null; + } + } + ({ result } = result); + if (result.format === "png") { + imgObject.src = `data:image/png;base64,${result.content}`; + } else { + imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`; + } + imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + Image.setImgSize(imgObject, result.content, true); + if (Configuration.get("enableAccessibility")) { + if (typeof result.alt === "undefined") { + imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); + } else { + imgObject.alt = result.alt; + } + } } else { - imgObject.alt = result.alt; + const result = Parser.createImageSrc(mathml, data); + imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + imgObject.src = result; + Image.setImgSize(imgObject, result, Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default"); + if (Configuration.get("enableAccessibility")) { + imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); + } } - } - } else { - const result = Parser.createImageSrc(mathml, data); - imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); - imgObject.src = result; - Image.setImgSize( - imgObject, - result, - Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default", - ); - if (Configuration.get("enableAccessibility")) { - imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); - } - } - if (typeof Parser.observer !== "undefined") { - Parser.observer.observe(imgObject); - } - // Role math https://www.w3.org/TR/wai-aria/roles#math. - imgObject.setAttribute("role", "math"); - return imgObject; - } - /** + if (typeof Parser.observer !== "undefined") { + Parser.observer.observe(imgObject); + } + // Role math https://www.w3.org/TR/wai-aria/roles#math. + imgObject.setAttribute("role", "math"); + return imgObject; + } + /** * Returns the source to showimage service by calling createimage service. The * output of the createimage service is a URL path pointing to showimage service. * This method is called when performance is disabled. @@ -5502,20 +5362,20 @@ var translations = { * @param {Object[]} data - data object containing service parameters. * @returns {string} the showimage path. */ static createImageSrc(mathml, data) { - // Full base64 method (edit & save). - if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { - data.base64 = true; - } - let result = ServiceProvider.getService("createimage", data); - if (result.indexOf("@BASE@") !== -1) { - // Replacing '@BASE@' with the base URL of createimage. - const baseParts = ServiceProvider.getServicePath("createimage").split("/"); - baseParts.pop(); - result = result.split("@BASE@").join(baseParts.join("/")); - } - return result; - } - /** + // Full base64 method (edit & save). + if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { + data.base64 = true; + } + let result = ServiceProvider.getService("createimage", data); + if (result.indexOf("@BASE@") !== -1) { + // Replacing '@BASE@' with the base URL of createimage. + const baseParts = ServiceProvider.getServicePath("createimage").split("/"); + baseParts.pop(); + result = result.split("@BASE@").join(baseParts.join("/")); + } + return result; + } + /** * Parses initial HTML code. If the HTML contains data generated by WIRIS, * this data would be converted as following: *
@@ -5526,75 +5386,75 @@ var translations = {
    * @param {string} language - language to create image alt text.
    * @returns {string} HTML code with the original MathML converted into LaTeX and images.
    */ static initParse(code, language) {
-    /* Note: The code inside this function has been inverted.
+        /* Note: The code inside this function has been inverted.
     If you invert again the code then you cannot use correctly LaTeX
     in Moodle.
     */ code = Parser.initParseSaveMode(code, language);
-    return Parser.initParseEditMode(code);
-  }
-  /**
+        return Parser.initParseEditMode(code);
+    }
+    /**
    * Parses initial HTML code depending on the save mode. Transforms all MathML
    * occurrences for it's correspondent image or LaTeX.
    * @param {string} code - HTML code to be parsed
    * @param {string} language - language to create image alt text.
    * @returns {string} HTML code parsed.
    */ static initParseSaveMode(code, language) {
-    if (Configuration.get("saveMode")) {
-      // Converting XML to tags.
-      code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters);
-      code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters);
-      code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language);
-      code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language);
-      if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") {
-        code = Parser.codeImgTransform(code, "base642showimage");
-      }
-    }
-    return code;
-  }
-  /**
+        if (Configuration.get("saveMode")) {
+            // Converting XML to tags.
+            code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters);
+            code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters);
+            code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language);
+            code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language);
+            if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") {
+                code = Parser.codeImgTransform(code, "base642showimage");
+            }
+        }
+        return code;
+    }
+    /**
    * Parses initial HTML code depending on the edit mode.
    * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will
    * be converted into a LaTeX string instead of an image.
    * @param {string} code - HTML code containing MathML.
    * @returns {string} parsed HTML code.
    */ static initParseEditMode(code) {
-    if (Configuration.get("parseModes").indexOf("latex") !== -1) {
-      const imgList = Util.getElementsByNameFromString(code, "img", true);
-      const token = 'encoding="LaTeX">';
-      // While replacing images with latex, the indexes of the found images changes
-      // respecting the original code, so this carry is needed.
-      let carry = 0;
-      for (let i = 0; i < imgList.length; i += 1) {
-        const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry);
-        if (imgCode.indexOf(` class="${Configuration.get("imageClassName")}"`) !== -1) {
-          let mathmlStartToken = ` ${Configuration.get("imageMathmlAttribute")}="`;
-          let mathmlStart = imgCode.indexOf(mathmlStartToken);
-          if (mathmlStart === -1) {
-            mathmlStartToken = ' alt="';
-            mathmlStart = imgCode.indexOf(mathmlStartToken);
-          }
-          if (mathmlStart !== -1) {
-            mathmlStart += mathmlStartToken.length;
-            const mathmlEnd = imgCode.indexOf('"', mathmlStart);
-            const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd)));
-            let latexStartPosition = mathml.indexOf(token);
-            if (latexStartPosition !== -1) {
-              latexStartPosition += token.length;
-              const latexEndPosition = mathml.indexOf("", latexStartPosition);
-              const latex = mathml.substring(latexStartPosition, latexEndPosition);
-              const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`;
-              const start = code.substring(0, imgList[i].start + carry);
-              const end = code.substring(imgList[i].end + carry);
-              code = start + replaceText + end;
-              carry += replaceText.length - (imgList[i].end - imgList[i].start);
-            }
-          }
-        }
-      }
-    }
-    return code;
-  }
-  /**
+        if (Configuration.get("parseModes").indexOf("latex") !== -1) {
+            const imgList = Util.getElementsByNameFromString(code, "img", true);
+            const token = 'encoding="LaTeX">';
+            // While replacing images with latex, the indexes of the found images changes
+            // respecting the original code, so this carry is needed.
+            let carry = 0;
+            for(let i = 0; i < imgList.length; i += 1){
+                const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry);
+                if (imgCode.indexOf(` class="${Configuration.get("imageClassName")}"`) !== -1) {
+                    let mathmlStartToken = ` ${Configuration.get("imageMathmlAttribute")}="`;
+                    let mathmlStart = imgCode.indexOf(mathmlStartToken);
+                    if (mathmlStart === -1) {
+                        mathmlStartToken = ' alt="';
+                        mathmlStart = imgCode.indexOf(mathmlStartToken);
+                    }
+                    if (mathmlStart !== -1) {
+                        mathmlStart += mathmlStartToken.length;
+                        const mathmlEnd = imgCode.indexOf('"', mathmlStart);
+                        const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd)));
+                        let latexStartPosition = mathml.indexOf(token);
+                        if (latexStartPosition !== -1) {
+                            latexStartPosition += token.length;
+                            const latexEndPosition = mathml.indexOf("", latexStartPosition);
+                            const latex = mathml.substring(latexStartPosition, latexEndPosition);
+                            const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`;
+                            const start = code.substring(0, imgList[i].start + carry);
+                            const end = code.substring(imgList[i].end + carry);
+                            code = start + replaceText + end;
+                            carry += replaceText.length - (imgList[i].end - imgList[i].start);
+                        }
+                    }
+                }
+            }
+        }
+        return code;
+    }
+    /**
    * Parses end HTML code. The end HTML code is HTML code with embedded images
    * or LaTeX formulas created with MathType. 
* By default this method converts the formula images and LaTeX strings in MathML.
@@ -5602,52 +5462,52 @@ var translations = { * @param {string} code - HTML to be parsed * @returns {string} the HTML code parsed. */ static endParse(code) { - // Transform LaTeX ocurrences to MathML elements. - const codeEndParsedEditMode = Parser.endParseEditMode(code); - // Transform img elements to MathML elements. - const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode); - return codeEndParseSaveMode; - } - /** + // Transform LaTeX ocurrences to MathML elements. + const codeEndParsedEditMode = Parser.endParseEditMode(code); + // Transform img elements to MathML elements. + const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode); + return codeEndParseSaveMode; + } + /** * Parses end HTML code depending on the edit mode. * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML. * @param {string} code - HTML code to be parsed. * @returns {string} HTML code parsed. */ static endParseEditMode(code) { - // Converting LaTeX to images. - if (Configuration.get("parseModes").indexOf("latex") !== -1) { - let output = ""; - let endPosition = 0; - let startPosition = code.indexOf("$$"); - while (startPosition !== -1) { - output += code.substring(endPosition, startPosition); - endPosition = code.indexOf("$$", startPosition + 2); - if (endPosition !== -1) { - // Before, it was a condition here to execute the next codelines - // 'latex.indexOf('<') == -1'. - // We don't know why it was used, but seems to have a conflict with - // latex formulas that contains '<'. - const latex = code.substring(startPosition + 2, endPosition); - const decodedLatex = Util.htmlEntitiesDecode(latex); - let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true)); - if (!Configuration.get("saveHandTraces")) { - // Remove hand traces. - mathml = MathML.removeAnnotation(mathml, "application/json"); - } - output += mathml; - endPosition += 2; - } else { - output += "$$"; - endPosition = startPosition + 2; + // Converting LaTeX to images. + if (Configuration.get("parseModes").indexOf("latex") !== -1) { + let output = ""; + let endPosition = 0; + let startPosition = code.indexOf("$$"); + while(startPosition !== -1){ + output += code.substring(endPosition, startPosition); + endPosition = code.indexOf("$$", startPosition + 2); + if (endPosition !== -1) { + // Before, it was a condition here to execute the next codelines + // 'latex.indexOf('<') == -1'. + // We don't know why it was used, but seems to have a conflict with + // latex formulas that contains '<'. + const latex = code.substring(startPosition + 2, endPosition); + const decodedLatex = Util.htmlEntitiesDecode(latex); + let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true)); + if (!Configuration.get("saveHandTraces")) { + // Remove hand traces. + mathml = MathML.removeAnnotation(mathml, "application/json"); + } + output += mathml; + endPosition += 2; + } else { + output += "$$"; + endPosition = startPosition + 2; + } + startPosition = code.indexOf("$$", endPosition); + } + output += code.substring(endPosition, code.length); + code = output; } - startPosition = code.indexOf("$$", endPosition); - } - output += code.substring(endPosition, code.length); - code = output; + return code; } - return code; - } - /** + /** * Parses end HTML code depending on the save mode. Converts all * images into the element determined by the save mode: * - xml: Parses images formulas into MathML. @@ -5657,56 +5517,56 @@ var translations = { * @param {string} code - HTML code to be parsed * @returns {string} HTML code parsed. */ static endParseSaveMode(code) { - if (Configuration.get("saveMode")) { - if (Configuration.get("saveMode") === "safeXml") { - code = Parser.codeImgTransform(code, "img2mathml"); - } else if (Configuration.get("saveMode") === "xml") { - code = Parser.codeImgTransform(code, "img2mathml"); - } else if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") { - code = Parser.codeImgTransform(code, "img264"); - } - } - return code; - } - /** + if (Configuration.get("saveMode")) { + if (Configuration.get("saveMode") === "safeXml") { + code = Parser.codeImgTransform(code, "img2mathml"); + } else if (Configuration.get("saveMode") === "xml") { + code = Parser.codeImgTransform(code, "img2mathml"); + } else if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") { + code = Parser.codeImgTransform(code, "img264"); + } + } + return code; + } + /** * Auxiliar function that builds the data object to send to the showimage endpoint * @param {Object[]} data - object containing showimage service parameters. * @param {string} language - string containing the language of the formula. * @returns {Object} JSON object with the data to send to showimage. */ static createShowImageSrcData(data, language) { - const dataMd5 = {}; - const renderParams = [ - "mml", - "color", - "centerbaseline", - "zoom", - "dpi", - "fontSize", - "fontFamily", - "defaultStretchy", - "backgroundColor", - "format", - ]; - renderParams.forEach((param) => { - if (typeof data[param] !== "undefined") { - dataMd5[param] = data[param]; - } - }); - // Data variables to get. - const dataObject = {}; - Object.keys(data).forEach((key) => { - // We don't need mathml in this request we try to get cached. - // Only need the formula md5 calculated before. - if (key !== "mml") { - dataObject[key] = data[key]; - } - }); - dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5)); - dataObject.lang = typeof language === "undefined" ? "en" : language; - dataObject.version = Configuration.get("version"); - return dataObject; - } - /** + const dataMd5 = {}; + const renderParams = [ + "mml", + "color", + "centerbaseline", + "zoom", + "dpi", + "fontSize", + "fontFamily", + "defaultStretchy", + "backgroundColor", + "format" + ]; + renderParams.forEach((param)=>{ + if (typeof data[param] !== "undefined") { + dataMd5[param] = data[param]; + } + }); + // Data variables to get. + const dataObject = {}; + Object.keys(data).forEach((key)=>{ + // We don't need mathml in this request we try to get cached. + // Only need the formula md5 calculated before. + if (key !== "mml") { + dataObject[key] = data[key]; + } + }); + dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5)); + dataObject.lang = typeof language === "undefined" ? "en" : language; + dataObject.version = Configuration.get("version"); + return dataObject; + } + /** * Returns the result to call showimage service with the formula md5 as parameter. * The result could be: * - {'status' : warning'} : The image associated to the MathML md5 is not in cache. @@ -5715,84 +5575,84 @@ var translations = { * @param {string} language - string containing the language of the formula. * @returns {Object} JSON object containing showimage response. */ static createShowImageSrc(data, language) { - const dataObject = this.createShowImageSrcData(data, language); - const result = ServiceProvider.getService("showimage", Util.httpBuildQuery(dataObject), true); - return result; - } - /** + const dataObject = this.createShowImageSrcData(data, language); + const result = ServiceProvider.getService("showimage", Util.httpBuildQuery(dataObject), true); + return result; + } + /** * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src) * or showimage img tags (i.e with showimage.php on src) * @param {string} code - HTML code * @param {string} mode - base642showimage or img2mathml or img264 transform. * @returns {string} html - code transformed. */ static codeImgTransform(code, mode) { - let output = ""; - let endPosition = 0; - const pattern = /") { - endPosition = i + 1; - } - i += 1; - } - if (endPosition < startPosition) { - // The img tag is stripped. - output += code.substring(startPosition, code.length); + let output = ""; + let endPosition = 0; + const pattern = /") { + endPosition = i + 1; + } + i += 1; + } + if (endPosition < startPosition) { + // The img tag is stripped. + output += code.substring(startPosition, code.length); + return output; + } + let imgCode = code.substring(startPosition, endPosition); + const imgObject = Util.createObject(imgCode); + let xmlCode = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); + let convertToXml; + let convertToSafeXml; + if (mode === "base642showimage") { + if (xmlCode == null) { + xmlCode = imgObject.getAttribute("alt"); + } + xmlCode = MathML.safeXmlDecode(xmlCode); + imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null); + output += Util.createObjectCode(imgCode); + } else if (mode === "img2mathml") { + if (Configuration.get("saveMode")) { + if (Configuration.get("saveMode") === "safeXml") { + convertToXml = true; + convertToSafeXml = true; + } else if (Configuration.get("saveMode") === "xml") { + convertToXml = true; + convertToSafeXml = false; + } + } + output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml); + } else if (mode === "img264") { + if (xmlCode === null) { + xmlCode = imgObject.getAttribute("alt"); + } + xmlCode = MathML.safeXmlDecode(xmlCode); + const properties = {}; + properties.base64 = "true"; + imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null); + // Metrics. + Image.setImgSize(imgCode, imgCode.src, true); + output += Util.createObjectCode(imgCode); + } + } + output += code.substring(endPosition, code.length); return output; - } - let imgCode = code.substring(startPosition, endPosition); - const imgObject = Util.createObject(imgCode); - let xmlCode = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); - let convertToXml; - let convertToSafeXml; - if (mode === "base642showimage") { - if (xmlCode == null) { - xmlCode = imgObject.getAttribute("alt"); - } - xmlCode = MathML.safeXmlDecode(xmlCode); - imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null); - output += Util.createObjectCode(imgCode); - } else if (mode === "img2mathml") { - if (Configuration.get("saveMode")) { - if (Configuration.get("saveMode") === "safeXml") { - convertToXml = true; - convertToSafeXml = true; - } else if (Configuration.get("saveMode") === "xml") { - convertToXml = true; - convertToSafeXml = false; - } - } - output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml); - } else if (mode === "img264") { - if (xmlCode === null) { - xmlCode = imgObject.getAttribute("alt"); - } - xmlCode = MathML.safeXmlDecode(xmlCode); - const properties = {}; - properties.base64 = "true"; - imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null); - // Metrics. - Image.setImgSize(imgCode, imgCode.src, true); - output += Util.createObjectCode(imgCode); - } - } - output += code.substring(endPosition, code.length); - return output; - } - /** + } + /** * Converts all occurrences of MathML to the corresponding image. * @param {string} content - string with valid MathML code. * The MathML code doesn't contain semantics. @@ -5803,1068 +5663,1043 @@ var translations = { * @returns {string} The input string with all the MathML * occurrences replaced by the corresponding image. */ static parseMathmlToImg(content, characters, language) { - let output = ""; - const mathTagBegin = `${characters.tagOpener}math`; - const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; - let start = content.indexOf(mathTagBegin); - let end = 0; - while (start !== -1) { - output += content.substring(end, start); - // Avoid WIRIS images to be parsed. - const imageMathmlAtrribute = content.indexOf(Configuration.get("imageMathmlAttribute")); - end = content.indexOf(mathTagEnd, start); - if (end === -1) { - end = content.length - 1; - } else if (imageMathmlAtrribute !== -1) { - // First close tag of img attribute - // If a mathmlAttribute exists should be inside a img tag. - end += content.indexOf("/>", start); - } else { - end += mathTagEnd.length; - } - if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) { - let mathml = content.substring(start, end); - mathml = - characters.id === Constants.safeXmlCharacters.id - ? MathML.safeXmlDecode(mathml) - : MathML.mathMLEntities(mathml); - output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language)); - } else { - output += content.substring(start, end); - } - start = content.indexOf(mathTagBegin, end); - } - output += content.substring(end, content.length); - return output; - } + let output = ""; + const mathTagBegin = `${characters.tagOpener}math`; + const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; + let start = content.indexOf(mathTagBegin); + let end = 0; + while(start !== -1){ + output += content.substring(end, start); + // Avoid WIRIS images to be parsed. + const imageMathmlAtrribute = content.indexOf(Configuration.get("imageMathmlAttribute")); + end = content.indexOf(mathTagEnd, start); + if (end === -1) { + end = content.length - 1; + } else if (imageMathmlAtrribute !== -1) { + // First close tag of img attribute + // If a mathmlAttribute exists should be inside a img tag. + end += content.indexOf("/>", start); + } else { + end += mathTagEnd.length; + } + if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) { + let mathml = content.substring(start, end); + mathml = characters.id === Constants.safeXmlCharacters.id ? MathML.safeXmlDecode(mathml) : MathML.mathMLEntities(mathml); + output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language)); + } else { + output += content.substring(start, end); + } + start = content.indexOf(mathTagBegin, end); + } + output += content.substring(end, content.length); + return output; + } } // Mutation observers to avoid wiris image formulas class be removed. if (typeof MutationObserver !== "undefined") { - const mutationObserver = new MutationObserver((mutations) => { - mutations.forEach((mutation) => { - if ( - mutation.oldValue === Configuration.get("imageClassName") && - mutation.attributeName === "class" && - mutation.target.className.indexOf(Configuration.get("imageClassName")) === -1 - ) { - mutation.target.className = Configuration.get("imageClassName"); - } + const mutationObserver = new MutationObserver((mutations)=>{ + mutations.forEach((mutation)=>{ + if (mutation.oldValue === Configuration.get("imageClassName") && mutation.attributeName === "class" && mutation.target.className.indexOf(Configuration.get("imageClassName")) === -1) { + mutation.target.className = Configuration.get("imageClassName"); + } + }); }); - }); - Parser.observer = Object.create(mutationObserver); - Parser.observer.Config = { - attributes: true, - attributeOldValue: true, - }; - // We use own default config. - Parser.observer.observe = function (target) { - Object.getPrototypeOf(this).observe(target, this.Config); - }; + Parser.observer = Object.create(mutationObserver); + Parser.observer.Config = { + attributes: true, + attributeOldValue: true + }; + // We use own default config. + Parser.observer.observe = function(target) { + Object.getPrototypeOf(this).observe(target, this.Config); + }; } /* eslint-disable class-methods-use-this */ /* eslint-disable no-unused-vars */ /* eslint-disable no-extra-semi */ // The rules above are disabled because we are implementing // an external interface. class EditorListener { - /** + /** * @classdesc * Determines if the content of the * MathType Editor has changes. * @implements {EditorListeners} * @constructs - */ constructor() { - /** + */ constructor(){ + /** * Indicates if the content of the editor has changed. * @type {Boolean} */ this.isContentChanged = false; - /** + /** * Indicates if the listener should be waiting for changes in the editor. * @type {Boolean} */ this.waitingForChanges = false; - } - /** + } + /** * Sets {@link EditorListener.isContentChanged} property. * @param {Boolean} value - The new vlue. */ setIsContentChanged(value) { - this.isContentChanged = value; - } - /** + this.isContentChanged = value; + } + /** * Returns true if the content of the editor has been changed, false otherwise. * @return {Boolean} */ getIsContentChanged() { - return this.isContentChanged; - } - /** + return this.isContentChanged; + } + /** * Determines if the EditorListener should wait for any changes. * @param {Boolean} value - True if the editor should wait for changes, false otherwise. */ setWaitingForChanges(value) { - this.waitingForChanges = value; - } - /** + this.waitingForChanges = value; + } + /** * EditorListener method to overwrite. * @type {JsEditor} * @ignore */ caretPositionChanged(_editor) {} - /** + /** * EditorListener method to overwrite * @type {JsEditor} * @ignore */ clipboardChanged(_editor) {} - /** + /** * Determines if the content of an editor has been changed. * @param {JsEditor} editor - editor object. */ contentChanged(_editor) { - if (this.waitingForChanges === true && this.isContentChanged === false) { - this.isContentChanged = true; + if (this.waitingForChanges === true && this.isContentChanged === false) { + this.isContentChanged = true; + } } - } - /** + /** * EditorListener method to overwrite * @param {JsEditor} editor - The editor instance. */ styleChanged(_editor) {} - /** + /** * EditorListener method to overwrite * @param {JsEditor} - The editor instance. */ transformationReceived(_editor) {} } let wasm; -const cachedTextDecoder = - typeof TextDecoder !== "undefined" - ? new TextDecoder("utf-8", { - ignoreBOM: true, - fatal: true, - }) - : { - decode: () => { - throw Error("TextDecoder not available"); - }, - }; +const cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { + ignoreBOM: true, + fatal: true +}) : { + decode: ()=>{ + throw Error("TextDecoder not available"); + } +}; if (typeof TextDecoder !== "undefined") { - cachedTextDecoder.decode(); + cachedTextDecoder.decode(); } let cachedUint8Memory0 = null; function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; } function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); } const heap = new Array(128).fill(undefined); heap.push(undefined, null, true, false); let heap_next = heap.length; function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - heap[idx] = obj; - return idx; + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + heap[idx] = obj; + return idx; } function getObject(idx) { - return heap[idx]; + return heap[idx]; } function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; } function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; + const ret = getObject(idx); + dropObject(idx); + return ret; } let WASM_VECTOR_LEN = 0; -const cachedTextEncoder = - typeof TextEncoder !== "undefined" - ? new TextEncoder("utf-8") - : { - encode: () => { - throw Error("TextEncoder not available"); - }, - }; -const encodeString = - typeof cachedTextEncoder.encodeInto === "function" - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); - } - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length, - }; - }; -function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { +const cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { + encode: ()=>{ + throw Error("TextEncoder not available"); + } +}; +const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} : function(arg, view) { const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8Memory0() - .subarray(ptr, ptr + buf.length) - .set(buf); - WASM_VECTOR_LEN = buf.length; + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}; +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + const mem = getUint8Memory0(); + let offset = 0; + for(; offset < len; offset++){ + const code = arg.charCodeAt(offset); + if (code > 0x7f) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + offset += ret.written; + } + WASM_VECTOR_LEN = offset; return ptr; - } - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - const mem = getUint8Memory0(); - let offset = 0; - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7f) break; - mem[ptr + offset] = code; - } - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - offset += ret.written; - } - WASM_VECTOR_LEN = offset; - return ptr; } function isLikeNone(x) { - return x === undefined || x === null; + return x === undefined || x === null; } let cachedInt32Memory0 = null; function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; } let cachedFloat64Memory0 = null; function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; + if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { + cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); + } + return cachedFloat64Memory0; } let cachedBigInt64Memory0 = null; function getBigInt64Memory0() { - if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) { - cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); - } - return cachedBigInt64Memory0; + if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) { + cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); + } + return cachedBigInt64Memory0; } function debugString(val) { - // primitive types - const type = typeof val; - if (type == "number" || type == "boolean" || val == null) { - return `${val}`; - } - if (type == "string") { - return `"${val}"`; - } - if (type == "symbol") { - const description = val.description; - if (description == null) { - return "Symbol"; - } else { - return `Symbol(${description})`; + // primitive types + const type = typeof val; + if (type == "number" || type == "boolean" || val == null) { + return `${val}`; + } + if (type == "string") { + return `"${val}"`; + } + if (type == "symbol") { + const description = val.description; + if (description == null) { + return "Symbol"; + } else { + return `Symbol(${description})`; + } + } + if (type == "function") { + const name = val.name; + if (typeof name == "string" && name.length > 0) { + return `Function(${name})`; + } else { + return "Function"; + } } - } - if (type == "function") { - const name = val.name; - if (typeof name == "string" && name.length > 0) { - return `Function(${name})`; + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = "["; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++){ + debug += ", " + debugString(val[i]); + } + debug += "]"; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; } else { - return "Function"; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = "["; - if (length > 0) { - debug += debugString(val[0]); - } - for (let i = 1; i < length; i++) { - debug += ", " + debugString(val[i]); - } - debug += "]"; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == "Object") { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return "Object(" + JSON.stringify(val) + ")"; - } catch (_) { - return "Object"; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == "Object") { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return "Object(" + JSON.stringify(val) + ")"; + } catch (_) { + return "Object"; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; } function makeClosure(arg0, arg1, dtor, f) { - const state = { - a: arg0, - b: arg1, - cnt: 1, - dtor, - }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - try { - return f(state.a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); - state.a = 0; - } - } - }; - real.original = state; - return real; + const state = { + a: arg0, + b: arg1, + cnt: 1, + dtor + }; + const real = (...args)=>{ + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + try { + return f(state.a, state.b, ...args); + } finally{ + if (--state.cnt === 0) { + wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); + state.a = 0; + } + } + }; + real.original = state; + return real; } function __wbg_adapter_46(arg0, arg1, arg2) { - wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2)); + wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2)); } function makeMutClosure(arg0, arg1, dtor, f) { - const state = { - a: arg0, - b: arg1, - cnt: 1, - dtor, - }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); - } else { - state.a = a; - } - } - }; - real.original = state; - return real; + const state = { + a: arg0, + b: arg1, + cnt: 1, + dtor + }; + const real = (...args)=>{ + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + const a = state.a; + state.a = 0; + try { + return f(a, state.b, ...args); + } finally{ + if (--state.cnt === 0) { + wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); + } else { + state.a = a; + } + } + }; + real.original = state; + return real; } function __wbg_adapter_49(arg0, arg1) { - wasm.__wbindgen_export_4(arg0, arg1); + wasm.__wbindgen_export_4(arg0, arg1); } function __wbg_adapter_52(arg0, arg1, arg2) { - wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2)); + wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2)); } function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_export_6(addHeapObject(e)); - } + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_export_6(addHeapObject(e)); + } } function __wbg_adapter_103(arg0, arg1, arg2, arg3) { - wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); + wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); } function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); + ptr = ptr >>> 0; + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); } /** */ let Telemeter$1 = class Telemeter { - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_telemeter_free(ptr); - } - /** + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_telemeter_free(ptr); + } + /** * @param {any} solution * @param {any} hosts * @param {any} config - */ constructor(solution, hosts, config) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config)); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - this.__wbg_ptr = r0 >>> 0; - return this; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** + */ constructor(solution, hosts, config){ + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + this.__wbg_ptr = r0 >>> 0; + return this; + } finally{ + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** * @param {string} sender_id * @returns {Promise} */ identify(sender_id) { - const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0); - return takeObject(ret); - } - /** + const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0); + return takeObject(ret); + } + /** * @param {string} event_type * @param {any} event_payload * @returns {Promise} */ track(event_type, event_payload) { - const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload)); - return takeObject(ret); - } - /** + const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload)); + return takeObject(ret); + } + /** * @param {any} level * @param {string} message * @param {any} payload * @returns {Promise} */ log(level, message, payload) { - const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload)); - return takeObject(ret); - } - /** + const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload)); + return takeObject(ret); + } + /** * @returns {Promise} */ finish() { - const ptr = this.__destroy_into_raw(); - const ret = wasm.telemeter_finish(ptr); - return takeObject(ret); - } - /** + const ptr = this.__destroy_into_raw(); + const ret = wasm.telemeter_finish(ptr); + return takeObject(ret); + } + /** * @param {boolean | undefined} [new_debug_status] */ debug(new_debug_status) { - wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0); - } + wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0); + } }; async function __wbg_load(module1, imports) { - if (typeof Response === "function" && module1 instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === "function") { - try { - return await WebAssembly.instantiateStreaming(module1, imports); - } catch (e) { - if (module1.headers.get("Content-Type") != "application/wasm") { - console.warn( - "`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", - e, - ); - } else { - throw e; - } - } - } - const bytes = await module1.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - } else { - const instance = await WebAssembly.instantiate(module1, imports); - if (instance instanceof WebAssembly.Instance) { - return { - instance, - module: module1, - }; + if (typeof Response === "function" && module1 instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === "function") { + try { + return await WebAssembly.instantiateStreaming(module1, imports); + } catch (e) { + if (module1.headers.get("Content-Type") != "application/wasm") { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + } else { + throw e; + } + } + } + const bytes = await module1.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); } else { - return instance; + const instance = await WebAssembly.instantiate(module1, imports); + if (instance instanceof WebAssembly.Instance) { + return { + instance, + module: module1 + }; + } else { + return instance; + } } - } } function __wbg_get_imports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_string_new = function (arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_c728d68b8b34487e = function () { - const ret = new Object(); - return addHeapObject(ret); - }; - imports.wbg.__wbg_status_7841bb47be2a8f16 = function (arg0) { - const ret = getObject(arg0).status; - return ret; - }; - imports.wbg.__wbg_headers_ea7ef583d1564b08 = function (arg0) { - const ret = getObject(arg0).headers; - return addHeapObject(ret); - }; - imports.wbg.__wbg_new0_ad75dd38f92424e2 = function () { - const ret = new Date(); - return addHeapObject(ret); - }; - imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function (arg0) { - const ret = getObject(arg0).getTime(); - return ret; - }; - imports.wbg.__wbindgen_object_drop_ref = function (arg0) { - takeObject(arg0); - }; - imports.wbg.__wbindgen_is_object = function (arg0) { - const val = getObject(arg0); - const ret = typeof val === "object" && val !== null; - return ret; - }; - imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function (arg0) { - const ret = getObject(arg0).crypto; - return addHeapObject(ret); - }; - imports.wbg.__wbg_process_5b786e71d465a513 = function (arg0) { - const ret = getObject(arg0).process; - return addHeapObject(ret); - }; - imports.wbg.__wbg_versions_c2ab80650590b6a2 = function (arg0) { - const ret = getObject(arg0).versions; - return addHeapObject(ret); - }; - imports.wbg.__wbg_node_523d7bd03ef69fba = function (arg0) { - const ret = getObject(arg0).node; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_string = function (arg0) { - const ret = typeof getObject(arg0) === "string"; - return ret; - }; - imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function (arg0) { - const ret = getObject(arg0).msCrypto; - return addHeapObject(ret); - }; - imports.wbg.__wbg_require_2784e593a4674877 = function () { - return handleError(function () { - const ret = module.require; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function (arg0) { - const ret = new Uint8Array(arg0 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_get_4a9aa5157afeb382 = function (arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return addHeapObject(ret); - }; - imports.wbg.__wbg_next_1989a20442400aaa = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).next(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_done_bc26bf4ada718266 = function (arg0) { - const ret = getObject(arg0).done; - return ret; - }; - imports.wbg.__wbg_value_0570714ff7d75f35 = function (arg0) { - const ret = getObject(arg0).value; - return addHeapObject(ret); - }; - imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function () { - const ret = Symbol.iterator; - return addHeapObject(ret); - }; - imports.wbg.__wbg_get_2aff440840bb6202 = function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.get(getObject(arg0), getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_next_15da6a3df9290720 = function (arg0) { - const ret = getObject(arg0).next; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_function = function (arg0) { - const ret = typeof getObject(arg0) === "function"; - return ret; - }; - imports.wbg.__wbg_call_669127b9d730c650 = function () { - return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbindgen_object_clone_ref = function (arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_self_3fad056edded10bd = function () { - return handleError(function () { - const ret = self.self; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_window_a4f46c98a61d4089 = function () { - return handleError(function () { - const ret = window.window; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_globalThis_17eff828815f7d84 = function () { - return handleError(function () { - const ret = globalThis.globalThis; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_global_46f939f6541643c5 = function () { - return handleError(function () { - const ret = global.global; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbindgen_is_undefined = function (arg0) { - const ret = getObject(arg0) === undefined; - return ret; - }; - imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function (arg0, arg1) { - const ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_isArray_38525be7442aa21e = function (arg0) { - const ret = Array.isArray(getObject(arg0)); - return ret; - }; - imports.wbg.__wbg_call_53fc3abd42e24ec8 = function () { - return handleError(function (arg0, arg1, arg2) { - const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function (arg0) { - const ret = Number.isSafeInteger(getObject(arg0)); - return ret; - }; - imports.wbg.__wbg_new_feb65b865d980ae2 = function (arg0, arg1) { - try { - var state0 = { - a: arg0, - b: arg1, - }; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_c728d68b8b34487e = function() { + const ret = new Object(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_status_7841bb47be2a8f16 = function(arg0) { + const ret = getObject(arg0).status; + return ret; + }; + imports.wbg.__wbg_headers_ea7ef583d1564b08 = function(arg0) { + const ret = getObject(arg0).headers; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new0_ad75dd38f92424e2 = function() { + const ret = new Date(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function(arg0) { + const ret = getObject(arg0).getTime(); + return ret; + }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_is_object = function(arg0) { + const val = getObject(arg0); + const ret = typeof val === "object" && val !== null; + return ret; + }; + imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function(arg0) { + const ret = getObject(arg0).crypto; + return addHeapObject(ret); + }; + imports.wbg.__wbg_process_5b786e71d465a513 = function(arg0) { + const ret = getObject(arg0).process; + return addHeapObject(ret); + }; + imports.wbg.__wbg_versions_c2ab80650590b6a2 = function(arg0) { + const ret = getObject(arg0).versions; + return addHeapObject(ret); + }; + imports.wbg.__wbg_node_523d7bd03ef69fba = function(arg0) { + const ret = getObject(arg0).node; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_string = function(arg0) { + const ret = typeof getObject(arg0) === "string"; + return ret; + }; + imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function(arg0) { + const ret = getObject(arg0).msCrypto; + return addHeapObject(ret); + }; + imports.wbg.__wbg_require_2784e593a4674877 = function() { + return handleError(function() { + const ret = module.require; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function(arg0) { + const ret = new Uint8Array(arg0 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_4a9aa5157afeb382 = function(arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_next_1989a20442400aaa = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).next(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_done_bc26bf4ada718266 = function(arg0) { + const ret = getObject(arg0).done; + return ret; + }; + imports.wbg.__wbg_value_0570714ff7d75f35 = function(arg0) { + const ret = getObject(arg0).value; + return addHeapObject(ret); + }; + imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function() { + const ret = Symbol.iterator; + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_2aff440840bb6202 = function() { + return handleError(function(arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_next_15da6a3df9290720 = function(arg0) { + const ret = getObject(arg0).next; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_function = function(arg0) { + const ret = typeof getObject(arg0) === "function"; + return ret; + }; + imports.wbg.__wbg_call_669127b9d730c650 = function() { + return handleError(function(arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbindgen_object_clone_ref = function(arg0) { + const ret = getObject(arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_self_3fad056edded10bd = function() { + return handleError(function() { + const ret = self.self; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_window_a4f46c98a61d4089 = function() { + return handleError(function() { + const ret = window.window; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_globalThis_17eff828815f7d84 = function() { + return handleError(function() { + const ret = globalThis.globalThis; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_global_46f939f6541643c5 = function() { + return handleError(function() { + const ret = global.global; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }; + imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function(arg0, arg1) { + const ret = new Function(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_isArray_38525be7442aa21e = function(arg0) { + const ret = Array.isArray(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_call_53fc3abd42e24ec8 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function(arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_new_feb65b865d980ae2 = function(arg0, arg1) { + try { + var state0 = { + a: arg0, + b: arg1 + }; + var cb0 = (arg0, arg1)=>{ + const a = state0.a; + state0.a = 0; + try { + return __wbg_adapter_103(a, state0.b, arg0, arg1); + } finally{ + state0.a = a; + } + }; + const ret = new Promise(cb0); + return addHeapObject(ret); + } finally{ + state0.a = state0.b = 0; + } + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); + }; + imports.wbg.__wbg_buffer_344d9b41efe96da7 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_d8a000788389a31e = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_set_dcfd613a3420f908 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }; + imports.wbg.__wbg_length_a5587d6cd79ab197 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbindgen_string_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "string" ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_stringify_4039297315a25b00 = function() { + return handleError(function(arg0) { + const ret = JSON.stringify(getObject(arg0)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_set_40f7786a25a9cc7e = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); + return ret; + }, arguments); + }; + imports.wbg.__wbg_has_cdf8b85f6e903c80 = function() { + return handleError(function(arg0, arg1) { + const ret = Reflect.has(getObject(arg0), getObject(arg1)); + return ret; + }, arguments); + }; + imports.wbg.__wbg_fetch_701fcd2bde06379a = function(arg0, arg1) { + const ret = getObject(arg0).fetch(getObject(arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function(arg0) { + const ret = fetch(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function(arg0, arg1, arg2) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_e4960143e41697a4 = function() { + return handleError(function() { + const ret = new AbortController(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_signal_1ed842bebd6ae322 = function(arg0) { + const ret = getObject(arg0).signal; + return addHeapObject(ret); + }; + imports.wbg.__wbg_abort_8355f201f30300bb = function(arg0) { + getObject(arg0).abort(); + }; + imports.wbg.__wbindgen_error_new = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_boolean_get = function(arg0) { + const v = getObject(arg0); + const ret = typeof v === "boolean" ? v ? 1 : 0 : 2; + return ret; + }; + imports.wbg.__wbindgen_number_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "number" ? obj : undefined; + getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_entries_6d727b73ee02b7ce = function(arg0) { + const ret = Object.entries(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_String_917f38a1211cf44b = function(arg0, arg1) { + const ret = String(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function(arg0, arg1) { + console.warn(getObject(arg0), getObject(arg1)); + }; + imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function(arg0) { + const ret = getObject(arg0).readyState; + return ret; + }; + imports.wbg.__wbg_warn_4affe1093892a4ef = function(arg0) { + console.warn(getObject(arg0)); + }; + imports.wbg.__wbg_close_f4135085ec3fc8f0 = function() { + return handleError(function(arg0) { + getObject(arg0).close(); + }, arguments); + }; + imports.wbg.__wbg_new_b9b318679315404f = function() { + return handleError(function(arg0, arg1) { + const ret = new WebSocket(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function(arg0, arg1) { + getObject(arg0).binaryType = takeObject(arg1); + }; + imports.wbg.__wbg_log_7811587c4c6d2844 = function(arg0) { + console.log(getObject(arg0)); + }; + imports.wbg.__wbg_error_f0a6627f4b23c19d = function(arg0) { + console.error(getObject(arg0)); + }; + imports.wbg.__wbg_info_3ca7870690403fee = function(arg0) { + console.info(getObject(arg0)); + }; + imports.wbg.__wbg_document_183cf1eecfdbffee = function(arg0) { + const ret = getObject(arg0).document; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }; + imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function(arg0) { + const ret = getObject(arg0).visibilityState; + return addHeapObject(ret); + }; + imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function(arg0, arg1) { + const ret = getObject(arg0)[getObject(arg1)]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_length_cace2e0b3ddc0502 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function() { + return handleError(function(arg0, arg1, arg2, arg3) { + getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); + }, arguments); + }; + imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function() { + return handleError(function(arg0, arg1, arg2, arg3) { + getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); + }, arguments); + }; + imports.wbg.__wbindgen_is_bigint = function(arg0) { + const ret = typeof getObject(arg0) === "bigint"; + return ret; + }; + imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) { + const ret = arg0; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_in = function(arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }; + imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).localStorage; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function() { + return handleError(function(arg0, arg1, arg2, arg3) { + const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3)); + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, arguments); + }; + imports.wbg.__wbg_navigator_7078da62d92ff5ad = function(arg0) { + const ret = getObject(arg0).navigator; + return addHeapObject(ret); + }; + imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).mediaDevices; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).enumerateDevices(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_setItem_fe04f524052a3839 = function() { + return handleError(function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); + }, arguments); + }; + imports.wbg.__wbindgen_cb_drop = function(arg0) { + const obj = takeObject(arg0).original; + if (obj.cnt-- == 1) { + obj.a = 0; + return true; + } + const ret = false; + return ret; + }; + imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function(arg0, arg1) { + const ret = getObject(arg1).deviceId; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function(arg0) { + let result; try { - return __wbg_adapter_103(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }; - imports.wbg.__wbindgen_memory = function () { - const ret = wasm.memory; - return addHeapObject(ret); - }; - imports.wbg.__wbg_buffer_344d9b41efe96da7 = function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_d8a000788389a31e = function (arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_dcfd613a3420f908 = function (arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }; - imports.wbg.__wbg_length_a5587d6cd79ab197 = function (arg0) { - const ret = getObject(arg0).length; - return ret; - }; - imports.wbg.__wbindgen_string_get = function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "string" ? obj : undefined; - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_stringify_4039297315a25b00 = function () { - return handleError(function (arg0) { - const ret = JSON.stringify(getObject(arg0)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_set_40f7786a25a9cc7e = function () { - return handleError(function (arg0, arg1, arg2) { - const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); - return ret; - }, arguments); - }; - imports.wbg.__wbg_has_cdf8b85f6e903c80 = function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.has(getObject(arg0), getObject(arg1)); - return ret; - }, arguments); - }; - imports.wbg.__wbg_fetch_701fcd2bde06379a = function (arg0, arg1) { - const ret = getObject(arg0).fetch(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function (arg0) { - const ret = fetch(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function (arg0, arg1, arg2) { - const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_e4960143e41697a4 = function () { - return handleError(function () { - const ret = new AbortController(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_signal_1ed842bebd6ae322 = function (arg0) { - const ret = getObject(arg0).signal; - return addHeapObject(ret); - }; - imports.wbg.__wbg_abort_8355f201f30300bb = function (arg0) { - getObject(arg0).abort(); - }; - imports.wbg.__wbindgen_error_new = function (arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_jsval_loose_eq = function (arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; - }; - imports.wbg.__wbindgen_boolean_get = function (arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; - return ret; - }; - imports.wbg.__wbindgen_number_get = function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "number" ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Uint8Array; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof ArrayBuffer; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_entries_6d727b73ee02b7ce = function (arg0) { - const ret = Object.entries(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_String_917f38a1211cf44b = function (arg0, arg1) { - const ret = String(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function (arg0, arg1) { - console.warn(getObject(arg0), getObject(arg1)); - }; - imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function (arg0) { - const ret = getObject(arg0).readyState; - return ret; - }; - imports.wbg.__wbg_warn_4affe1093892a4ef = function (arg0) { - console.warn(getObject(arg0)); - }; - imports.wbg.__wbg_close_f4135085ec3fc8f0 = function () { - return handleError(function (arg0) { - getObject(arg0).close(); - }, arguments); - }; - imports.wbg.__wbg_new_b9b318679315404f = function () { - return handleError(function (arg0, arg1) { - const ret = new WebSocket(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function (arg0, arg1) { - getObject(arg0).binaryType = takeObject(arg1); - }; - imports.wbg.__wbg_log_7811587c4c6d2844 = function (arg0) { - console.log(getObject(arg0)); - }; - imports.wbg.__wbg_error_f0a6627f4b23c19d = function (arg0) { - console.error(getObject(arg0)); - }; - imports.wbg.__wbg_info_3ca7870690403fee = function (arg0) { - console.info(getObject(arg0)); - }; - imports.wbg.__wbg_document_183cf1eecfdbffee = function (arg0) { - const ret = getObject(arg0).document; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function (arg0) { - const ret = getObject(arg0).visibilityState; - return addHeapObject(ret); - }; - imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function (arg0, arg1) { - const ret = getObject(arg0)[getObject(arg1)]; - return addHeapObject(ret); - }; - imports.wbg.__wbg_length_cace2e0b3ddc0502 = function (arg0) { - const ret = getObject(arg0).length; - return ret; - }; - imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function () { - return handleError(function (arg0, arg1, arg2, arg3) { - getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); - }, arguments); - }; - imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function () { - return handleError(function (arg0, arg1, arg2, arg3) { - getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); - }, arguments); - }; - imports.wbg.__wbindgen_is_bigint = function (arg0) { - const ret = typeof getObject(arg0) === "bigint"; - return ret; - }; - imports.wbg.__wbindgen_bigint_from_i64 = function (arg0) { - const ret = arg0; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_in = function (arg0, arg1) { - const ret = getObject(arg0) in getObject(arg1); - return ret; - }; - imports.wbg.__wbindgen_bigint_from_u64 = function (arg0) { - const ret = BigInt.asUintN(64, arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_jsval_eq = function (arg0, arg1) { - const ret = getObject(arg0) === getObject(arg1); - return ret; - }; - imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).localStorage; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function () { - return handleError(function (arg0, arg1, arg2, arg3) { - const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3)); - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, arguments); - }; - imports.wbg.__wbg_navigator_7078da62d92ff5ad = function (arg0) { - const ret = getObject(arg0).navigator; - return addHeapObject(ret); - }; - imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).mediaDevices; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).enumerateDevices(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_setItem_fe04f524052a3839 = function () { - return handleError(function (arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }, arguments); - }; - imports.wbg.__wbindgen_cb_drop = function (arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - const ret = false; - return ret; - }; - imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function (arg0, arg1) { - const ret = getObject(arg1).deviceId; - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Response; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function () { - return handleError(function (arg0, arg1) { - getObject(arg0).randomFillSync(takeObject(arg1)); - }, arguments); - }; - imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function (arg0, arg1, arg2) { - const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_getRandomValues_504510b5564925af = function () { - return handleError(function (arg0, arg1) { - getObject(arg0).getRandomValues(getObject(arg1)); - }, arguments); - }; - imports.wbg.__wbindgen_bigint_get_as_i64 = function (arg0, arg1) { - const v = getObject(arg1); - const ret = typeof v === "bigint" ? v : undefined; - getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - imports.wbg.__wbindgen_debug_string = function (arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbindgen_throw = function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbg_then_89e1c559530b85cf = function (arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function (arg0) { - queueMicrotask(getObject(arg0)); - }; - imports.wbg.__wbg_then_1bbc9edafd859b06 = function (arg0, arg1, arg2) { - const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function (arg0) { - const ret = getObject(arg0).queueMicrotask; - return addHeapObject(ret); - }; - imports.wbg.__wbg_resolve_a3252b2860f0a09e = function (arg0) { - const ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_url_1f609e63ff1a7983 = function (arg0, arg1) { - const ret = getObject(arg1).url; - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_send_2860805104507701 = function () { - return handleError(function (arg0, arg1, arg2) { - getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2)); - }, arguments); - }; - imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Window; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_new_19676474aa414d62 = function () { - return handleError(function () { - const ret = new Headers(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_append_feec4143bbf21904 = function () { - return handleError(function (arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }, arguments); - }; - imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function () { - return handleError(function (arg0, arg1, arg2) { - const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbindgen_closure_wrapper1532 = function (arg0, arg1, arg2) { - const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_closure_wrapper1602 = function (arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_closure_wrapper1834 = function (arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52); - return addHeapObject(ret); - }; - return imports; + result = getObject(arg0) instanceof Response; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function() { + return handleError(function(arg0, arg1) { + getObject(arg0).randomFillSync(takeObject(arg1)); + }, arguments); + }; + imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function(arg0, arg1, arg2) { + const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_getRandomValues_504510b5564925af = function() { + return handleError(function(arg0, arg1) { + getObject(arg0).getRandomValues(getObject(arg1)); + }, arguments); + }; + imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { + const v = getObject(arg1); + const ret = typeof v === "bigint" ? v : undefined; + getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbg_then_89e1c559530b85cf = function(arg0, arg1) { + const ret = getObject(arg0).then(getObject(arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function(arg0) { + queueMicrotask(getObject(arg0)); + }; + imports.wbg.__wbg_then_1bbc9edafd859b06 = function(arg0, arg1, arg2) { + const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function(arg0) { + const ret = getObject(arg0).queueMicrotask; + return addHeapObject(ret); + }; + imports.wbg.__wbg_resolve_a3252b2860f0a09e = function(arg0) { + const ret = Promise.resolve(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_url_1f609e63ff1a7983 = function(arg0, arg1) { + const ret = getObject(arg1).url; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_send_2860805104507701 = function() { + return handleError(function(arg0, arg1, arg2) { + getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2)); + }, arguments); + }; + imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Window; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_new_19676474aa414d62 = function() { + return handleError(function() { + const ret = new Headers(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_append_feec4143bbf21904 = function() { + return handleError(function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); + }, arguments); + }; + imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbindgen_closure_wrapper1532 = function(arg0, arg1, arg2) { + const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_closure_wrapper1602 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_closure_wrapper1834 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52); + return addHeapObject(ret); + }; + return imports; } function __wbg_finalize_init(instance, module1) { - wasm = instance.exports; - __wbg_init.__wbindgen_wasm_module = module1; - cachedBigInt64Memory0 = null; - cachedFloat64Memory0 = null; - cachedInt32Memory0 = null; - cachedUint8Memory0 = null; - wasm.__wbindgen_start(); - return wasm; + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module1; + cachedBigInt64Memory0 = null; + cachedFloat64Memory0 = null; + cachedInt32Memory0 = null; + cachedUint8Memory0 = null; + wasm.__wbindgen_start(); + return wasm; } async function __wbg_init(input) { - if (wasm !== undefined) return wasm; - if (typeof input === "undefined") { - input = new URL("telemeter_wasm_bg.wasm", import.meta.url); - } - const imports = __wbg_get_imports(); - if ( - typeof input === "string" || - (typeof Request === "function" && input instanceof Request) || - (typeof URL === "function" && input instanceof URL) - ) { - input = fetch(input); - } - const { instance, module: module1 } = await __wbg_load(await input, imports); - return __wbg_finalize_init(instance, module1); + if (wasm !== undefined) return wasm; + if (typeof input === "undefined") { + input = new URL("telemeter_wasm_bg.wasm", import.meta.url); + } + const imports = __wbg_get_imports(); + if (typeof input === "string" || typeof Request === "function" && input instanceof Request || typeof URL === "function" && input instanceof URL) { + input = fetch(input); + } + const { instance, module: module1 } = await __wbg_load(await input, imports); + return __wbg_finalize_init(instance, module1); } /** @@ -6872,45 +6707,38 @@ async function __wbg_init(input) { * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data * to Telemetry in a more comfortable and homogeneous way. */ class Telemeter { - /** + /** * Inits Telemeter class. * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)} * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry. * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated. * @param {Object} telemeterAttributes.config - Configuration parameters. */ static init(telemeterAttributes) { - if (!this.telemeter && !this.waitingForInit) { - this.waitingForInit = true; - __wbg_init(telemeterAttributes.url) - .then(() => { - this.telemeter = new Telemeter$1( - telemeterAttributes.solution, - telemeterAttributes.hosts, - telemeterAttributes.config, - ); - }) - .catch((error) => { - console.log(error); - }) - .finally(() => (this.waitingForInit = false)); - } - } - /** + if (!this.telemeter && !this.waitingForInit) { + this.waitingForInit = true; + __wbg_init(telemeterAttributes.url).then(()=>{ + this.telemeter = new Telemeter$1(telemeterAttributes.solution, telemeterAttributes.hosts, telemeterAttributes.config); + }).catch((error)=>{ + console.log(error); + }).finally(()=>this.waitingForInit = false); + } + } + /** * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session. */ static async finish() { - if (!this.telemeter) return; - try { - let local_telemeter = this.telemeter; - this.telemeter = undefined; - await local_telemeter.finish(); - } catch (e) { - console.error(e); + if (!this.telemeter) return; + try { + let local_telemeter = this.telemeter; + this.telemeter = undefined; + await local_telemeter.finish(); + } catch (e) { + console.error(e); + } } - } } class ContentManager { - /** + /** * @classdesc * This class represents a modal dialog, managing the following: * - The insertion of content into the current instance of the {@link ModalDialog} class. @@ -6923,209 +6751,209 @@ class ContentManager { * @constructs * @param {Object} contentManagerAttributes - Object containing all attributes needed to * create a new instance. - */ constructor(contentManagerAttributes) { - /** + */ constructor(contentManagerAttributes){ + /** * An object containing MathType editor parameters. See * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information. * @type {Object} */ this.editorAttributes = {}; - if ("editorAttributes" in contentManagerAttributes) { - this.editorAttributes = contentManagerAttributes.editorAttributes; - } else { - throw new Error("ContentManager constructor error: editorAttributes property missed."); - } - /** + if ("editorAttributes" in contentManagerAttributes) { + this.editorAttributes = contentManagerAttributes.editorAttributes; + } else { + throw new Error("ContentManager constructor error: editorAttributes property missed."); + } + /** * CustomEditors instance. Contains the custom editors. * @type {CustomEditors} */ this.customEditors = null; - if ("customEditors" in contentManagerAttributes) { - this.customEditors = contentManagerAttributes.customEditors; - } - /** + if ("customEditors" in contentManagerAttributes) { + this.customEditors = contentManagerAttributes.customEditors; + } + /** * Environment properties. This object contains data about the integration platform. * @type {Object} * @property {String} editor - Editor name. Usually the HTML editor. * @property {String} mode - Save mode. Xml by default. * @property {String} version - Plugin version. */ this.environment = {}; - if ("environment" in contentManagerAttributes) { - this.environment = contentManagerAttributes.environment; - } else { - throw new Error("ContentManager constructor error: environment property missed"); - } - /** + if ("environment" in contentManagerAttributes) { + this.environment = contentManagerAttributes.environment; + } else { + throw new Error("ContentManager constructor error: environment property missed"); + } + /** * ContentManager language. * @type {String} */ this.language = ""; - if ("language" in contentManagerAttributes) { - this.language = contentManagerAttributes.language; - } else { - throw new Error("ContentManager constructor error: language property missed"); - } - /** + if ("language" in contentManagerAttributes) { + this.language = contentManagerAttributes.language; + } else { + throw new Error("ContentManager constructor error: language property missed"); + } + /** * {@link EditorListener} instance. Manages the changes inside the editor. * @type {EditorListener} */ this.editorListener = new EditorListener(); - /** + /** * MathType editor instance. * @type {JsEditor} */ this.editor = null; - /** + /** * Navigator user agent. * @type {String} */ this.ua = navigator.userAgent.toLowerCase(); - /** + /** * Mobile device properties object * @type {DeviceProperties} */ this.deviceProperties = {}; - this.deviceProperties.isAndroid = this.ua.indexOf("android") > -1; - this.deviceProperties.isIOS = ContentManager.isIOS(); - /** + this.deviceProperties.isAndroid = this.ua.indexOf("android") > -1; + this.deviceProperties.isIOS = ContentManager.isIOS(); + /** * Custom editor toolbar. * @type {String} */ this.toolbar = null; - /** + /** * Custom editor toolbar. * @type {String} */ this.dbclick = null; - /** + /** * Instance of the {@link ModalDialog} class associated with the current * {@link ContentManager} instance. * @type {ModalDialog} */ this.modalDialogInstance = null; - /** + /** * ContentManager listeners. * @type {Listeners} */ this.listeners = new Listeners(); - /** + /** * MathML associated to the ContentManager instance. * @type {String} */ this.mathML = null; - /** + /** * Indicates if the edited element is a new one or not. * @type {Boolean} */ this.isNewElement = true; - /** + /** * {@link IntegrationModel} instance. Needed to call wrapper methods. * @type {IntegrationModel} */ this.integrationModel = null; - } - /** + } + /** * Adds a new listener to the current {@link ContentManager} instance. * @param {Object} listener - The listener to be added. */ addListener(listener) { - this.listeners.add(listener); - } - /** + this.listeners.add(listener); + } + /** * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager} * instance. * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance. */ setIntegrationModel(integrationModel) { - this.integrationModel = integrationModel; - } - /** + this.integrationModel = integrationModel; + } + /** * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance. * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance */ setModalDialogInstance(modalDialogInstance) { - this.modalDialogInstance = modalDialogInstance; - } - /** + this.modalDialogInstance = modalDialogInstance; + } + /** * Inserts the content into the current {@link ModalDialog} instance updating * the title and inserting the JavaScript editor. */ insert() { - // Before insert the editor we update the modal object title to avoid weird render display. - this.updateTitle(this.modalDialogInstance); - this.insertEditor(this.modalDialogInstance); - } - /** + // Before insert the editor we update the modal object title to avoid weird render display. + this.updateTitle(this.modalDialogInstance); + this.insertEditor(this.modalDialogInstance); + } + /** * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until * editor's JavaScript is loaded. */ insertEditor() { - if (ContentManager.isEditorLoaded()) { - this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes); - this.editor.insertInto(this.modalDialogInstance.contentContainer); - this.editor.focus(); - if (this.modalDialogInstance.rtl) { - this.editor.action("rtl"); - } - // Setting div in rtl in case of it's activated. - if (this.editor.getEditorModel().isRTL()) { - this.editor.element.style.direction = "rtl"; - } - // Editor listener: this object manages the changes logic of editor. - this.editor.getEditorModel().addEditorListener(this.editorListener); - // iOS events. - if (this.modalDialogInstance.deviceProperties.isIOS) { - setTimeout(function () { - // Make sure the modalDialogInstance is available when the timeout is over - // to avoid throw errors and stop execution. - if (this.hasOwnProperty("modalDialogInstance")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins - }, 400); - const formulaDisplayDiv = document.getElementsByClassName("wrs_formulaDisplay")[0]; - Util.addEvent(formulaDisplayDiv, "focus", this.modalDialogInstance.handleOpenedIosSoftkeyboard); - Util.addEvent(formulaDisplayDiv, "blur", this.modalDialogInstance.handleClosedIosSoftkeyboard); - } - // Fire onLoad event. Necessary to set the MathML into the editor - // after is loaded. - this.listeners.fire("onLoad", {}); - } else { - setTimeout(ContentManager.prototype.insertEditor.bind(this), 100); + if (ContentManager.isEditorLoaded()) { + this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes); + this.editor.insertInto(this.modalDialogInstance.contentContainer); + this.editor.focus(); + if (this.modalDialogInstance.rtl) { + this.editor.action("rtl"); + } + // Setting div in rtl in case of it's activated. + if (this.editor.getEditorModel().isRTL()) { + this.editor.element.style.direction = "rtl"; + } + // Editor listener: this object manages the changes logic of editor. + this.editor.getEditorModel().addEditorListener(this.editorListener); + // iOS events. + if (this.modalDialogInstance.deviceProperties.isIOS) { + setTimeout(function() { + // Make sure the modalDialogInstance is available when the timeout is over + // to avoid throw errors and stop execution. + if (this.hasOwnProperty("modalDialogInstance")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins + }, 400); + const formulaDisplayDiv = document.getElementsByClassName("wrs_formulaDisplay")[0]; + Util.addEvent(formulaDisplayDiv, "focus", this.modalDialogInstance.handleOpenedIosSoftkeyboard); + Util.addEvent(formulaDisplayDiv, "blur", this.modalDialogInstance.handleClosedIosSoftkeyboard); + } + // Fire onLoad event. Necessary to set the MathML into the editor + // after is loaded. + this.listeners.fire("onLoad", {}); + } else { + setTimeout(ContentManager.prototype.insertEditor.bind(this), 100); + } } - } - /** + /** * Initializes the current class by loading MathType script. */ init() { - if (!ContentManager.isEditorLoaded()) { - this.addEditorAsExternalDependency(); + if (!ContentManager.isEditorLoaded()) { + this.addEditorAsExternalDependency(); + } } - } - /** + /** * Adds script element to the DOM to include editor externally. */ addEditorAsExternalDependency() { - const script = document.createElement("script"); - script.type = "text/javascript"; - let editorUrl = Configuration.get("editorUrl"); - // We create an object url for parse url string and work more efficiently. - const anchorElement = document.createElement("a"); - ContentManager.setHrefToAnchorElement(anchorElement, editorUrl); - ContentManager.setProtocolToAnchorElement(anchorElement); - editorUrl = ContentManager.getURLFromAnchorElement(anchorElement); - // Load editor URL. We add stats as GET params. - const stats = this.getEditorStats(); - script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`; - document.getElementsByTagName("head")[0].appendChild(script); - } - /** + const script = document.createElement("script"); + script.type = "text/javascript"; + let editorUrl = Configuration.get("editorUrl"); + // We create an object url for parse url string and work more efficiently. + const anchorElement = document.createElement("a"); + ContentManager.setHrefToAnchorElement(anchorElement, editorUrl); + ContentManager.setProtocolToAnchorElement(anchorElement); + editorUrl = ContentManager.getURLFromAnchorElement(anchorElement); + // Load editor URL. We add stats as GET params. + const stats = this.getEditorStats(); + script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`; + document.getElementsByTagName("head")[0].appendChild(script); + } + /** * Sets the specified url to the anchor element. * @param {HTMLAnchorElement} anchorElement - Element where set 'url'. * @param {String} url - URL to set. */ static setHrefToAnchorElement(anchorElement, url) { - anchorElement.href = url; - } - /** + anchorElement.href = url; + } + /** * Sets the current protocol to the anchor element. * @param {HTMLAnchorElement} anchorElement - Element where set its protocol. */ static setProtocolToAnchorElement(anchorElement) { - // Change to https if necessary. - if (window.location.href.indexOf("https://") === 0) { - // It check if browser is https and configuration is http. - // If this is so, we will replace protocol. - if (anchorElement.protocol === "http:") { - anchorElement.protocol = "https:"; - } - } - } - /** + // Change to https if necessary. + if (window.location.href.indexOf("https://") === 0) { + // It check if browser is https and configuration is http. + // If this is so, we will replace protocol. + if (anchorElement.protocol === "http:") { + anchorElement.protocol = "https:"; + } + } + } + /** * Returns the url of the anchor element adding the current port * if it is needed. * @param {HTMLAnchorElement} anchorElement - Element where extract the url. * @returns {String} */ static getURLFromAnchorElement(anchorElement) { - // Check protocol and remove port if it's standard. - const removePort = anchorElement.port === "80" || anchorElement.port === "443" || anchorElement.port === ""; - return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? "" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith("/") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len - } - /** + // Check protocol and remove port if it's standard. + const removePort = anchorElement.port === "80" || anchorElement.port === "443" || anchorElement.port === ""; + return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? "" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith("/") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len + } + /** * Returns object with editor stats. * * @typedef {Object} EditorStatsObject @@ -7134,195 +6962,194 @@ class ContentManager { * @property {string} version - Current plugins version. * @returns {EditorStatsObject} */ getEditorStats() { - // Editor stats. Use environment property to set it. - const stats = {}; - if ("editor" in this.environment) { - stats.editor = this.environment.editor; - } else { - stats.editor = "unknown"; - } - if ("mode" in this.environment) { - stats.mode = this.environment.mode; - } else { - stats.mode = Configuration.get("saveMode"); - } - if ("version" in this.environment) { - stats.version = this.environment.version; - } else { - stats.version = Configuration.get("version"); + // Editor stats. Use environment property to set it. + const stats = {}; + if ("editor" in this.environment) { + stats.editor = this.environment.editor; + } else { + stats.editor = "unknown"; + } + if ("mode" in this.environment) { + stats.mode = this.environment.mode; + } else { + stats.mode = Configuration.get("saveMode"); + } + if ("version" in this.environment) { + stats.version = this.environment.version; + } else { + stats.version = Configuration.get("version"); + } + return stats; } - return stats; - } - /** + /** * Returns true if device is iOS. Otherwise, false. * @returns {Boolean} */ static isIOS() { - return ( - ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes(navigator.platform) || // iPad on iOS 13 detection - (navigator.userAgent.includes("Mac") && "ontouchend" in document) - ); - } - /** + return [ + "iPad Simulator", + "iPhone Simulator", + "iPod Simulator", + "iPad", + "iPhone", + "iPod" + ].includes(navigator.platform) || // iPad on iOS 13 detection + navigator.userAgent.includes("Mac") && "ontouchend" in document; + } + /** * Returns true if device is Mobile. Otherwise, false. * @returns {Boolean} */ static isMobile() { - return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); - } - /** + return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + } + /** * Returns true if editor is loaded. Otherwise, false. * @returns {Boolean} */ static isEditorLoaded() { - // To know if editor JavaScript is loaded we need to wait until - // window.com.wiris.jsEditor.JsEditor.newInstance is ready. - return ( - window.com && - window.com.wiris && - window.com.wiris.jsEditor && - window.com.wiris.jsEditor.JsEditor && - window.com.wiris.jsEditor.JsEditor.newInstance - ); - } - /** + // To know if editor JavaScript is loaded we need to wait until + // window.com.wiris.jsEditor.JsEditor.newInstance is ready. + return window.com && window.com.wiris && window.com.wiris.jsEditor && window.com.wiris.jsEditor.JsEditor && window.com.wiris.jsEditor.JsEditor.newInstance; + } + /** * Sets the {@link ContentManager.editor} initial content. */ setInitialContent() { - if (!this.isNewElement) { - this.setMathML(this.mathML); + if (!this.isNewElement) { + this.setMathML(this.mathML); + } } - } - /** + /** * Sets a MathML into {@link ContentManager.editor} instance. * @param {String} mathml - MathML string. * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set. * False by default. */ setMathML(mathml, focusDisabled) { - // By default focus is enabled. - if (typeof focusDisabled === "undefined") { - focusDisabled = false; - } - // Using setMathML method is not a change produced by the user but for the API - // so we set to false the contentChange property of editorListener. - this.editor.setMathMLWithCallback(mathml, () => { - this.editorListener.setWaitingForChanges(true); - }); - // We need to wait a little until the callback finish. - setTimeout(() => { - this.editorListener.setIsContentChanged(false); - }, 500); - // In some scenarios - like closing modal object - editor mustn't be focused. - if (!focusDisabled) { - this.onFocus(); - } - } - /** + // By default focus is enabled. + if (typeof focusDisabled === "undefined") { + focusDisabled = false; + } + // Using setMathML method is not a change produced by the user but for the API + // so we set to false the contentChange property of editorListener. + this.editor.setMathMLWithCallback(mathml, ()=>{ + this.editorListener.setWaitingForChanges(true); + }); + // We need to wait a little until the callback finish. + setTimeout(()=>{ + this.editorListener.setIsContentChanged(false); + }, 500); + // In some scenarios - like closing modal object - editor mustn't be focused. + if (!focusDisabled) { + this.onFocus(); + } + } + /** * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by * {@link ModalDialog.focus}. */ onFocus() { - if (typeof this.editor !== "undefined" && this.editor != null) { - this.editor.focus(); - // On WordPress integration, the focus gets lost right after setting it. - // To fix this, we enforce another focus some milliseconds after this behaviour. - setTimeout(() => { - this.editor.focus(); - }, 100); - } - } - /** + if (typeof this.editor !== "undefined" && this.editor != null) { + this.editor.focus(); + // On WordPress integration, the focus gets lost right after setting it. + // To fix this, we enforce another focus some milliseconds after this behaviour. + setTimeout(()=>{ + this.editor.focus(); + }, 100); + } + } + /** * Updates the edition area by calling {@link IntegrationModel.updateFormula}. * Triggered by {@link ModalDialog.submitAction}. */ submitAction() { - if (!this.editor.isFormulaEmpty()) { - let mathML = this.editor.getMathMLWithSemantics(); - // Add class for custom editors. - if (this.customEditors.getActiveEditor() !== null) { - const { toolbar } = this.customEditors.getActiveEditor(); - mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar); - } else { - // We need - if exists - the editor name from MathML - // class attribute. - Object.keys(this.customEditors.editors).forEach((key) => { - mathML = MathML.removeCustomEditorClassAttribute(mathML, key); - }); - } - const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML); - this.integrationModel.updateFormula(mathmlEntitiesEncoded); - } else { - this.integrationModel.updateFormula(null); - } - this.customEditors.disable(); - this.integrationModel.notifyWindowClosed(); - // Set disabled focus to prevent lost focus. - this.setEmptyMathML(); - this.customEditors.disable(); - } - /** + if (!this.editor.isFormulaEmpty()) { + let mathML = this.editor.getMathMLWithSemantics(); + // Add class for custom editors. + if (this.customEditors.getActiveEditor() !== null) { + const { toolbar } = this.customEditors.getActiveEditor(); + mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar); + } else { + // We need - if exists - the editor name from MathML + // class attribute. + Object.keys(this.customEditors.editors).forEach((key)=>{ + mathML = MathML.removeCustomEditorClassAttribute(mathML, key); + }); + } + const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML); + this.integrationModel.updateFormula(mathmlEntitiesEncoded); + } else { + this.integrationModel.updateFormula(null); + } + this.customEditors.disable(); + this.integrationModel.notifyWindowClosed(); + // Set disabled focus to prevent lost focus. + this.setEmptyMathML(); + this.customEditors.disable(); + } + /** * Sets an empty MathML as {@link ContentManager.editor} content. * This will open the MT/CT editor with the hand mode. * It adds dir rtl in case of it's activated. */ setEmptyMathML() { - const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS; - const isRTL = this.editor.getEditorModel().isRTL(); - if (isMobile || this.integrationModel.forcedHandMode) { - // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode. - const mathML = `[]`; - this.setMathML(mathML, true); - } else { - // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation. - const mathML = ``; - this.setMathML(mathML, true); + const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS; + const isRTL = this.editor.getEditorModel().isRTL(); + if (isMobile || this.integrationModel.forcedHandMode) { + // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode. + const mathML = `[]`; + this.setMathML(mathML, true); + } else { + // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation. + const mathML = ``; + this.setMathML(mathML, true); + } } - } - /** + /** * Open event. Triggered by {@link ModalDialog.open}. Does the following: * - Updates the {@link ContentManager.editor} content * (with an empty MathML or an existing formula), * - Updates the {@link ContentManager.editor} toolbar. * - Recovers the the focus. */ onOpen() { - if (this.isNewElement) { - this.setEmptyMathML(); - } else { - this.setMathML(this.mathML); - } - let toolbar = this.updateToolbar(); - this.onFocus(); - if (this.deviceProperties.isIOS) { - const zoom = document.documentElement.clientWidth / window.innerWidth; - if (zoom !== 1) { - // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed. - this.setKeyboardMode(); - } - } - let trigger = this.dbclick ? "formula" : "button"; - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("OPENED_MTCT_EDITOR", { - toolbar: toolbar, - trigger: trigger, - }); - } catch (error) { - console.error("Error tracking OPENED_MTCT_EDITOR", error); - } - Core.globalListeners.fire("onModalOpen", {}); - if (this.integrationModel.forcedHandMode) { - this.hideHandModeButton(); - // In case we have a keyboard written formula, we still want it to be opened with handMode. - if (this.mathML && !this.mathML.includes('') && !this.isNewElement) { - this.openHandOnKeyboardMathML(this.mathML, this.editor); - } - } - } - /** + if (this.isNewElement) { + this.setEmptyMathML(); + } else { + this.setMathML(this.mathML); + } + let toolbar = this.updateToolbar(); + this.onFocus(); + if (this.deviceProperties.isIOS) { + const zoom = document.documentElement.clientWidth / window.innerWidth; + if (zoom !== 1) { + // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed. + this.setKeyboardMode(); + } + } + let trigger = this.dbclick ? "formula" : "button"; + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("OPENED_MTCT_EDITOR", { + toolbar: toolbar, + trigger: trigger + }); + } catch (error) { + console.error("Error tracking OPENED_MTCT_EDITOR", error); + } + Core.globalListeners.fire("onModalOpen", {}); + if (this.integrationModel.forcedHandMode) { + this.hideHandModeButton(); + // In case we have a keyboard written formula, we still want it to be opened with handMode. + if (this.mathML && !this.mathML.includes('') && !this.isNewElement) { + this.openHandOnKeyboardMathML(this.mathML, this.editor); + } + } + } + /** * Change Editor in keyboard mode when is loaded */ setKeyboardMode() { - const wrsEditor = document.getElementsByClassName("wrs_handOpen wrs_disablePalette")[0]; - if (wrsEditor) { - wrsEditor.classList.remove("wrs_handOpen"); - wrsEditor.classList.remove("wrs_disablePalette"); - } else { - setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100); + const wrsEditor = document.getElementsByClassName("wrs_handOpen wrs_disablePalette")[0]; + if (wrsEditor) { + wrsEditor.classList.remove("wrs_handOpen"); + wrsEditor.classList.remove("wrs_disablePalette"); + } else { + setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100); + } } - } - /** + /** * Hides the hand <-> keyboard mode switch. * * This method relies completely on the classes used on different HTML elements within the editor itself, meaning @@ -7332,214 +7159,210 @@ class ContentManager { * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it. * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button. */ hideHandModeButton(forced = true) { - if (this.handSwitchHidden) { - return; // hand <-> keyboard button already hidden. - } - // "Open hand mode" button takes a little bit to be available. - // This selector gets the hand <-> keyboard mode switch - const handModeButtonSelector = - "div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]"; - // If in "forced mode", we hide the "keyboard button" so the user can't can't change between hand and keyboard modes. - // We use an observer to ensure that the button it hidden as soon as it appears. - if (forced) { - const mutationInstance = new MutationObserver((mutations) => { - const handModeButton = document.querySelector(handModeButtonSelector); - if (handModeButton) { - handModeButton.hidden = true; - this.handSwitchHidden = true; - mutationInstance.disconnect(); - } - }); - mutationInstance.observe(document.body, { - attributes: true, - childList: true, - characterData: true, - subtree: true, - }); + if (this.handSwitchHidden) { + return; // hand <-> keyboard button already hidden. + } + // "Open hand mode" button takes a little bit to be available. + // This selector gets the hand <-> keyboard mode switch + const handModeButtonSelector = "div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]"; + // If in "forced mode", we hide the "keyboard button" so the user can't can't change between hand and keyboard modes. + // We use an observer to ensure that the button it hidden as soon as it appears. + if (forced) { + const mutationInstance = new MutationObserver((mutations)=>{ + const handModeButton = document.querySelector(handModeButtonSelector); + if (handModeButton) { + handModeButton.hidden = true; + this.handSwitchHidden = true; + mutationInstance.disconnect(); + } + }); + mutationInstance.observe(document.body, { + attributes: true, + childList: true, + characterData: true, + subtree: true + }); + } } - } - /** + /** * It will open any formula written in Keyboard mode with the hand mode with the default hand trace. * * @param {String} mathml The original KeyBoard MathML * @param {Object} editor The editor object. */ async openHandOnKeyboardMathML(mathml, editor) { - // First, as an editor requirement, we need to update the editor object with the current MathML formula. - // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed. - await new Promise((resolve) => { - editor.setMathMLWithCallback(mathml, resolve); - }); - // We wait until the hand editor object exists. - await this.waitForHand(editor); - // Logic to get the hand traces and open the formula in hand mode. - // This logic comes from the editor. - const handEditor = editor.hand; - editor.handTemporalMathML = editor.getMathML(); - const handCoordinates = editor.editorModel.getHandStrokes(); - handEditor.setStrokes(handCoordinates); - handEditor.fitStrokes(true); - editor.openHand(); - } - /** + // First, as an editor requirement, we need to update the editor object with the current MathML formula. + // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed. + await new Promise((resolve)=>{ + editor.setMathMLWithCallback(mathml, resolve); + }); + // We wait until the hand editor object exists. + await this.waitForHand(editor); + // Logic to get the hand traces and open the formula in hand mode. + // This logic comes from the editor. + const handEditor = editor.hand; + editor.handTemporalMathML = editor.getMathML(); + const handCoordinates = editor.editorModel.getHandStrokes(); + handEditor.setStrokes(handCoordinates); + handEditor.fitStrokes(true); + editor.openHand(); + } + /** * Waits until the hand editor object exists. * @param {Obect} editor The editor object. */ async waitForHand(editor) { - while (!editor.hand) { - await new Promise((resolve) => setTimeout(resolve, 100)); + while(!editor.hand){ + await new Promise((resolve)=>setTimeout(resolve, 100)); + } } - } - /** + /** * Sets the correct toolbar depending if exist other custom toolbars * at the same time (e.g: Chemistry). */ updateToolbar() { - this.updateTitle(this.modalDialogInstance); - const customEditor = this.customEditors.getActiveEditor(); - let toolbar; - if (customEditor) { - toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar; - if (this.toolbar == null || this.toolbar !== toolbar) { - this.setToolbar(toolbar); - } - } else { - toolbar = this.getToolbar(); - if (this.toolbar == null || this.toolbar !== toolbar) { - this.setToolbar(toolbar); - this.customEditors.disable(); - } + this.updateTitle(this.modalDialogInstance); + const customEditor = this.customEditors.getActiveEditor(); + let toolbar; + if (customEditor) { + toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar; + if (this.toolbar == null || this.toolbar !== toolbar) { + this.setToolbar(toolbar); + } + } else { + toolbar = this.getToolbar(); + if (this.toolbar == null || this.toolbar !== toolbar) { + this.setToolbar(toolbar); + this.customEditors.disable(); + } + } + return toolbar; } - return toolbar; - } - /** + /** * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled * sets the custom editor title. Otherwise sets the default title. */ updateTitle() { - const customEditor = this.customEditors.getActiveEditor(); - if (customEditor) { - this.modalDialogInstance.setTitle(customEditor.title); - } else { - this.modalDialogInstance.setTitle("MathType"); + const customEditor = this.customEditors.getActiveEditor(); + if (customEditor) { + this.modalDialogInstance.setTitle(customEditor.title); + } else { + this.modalDialogInstance.setTitle("MathType"); + } } - } - /** + /** * Returns the editor toolbar, depending on the configuration local or server side. * @returns {String} - Toolbar identifier. */ getToolbar() { - let toolbar = "general"; - if ("toolbar" in this.editorAttributes) { - ({ toolbar } = this.editorAttributes); - } - // TODO: Change global integration variable for integration custom toolbar. - if (toolbar === "general") { - // eslint-disable-next-line camelcase - toolbar = - typeof _wrs_int_wirisProperties === "undefined" || typeof _wrs_int_wirisProperties.toolbar === "undefined" - ? "general" - : _wrs_int_wirisProperties.toolbar; - } - return toolbar; - } - /** + let toolbar = "general"; + if ("toolbar" in this.editorAttributes) { + ({ toolbar } = this.editorAttributes); + } + // TODO: Change global integration variable for integration custom toolbar. + if (toolbar === "general") { + // eslint-disable-next-line camelcase + toolbar = typeof _wrs_int_wirisProperties === "undefined" || typeof _wrs_int_wirisProperties.toolbar === "undefined" ? "general" : _wrs_int_wirisProperties.toolbar; + } + return toolbar; + } + /** * Sets the current {@link ContentManager.editor} instance toolbar. * @param {String} toolbar - The toolbar name. */ setToolbar(toolbar) { - this.toolbar = toolbar; - this.editor.setParams({ - toolbar: this.toolbar, - }); - } - /** + this.toolbar = toolbar; + this.editor.setParams({ + toolbar: this.toolbar + }); + } + /** * Sets the custom headers added on editor requests. * @returns {Object} headers - key value headers. */ setCustomHeaders(headers) { - let headersObj = {}; - // We control that we only get String or Object as the input. - if (typeof headers === "object") { - headersObj = headers; - } else if (typeof headers === "string") { - headersObj = Util.convertStringToObject(headers); - } - this.editor.setParams({ - customHeaders: headersObj, - }); - return headersObj; - } - /** + let headersObj = {}; + // We control that we only get String or Object as the input. + if (typeof headers === "object") { + headersObj = headers; + } else if (typeof headers === "string") { + headersObj = Util.convertStringToObject(headers); + } + this.editor.setParams({ + customHeaders: headersObj + }); + return headersObj; + } + /** * Returns true if the content of the editor has been changed. The logic of the changes * is delegated to {@link EditorListener} class. * @returns {Boolean} True if the editor content has been changed. False otherwise. */ hasChanges() { - return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged(); - } - /** + return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged(); + } + /** * Handle keyboard events detected in modal when elements of this class intervene. * @param {KeyboardEvent} keyboardEvent - The keyboard event. */ onKeyDown(keyboardEvent) { - if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) { - if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { - // Code to detect Esc event. - // There should be only one element with class name 'wrs_pressed' at the same time. - let list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed"); - if (list.length === 0) { - list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed"); - if (list.length === 0) { - list = document.getElementsByClassName("wrs_select wrs_pressed"); - if (list.length === 0) { - this.modalDialogInstance.cancelAction(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { - // Code to detect shift Tab event. - if (document.activeElement === this.modalDialogInstance.submitButton) { - // Focus is on OK button. - this.editor.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else if (document.querySelector('[title="Manual"]') === document.activeElement) { - // Focus is on minimize button (_). - this.modalDialogInstance.closeDiv.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else { - if (document.activeElement === this.modalDialogInstance.minimizeDiv) { - // Focus on cancel button. - if (!(this.modalDialogInstance.properties.state === "minimized")) { - this.modalDialogInstance.cancelButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } else if (keyboardEvent.key === "Tab") { - // Code to detect Tab event. - if (document.activeElement === this.modalDialogInstance.cancelButton) { - // Focus is on X button. - this.modalDialogInstance.minimizeDiv.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else if (document.activeElement === this.modalDialogInstance.closeDiv) { - // Focus on help button. - if (!(this.modalDialogInstance.properties.state === "minimized")) { - const element = document.querySelector('[title="Manual"]'); - element.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } else { - // There should be only one element with class name 'wrs_formulaDisplay'. - const element = document.getElementsByClassName("wrs_formulaDisplay")[0]; - if (element.getAttribute("class") === "wrs_formulaDisplay wrs_focused") { - // Focus is on formuladisplay. - this.modalDialogInstance.submitButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } - } + if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) { + if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { + // Code to detect Esc event. + // There should be only one element with class name 'wrs_pressed' at the same time. + let list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed"); + if (list.length === 0) { + list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed"); + if (list.length === 0) { + list = document.getElementsByClassName("wrs_select wrs_pressed"); + if (list.length === 0) { + this.modalDialogInstance.cancelAction(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { + // Code to detect shift Tab event. + if (document.activeElement === this.modalDialogInstance.submitButton) { + // Focus is on OK button. + this.editor.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else if (document.querySelector('[title="Manual"]') === document.activeElement) { + // Focus is on minimize button (_). + this.modalDialogInstance.closeDiv.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else { + if (document.activeElement === this.modalDialogInstance.minimizeDiv) { + // Focus on cancel button. + if (!(this.modalDialogInstance.properties.state === "minimized")) { + this.modalDialogInstance.cancelButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } else if (keyboardEvent.key === "Tab") { + // Code to detect Tab event. + if (document.activeElement === this.modalDialogInstance.cancelButton) { + // Focus is on X button. + this.modalDialogInstance.minimizeDiv.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else if (document.activeElement === this.modalDialogInstance.closeDiv) { + // Focus on help button. + if (!(this.modalDialogInstance.properties.state === "minimized")) { + const element = document.querySelector('[title="Manual"]'); + element.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } else { + // There should be only one element with class name 'wrs_formulaDisplay'. + const element = document.getElementsByClassName("wrs_formulaDisplay")[0]; + if (element.getAttribute("class") === "wrs_formulaDisplay wrs_focused") { + // Focus is on formuladisplay. + this.modalDialogInstance.submitButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } + } } /** @@ -7553,7 +7376,7 @@ class ContentManager { * @property {String} CustomEditor.title - Custom editor modal dialog title. * @property {String} CustomEditor.tooltip - Custom editor icon tooltip. */ class CustomEditors { - /** + /** * @classdesc * This class represents the MathType custom editors manager. * A custom editor is MathType editor with a custom toolbar. @@ -7564,50 +7387,50 @@ class ContentManager { * - A tooltip for the icon. * - A global variable to enable or disable it globally. * @constructs - */ constructor() { - /** + */ constructor(){ + /** * The custom editors. * @type {Array.} */ this.editors = []; - /** + /** * The active editor name. * @type {String} */ this.activeEditor = "default"; - } - /** + } + /** * Adds a {@link CustomEditor} to editors array. * @param {String} editorName - The editor name. * @param {CustomEditor} editorParams - The custom editor parameters. */ addEditor(editorName, editorParams) { - const customEditor = {}; - customEditor.name = editorParams.name; - customEditor.toolbar = editorParams.toolbar; - customEditor.icon = editorParams.icon; - customEditor.confVariable = editorParams.confVariable; - customEditor.title = editorParams.title; - customEditor.tooltip = editorParams.tooltip; - this.editors[editorName] = customEditor; - } - /** + const customEditor = {}; + customEditor.name = editorParams.name; + customEditor.toolbar = editorParams.toolbar; + customEditor.icon = editorParams.icon; + customEditor.confVariable = editorParams.confVariable; + customEditor.title = editorParams.title; + customEditor.tooltip = editorParams.tooltip; + this.editors[editorName] = customEditor; + } + /** * Enables a {@link CustomEditor}. * @param {String} customEditorName - The custom editor name. */ enable(customEditorName) { - this.activeEditor = customEditorName; - } - /** + this.activeEditor = customEditorName; + } + /** * Disables a {@link CustomEditor}. */ disable() { - this.activeEditor = "default"; - } - /** + this.activeEditor = "default"; + } + /** * Returns the active editor. * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise. */ getActiveEditor() { - if (this.activeEditor !== "default") { - return this.editors[this.activeEditor]; + if (this.activeEditor !== "default") { + return this.editors[this.activeEditor]; + } + return null; } - return null; - } } /** @@ -7617,13 +7440,13 @@ class ContentManager { * @property {string} imageClassName - Default MathType CAS image class. * @ignore */ const jsProperties = { - imageCustomEditorName: "data-custom-editor", - imageClassName: "Wirisformula", - CASClassName: "Wiriscas", + imageCustomEditorName: "data-custom-editor", + imageClassName: "Wirisformula", + CASClassName: "Wiriscas" }; class Event { - /** + /** * @classdesc * This class represents a custom event. Events should be fired by the {@link Listener} class. * @@ -7637,32 +7460,32 @@ class Event { * listeners.fire(eventName, customEvent) * * ``` * @constructs - */ constructor() { - /** + */ constructor(){ + /** * Indicates if the event should be cancelled. * @type {Boolean} */ this.cancelled = false; - /** + /** * Indicates if the event should be prevented. * @type {Boolean} */ this.defaultPrevented = false; - } - /** + } + /** * Cancels the event. */ cancel() { - this.cancelled = true; - } - /** + this.cancelled = true; + } + /** * Prevents the default action. */ preventDefault() { - this.defaultPrevented = true; - } + this.defaultPrevented = true; + } } /** */ class PopUpMessage { - /** + /** * @classdesc * This class represents a dialog message overlaying a DOM element in order to * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears @@ -7673,64 +7496,64 @@ class Event { * @param {Object} popupMessageAttributes.callbacks - Contains callback * methods for close and cancel actions. * @param {Object} popupMessageAttributes.strings - Contains all the strings needed. - */ constructor(popupMessageAttributes) { - /** + */ constructor(popupMessageAttributes){ + /** * Element to be overlaid when the popup appears. */ this.overlayElement = popupMessageAttributes.overlayElement; - this.callbacks = popupMessageAttributes.callbacks; - /** + this.callbacks = popupMessageAttributes.callbacks; + /** * HTMLElement element to wrap all HTML elements inside the popupMessage. */ this.overlayWrapper = this.overlayElement.appendChild(document.createElement("div")); - this.overlayWrapper.setAttribute("class", "wrs_popupmessage_overlay_envolture"); - /** + this.overlayWrapper.setAttribute("class", "wrs_popupmessage_overlay_envolture"); + /** * HTMLElement to display the popup message, close button and cancel button. */ this.message = this.overlayWrapper.appendChild(document.createElement("div")); - this.message.id = "wrs_popupmessage"; - this.message.setAttribute("class", "wrs_popupmessage_panel"); - this.message.setAttribute("role", "dialog"); - this.message.setAttribute("aria-describedby", "description_txt"); - const paragraph = document.createElement("p"); - const text = document.createTextNode(popupMessageAttributes.strings.message); - paragraph.appendChild(text); - paragraph.id = "description_txt"; - this.message.appendChild(paragraph); - /** + this.message.id = "wrs_popupmessage"; + this.message.setAttribute("class", "wrs_popupmessage_panel"); + this.message.setAttribute("role", "dialog"); + this.message.setAttribute("aria-describedby", "description_txt"); + const paragraph = document.createElement("p"); + const text = document.createTextNode(popupMessageAttributes.strings.message); + paragraph.appendChild(text); + paragraph.id = "description_txt"; + this.message.appendChild(paragraph); + /** * HTML element overlaying the overlayElement. */ const overlay = this.overlayWrapper.appendChild(document.createElement("div")); - overlay.setAttribute("class", "wrs_popupmessage_overlay"); - // We create a overlay that close popup message on click in there - overlay.addEventListener("click", this.cancelAction.bind(this)); - /** + overlay.setAttribute("class", "wrs_popupmessage_overlay"); + // We create a overlay that close popup message on click in there + overlay.addEventListener("click", this.cancelAction.bind(this)); + /** * HTML element containing cancel and close buttons. */ this.buttonArea = this.message.appendChild(document.createElement("div")); - this.buttonArea.setAttribute("class", "wrs_popupmessage_button_area"); - this.buttonArea.id = "wrs_popup_button_area"; - // Close button arguments. - const buttonSubmitArguments = { - class: "wrs_button_accept", - innerHTML: popupMessageAttributes.strings.submitString, - id: "wrs_popup_accept_button", - // To identifiy the element in automated testing - "data-testid": "mtcteditor-cd-close-button", - }; - /** + this.buttonArea.setAttribute("class", "wrs_popupmessage_button_area"); + this.buttonArea.id = "wrs_popup_button_area"; + // Close button arguments. + const buttonSubmitArguments = { + class: "wrs_button_accept", + innerHTML: popupMessageAttributes.strings.submitString, + id: "wrs_popup_accept_button", + // To identifiy the element in automated testing + "data-testid": "mtcteditor-cd-close-button" + }; + /** * Close button arguments. */ this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this)); - this.buttonArea.appendChild(this.closeButton); - // Cancel button arguments. - const buttonCancelArguments = { - class: "wrs_button_cancel", - innerHTML: popupMessageAttributes.strings.cancelString, - id: "wrs_popup_cancel_button", - // To identifiy the element in automated testing - "data-testid": "mtcteditor-cd-cancel-button", - }; - /** + this.buttonArea.appendChild(this.closeButton); + // Cancel button arguments. + const buttonCancelArguments = { + class: "wrs_button_cancel", + innerHTML: popupMessageAttributes.strings.cancelString, + id: "wrs_popup_cancel_button", + // To identifiy the element in automated testing + "data-testid": "mtcteditor-cd-cancel-button" + }; + /** * Cancel button. */ this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this)); - this.buttonArea.appendChild(this.cancelButton); - } - /** + this.buttonArea.appendChild(this.cancelButton); + } + /** * This method create a button with arguments and return button dom object * @param {Object} parameters - An object containing id, class and innerHTML button text. * @param {String} parameters.id - Button id. @@ -7739,107 +7562,97 @@ class Event { * @param {Object} callback- Callback method to call on click event. * @returns {HTMLElement} HTML button. */ // eslint-disable-next-line class-methods-use-this - createButton(parameters, callback) { - let element = {}; - element = document.createElement("button"); - element.setAttribute("id", parameters.id); - element.setAttribute("class", parameters.class); - element.innerHTML = parameters.innerHTML; - element.addEventListener("click", callback); - if (parameters["data-testid"]) { - element.setAttribute("data-testid", parameters["data-testid"]); - } - return element; - } - /** + createButton(parameters, callback) { + let element = {}; + element = document.createElement("button"); + element.setAttribute("id", parameters.id); + element.setAttribute("class", parameters.class); + element.innerHTML = parameters.innerHTML; + element.addEventListener("click", callback); + if (parameters["data-testid"]) { + element.setAttribute("data-testid", parameters["data-testid"]); + } + return element; + } + /** * Shows the popupmessage containing a message, and two buttons * to cancel the action or close the modal dialog. */ show() { - if (this.overlayWrapper.style.display !== "block") { - // Clear focus with blur for prevent press any key. - document.activeElement.blur(); - this.overlayWrapper.style.display = "block"; - this.closeButton.focus(); - } else { - this.overlayWrapper.style.display = "none"; - // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow + if (this.overlayWrapper.style.display !== "block") { + // Clear focus with blur for prevent press any key. + document.activeElement.blur(); + this.overlayWrapper.style.display = "block"; + this.closeButton.focus(); + } else { + this.overlayWrapper.style.display = "none"; + // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow + } } - } - /** + /** * This method cancels the popupMessage: the dialog disappears revealing the overlaid element. * A callback method is called (if defined). For example a method to focus the overlaid element. */ cancelAction() { - this.overlayWrapper.style.display = "none"; - if (typeof this.callbacks.cancelCallback !== "undefined") { - this.callbacks.cancelCallback(); - // Set temporal image to null to prevent loading - // an existent formula when starting one from scratch. Make focus come back too. - // IntegrationModel.setActionsOnCancelButtons(); - } - } - /** + this.overlayWrapper.style.display = "none"; + if (typeof this.callbacks.cancelCallback !== "undefined") { + this.callbacks.cancelCallback(); + // Set temporal image to null to prevent loading + // an existent formula when starting one from scratch. Make focus come back too. + // IntegrationModel.setActionsOnCancelButtons(); + } + } + /** * This method closes the popupMessage: the dialog disappears and the close callback is called. * For example to close the overlaid element. */ closeAction() { - this.cancelAction(); - if (typeof this.callbacks.closeCallback !== "undefined") { - this.callbacks.closeCallback(); + this.cancelAction(); + if (typeof this.callbacks.closeCallback !== "undefined") { + this.callbacks.closeCallback(); + } + IntegrationModel.setActionsOnCancelButtons(); } - IntegrationModel.setActionsOnCancelButtons(); - } - /** + /** * Handle keyboard events detected in modal when elements of this class intervene. * @param {KeyboardEvent} keyboardEvent - The keyboard event. */ onKeyDown(keyboardEvent) { - if (keyboardEvent.key !== undefined) { - // Code to detect Esc event. - if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { - this.cancelAction(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else if (keyboardEvent.key === "Tab") { - // Code to detect Tab event. - if (document.activeElement === this.closeButton) { - this.cancelButton.focus(); - } else { - this.closeButton.focus(); + if (keyboardEvent.key !== undefined) { + // Code to detect Esc event. + if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { + this.cancelAction(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else if (keyboardEvent.key === "Tab") { + // Code to detect Tab event. + if (document.activeElement === this.closeButton) { + this.cancelButton.focus(); + } else { + this.closeButton.focus(); + } + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } } - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } } - } } -var closeIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var closeIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var closeHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var closeHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var fullsIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var fullsIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var fullsHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var fullsHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var minIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var minIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var minHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var minHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var minsIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var minsIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var minsHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var minsHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var maxIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var maxIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; -var maxHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; +var maxHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; // eslint-disable-next-line max-classes-per-file /** @@ -7852,55 +7665,55 @@ var maxHoverIcon = * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one. * False otherwise. */ class ModalDialog { - /** + /** * @classdesc * This class represents a modal dialog. The modal dialog admits * a {@link ContentManager} instance to manage the content of the dialog. * @constructs * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes. - */ constructor(modalDialogAttributes) { - this.attributes = modalDialogAttributes; - // Metrics. - const ua = navigator.userAgent.toLowerCase(); - const isAndroid = ua.indexOf("android") > -1; - const isIOS = ContentManager.isIOS(); - this.iosSoftkeyboardOpened = false; - this.iosMeasureUnit = ua.indexOf("crios") === -1 ? "%" : "vh"; - this.iosDivHeight = `100%${this.iosMeasureUnit}`; - const deviceWidth = window.outerWidth; - const deviceHeight = window.outerHeight; - const landscape = deviceWidth > deviceHeight; - const portrait = deviceWidth < deviceHeight; - // TODO: Detect isMobile without using editor metrics. - landscape && this.attributes.height > deviceHeight; - portrait && this.attributes.width > deviceWidth; - const isMobile = ContentManager.isMobile(); - // Obtain number of current instance. - this.instanceId = document.getElementsByClassName("wrs_modal_dialogContainer").length; - // Device object properties. - /** + */ constructor(modalDialogAttributes){ + this.attributes = modalDialogAttributes; + // Metrics. + const ua = navigator.userAgent.toLowerCase(); + const isAndroid = ua.indexOf("android") > -1; + const isIOS = ContentManager.isIOS(); + this.iosSoftkeyboardOpened = false; + this.iosMeasureUnit = ua.indexOf("crios") === -1 ? "%" : "vh"; + this.iosDivHeight = `100%${this.iosMeasureUnit}`; + const deviceWidth = window.outerWidth; + const deviceHeight = window.outerHeight; + const landscape = deviceWidth > deviceHeight; + const portrait = deviceWidth < deviceHeight; + // TODO: Detect isMobile without using editor metrics. + landscape && this.attributes.height > deviceHeight; + portrait && this.attributes.width > deviceWidth; + const isMobile = ContentManager.isMobile(); + // Obtain number of current instance. + this.instanceId = document.getElementsByClassName("wrs_modal_dialogContainer").length; + // Device object properties. + /** * @type {DeviceProperties} */ this.deviceProperties = { - orientation: landscape ? "landscape" : "portrait", - isAndroid, - isIOS, - isMobile, - isDesktop: !isMobile && !isIOS && !isAndroid, - }; - this.properties = { - created: false, - state: "", - previousState: "", - position: { - bottom: 0, - right: 10, - }, - size: { - height: 338, - width: 580, - }, - }; - /** + orientation: landscape ? "landscape" : "portrait", + isAndroid, + isIOS, + isMobile, + isDesktop: !isMobile && !isIOS && !isAndroid + }; + this.properties = { + created: false, + state: "", + previousState: "", + position: { + bottom: 0, + right: 10 + }, + size: { + height: 338, + width: 580 + } + }; + /** * Object to keep website's style before change it on lock scroll for mobile devices. * @type {Object} * @property {String} bodyStylePosition - Previous body style position. @@ -7909,190 +7722,184 @@ var maxHoverIcon = * @property {String} windowScrollX - Previous window's scroll Y. * @property {String} windowScrollY - Previous window's scroll X. */ this.websiteBeforeLockParameters = null; - let attributes = {}; - attributes.class = "wrs_modal_overlay"; - attributes.id = this.getElementId(attributes.class); - this.overlay = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_title_bar"; - attributes.id = this.getElementId(attributes.class); - this.titleBar = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_title"; - attributes.id = this.getElementId(attributes.class); - this.title = Util.createElement("div", attributes); - this.title.innerHTML = "offline"; - attributes = {}; - attributes.class = "wrs_modal_close_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("close"); - attributes.style = {}; - this.closeDiv = Util.createElement("a", attributes); - this.closeDiv.setAttribute("role", "button"); - this.closeDiv.setAttribute("tabindex", 3); - // Apply styles and events after the creation as createElement doesn't process them correctly - let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`; - let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`; - this.closeDiv.setAttribute("style", generalStyle); - this.closeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.closeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identifiy the element in automated testing - this.closeDiv.setAttribute("data-testid", "mtcteditor-close-button"); - attributes = {}; - attributes.class = "wrs_modal_stack_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("exit_fullscreen"); - this.stackDiv = Util.createElement("a", attributes); - this.stackDiv.setAttribute("role", "button"); - this.stackDiv.setAttribute("tabindex", 2); - generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`; - hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`; - this.stackDiv.setAttribute("style", generalStyle); - this.stackDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.stackDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identifiy the element in automated testing - this.stackDiv.setAttribute("data-testid", "mtcteditor-fullscreen-disable-button"); - attributes = {}; - attributes.class = "wrs_modal_maximize_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("fullscreen"); - this.maximizeDiv = Util.createElement("a", attributes); - this.maximizeDiv.setAttribute("role", "button"); - this.maximizeDiv.setAttribute("tabindex", 2); - generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`; - hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`; - this.maximizeDiv.setAttribute("style", generalStyle); - this.maximizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.maximizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identifiy the element in automated testing - this.maximizeDiv.setAttribute("data-testid", "mtcteditor-fullscreen-enable-button"); - attributes = {}; - attributes.class = "wrs_modal_minimize_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("minimize"); - this.minimizeDiv = Util.createElement("a", attributes); - this.minimizeDiv.setAttribute("role", "button"); - this.minimizeDiv.setAttribute("tabindex", 1); - generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; - hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identify the element in automated testing - this.minimizeDiv.setAttribute("data-testid", "mtcteditor-minimize-button"); - attributes = {}; - attributes.class = "wrs_modal_dialogContainer"; - attributes.id = this.getElementId(attributes.class); - attributes.role = "dialog"; - this.container = Util.createElement("div", attributes); - this.container.setAttribute("aria-labeledby", "wrs_modal_title[0]"); - attributes = {}; - attributes.class = "wrs_modal_wrapper"; - attributes.id = this.getElementId(attributes.class); - this.wrapper = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_content_container"; - attributes.id = this.getElementId(attributes.class); - this.contentContainer = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_controls"; - attributes.id = this.getElementId(attributes.class); - this.controls = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_buttons_container"; - attributes.id = this.getElementId(attributes.class); - this.buttonContainer = Util.createElement("div", attributes); - // Buttons: all button must be created using createSubmitButton method. - this.submitButton = this.createSubmitButton( - { - id: this.getElementId("wrs_modal_button_accept"), - class: "wrs_modal_button_accept", - innerHTML: StringManager.get("accept"), + let attributes = {}; + attributes.class = "wrs_modal_overlay"; + attributes.id = this.getElementId(attributes.class); + this.overlay = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_title_bar"; + attributes.id = this.getElementId(attributes.class); + this.titleBar = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_title"; + attributes.id = this.getElementId(attributes.class); + this.title = Util.createElement("div", attributes); + this.title.innerHTML = "offline"; + attributes = {}; + attributes.class = "wrs_modal_close_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("close"); + attributes.style = {}; + this.closeDiv = Util.createElement("a", attributes); + this.closeDiv.setAttribute("role", "button"); + this.closeDiv.setAttribute("tabindex", 3); + // Apply styles and events after the creation as createElement doesn't process them correctly + let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`; + let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`; + this.closeDiv.setAttribute("style", generalStyle); + this.closeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.closeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); // To identifiy the element in automated testing - "data-testid": "mtcteditor-insert-button", - }, - this.submitAction.bind(this), - ); - this.cancelButton = this.createSubmitButton( - { - id: this.getElementId("wrs_modal_button_cancel"), - class: "wrs_modal_button_cancel", - innerHTML: StringManager.get("cancel"), + this.closeDiv.setAttribute("data-testid", "mtcteditor-close-button"); + attributes = {}; + attributes.class = "wrs_modal_stack_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("exit_fullscreen"); + this.stackDiv = Util.createElement("a", attributes); + this.stackDiv.setAttribute("role", "button"); + this.stackDiv.setAttribute("tabindex", 2); + generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`; + hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`; + this.stackDiv.setAttribute("style", generalStyle); + this.stackDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.stackDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); // To identifiy the element in automated testing - "data-testid": "mtcteditor-cancel-button", - }, - this.cancelAction.bind(this), - ); - this.contentManager = null; - // Overlay popup. - const popupStrings = { - cancelString: StringManager.get("cancel"), - submitString: StringManager.get("close"), - message: StringManager.get("close_modal_warning"), - }; - const callbacks = { - closeCallback: () => { - this.close("mtc_close"); - }, - cancelCallback: () => { - this.focus(); - }, - }; - const popupupProperties = { - overlayElement: this.container, - callbacks, - strings: popupStrings, - }; - this.popup = new PopUpMessage(popupupProperties); - /** + this.stackDiv.setAttribute("data-testid", "mtcteditor-fullscreen-disable-button"); + attributes = {}; + attributes.class = "wrs_modal_maximize_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("fullscreen"); + this.maximizeDiv = Util.createElement("a", attributes); + this.maximizeDiv.setAttribute("role", "button"); + this.maximizeDiv.setAttribute("tabindex", 2); + generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`; + hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`; + this.maximizeDiv.setAttribute("style", generalStyle); + this.maximizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.maximizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // To identifiy the element in automated testing + this.maximizeDiv.setAttribute("data-testid", "mtcteditor-fullscreen-enable-button"); + attributes = {}; + attributes.class = "wrs_modal_minimize_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("minimize"); + this.minimizeDiv = Util.createElement("a", attributes); + this.minimizeDiv.setAttribute("role", "button"); + this.minimizeDiv.setAttribute("tabindex", 1); + generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; + hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // To identify the element in automated testing + this.minimizeDiv.setAttribute("data-testid", "mtcteditor-minimize-button"); + attributes = {}; + attributes.class = "wrs_modal_dialogContainer"; + attributes.id = this.getElementId(attributes.class); + attributes.role = "dialog"; + this.container = Util.createElement("div", attributes); + this.container.setAttribute("aria-labeledby", "wrs_modal_title[0]"); + attributes = {}; + attributes.class = "wrs_modal_wrapper"; + attributes.id = this.getElementId(attributes.class); + this.wrapper = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_content_container"; + attributes.id = this.getElementId(attributes.class); + this.contentContainer = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_controls"; + attributes.id = this.getElementId(attributes.class); + this.controls = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_buttons_container"; + attributes.id = this.getElementId(attributes.class); + this.buttonContainer = Util.createElement("div", attributes); + // Buttons: all button must be created using createSubmitButton method. + this.submitButton = this.createSubmitButton({ + id: this.getElementId("wrs_modal_button_accept"), + class: "wrs_modal_button_accept", + innerHTML: StringManager.get("accept"), + // To identifiy the element in automated testing + "data-testid": "mtcteditor-insert-button" + }, this.submitAction.bind(this)); + this.cancelButton = this.createSubmitButton({ + id: this.getElementId("wrs_modal_button_cancel"), + class: "wrs_modal_button_cancel", + innerHTML: StringManager.get("cancel"), + // To identifiy the element in automated testing + "data-testid": "mtcteditor-cancel-button" + }, this.cancelAction.bind(this)); + this.contentManager = null; + // Overlay popup. + const popupStrings = { + cancelString: StringManager.get("cancel"), + submitString: StringManager.get("close"), + message: StringManager.get("close_modal_warning") + }; + const callbacks = { + closeCallback: ()=>{ + this.close("mtc_close"); + }, + cancelCallback: ()=>{ + this.focus(); + } + }; + const popupupProperties = { + overlayElement: this.container, + callbacks, + strings: popupStrings + }; + this.popup = new PopUpMessage(popupupProperties); + /** * Indicates if directionality of the modal dialog is RTL. false by default. * @type {Boolean} */ this.rtl = false; - if ("rtl" in this.attributes) { - this.rtl = this.attributes.rtl; - } - // Event handlers need modal instance context. - this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this); - this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this); - } - /** + if ("rtl" in this.attributes) { + this.rtl = this.attributes.rtl; + } + // Event handlers need modal instance context. + this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this); + this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this); + } + /** * This method sets an ContentManager instance to ModalDialog. ContentManager * manages the logic of ModalDialog content: submit, update, close and changes. * @param {ContentManager} contentManager - ContentManager instance. */ setContentManager(contentManager) { - this.contentManager = contentManager; - } - /** + this.contentManager = contentManager; + } + /** * Returns the modal contentElement object. * @returns {ContentManager} the instance of the ContentManager class. */ getContentManager() { - return this.contentManager; - } - /** + return this.contentManager; + } + /** * This method is called when the modal object has been submitted. Calls * contentElement submitAction method - if exists - and closes the modal * object. No logic about the content should be placed here, * contentElement.submitAction is the responsible of the content logic. */ async submitAction() { - if (typeof this.contentManager.submitAction !== "undefined") { - this.contentManager.submitAction(); + if (typeof this.contentManager.submitAction !== "undefined") { + this.contentManager.submitAction(); + } + await this.close("mtc_insert"); } - await this.close("mtc_insert"); - } - /** + /** * Performs the cancel action. * If there are no changes in the content, it closes the modal. * Otherwise, it shows a pop-up message to confirm the cancel action. * @returns {Promise} - A promise that resolves when the modal is closed. */ async cancelAction() { - if (typeof this.contentManager.hasChanges === "undefined" || !this.contentManager.hasChanges()) { - IntegrationModel.setActionsOnCancelButtons(); - await this.close("mtc_close"); - } else { - this.showPopUpMessage(); + if (typeof this.contentManager.hasChanges === "undefined" || !this.contentManager.hasChanges()) { + IntegrationModel.setActionsOnCancelButtons(); + await this.close("mtc_close"); + } else { + this.showPopUpMessage(); + } } - } - /** + /** * Returns a button element. * @param {Object} properties - Input button properties. * @param {String} properties.class - Input button class. @@ -8101,26 +7908,26 @@ var maxHoverIcon = * @returns {HTMLButtonElement} The button element. * */ // eslint-disable-next-line class-methods-use-this - createSubmitButton(properties, callback) { - class SubmitButton { - constructor() { - this.element = document.createElement("button"); - this.element.id = properties.id; - this.element.className = properties.class; - this.element.innerHTML = properties.innerHTML; - this.element.dataset.testid = properties["data-testid"]; - Util.addEvent(this.element, "click", callback); - } - getElement() { - return this.element; - } - } - return new SubmitButton(properties, callback).getElement(); - } - /** + createSubmitButton(properties, callback) { + class SubmitButton { + constructor(){ + this.element = document.createElement("button"); + this.element.id = properties.id; + this.element.className = properties.class; + this.element.innerHTML = properties.innerHTML; + this.element.dataset.testid = properties["data-testid"]; + Util.addEvent(this.element, "click", callback); + } + getElement() { + return this.element; + } + } + return new SubmitButton(properties, callback).getElement(); + } + /** * Creates the modal window object inserting a contentElement object. */ create() { - /* Modal Window Structure + /* Modal Window Structure _____________________________________________________________________________________ |wrs_modal_dialog_Container | | _________________________________________________________________________________ | @@ -8141,1146 +7948,1134 @@ var maxHoverIcon = | | | |_|_____________ |______________|_| | | | | | |___________________________________________________________________________| | | | |_______________________________________________________________________________| | - |___________________________________________________________________________________| */ this.titleBar.appendChild( - this.closeDiv, - ); - this.titleBar.appendChild(this.stackDiv); - this.titleBar.appendChild(this.maximizeDiv); - this.titleBar.appendChild(this.minimizeDiv); - this.titleBar.appendChild(this.title); - if (this.deviceProperties.isDesktop) { - this.container.appendChild(this.titleBar); - } - this.wrapper.appendChild(this.contentContainer); - this.wrapper.appendChild(this.controls); - this.controls.appendChild(this.buttonContainer); - this.buttonContainer.appendChild(this.submitButton); - this.buttonContainer.appendChild(this.cancelButton); - this.container.appendChild(this.wrapper); - // Check if browser has scrollBar before modal has modified. - this.recalculateScrollBar(); - document.body.appendChild(this.container); - document.body.appendChild(this.overlay); - if (this.deviceProperties.isDesktop) { - // Desktop. - this.createModalWindowDesktop(); - this.createResizeButtons(); - this.addListeners(); - // Maximize window only when the configuration is set and the device is not iOS or Android. - if (Configuration.get("modalWindowFullScreen")) { - this.maximize(); - } - } else if (this.deviceProperties.isAndroid) { - this.createModalWindowAndroid(); - } else if (this.deviceProperties.isIOS) { - this.createModalWindowIos(); - } - if (this.contentManager != null) { - this.contentManager.insert(this); - } - this.properties.open = true; - this.properties.created = true; - // Checks language directionality. - if (this.isRTL()) { - this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`; - this.container.className += " wrs_modal_rtl"; - } - } - /** + |___________________________________________________________________________________| */ this.titleBar.appendChild(this.closeDiv); + this.titleBar.appendChild(this.stackDiv); + this.titleBar.appendChild(this.maximizeDiv); + this.titleBar.appendChild(this.minimizeDiv); + this.titleBar.appendChild(this.title); + if (this.deviceProperties.isDesktop) { + this.container.appendChild(this.titleBar); + } + this.wrapper.appendChild(this.contentContainer); + this.wrapper.appendChild(this.controls); + this.controls.appendChild(this.buttonContainer); + this.buttonContainer.appendChild(this.submitButton); + this.buttonContainer.appendChild(this.cancelButton); + this.container.appendChild(this.wrapper); + // Check if browser has scrollBar before modal has modified. + this.recalculateScrollBar(); + document.body.appendChild(this.container); + document.body.appendChild(this.overlay); + if (this.deviceProperties.isDesktop) { + // Desktop. + this.createModalWindowDesktop(); + this.createResizeButtons(); + this.addListeners(); + // Maximize window only when the configuration is set and the device is not iOS or Android. + if (Configuration.get("modalWindowFullScreen")) { + this.maximize(); + } + } else if (this.deviceProperties.isAndroid) { + this.createModalWindowAndroid(); + } else if (this.deviceProperties.isIOS) { + this.createModalWindowIos(); + } + if (this.contentManager != null) { + this.contentManager.insert(this); + } + this.properties.open = true; + this.properties.created = true; + // Checks language directionality. + if (this.isRTL()) { + this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`; + this.container.className += " wrs_modal_rtl"; + } + } + /** * Creates a button in the modal object to resize it. */ createResizeButtons() { - // This is a definition of Resize Button Bottom-Right. - this.resizerBR = document.createElement("div"); - this.resizerBR.className = "wrs_bottom_right_resizer"; - this.resizerBR.innerHTML = "◢"; - // To identifiy the element in automated testing - this.resizerBR.dataset.testid = "mtcteditor-resize-button-right"; - // This is a definition of Resize Button Top-Left. - this.resizerTL = document.createElement("div"); - this.resizerTL.className = "wrs_bottom_left_resizer"; - // To identifiy the element in automated testing - this.resizerTL.dataset.testid = "mtcteditor-resize-button-left"; - // Append resize buttons to modal. - this.container.appendChild(this.resizerBR); - this.titleBar.appendChild(this.resizerTL); - // Add events to resize on click and drag. - Util.addEvent(this.resizerBR, "mousedown", this.activateResizeStateBR.bind(this)); - Util.addEvent(this.resizerTL, "mousedown", this.activateResizeStateTL.bind(this)); - } - /** + // This is a definition of Resize Button Bottom-Right. + this.resizerBR = document.createElement("div"); + this.resizerBR.className = "wrs_bottom_right_resizer"; + this.resizerBR.innerHTML = "◢"; + // To identifiy the element in automated testing + this.resizerBR.dataset.testid = "mtcteditor-resize-button-right"; + // This is a definition of Resize Button Top-Left. + this.resizerTL = document.createElement("div"); + this.resizerTL.className = "wrs_bottom_left_resizer"; + // To identifiy the element in automated testing + this.resizerTL.dataset.testid = "mtcteditor-resize-button-left"; + // Append resize buttons to modal. + this.container.appendChild(this.resizerBR); + this.titleBar.appendChild(this.resizerTL); + // Add events to resize on click and drag. + Util.addEvent(this.resizerBR, "mousedown", this.activateResizeStateBR.bind(this)); + Util.addEvent(this.resizerTL, "mousedown", this.activateResizeStateTL.bind(this)); + } + /** * Initialize variables for Bottom-Right resize button * @param {MouseEvent} mouseEvent - Mouse event. */ activateResizeStateBR(mouseEvent) { - this.initializeResizeProperties(mouseEvent, false); - } - /** + this.initializeResizeProperties(mouseEvent, false); + } + /** * Initialize variables for Top-Left resize button * @param {MouseEvent} mouseEvent - Mouse event. */ activateResizeStateTL(mouseEvent) { - this.initializeResizeProperties(mouseEvent, true); - } - /** + this.initializeResizeProperties(mouseEvent, true); + } + /** * Common method to initialize variables at resize. * @param {MouseEvent} mouseEvent - Mouse event. */ initializeResizeProperties(mouseEvent, leftOption) { - // Apply class for disable involuntary select text when drag. - Util.addClass(document.body, "wrs_noselect"); - Util.addClass(this.overlay, "wrs_overlay_active"); - this.resizeDataObject = { - x: this.eventClient(mouseEvent).X, - y: this.eventClient(mouseEvent).Y, - }; - // Save Initial state of modal to compare on drag and obtain the difference. - this.initialWidth = parseInt(this.container.style.width, 10); - this.initialHeight = parseInt(this.container.style.height, 10); - if (!leftOption) { - this.initialRight = parseInt(this.container.style.right, 10); - this.initialBottom = parseInt(this.container.style.bottom, 10); - } else { - this.leftScale = true; - } - if (!this.initialRight) { - this.initialRight = 0; - } - if (!this.initialBottom) { - this.initialBottom = 0; + // Apply class for disable involuntary select text when drag. + Util.addClass(document.body, "wrs_noselect"); + Util.addClass(this.overlay, "wrs_overlay_active"); + this.resizeDataObject = { + x: this.eventClient(mouseEvent).X, + y: this.eventClient(mouseEvent).Y + }; + // Save Initial state of modal to compare on drag and obtain the difference. + this.initialWidth = parseInt(this.container.style.width, 10); + this.initialHeight = parseInt(this.container.style.height, 10); + if (!leftOption) { + this.initialRight = parseInt(this.container.style.right, 10); + this.initialBottom = parseInt(this.container.style.bottom, 10); + } else { + this.leftScale = true; + } + if (!this.initialRight) { + this.initialRight = 0; + } + if (!this.initialBottom) { + this.initialBottom = 0; + } + // Disable mouse events on editor when we start to drag modal. + document.body.style["user-select"] = "none"; } - // Disable mouse events on editor when we start to drag modal. - document.body.style["user-select"] = "none"; - } - /** + /** * This method opens the modal window, restoring the previous state, position and metrics, * if exists. By default the modal object opens in stack mode. */ open() { - // Removing close class. - this.removeClass("wrs_closed"); - // Hiding keyboard for mobile devices. - const { isIOS } = this.deviceProperties; - const { isAndroid } = this.deviceProperties; - const { isMobile } = this.deviceProperties; - if (isIOS || isAndroid || isMobile) { - // Restore scale to 1. - this.restoreWebsiteScale(); - this.lockWebsiteScroll(); - // Due to editor wait we need to wait until editor focus. - setTimeout(() => { - this.hideKeyboard(); - }, 400); - } - // New modal window. He need to create the whole object. - if (!this.properties.created) { - this.create(); - } else { - // Previous state closed. Open method can be called even the previous state is open, - // for example updating the content of the modal object. - if (!this.properties.open) { - this.properties.open = true; - // Restoring the previous open state: if the modal object has been closed - // re-open it should preserve the state and the metrics. - if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) { - this.restoreState(); - } - } - // Maximize window only when the configuration is set and the device is not iOs or Android. - if (this.deviceProperties.isDesktop && Configuration.get("modalWindowFullScreen")) { - this.maximize(); - } - // In iOS we need to recalculate the size of the modal object because - // iOS keyboard is a float div which can overlay the modal object. - if (this.deviceProperties.isIOS) { - this.iosSoftkeyboardOpened = false; - this.setContainerHeight(`${100 + this.iosMeasureUnit}`); - } - } - if (!ContentManager.isEditorLoaded()) { - const listener = Listeners.newListener("onLoad", () => { - this.contentManager.onOpen(this); - }); - this.contentManager.addListener(listener); - } else { - this.contentManager.onOpen(this); + // Removing close class. + this.removeClass("wrs_closed"); + // Hiding keyboard for mobile devices. + const { isIOS } = this.deviceProperties; + const { isAndroid } = this.deviceProperties; + const { isMobile } = this.deviceProperties; + if (isIOS || isAndroid || isMobile) { + // Restore scale to 1. + this.restoreWebsiteScale(); + this.lockWebsiteScroll(); + // Due to editor wait we need to wait until editor focus. + setTimeout(()=>{ + this.hideKeyboard(); + }, 400); + } + // New modal window. He need to create the whole object. + if (!this.properties.created) { + this.create(); + } else { + // Previous state closed. Open method can be called even the previous state is open, + // for example updating the content of the modal object. + if (!this.properties.open) { + this.properties.open = true; + // Restoring the previous open state: if the modal object has been closed + // re-open it should preserve the state and the metrics. + if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) { + this.restoreState(); + } + } + // Maximize window only when the configuration is set and the device is not iOs or Android. + if (this.deviceProperties.isDesktop && Configuration.get("modalWindowFullScreen")) { + this.maximize(); + } + // In iOS we need to recalculate the size of the modal object because + // iOS keyboard is a float div which can overlay the modal object. + if (this.deviceProperties.isIOS) { + this.iosSoftkeyboardOpened = false; + this.setContainerHeight(`${100 + this.iosMeasureUnit}`); + } + } + if (!ContentManager.isEditorLoaded()) { + const listener = Listeners.newListener("onLoad", ()=>{ + this.contentManager.onOpen(this); + }); + this.contentManager.addListener(listener); + } else { + this.contentManager.onOpen(this); + } } - } - /** + /** * Closes the modal. * Removes specific CSS classes, saves modal properties, unlocks website scroll, * sets the 'open' property to false, and triggers the 'onModalClose' event. * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger. * @returns {Promise} A promise that resolves when the modal is closed. */ async close(trigger) { - this.removeClass("wrs_maximized"); - this.removeClass("wrs_minimized"); - this.removeClass("wrs_stack"); - this.addClass("wrs_closed"); - this.saveModalProperties(); - this.unlockWebsiteScroll(); - this.properties.open = false; - if (trigger) { - try { - await Telemeter.telemeter.track("CLOSED_MTCT_EDITOR", { - toolbar: this.contentManager.toolbar, - trigger: trigger, - }); - } catch (error) { - console.error("Error tracking CLOSED_MTCT_EDITOR", error); - } + this.removeClass("wrs_maximized"); + this.removeClass("wrs_minimized"); + this.removeClass("wrs_stack"); + this.addClass("wrs_closed"); + this.saveModalProperties(); + this.unlockWebsiteScroll(); + this.properties.open = false; + if (trigger) { + try { + await Telemeter.telemeter.track("CLOSED_MTCT_EDITOR", { + toolbar: this.contentManager.toolbar, + trigger: trigger + }); + } catch (error) { + console.error("Error tracking CLOSED_MTCT_EDITOR", error); + } + } + Core.globalListeners.fire("onModalClose", {}); } - Core.globalListeners.fire("onModalClose", {}); - } - /** + /** * Closes modal window and destroys the object. */ destroy() { - // Close modal window. - this.close(); - // Remove listeners and destroy the object. - this.removeListeners(); - this.overlay.remove(); - this.container.remove(); - // Reset properties to allow open again. - this.properties.created = false; - } - /** + // Close modal window. + this.close(); + // Remove listeners and destroy the object. + this.removeListeners(); + this.overlay.remove(); + this.container.remove(); + // Reset properties to allow open again. + this.properties.created = false; + } + /** * Sets the website scale to one. */ // eslint-disable-next-line class-methods-use-this - restoreWebsiteScale() { - let viewportmeta = document.querySelector("meta[name=viewport]"); - // Let the equal symbols in order to search and make meta's final content. - const contentAttrsToUpdate = ["initial-scale=", "minimum-scale=", "maximum-scale="]; - const contentAttrsValuesToUpdate = ["1.0", "1.0", "1.0"]; - const setMetaAttrFunc = (viewportelement, contentAttrs) => { - const contentAttr = viewportelement.getAttribute("content"); - // If it exists, we need to maintain old values and put our values. - if (contentAttr) { - const attrArray = contentAttr.split(","); - let finalContentMeta = ""; - const oldAttrs = []; - for (let i = 0; i < attrArray.length; i += 1) { - let isAttrToUpdate = false; - let j = 0; - while (!isAttrToUpdate && j < contentAttrs.length) { - if (attrArray[i].indexOf(contentAttrs[j])) { - isAttrToUpdate = true; - } - j += 1; - } - if (!isAttrToUpdate) { - oldAttrs.push(attrArray[i]); - } - } - for (let i = 0; i < contentAttrs.length; i += 1) { - const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i]; - finalContentMeta += i === 0 ? attr : `,${attr}`; - } - for (let i = 0; i < oldAttrs.length; i += 1) { - finalContentMeta += `,${oldAttrs[i]}`; - } - viewportelement.setAttribute("content", finalContentMeta); - // It needs to set to empty because setAttribute refresh only when attribute is different. - viewportelement.setAttribute("content", ""); - viewportelement.setAttribute("content", contentAttr); - } else { - viewportelement.setAttribute("content", "initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"); - viewportelement.removeAttribute("content"); - } - }; - if (!viewportmeta) { - viewportmeta = document.createElement("meta"); - document.getElementsByTagName("head")[0].appendChild(viewportmeta); - setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); - viewportmeta.remove(); - } else { - setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); + restoreWebsiteScale() { + let viewportmeta = document.querySelector("meta[name=viewport]"); + // Let the equal symbols in order to search and make meta's final content. + const contentAttrsToUpdate = [ + "initial-scale=", + "minimum-scale=", + "maximum-scale=" + ]; + const contentAttrsValuesToUpdate = [ + "1.0", + "1.0", + "1.0" + ]; + const setMetaAttrFunc = (viewportelement, contentAttrs)=>{ + const contentAttr = viewportelement.getAttribute("content"); + // If it exists, we need to maintain old values and put our values. + if (contentAttr) { + const attrArray = contentAttr.split(","); + let finalContentMeta = ""; + const oldAttrs = []; + for(let i = 0; i < attrArray.length; i += 1){ + let isAttrToUpdate = false; + let j = 0; + while(!isAttrToUpdate && j < contentAttrs.length){ + if (attrArray[i].indexOf(contentAttrs[j])) { + isAttrToUpdate = true; + } + j += 1; + } + if (!isAttrToUpdate) { + oldAttrs.push(attrArray[i]); + } + } + for(let i = 0; i < contentAttrs.length; i += 1){ + const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i]; + finalContentMeta += i === 0 ? attr : `,${attr}`; + } + for(let i = 0; i < oldAttrs.length; i += 1){ + finalContentMeta += `,${oldAttrs[i]}`; + } + viewportelement.setAttribute("content", finalContentMeta); + // It needs to set to empty because setAttribute refresh only when attribute is different. + viewportelement.setAttribute("content", ""); + viewportelement.setAttribute("content", contentAttr); + } else { + viewportelement.setAttribute("content", "initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"); + viewportelement.removeAttribute("content"); + } + }; + if (!viewportmeta) { + viewportmeta = document.createElement("meta"); + document.getElementsByTagName("head")[0].appendChild(viewportmeta); + setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); + viewportmeta.remove(); + } else { + setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); + } } - } - /** + /** * Locks website scroll for mobile devices. */ lockWebsiteScroll() { - this.websiteBeforeLockParameters = { - bodyStylePosition: document.body.style.position ? document.body.style.position : "", - bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : "", - htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : "", - windowScrollX: window.scrollX, - windowScrollY: window.scrollY, - }; - } - /** + this.websiteBeforeLockParameters = { + bodyStylePosition: document.body.style.position ? document.body.style.position : "", + bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : "", + htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : "", + windowScrollX: window.scrollX, + windowScrollY: window.scrollY + }; + } + /** * Unlocks website scroll for mobile devices. */ unlockWebsiteScroll() { - if (this.websiteBeforeLockParameters) { - document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition; - document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow; - document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow; - const { windowScrollX } = this.websiteBeforeLockParameters; - const { windowScrollY } = this.websiteBeforeLockParameters; - window.scrollTo(windowScrollX, windowScrollY); - this.websiteBeforeLockParameters = null; - } - } - /** + if (this.websiteBeforeLockParameters) { + document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition; + document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow; + document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow; + const { windowScrollX } = this.websiteBeforeLockParameters; + const { windowScrollY } = this.websiteBeforeLockParameters; + window.scrollTo(windowScrollX, windowScrollY); + this.websiteBeforeLockParameters = null; + } + } + /** * Util function to known if browser is IE11. * @returns {Boolean} true if the browser is IE11. false otherwise. */ // eslint-disable-next-line class-methods-use-this - isIE11() { - if ( - navigator.userAgent.search("Msie/") >= 0 || - navigator.userAgent.search("Trident/") >= 0 || - navigator.userAgent.search("Edge/") >= 0 - ) { - return true; - } - return false; - } - /** + isIE11() { + if (navigator.userAgent.search("Msie/") >= 0 || navigator.userAgent.search("Trident/") >= 0 || navigator.userAgent.search("Edge/") >= 0) { + return true; + } + return false; + } + /** * Returns if the current language type is RTL. * @return {Boolean} true if current language is RTL. false otherwise. */ isRTL() { - if (this.attributes.language === "ar" || this.attributes.language === "he") { - return true; + if (this.attributes.language === "ar" || this.attributes.language === "he") { + return true; + } + return this.rtl; } - return this.rtl; - } - /** + /** * Adds a class to all modal ModalDialog DOM elements. * @param {String} className - Class name. */ addClass(className) { - Util.addClass(this.overlay, className); - Util.addClass(this.titleBar, className); - Util.addClass(this.overlay, className); - Util.addClass(this.container, className); - Util.addClass(this.contentContainer, className); - Util.addClass(this.stackDiv, className); - Util.addClass(this.minimizeDiv, className); - Util.addClass(this.maximizeDiv, className); - Util.addClass(this.wrapper, className); - } - /** + Util.addClass(this.overlay, className); + Util.addClass(this.titleBar, className); + Util.addClass(this.overlay, className); + Util.addClass(this.container, className); + Util.addClass(this.contentContainer, className); + Util.addClass(this.stackDiv, className); + Util.addClass(this.minimizeDiv, className); + Util.addClass(this.maximizeDiv, className); + Util.addClass(this.wrapper, className); + } + /** * Remove a class from all modal DOM elements. * @param {String} className - Class name. */ removeClass(className) { - Util.removeClass(this.overlay, className); - Util.removeClass(this.titleBar, className); - Util.removeClass(this.overlay, className); - Util.removeClass(this.container, className); - Util.removeClass(this.contentContainer, className); - Util.removeClass(this.stackDiv, className); - Util.removeClass(this.minimizeDiv, className); - Util.removeClass(this.maximizeDiv, className); - Util.removeClass(this.wrapper, className); - } - /** + Util.removeClass(this.overlay, className); + Util.removeClass(this.titleBar, className); + Util.removeClass(this.overlay, className); + Util.removeClass(this.container, className); + Util.removeClass(this.contentContainer, className); + Util.removeClass(this.stackDiv, className); + Util.removeClass(this.minimizeDiv, className); + Util.removeClass(this.maximizeDiv, className); + Util.removeClass(this.wrapper, className); + } + /** * Create modal dialog for desktop. */ createModalWindowDesktop() { - this.addClass("wrs_modal_desktop"); - this.stack(); - } - /** + this.addClass("wrs_modal_desktop"); + this.stack(); + } + /** * Create modal dialog for non android devices. */ createModalWindowAndroid() { - this.addClass("wrs_modal_android"); - window.addEventListener("resize", this.orientationChangeAndroidSoftkeyboard.bind(this)); - } - /** + this.addClass("wrs_modal_android"); + window.addEventListener("resize", this.orientationChangeAndroidSoftkeyboard.bind(this)); + } + /** * Create modal dialog for iOS devices. */ createModalWindowIos() { - this.addClass("wrs_modal_ios"); - // Refresh the size when the orientation is changed. - window.addEventListener("resize", this.orientationChangeIosSoftkeyboard.bind(this)); - } - /** + this.addClass("wrs_modal_ios"); + // Refresh the size when the orientation is changed. + window.addEventListener("resize", this.orientationChangeIosSoftkeyboard.bind(this)); + } + /** * Restore previous state, position and size of previous stacked modal dialog. */ restoreState() { - if (this.properties.state === "maximized") { - // Reset states for prevent return to stack state. - this.maximize(); - } else if (this.properties.state === "minimized") { - // Reset states for prevent return to stack state. - this.properties.state = this.properties.previousState; - this.properties.previousState = ""; - this.minimize(); - } else { - this.stack(); + if (this.properties.state === "maximized") { + // Reset states for prevent return to stack state. + this.maximize(); + } else if (this.properties.state === "minimized") { + // Reset states for prevent return to stack state. + this.properties.state = this.properties.previousState; + this.properties.previousState = ""; + this.minimize(); + } else { + this.stack(); + } } - } - /** + /** * Stacks the modal object. */ stack() { - this.properties.previousState = this.properties.state; - this.properties.state = "stack"; - this.removeClass("wrs_maximized"); - this.minimizeDiv.title = StringManager.get("minimize"); - this.removeClass("wrs_minimized"); - this.addClass("wrs_stack"); - // Change maximize/minimize icon to minimize icon - const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; - const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - this.restoreModalProperties(); - if (typeof this.resizerBR !== "undefined" && typeof this.resizerTL !== "undefined") { - this.setResizeButtonsVisibility(); - } - // Need recalculate position of actual modal because window can was changed in fullscreenmode. - this.recalculateScrollBar(); - this.recalculatePosition(); - this.recalculateScale(); - this.focus(); - } - /** + this.properties.previousState = this.properties.state; + this.properties.state = "stack"; + this.removeClass("wrs_maximized"); + this.minimizeDiv.title = StringManager.get("minimize"); + this.removeClass("wrs_minimized"); + this.addClass("wrs_stack"); + // Change maximize/minimize icon to minimize icon + const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; + const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + this.restoreModalProperties(); + if (typeof this.resizerBR !== "undefined" && typeof this.resizerTL !== "undefined") { + this.setResizeButtonsVisibility(); + } + // Need recalculate position of actual modal because window can was changed in fullscreenmode. + this.recalculateScrollBar(); + this.recalculatePosition(); + this.recalculateScale(); + this.focus(); + } + /** * Minimizes the modal object. */ minimize() { - // Saving width, height, top and bottom parameters to restore when opening. - this.saveModalProperties(); - this.title.style.cursor = "pointer"; - if (this.properties.state === "minimized" && this.properties.previousState === "stack") { - this.stack(); - } else if (this.properties.state === "minimized" && this.properties.previousState === "maximized") { - this.maximize(); - } else { - // Setting css to prevent important tag into css style. - this.container.style.height = "30px"; - this.container.style.width = "250px"; - this.container.style.bottom = "0px"; - this.container.style.right = "10px"; - this.removeListeners(); - this.properties.previousState = this.properties.state; - this.properties.state = "minimized"; - this.setResizeButtonsVisibility(); - this.minimizeDiv.title = StringManager.get("maximize"); - if (Util.containsClass(this.overlay, "wrs_stack")) { - this.removeClass("wrs_stack"); - } else { - this.removeClass("wrs_maximized"); - } - this.addClass("wrs_minimized"); - // Change minimize icon to maximize icon - const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`; - const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - } - } - /** + // Saving width, height, top and bottom parameters to restore when opening. + this.saveModalProperties(); + this.title.style.cursor = "pointer"; + if (this.properties.state === "minimized" && this.properties.previousState === "stack") { + this.stack(); + } else if (this.properties.state === "minimized" && this.properties.previousState === "maximized") { + this.maximize(); + } else { + // Setting css to prevent important tag into css style. + this.container.style.height = "30px"; + this.container.style.width = "250px"; + this.container.style.bottom = "0px"; + this.container.style.right = "10px"; + this.removeListeners(); + this.properties.previousState = this.properties.state; + this.properties.state = "minimized"; + this.setResizeButtonsVisibility(); + this.minimizeDiv.title = StringManager.get("maximize"); + if (Util.containsClass(this.overlay, "wrs_stack")) { + this.removeClass("wrs_stack"); + } else { + this.removeClass("wrs_maximized"); + } + this.addClass("wrs_minimized"); + // Change minimize icon to maximize icon + const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`; + const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + } + } + /** * Maximizes the modal object. */ maximize() { - // Saving width, height, top and bottom parameters to restore when opening. - this.saveModalProperties(); - if (this.properties.state !== "maximized") { - this.properties.previousState = this.properties.state; - this.properties.state = "maximized"; - } - // Don't permit resize on maximize mode. - this.setResizeButtonsVisibility(); - if (Util.containsClass(this.overlay, "wrs_minimized")) { - this.minimizeDiv.title = StringManager.get("minimize"); - this.removeClass("wrs_minimized"); - } else if (Util.containsClass(this.overlay, "wrs_stack")) { - this.container.style.left = null; - this.container.style.top = null; - this.removeClass("wrs_stack"); - } - this.addClass("wrs_maximized"); - // Change maximize icon to minimize icon - const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; - const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // Set size to 80% screen with a max size. - this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10)); - if (this.container.clientHeight > 700) { - this.container.style.height = "700px"; - } - if (this.container.clientWidth > 1200) { - this.container.style.width = "1200px"; - } - // Setting modal position in center on screen. - const { innerHeight } = window; - const { innerWidth } = window; - const { offsetHeight } = this.container; - const { offsetWidth } = this.container; - const bottom = innerHeight / 2 - offsetHeight / 2; - const right = innerWidth / 2 - offsetWidth / 2; - this.setPosition(bottom, right); - this.recalculateScale(); - this.recalculatePosition(); - this.recalculateSize(); - this.focus(); - } - /** + // Saving width, height, top and bottom parameters to restore when opening. + this.saveModalProperties(); + if (this.properties.state !== "maximized") { + this.properties.previousState = this.properties.state; + this.properties.state = "maximized"; + } + // Don't permit resize on maximize mode. + this.setResizeButtonsVisibility(); + if (Util.containsClass(this.overlay, "wrs_minimized")) { + this.minimizeDiv.title = StringManager.get("minimize"); + this.removeClass("wrs_minimized"); + } else if (Util.containsClass(this.overlay, "wrs_stack")) { + this.container.style.left = null; + this.container.style.top = null; + this.removeClass("wrs_stack"); + } + this.addClass("wrs_maximized"); + // Change maximize icon to minimize icon + const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; + const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // Set size to 80% screen with a max size. + this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10)); + if (this.container.clientHeight > 700) { + this.container.style.height = "700px"; + } + if (this.container.clientWidth > 1200) { + this.container.style.width = "1200px"; + } + // Setting modal position in center on screen. + const { innerHeight } = window; + const { innerWidth } = window; + const { offsetHeight } = this.container; + const { offsetWidth } = this.container; + const bottom = innerHeight / 2 - offsetHeight / 2; + const right = innerWidth / 2 - offsetWidth / 2; + this.setPosition(bottom, right); + this.recalculateScale(); + this.recalculatePosition(); + this.recalculateSize(); + this.focus(); + } + /** * Expand again the modal object from a minimized state. */ reExpand() { - if (this.properties.state === "minimized") { - if (this.properties.previousState === "maximized") { - this.maximize(); - } else { - this.stack(); - } - this.title.style.cursor = ""; + if (this.properties.state === "minimized") { + if (this.properties.previousState === "maximized") { + this.maximize(); + } else { + this.stack(); + } + this.title.style.cursor = ""; + } } - } - /** + /** * Sets modal size. * @param {Number} height - Height of the ModalDialog * @param {Number} width - Width of the ModalDialog. */ setSize(height, width) { - this.container.style.height = `${height}px`; - this.container.style.width = `${width}px`; - this.recalculateSize(); - } - /** + this.container.style.height = `${height}px`; + this.container.style.width = `${width}px`; + this.recalculateSize(); + } + /** * Sets modal position using bottom and right style attributes. * @param {number} bottom - bottom attribute. * @param {number} right - right attribute. */ setPosition(bottom, right) { - this.container.style.bottom = `${bottom}px`; - this.container.style.right = `${right}px`; - } - /** + this.container.style.bottom = `${bottom}px`; + this.container.style.right = `${right}px`; + } + /** * Saves position and size parameters of and open ModalDialog. This attributes * are needed to restore it on re-open. */ saveModalProperties() { - // Saving values of modal only when modal is in stack state. - if (this.properties.state === "stack") { - this.properties.position.bottom = parseInt(this.container.style.bottom, 10); - this.properties.position.right = parseInt(this.container.style.right, 10); - this.properties.size.width = parseInt(this.container.style.width, 10); - this.properties.size.height = parseInt(this.container.style.height, 10); - } - } - /** + // Saving values of modal only when modal is in stack state. + if (this.properties.state === "stack") { + this.properties.position.bottom = parseInt(this.container.style.bottom, 10); + this.properties.position.right = parseInt(this.container.style.right, 10); + this.properties.size.width = parseInt(this.container.style.width, 10); + this.properties.size.height = parseInt(this.container.style.height, 10); + } + } + /** * Restore ModalDialog position and size parameters. */ restoreModalProperties() { - if (this.properties.state === "stack") { - // Restoring Bottom and Right values from last modal. - this.setPosition(this.properties.position.bottom, this.properties.position.right); - // Restoring Height and Left values from last modal. - this.setSize(this.properties.size.height, this.properties.size.width); - } - } - /** + if (this.properties.state === "stack") { + // Restoring Bottom and Right values from last modal. + this.setPosition(this.properties.position.bottom, this.properties.position.right); + // Restoring Height and Left values from last modal. + this.setSize(this.properties.size.height, this.properties.size.width); + } + } + /** * Sets the modal dialog initial size. */ recalculateSize() { - this.wrapper.style.width = `${this.container.clientWidth - 12}px`; - this.wrapper.style.height = `${this.container.clientHeight - 38}px`; - this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`; - } - /** + this.wrapper.style.width = `${this.container.clientWidth - 12}px`; + this.wrapper.style.height = `${this.container.clientHeight - 38}px`; + this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`; + } + /** * Enable or disable visibility of resize buttons in modal window depend on state. */ setResizeButtonsVisibility() { - if (this.properties.state === "stack") { - this.resizerTL.style.visibility = "visible"; - this.resizerBR.style.visibility = "visible"; - } else { - this.resizerTL.style.visibility = "hidden"; - this.resizerBR.style.visibility = "hidden"; + if (this.properties.state === "stack") { + this.resizerTL.style.visibility = "visible"; + this.resizerBR.style.visibility = "visible"; + } else { + this.resizerTL.style.visibility = "hidden"; + this.resizerBR.style.visibility = "hidden"; + } } - } - /** + /** * Makes an object draggable adding mouse and touch events. */ addListeners() { - // Button events (maximize, minimize, stack and close). - this.maximizeDiv.addEventListener("click", this.maximize.bind(this), true); - this.stackDiv.addEventListener("click", this.stack.bind(this), true); - this.minimizeDiv.addEventListener("click", this.minimize.bind(this), true); - this.closeDiv.addEventListener("click", this.cancelAction.bind(this)); - this.maximizeDiv.addEventListener( - "keypress", - function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - } - }, - true, - ); - this.stackDiv.addEventListener( - "keypress", - function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - e.preventDefault(); - } - }, - true, - ); - this.minimizeDiv.addEventListener( - "keypress", - function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - e.preventDefault(); - } - }, - true, - ); - this.closeDiv.addEventListener("keypress", function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - e.preventDefault(); - } - }); - this.title.addEventListener("click", this.reExpand.bind(this)); - // Overlay events (close). - this.overlay.addEventListener("click", this.cancelAction.bind(this)); - // Mouse events. - Util.addEvent(window, "mousedown", this.startDrag.bind(this)); - Util.addEvent(window, "mouseup", this.stopDrag.bind(this)); - Util.addEvent(window, "mousemove", this.drag.bind(this)); - Util.addEvent(window, "resize", this.onWindowResize.bind(this)); - // Key events. - Util.addEvent(window, "keydown", this.onKeyDown.bind(this)); - } - /** + // Button events (maximize, minimize, stack and close). + this.maximizeDiv.addEventListener("click", this.maximize.bind(this), true); + this.stackDiv.addEventListener("click", this.stack.bind(this), true); + this.minimizeDiv.addEventListener("click", this.minimize.bind(this), true); + this.closeDiv.addEventListener("click", this.cancelAction.bind(this)); + this.maximizeDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + } + }, true); + this.stackDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + e.preventDefault(); + } + }, true); + this.minimizeDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + e.preventDefault(); + } + }, true); + this.closeDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + e.preventDefault(); + } + }); + this.title.addEventListener("click", this.reExpand.bind(this)); + // Overlay events (close). + this.overlay.addEventListener("click", this.cancelAction.bind(this)); + // Mouse events. + Util.addEvent(window, "mousedown", this.startDrag.bind(this)); + Util.addEvent(window, "mouseup", this.stopDrag.bind(this)); + Util.addEvent(window, "mousemove", this.drag.bind(this)); + Util.addEvent(window, "resize", this.onWindowResize.bind(this)); + // Key events. + Util.addEvent(window, "keydown", this.onKeyDown.bind(this)); + } + /** * Removes draggable events from an object. */ removeListeners() { - // Mouse events. - Util.removeEvent(window, "mousedown", this.startDrag); - Util.removeEvent(window, "mouseup", this.stopDrag); - Util.removeEvent(window, "mousemove", this.drag); - Util.removeEvent(window, "resize", this.onWindowResize); - // Key events. - Util.removeEvent(window, "keydown", this.onKeyDown); - } - /** + // Mouse events. + Util.removeEvent(window, "mousedown", this.startDrag); + Util.removeEvent(window, "mouseup", this.stopDrag); + Util.removeEvent(window, "mousemove", this.drag); + Util.removeEvent(window, "resize", this.onWindowResize); + // Key events. + Util.removeEvent(window, "keydown", this.onKeyDown); + } + /** * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists) * @param {MouseEvent} mouseEvent - Mouse event. * @return {Object} With the X and Y coordinates. */ // eslint-disable-next-line class-methods-use-this - eventClient(mouseEvent) { - if (typeof mouseEvent.clientX === "undefined" && mouseEvent.changedTouches) { - const client = { - X: mouseEvent.changedTouches[0].clientX, - Y: mouseEvent.changedTouches[0].clientY, - }; - return client; - } - const client = { - X: mouseEvent.clientX, - Y: mouseEvent.clientY, - }; - return client; - } - /** + eventClient(mouseEvent) { + if (typeof mouseEvent.clientX === "undefined" && mouseEvent.changedTouches) { + const client = { + X: mouseEvent.changedTouches[0].clientX, + Y: mouseEvent.changedTouches[0].clientY + }; + return client; + } + const client = { + X: mouseEvent.clientX, + Y: mouseEvent.clientY + }; + return client; + } + /** * Start drag function: set the object dragDataObject with the draggable * object offsets coordinates. * when drag starts (on touchstart or mousedown events). * @param {MouseEvent} mouseEvent - Touchstart or mousedown event. */ startDrag(mouseEvent) { - if (this.properties.state === "minimized") { - return; - } - if (mouseEvent.target === this.title) { - if (typeof this.dragDataObject === "undefined" || this.dragDataObject === null) { - // Save first click mouse point on screen. - this.dragDataObject = { - x: this.eventClient(mouseEvent).X, - y: this.eventClient(mouseEvent).Y, - }; - // Reset last drag position when start drag. - this.lastDrag = { - x: "0px", - y: "0px", - }; - // Init right and bottom values for window modal if it isn't exist. - if (this.container.style.right === "") { - this.container.style.right = "0px"; - } - if (this.container.style.bottom === "") { - this.container.style.bottom = "0px"; + if (this.properties.state === "minimized") { + return; + } + if (mouseEvent.target === this.title) { + if (typeof this.dragDataObject === "undefined" || this.dragDataObject === null) { + // Save first click mouse point on screen. + this.dragDataObject = { + x: this.eventClient(mouseEvent).X, + y: this.eventClient(mouseEvent).Y + }; + // Reset last drag position when start drag. + this.lastDrag = { + x: "0px", + y: "0px" + }; + // Init right and bottom values for window modal if it isn't exist. + if (this.container.style.right === "") { + this.container.style.right = "0px"; + } + if (this.container.style.bottom === "") { + this.container.style.bottom = "0px"; + } + // Needed for IE11 for apply disabled mouse events on editor because + // internet explorer needs a dynamic object to apply this property. + if (this.isIE11()) ; + // Apply class for disable involuntary select text when drag. + Util.addClass(document.body, "wrs_noselect"); + Util.addClass(this.overlay, "wrs_overlay_active"); + // Obtain screen limits for prevent overflow. + this.limitWindow = this.getLimitWindow(); + } } - // Needed for IE11 for apply disabled mouse events on editor because - // internet explorer needs a dynamic object to apply this property. - if (this.isIE11()); - // Apply class for disable involuntary select text when drag. - Util.addClass(document.body, "wrs_noselect"); - Util.addClass(this.overlay, "wrs_overlay_active"); - // Obtain screen limits for prevent overflow. - this.limitWindow = this.getLimitWindow(); - } } - } - /** + /** * Updates dragDataObject with the draggable object coordinates when * the draggable object is being moved. * @param {MouseEvent} mouseEvent - The mouse event. */ drag(mouseEvent) { - if (this.dragDataObject) { - mouseEvent.preventDefault(); - // Calculate max and min between actual mouse position and limit of screeen. - // It restric the movement of modal into window. - let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y); - limitY = Math.max(this.limitWindow.maxPointer.y, limitY); - let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x); - limitX = Math.max(this.limitWindow.maxPointer.x, limitX); - // Subtract limit with first position to obtain relative pixels increment - // to the anchor point. - const dragX = `${limitX - this.dragDataObject.x}px`; - const dragY = `${limitY - this.dragDataObject.y}px`; - // Save last valid position of modal before window overflow. - this.lastDrag = { - x: dragX, - y: dragY, - }; - // This move modal with hardware acceleration. - this.container.style.transform = `translate3d(${dragX},${dragY},0)`; - } - if (this.resizeDataObject) { - const { innerWidth } = window; - const { innerHeight } = window; - let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7); - let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7); - if (limitX < 0) { - limitX = 0; - } - if (limitY < 0) { - limitY = 0; - } - let scaleMultiplier; - if (this.leftScale) { - scaleMultiplier = -1; - } else { - scaleMultiplier = 1; - } - this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`; - this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`; - if (!this.leftScale) { - if (this.resizeDataObject.x - limitX - this.initialWidth < -580) { - this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`; - } else { - this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`; - this.container.style.width = "580px"; - } - if (this.resizeDataObject.y - limitY < this.initialHeight - 338) { - this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`; - } else { - this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`; - this.container.style.height = "338px"; + if (this.dragDataObject) { + mouseEvent.preventDefault(); + // Calculate max and min between actual mouse position and limit of screeen. + // It restric the movement of modal into window. + let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y); + limitY = Math.max(this.limitWindow.maxPointer.y, limitY); + let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x); + limitX = Math.max(this.limitWindow.maxPointer.x, limitX); + // Subtract limit with first position to obtain relative pixels increment + // to the anchor point. + const dragX = `${limitX - this.dragDataObject.x}px`; + const dragY = `${limitY - this.dragDataObject.y}px`; + // Save last valid position of modal before window overflow. + this.lastDrag = { + x: dragX, + y: dragY + }; + // This move modal with hardware acceleration. + this.container.style.transform = `translate3d(${dragX},${dragY},0)`; + } + if (this.resizeDataObject) { + const { innerWidth } = window; + const { innerHeight } = window; + let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7); + let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7); + if (limitX < 0) { + limitX = 0; + } + if (limitY < 0) { + limitY = 0; + } + let scaleMultiplier; + if (this.leftScale) { + scaleMultiplier = -1; + } else { + scaleMultiplier = 1; + } + this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`; + this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`; + if (!this.leftScale) { + if (this.resizeDataObject.x - limitX - this.initialWidth < -580) { + this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`; + } else { + this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`; + this.container.style.width = "580px"; + } + if (this.resizeDataObject.y - limitY < this.initialHeight - 338) { + this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`; + } else { + this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`; + this.container.style.height = "338px"; + } + } + this.recalculateScale(); + this.recalculatePosition(); } - } - this.recalculateScale(); - this.recalculatePosition(); } - } - /** + /** * Returns the boundaries of actual window to limit modal movement. * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen. */ getLimitWindow() { - // Obtain dimensions of window page. - const maxWidth = window.innerWidth; - const maxHeight = window.innerHeight; - // Calculate relative position of mouse point into window. - const { offsetHeight } = this.container; - const contStyleBottom = parseInt(this.container.style.bottom, 10); - const contStyleRight = parseInt(this.container.style.right, 10); - const { pageXOffset } = window; - const dragY = this.dragDataObject.y; - const dragX = this.dragDataObject.x; - const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset)); - const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight; - // Calculate limits with sizes of window, modal and mouse position. - const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY; - const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY); - const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth; - const maxPointerX = this.container.offsetWidth - offSetToolbarX; - const minPointer = { - x: minPointerX, - y: minPointerY, - }; - const maxPointer = { - x: maxPointerX, - y: maxPointerY, - }; - return { - minPointer, - maxPointer, - }; - } - /** + // Obtain dimensions of window page. + const maxWidth = window.innerWidth; + const maxHeight = window.innerHeight; + // Calculate relative position of mouse point into window. + const { offsetHeight } = this.container; + const contStyleBottom = parseInt(this.container.style.bottom, 10); + const contStyleRight = parseInt(this.container.style.right, 10); + const { pageXOffset } = window; + const dragY = this.dragDataObject.y; + const dragX = this.dragDataObject.x; + const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset)); + const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight; + // Calculate limits with sizes of window, modal and mouse position. + const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY; + const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY); + const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth; + const maxPointerX = this.container.offsetWidth - offSetToolbarX; + const minPointer = { + x: minPointerX, + y: minPointerY + }; + const maxPointer = { + x: maxPointerX, + y: maxPointerY + }; + return { + minPointer, + maxPointer + }; + } + /** * Returns the scrollbar width size of browser * @returns {Number} The scrollbar width. */ // eslint-disable-next-line class-methods-use-this - getScrollBarWidth() { - // Create a paragraph with full width of page. - const inner = document.createElement("p"); - inner.style.width = "100%"; - inner.style.height = "200px"; - // Create a hidden div to compare sizes. - const outer = document.createElement("div"); - outer.style.position = "absolute"; - outer.style.top = "0px"; - outer.style.left = "0px"; - outer.style.visibility = "hidden"; - outer.style.width = "200px"; - outer.style.height = "150px"; - outer.style.overflow = "hidden"; - outer.appendChild(inner); - document.body.appendChild(outer); - const widthOuter = inner.offsetWidth; - // Change type overflow of paragraph for measure scrollbar. - outer.style.overflow = "scroll"; - let widthInner = inner.offsetWidth; - // If measure is the same, we compare with internal div. - if (widthOuter === widthInner) { - widthInner = outer.clientWidth; - } - document.body.removeChild(outer); - return widthOuter - widthInner; - } - /** + getScrollBarWidth() { + // Create a paragraph with full width of page. + const inner = document.createElement("p"); + inner.style.width = "100%"; + inner.style.height = "200px"; + // Create a hidden div to compare sizes. + const outer = document.createElement("div"); + outer.style.position = "absolute"; + outer.style.top = "0px"; + outer.style.left = "0px"; + outer.style.visibility = "hidden"; + outer.style.width = "200px"; + outer.style.height = "150px"; + outer.style.overflow = "hidden"; + outer.appendChild(inner); + document.body.appendChild(outer); + const widthOuter = inner.offsetWidth; + // Change type overflow of paragraph for measure scrollbar. + outer.style.overflow = "scroll"; + let widthInner = inner.offsetWidth; + // If measure is the same, we compare with internal div. + if (widthOuter === widthInner) { + widthInner = outer.clientWidth; + } + document.body.removeChild(outer); + return widthOuter - widthInner; + } + /** * Set the dragDataObject to null. */ stopDrag() { - // Due to we have multiple events that call this function, we need only to execute - // the next modifiers one time, - // when the user stops to drag and dragDataObject is not null (the object to drag is attached). - if (this.dragDataObject || this.resizeDataObject) { - // If modal doesn't change, it's not necessary to set position with interpolation. - this.container.style.transform = ""; - if (this.dragDataObject) { - this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`; - this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`; - } - // We make focus on editor after drag modal windows to prevent lose focus. - this.focus(); - // Restore mouse events on iframe. - // this.iframe.style['pointer-events'] = 'auto'; - document.body.style["user-select"] = ""; - // Restore static state of iframe if we use Internet Explorer. - if (this.isIE11()); - // Active text select event. - Util.removeClass(document.body, "wrs_noselect"); - Util.removeClass(this.overlay, "wrs_overlay_active"); - } - this.dragDataObject = null; - this.resizeDataObject = null; - this.initialWidth = null; - this.leftScale = null; - } - /** + // Due to we have multiple events that call this function, we need only to execute + // the next modifiers one time, + // when the user stops to drag and dragDataObject is not null (the object to drag is attached). + if (this.dragDataObject || this.resizeDataObject) { + // If modal doesn't change, it's not necessary to set position with interpolation. + this.container.style.transform = ""; + if (this.dragDataObject) { + this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`; + this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`; + } + // We make focus on editor after drag modal windows to prevent lose focus. + this.focus(); + // Restore mouse events on iframe. + // this.iframe.style['pointer-events'] = 'auto'; + document.body.style["user-select"] = ""; + // Restore static state of iframe if we use Internet Explorer. + if (this.isIE11()) ; + // Active text select event. + Util.removeClass(document.body, "wrs_noselect"); + Util.removeClass(this.overlay, "wrs_overlay_active"); + } + this.dragDataObject = null; + this.resizeDataObject = null; + this.initialWidth = null; + this.leftScale = null; + } + /** * Recalculates scale for modal when resize browser window. */ onWindowResize() { - this.recalculateScrollBar(); - this.recalculatePosition(); - this.recalculateScale(); - } - /** + this.recalculateScrollBar(); + this.recalculatePosition(); + this.recalculateScale(); + } + /** * Triggers keyboard events: * - Tab key tab to go to submit button. * - Esc key to close the modal dialog. * @param {KeyboardEvent} keyboardEvent - The keyboard event. */ onKeyDown(keyboardEvent) { - if (keyboardEvent.key !== undefined) { - // Popupmessage is not oppened. - if (this.popup.overlayWrapper.style.display !== "block") { - // Code to detect Esc event - if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { - if (this.properties.open) { - this.contentManager.onKeyDown(keyboardEvent); - } - } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { - // Code to detect shift Tab event. - if (document.activeElement === this.cancelButton) { - this.submitButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else { - this.contentManager.onKeyDown(keyboardEvent); - } - } else if (keyboardEvent.key === "Tab") { - // Code to detect Tab event. - if (document.activeElement === this.submitButton) { - this.cancelButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else { - this.contentManager.onKeyDown(keyboardEvent); - } - } - } else { - // Popupmessage oppened. - this.popup.onKeyDown(keyboardEvent); - } - } - } - /** + if (keyboardEvent.key !== undefined) { + // Popupmessage is not oppened. + if (this.popup.overlayWrapper.style.display !== "block") { + // Code to detect Esc event + if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { + if (this.properties.open) { + this.contentManager.onKeyDown(keyboardEvent); + } + } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { + // Code to detect shift Tab event. + if (document.activeElement === this.cancelButton) { + this.submitButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else { + this.contentManager.onKeyDown(keyboardEvent); + } + } else if (keyboardEvent.key === "Tab") { + // Code to detect Tab event. + if (document.activeElement === this.submitButton) { + this.cancelButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else { + this.contentManager.onKeyDown(keyboardEvent); + } + } + } else { + // Popupmessage oppened. + this.popup.onKeyDown(keyboardEvent); + } + } + } + /** * Recalculating position for modal dialog when the browser is resized. */ recalculatePosition() { - this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`; - if (parseInt(this.container.style.right, 10) < 0) { - this.container.style.right = "0px"; - } - this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`; - if (parseInt(this.container.style.bottom, 10) < 0) { - this.container.style.bottom = "0px"; + this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`; + if (parseInt(this.container.style.right, 10) < 0) { + this.container.style.right = "0px"; + } + this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`; + if (parseInt(this.container.style.bottom, 10) < 0) { + this.container.style.bottom = "0px"; + } } - } - /** + /** * Recalculating scale for modal when the browser is resized. */ recalculateScale() { - let sizeModified = false; - if (parseInt(this.container.style.width, 10) > 580) { - this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`; - sizeModified = true; - } else { - this.container.style.width = "580px"; - sizeModified = true; - } - if (parseInt(this.container.style.height, 10) > 338) { - this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`; - sizeModified = true; - } else { - this.container.style.height = "338px"; - sizeModified = true; - } - if (sizeModified) { - this.recalculateSize(); + let sizeModified = false; + if (parseInt(this.container.style.width, 10) > 580) { + this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`; + sizeModified = true; + } else { + this.container.style.width = "580px"; + sizeModified = true; + } + if (parseInt(this.container.style.height, 10) > 338) { + this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`; + sizeModified = true; + } else { + this.container.style.height = "338px"; + sizeModified = true; + } + if (sizeModified) { + this.recalculateSize(); + } } - } - /** + /** * Recalculating width of browser scroll bar. */ recalculateScrollBar() { - this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth; - if (this.hasScrollBar) { - this.scrollbarWidth = this.getScrollBarWidth(); - } else { - this.scrollbarWidth = 0; + this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth; + if (this.hasScrollBar) { + this.scrollbarWidth = this.getScrollBarWidth(); + } else { + this.scrollbarWidth = 0; + } } - } - /** + /** * Hide soft keyboards on iOS devices. */ // eslint-disable-next-line class-methods-use-this - hideKeyboard() { - // iOS keyboard can't be detected or hide directly from JavaScript. - // So, this method simulates that user focus a text input and blur - // the selection. - const inputField = document.createElement("input"); - this.container.appendChild(inputField); - inputField.focus(); - inputField.blur(); - // Is removed to not see it. - inputField.remove(); - } - /** + hideKeyboard() { + // iOS keyboard can't be detected or hide directly from JavaScript. + // So, this method simulates that user focus a text input and blur + // the selection. + const inputField = document.createElement("input"); + this.container.appendChild(inputField); + inputField.focus(); + inputField.blur(); + // Is removed to not see it. + inputField.remove(); + } + /** * Focus to contentManager object. */ focus() { - if (this.contentManager != null && typeof this.contentManager.onFocus !== "undefined") { - this.contentManager.onFocus(); + if (this.contentManager != null && typeof this.contentManager.onFocus !== "undefined") { + this.contentManager.onFocus(); + } } - } - /** + /** * Returns true when the device is on portrait mode. */ // eslint-disable-next-line class-methods-use-this - portraitMode() { - return window.innerHeight > window.innerWidth; - } - /** + portraitMode() { + return window.innerHeight > window.innerWidth; + } + /** * Event handler that change container size when IOS soft keyboard is opened. */ handleOpenedIosSoftkeyboard() { - if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) { - if (this.portraitMode()) { - this.setContainerHeight(`63${this.iosMeasureUnit}`); - } else { - this.setContainerHeight(`40${this.iosMeasureUnit}`); - } - } - this.iosSoftkeyboardOpened = true; - } - /** + if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) { + if (this.portraitMode()) { + this.setContainerHeight(`63${this.iosMeasureUnit}`); + } else { + this.setContainerHeight(`40${this.iosMeasureUnit}`); + } + } + this.iosSoftkeyboardOpened = true; + } + /** * Event handler that change container size when IOS soft keyboard is closed. */ handleClosedIosSoftkeyboard() { - this.iosSoftkeyboardOpened = false; - this.setContainerHeight(`100${this.iosMeasureUnit}`); - } - /** + this.iosSoftkeyboardOpened = false; + this.setContainerHeight(`100${this.iosMeasureUnit}`); + } + /** * Change container sizes when orientation is changed on iOS. */ orientationChangeIosSoftkeyboard() { - if (this.iosSoftkeyboardOpened) { - if (this.portraitMode()) { - this.setContainerHeight(`63${this.iosMeasureUnit}`); - } else { - this.setContainerHeight(`40${this.iosMeasureUnit}`); - } - } else { - this.setContainerHeight(`100${this.iosMeasureUnit}`); + if (this.iosSoftkeyboardOpened) { + if (this.portraitMode()) { + this.setContainerHeight(`63${this.iosMeasureUnit}`); + } else { + this.setContainerHeight(`40${this.iosMeasureUnit}`); + } + } else { + this.setContainerHeight(`100${this.iosMeasureUnit}`); + } } - } - /** + /** * Change container sizes when orientation is changed on Android. */ orientationChangeAndroidSoftkeyboard() { - this.setContainerHeight("100%"); - } - /** + this.setContainerHeight("100%"); + } + /** * Set iframe container height. * @param {Number} height - New height. */ setContainerHeight(height) { - this.iosDivHeight = height; - this.wrapper.style.height = height; - } - /** + this.iosDivHeight = height; + this.wrapper.style.height = height; + } + /** * Check content of editor before close action. */ showPopUpMessage() { - if (this.properties.state === "minimized") { - this.stack(); + if (this.properties.state === "minimized") { + this.stack(); + } + this.popup.show(); } - this.popup.show(); - } - /** + /** * Sets the title of the modal dialog. * @param {String} title - Modal dialog title. */ setTitle(title) { - this.title.innerHTML = title; - } - /** + this.title.innerHTML = title; + } + /** * Returns the id of an element, adding the instance number to * the element class name: * className --> className[idNumber] * @param {String} className - The element class name. * @returns {String} A string appending the instance id to the className. */ getElementId(className) { - return `${className}[${this.instanceId}]`; - } + return `${className}[${this.instanceId}]`; + } } // Polyfills. /*! http://mths.be/codepointat v0.1.0 by @mathias */ if (!String.prototype.codePointAt) { - (function () { - var codePointAt = function (position) { - if (this == null) { - throw TypeError(); - } - var string = String(this); - var size = string.length; - // `ToInteger` - var index = position ? Number(position) : 0; - if (index != index) { - // better `isNaN` - index = 0; - } - // Account for out-of-bounds indices: - if (index < 0 || index >= size) { - return undefined; - } - // Get the first code unit - var first = string.charCodeAt(index); - var second; - if ( - // check if it’s the start of a surrogate pair - first >= 0xd800 && - first <= 0xdbff && // high surrogate - size > index + 1 // there is a next code unit - ) { - second = string.charCodeAt(index + 1); - if (second >= 0xdc00 && second <= 0xdfff) { - // low surrogate - // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000; - } - } - return first; - }; - if (Object.defineProperty) { - Object.defineProperty(String.prototype, "codePointAt", { - value: codePointAt, - configurable: true, - writable: true, - }); - } else { - String.prototype.codePointAt = codePointAt; - } - })(); + (function() { + var codePointAt = function(position) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var size = string.length; + // `ToInteger` + var index = position ? Number(position) : 0; + if (index != index) { + // better `isNaN` + index = 0; + } + // Account for out-of-bounds indices: + if (index < 0 || index >= size) { + return undefined; + } + // Get the first code unit + var first = string.charCodeAt(index); + var second; + if (// check if it’s the start of a surrogate pair + first >= 0xd800 && first <= 0xdbff && // high surrogate + size > index + 1 // there is a next code unit + ) { + second = string.charCodeAt(index + 1); + if (second >= 0xdc00 && second <= 0xdfff) { + // low surrogate + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000; + } + } + return first; + }; + if (Object.defineProperty) { + Object.defineProperty(String.prototype, "codePointAt", { + value: codePointAt, + configurable: true, + writable: true + }); + } else { + String.prototype.codePointAt = codePointAt; + } + })(); } // Object.assign polyfill. if (typeof Object.assign != "function") { - // Must be writable: true, enumerable: false, configurable: true - Object.defineProperty(Object, "assign", { - value: function assign(target, varArgs) { - if (target == null) { - // TypeError if undefined or null - throw new TypeError("Cannot convert undefined or null to object"); - } - var to = Object(target); - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; - if (nextSource != null) { - // Skip over if undefined or null - for (var nextKey in nextSource) { - // Avoid bugs when hasOwnProperty is shadowed - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - to[nextKey] = nextSource[nextKey]; - } - } - } - } - return to; - }, - writable: true, - configurable: true, - }); + // Must be writable: true, enumerable: false, configurable: true + Object.defineProperty(Object, "assign", { + value: function assign(target, varArgs) { + if (target == null) { + // TypeError if undefined or null + throw new TypeError("Cannot convert undefined or null to object"); + } + var to = Object(target); + for(var index = 1; index < arguments.length; index++){ + var nextSource = arguments[index]; + if (nextSource != null) { + // Skip over if undefined or null + for(var nextKey in nextSource){ + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }, + writable: true, + configurable: true + }); } // https://tc39.github.io/ecma262/#sec-array.prototype.includes if (!Array.prototype.includes) { - Object.defineProperty(Array.prototype, "includes", { - value: function (searchElement, fromIndex) { - if (this == null) { - throw new TypeError('"this" s null or is not defined'); - } - // 1. Let O be ? ToObject(this value). - var o = Object(this); - // 2. Let len be ? ToLength(? Get(O, "length")). - var len = o.length >>> 0; - // 3. if len is 0, return false. - if (len === 0) { - return false; - } - // 4. Let n be ? ToInteger(fromIndex). - // (if fromIndex is undefinedo, this step generates the value 0.) - var n = fromIndex | 0; - // 5. if n ≥ 0, then - // a. Let k be n. - // 6. Else n < 0, - // a. Let k be len + n. - // b. if k < 0, let k be 0. - var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - function sameValueZero(x, y) { - return x === y || (typeof x === "number" && typeof y === "number" && isNaN(x) && isNaN(y)); - } - // 7. Repeat while k < len - while (k < len) { - // a. let element k be the result of ? Get(O, ! ToString(k)). - // b. if SameValueZero(searchElement, elementK) is true, return true. - if (sameValueZero(o[k], searchElement)) { - return true; - } - // c. Increase k by 1. - k++; - } - // 8. Return false - return false; - }, - }); + Object.defineProperty(Array.prototype, "includes", { + value: function(searchElement, fromIndex) { + if (this == null) { + throw new TypeError('"this" s null or is not defined'); + } + // 1. Let O be ? ToObject(this value). + var o = Object(this); + // 2. Let len be ? ToLength(? Get(O, "length")). + var len = o.length >>> 0; + // 3. if len is 0, return false. + if (len === 0) { + return false; + } + // 4. Let n be ? ToInteger(fromIndex). + // (if fromIndex is undefinedo, this step generates the value 0.) + var n = fromIndex | 0; + // 5. if n ≥ 0, then + // a. Let k be n. + // 6. Else n < 0, + // a. Let k be len + n. + // b. if k < 0, let k be 0. + var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + function sameValueZero(x, y) { + return x === y || typeof x === "number" && typeof y === "number" && isNaN(x) && isNaN(y); + } + // 7. Repeat while k < len + while(k < len){ + // a. let element k be the result of ? Get(O, ! ToString(k)). + // b. if SameValueZero(searchElement, elementK) is true, return true. + if (sameValueZero(o[k], searchElement)) { + return true; + } + // c. Increase k by 1. + k++; + } + // 8. Return false + return false; + } + }); } if (!String.prototype.includes) { - String.prototype.includes = function (search, start) { - if (search instanceof RegExp) { - throw TypeError("first argument must not be a RegExp"); - } - if (start === undefined) { - start = 0; - } - return this.indexOf(search, start) !== -1; - }; + String.prototype.includes = function(search, start) { + if (search instanceof RegExp) { + throw TypeError("first argument must not be a RegExp"); + } + if (start === undefined) { + start = 0; + } + return this.indexOf(search, start) !== -1; + }; } if (!String.prototype.startsWith) { - Object.defineProperty(String.prototype, "startsWith", { - value: function (search, rawPos) { - var pos = rawPos > 0 ? rawPos | 0 : 0; - return this.substring(pos, pos + search.length) === search; - }, - }); + Object.defineProperty(String.prototype, "startsWith", { + value: function(search, rawPos) { + var pos = rawPos > 0 ? rawPos | 0 : 0; + return this.substring(pos, pos + search.length) === search; + } + }); } /** @@ -9288,7 +9083,7 @@ if (!String.prototype.startsWith) { * @property {ServiceProviderProperties} serviceProviderProperties * - The ServiceProvider class properties. * */ class Core { - /** + /** * @classdesc * This class represents MathType integration Core, managing the following: * - Integration initialization. @@ -9305,39 +9100,39 @@ if (!String.prototype.startsWith) { * @constructs * Core constructor. * @param {CoreProperties} - */ constructor(coreProperties) { - /** + */ constructor(coreProperties){ + /** * Language. Needed for accessibility and locales. 'en' by default. * @type {String} */ this.language = "en"; - /** + /** * Edit mode, 'images' by default. Admits the following values: * - images * - latex * @type {String} */ this.editMode = "images"; - /** + /** * Modal dialog instance. * @type {ModalDialog} */ this.modalDialog = null; - /** + /** * The instance of {@link CustomEditors}. By default * the only custom editor is the Chemistry editor. * @type {CustomEditors} */ this.customEditors = new CustomEditors(); - /** + /** * Chemistry editor. * @type {CustomEditor} */ const chemEditorParams = { - name: "Chemistry", - toolbar: "chemistry", - icon: "chem.png", - confVariable: "chemEnabled", - title: "ChemType", - tooltip: "Insert a chemistry formula - ChemType", - }; - this.customEditors.addEditor("chemistry", chemEditorParams); - /** + name: "Chemistry", + toolbar: "chemistry", + icon: "chem.png", + confVariable: "chemEnabled", + title: "ChemType", + tooltip: "Insert a chemistry formula - ChemType" + }; + this.customEditors.addEditor("chemistry", chemEditorParams); + /** * Environment properties. This object contains data about the integration platform. * @typedef IntegrationEnvironment * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor. @@ -9348,7 +9143,7 @@ if (!String.prototype.startsWith) { * The environment properties object. * @type {IntegrationEnvironment} */ this.environment = {}; - /** + /** * @typedef EditionProperties * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one. * False otherwise. @@ -9361,118 +9156,118 @@ if (!String.prototype.startsWith) { * The properties of the current edition process. * @type {EditionProperties} */ this.editionProperties = {}; - this.editionProperties.isNewElement = true; - this.editionProperties.temporalImage = null; - this.editionProperties.latexRange = null; - this.editionProperties.range = null; - this.editionProperties.editionStartTime = null; - /** + this.editionProperties.isNewElement = true; + this.editionProperties.temporalImage = null; + this.editionProperties.latexRange = null; + this.editionProperties.range = null; + this.editionProperties.editionStartTime = null; + /** * The {@link IntegrationModel} instance. * @type {IntegrationModel} */ this.integrationModel = null; - /** + /** * The {@link ContentManager} instance. * @type {ContentManager} */ this.contentManager = null; - /** + /** * The current browser. * @type {String} - */ this.browser = (() => { - const ua = navigator.userAgent; - let browser = "none"; - if (ua.search("Edge/") >= 0) { - browser = "EDGE"; - } else if (ua.search("Chrome/") >= 0) { - browser = "CHROME"; - } else if (ua.search("Trident/") >= 0) { - browser = "IE"; - } else if (ua.search("Firefox/") >= 0) { - browser = "FIREFOX"; - } else if (ua.search("Safari/") >= 0) { - browser = "SAFARI"; - } - return browser; - })(); - /** + */ this.browser = (()=>{ + const ua = navigator.userAgent; + let browser = "none"; + if (ua.search("Edge/") >= 0) { + browser = "EDGE"; + } else if (ua.search("Chrome/") >= 0) { + browser = "CHROME"; + } else if (ua.search("Trident/") >= 0) { + browser = "IE"; + } else if (ua.search("Firefox/") >= 0) { + browser = "FIREFOX"; + } else if (ua.search("Safari/") >= 0) { + browser = "SAFARI"; + } + return browser; + })(); + /** * Plugin listeners. * @type {Array.} */ this.listeners = new Listeners(); - /** + /** * Service provider properties. * @type {ServiceProviderProperties} */ this.serviceProviderProperties = {}; - if ("serviceProviderProperties" in coreProperties) { - this.serviceProviderProperties = coreProperties.serviceProviderProperties; - } else { - throw new Error("serviceProviderProperties property missing."); + if ("serviceProviderProperties" in coreProperties) { + this.serviceProviderProperties = coreProperties.serviceProviderProperties; + } else { + throw new Error("serviceProviderProperties property missing."); + } } - } - /** + /** * Static property. * Core listeners. * @private * @type {Listeners} */ static get globalListeners() { - return Core._globalListeners; - } - /** + return Core._globalListeners; + } + /** * Static property setter. * Set core listeners. * @param {Listeners} value - The property value. * @ignore */ static set globalListeners(value) { - Core._globalListeners = value; - } - /** + Core._globalListeners = value; + } + /** * Core state. Says if it was loaded previously. * True when Core.init was called. Otherwise, false. * @private * @type {Boolean} */ static get initialized() { - return Core._initialized; - } - /** + return Core._initialized; + } + /** * Core state. Says if it was loaded previously. * @param {Boolean} value - True to say that Core.init was called. Otherwise, false. * @ignore */ static set initialized(value) { - Core._initialized = value; - } - /** + Core._initialized = value; + } + /** * Sets the {@link Core.integrationModel} property. * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property. */ setIntegrationModel(integrationModel) { - this.integrationModel = integrationModel; - } - /** + this.integrationModel = integrationModel; + } + /** * Sets the {@link Core.environment} property. * @param {IntegrationEnvironment} integrationEnvironment - * The {@link IntegrationEnvironment} object. */ setEnvironment(integrationEnvironment) { - if ("editor" in integrationEnvironment) { - this.environment.editor = integrationEnvironment.editor; - } - if ("mode" in integrationEnvironment) { - this.environment.mode = integrationEnvironment.mode; - } - if ("version" in integrationEnvironment) { - this.environment.version = integrationEnvironment.version; + if ("editor" in integrationEnvironment) { + this.environment.editor = integrationEnvironment.editor; + } + if ("mode" in integrationEnvironment) { + this.environment.mode = integrationEnvironment.mode; + } + if ("version" in integrationEnvironment) { + this.environment.version = integrationEnvironment.version; + } } - } - /** + /** * Sets the custom headers added on editor requests if contentManager isn't undefined. * @returns {Object} headers - key value headers. */ setHeaders(headers) { - const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers; - Configuration.set("customHeaders", headerObject); - } - /** + const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers; + Configuration.set("customHeaders", headerObject); + } + /** * Returns the current {@link ModalDialog} instance. * @returns {ModalDialog} The current {@link ModalDialog} instance. */ getModalDialog() { - return this.modalDialog; - } - /** + return this.modalDialog; + } + /** * Inits the {@link Core} class, doing the following: * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON. * - Updates {@link Configuration} class with the previous configuration properties. @@ -9481,43 +9276,43 @@ if (!String.prototype.startsWith) { * - Fires onLoad event. * @param {Object} serviceParameters - Service parameters. */ init() { - if (!Core.initialized) { - const serviceProviderListener = Listeners.newListener("onInit", () => { - const jsConfiguration = ServiceProvider.getService("configurationjs", "", "get"); - const jsonConfiguration = JSON.parse(jsConfiguration); - Configuration.addConfiguration(jsonConfiguration); - // Adding JavaScript (not backend) configuration variables. - Configuration.addConfiguration(jsProperties); - // Fire 'onLoad' event: - // All integration must listen this event in order to know if the plugin - // has been properly loaded. - StringManager.language = this.language; - this.listeners.fire("onLoad", {}); - }); - ServiceProvider.addListener(serviceProviderListener); - ServiceProvider.init(this.serviceProviderProperties); - Core.initialized = true; - } else { - // Case when there are more than two editor instances. - // After the first editor all the other editors don't need to load any file or service. - this.listeners.fire("onLoad", {}); + if (!Core.initialized) { + const serviceProviderListener = Listeners.newListener("onInit", ()=>{ + const jsConfiguration = ServiceProvider.getService("configurationjs", "", "get"); + const jsonConfiguration = JSON.parse(jsConfiguration); + Configuration.addConfiguration(jsonConfiguration); + // Adding JavaScript (not backend) configuration variables. + Configuration.addConfiguration(jsProperties); + // Fire 'onLoad' event: + // All integration must listen this event in order to know if the plugin + // has been properly loaded. + StringManager.language = this.language; + this.listeners.fire("onLoad", {}); + }); + ServiceProvider.addListener(serviceProviderListener); + ServiceProvider.init(this.serviceProviderProperties); + Core.initialized = true; + } else { + // Case when there are more than two editor instances. + // After the first editor all the other editors don't need to load any file or service. + this.listeners.fire("onLoad", {}); + } } - } - /** + /** * Adds a {@link Listener} to the current instance of the {@link Core} class. * @param {Listener} listener - The listener object. */ addListener(listener) { - this.listeners.add(listener); - } - /** + this.listeners.add(listener); + } + /** * Adds the global {@link Listener} instance to {@link Core} class. * @param {Listener} listener - The event listener to be added. * @static */ static addGlobalListener(listener) { - Core.globalListeners.add(listener); - } - beforeUpdateFormula(mathml, wirisProperties) { - /** + Core.globalListeners.add(listener); + } + beforeUpdateFormula(mathml, wirisProperties) { + /** * This event is fired before updating the formula. * @type {Object} * @property {String} mathml - MathML to be transformed. @@ -9525,30 +9320,30 @@ if (!String.prototype.startsWith) { * @property {Object} wirisProperties - Extra attributes for the formula. * @property {String} language - Formula language. */ const beforeUpdateEvent = new Event(); - beforeUpdateEvent.mathml = mathml; - // Cloning wirisProperties object - // We don't want wirisProperties object modified. - beforeUpdateEvent.wirisProperties = {}; - if (wirisProperties != null) { - Object.keys(wirisProperties).forEach((attr) => { - beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr]; - }); - } - // Read only. - beforeUpdateEvent.language = this.language; - beforeUpdateEvent.editMode = this.editMode; - if (this.listeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { - return {}; - } - if (Core.globalListeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { - return {}; + beforeUpdateEvent.mathml = mathml; + // Cloning wirisProperties object + // We don't want wirisProperties object modified. + beforeUpdateEvent.wirisProperties = {}; + if (wirisProperties != null) { + Object.keys(wirisProperties).forEach((attr)=>{ + beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr]; + }); + } + // Read only. + beforeUpdateEvent.language = this.language; + beforeUpdateEvent.editMode = this.editMode; + if (this.listeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { + return {}; + } + if (Core.globalListeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { + return {}; + } + return { + mathml: beforeUpdateEvent.mathml, + wirisProperties: beforeUpdateEvent.wirisProperties + }; } - return { - mathml: beforeUpdateEvent.mathml, - wirisProperties: beforeUpdateEvent.wirisProperties, - }; - } - /** + /** * Converts a MathML into it's correspondent image and inserts the image is * inserted in a HTMLElement target by creating * a new image or updating an existing one. @@ -9558,38 +9353,38 @@ if (!String.prototype.startsWith) { * @param {Array.} wirisProperties - The extra attributes for the formula. * @returns {ReturnObject} - Object with the information of the node or latex to insert. */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - /** + /** * It is the object with the information of the node or latex to insert. * @typedef ReturnObject * @property {Node} [node] - The DOM node to insert. * @property {String} [latex] - The latex to insert. */ const returnObject = {}; - if (!mathml) { - this.insertElementOnSelection(null, focusElement, windowTarget); - } else if (this.editMode === "latex") { - returnObject.latex = Latex.getLatexFromMathML(mathml); - // this.integrationModel.getNonLatexNode is an integration wrapper - // to have special behaviours for nonLatex. - // Not all the integrations have special behaviours for nonLatex. - if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) { - const afterUpdateEvent = new Event(); - afterUpdateEvent.editMode = this.editMode; - afterUpdateEvent.windowTarget = windowTarget; - afterUpdateEvent.focusElement = focusElement; - afterUpdateEvent.latex = returnObject.latex; - this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml); - } else { - returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); - } - this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); - } else { - returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language); - this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); + if (!mathml) { + this.insertElementOnSelection(null, focusElement, windowTarget); + } else if (this.editMode === "latex") { + returnObject.latex = Latex.getLatexFromMathML(mathml); + // this.integrationModel.getNonLatexNode is an integration wrapper + // to have special behaviours for nonLatex. + // Not all the integrations have special behaviours for nonLatex. + if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) { + const afterUpdateEvent = new Event(); + afterUpdateEvent.editMode = this.editMode; + afterUpdateEvent.windowTarget = windowTarget; + afterUpdateEvent.focusElement = focusElement; + afterUpdateEvent.latex = returnObject.latex; + this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml); + } else { + returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); + } + this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); + } else { + returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language); + this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); + } + return returnObject; } - return returnObject; - } - afterUpdateFormula(focusElement, windowTarget, node, latex) { - /** + afterUpdateFormula(focusElement, windowTarget, node, latex) { + /** * This event is fired after update the formula. * @type {Event} * @param {String} editMode - edit mode. @@ -9598,331 +9393,320 @@ if (!String.prototype.startsWith) { * @param {String} latex - LaTeX generated by the formula (editMode=latex). * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise). */ const afterUpdateEvent = new Event(); - afterUpdateEvent.editMode = this.editMode; - afterUpdateEvent.windowTarget = windowTarget; - afterUpdateEvent.focusElement = focusElement; - afterUpdateEvent.node = node; - afterUpdateEvent.latex = latex; - if (this.listeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { - return {}; - } - if (Core.globalListeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { - return {}; - } - return {}; - } - /** + afterUpdateEvent.editMode = this.editMode; + afterUpdateEvent.windowTarget = windowTarget; + afterUpdateEvent.focusElement = focusElement; + afterUpdateEvent.node = node; + afterUpdateEvent.latex = latex; + if (this.listeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { + return {}; + } + if (Core.globalListeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { + return {}; + } + return {}; + } + /** * Sets the caret after a given Node and set the focus to the owner document. * @param {Node} node - The Node element. */ placeCaretAfterNode(node) { - if (node === null) return; - this.integrationModel.getSelection(); - const nodeDocument = node.ownerDocument; - if (typeof nodeDocument.getSelection !== "undefined" && !!node.parentElement) { - const range = nodeDocument.createRange(); - range.setStartAfter(node); - range.collapse(true); - const selection = nodeDocument.getSelection(); - selection.removeAllRanges(); - selection.addRange(range); - nodeDocument.body.focus(); - } - } - /** + if (node === null) return; + this.integrationModel.getSelection(); + const nodeDocument = node.ownerDocument; + if (typeof nodeDocument.getSelection !== "undefined" && !!node.parentElement) { + const range = nodeDocument.createRange(); + range.setStartAfter(node); + range.collapse(true); + const selection = nodeDocument.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + nodeDocument.body.focus(); + } + } + /** * Replaces a Selection object with an HTMLElement. * @param {HTMLElement} element - The HTMLElement to replace the selection. * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace. * @param {Window} windowTarget - The window target. */ insertElementOnSelection(element, focusElement, windowTarget) { - let mathmlOrigin = null; - if (this.editionProperties.isNewElement) { - if (element) { - if (focusElement.type === "textarea") { - Util.updateTextArea(focusElement, element.textContent); - } else if (document.selection && document.getSelection === 0) { - let range = windowTarget.document.selection.createRange(); - windowTarget.document.execCommand("InsertImage", false, element.src); - if (!("parentElement" in range)) { - windowTarget.document.execCommand("delete", false); - range = windowTarget.document.selection.createRange(); - windowTarget.document.execCommand("InsertImage", false, element.src); - } - if ("parentElement" in range) { - const temporalObject = range.parentElement(); - if (temporalObject.nodeName.toUpperCase() === "IMG") { - temporalObject.parentNode.replaceChild(element, temporalObject); + let mathmlOrigin = null; + if (this.editionProperties.isNewElement) { + if (element) { + if (focusElement.type === "textarea") { + Util.updateTextArea(focusElement, element.textContent); + } else if (document.selection && document.getSelection === 0) { + let range = windowTarget.document.selection.createRange(); + windowTarget.document.execCommand("InsertImage", false, element.src); + if (!("parentElement" in range)) { + windowTarget.document.execCommand("delete", false); + range = windowTarget.document.selection.createRange(); + windowTarget.document.execCommand("InsertImage", false, element.src); + } + if ("parentElement" in range) { + const temporalObject = range.parentElement(); + if (temporalObject.nodeName.toUpperCase() === "IMG") { + temporalObject.parentNode.replaceChild(element, temporalObject); + } else { + // IE9 fix: parentNode() does not return the IMG node, + // returns the parent DIV node. In IE < 9, pasteHTML does not work well. + range.pasteHTML(Util.createObjectCode(element)); + } + } + } else { + let range = null; + // In IE is needed keep the range due to after focus the modal window + // it can't be retrieved the last selection. + if (this.editionProperties.range) { + ({ range } = this.editionProperties); + this.editionProperties.range = null; + } else { + const editorSelection = this.integrationModel.getSelection(); + range = editorSelection.getRangeAt(0); + } + // Delete if something was surrounded. + range.deleteContents(); + let node = range.startContainer; + const position = range.startOffset; + if (node.nodeType === 3) { + // TEXT_NODE. + node = node.splitText(position); + node.parentNode.insertBefore(element, node); + } else if (node.nodeType === 1) { + // ELEMENT_NODE. + node.insertBefore(element, node.childNodes[position]); + } + this.placeCaretAfterNode(element); + } + } else if (focusElement.type === "textarea") { + focusElement.focus(); + } else { + const editorSelection = this.integrationModel.getSelection(); + editorSelection.removeAllRanges(); + if (this.editionProperties.range) { + const { range } = this.editionProperties; + this.editionProperties.range = null; + editorSelection.addRange(range); + } + } + } else if (this.editionProperties.latexRange) { + if (document.selection && document.getSelection === 0) { + this.editionProperties.isNewElement = true; + this.editionProperties.latexRange.select(); + this.insertElementOnSelection(element, focusElement, windowTarget); } else { - // IE9 fix: parentNode() does not return the IMG node, - // returns the parent DIV node. In IE < 9, pasteHTML does not work well. - range.pasteHTML(Util.createObjectCode(element)); + this.editionProperties.latexRange.deleteContents(); + this.editionProperties.latexRange.insertNode(element); + this.placeCaretAfterNode(element); } - } + } else if (focusElement.type === "textarea") { + let item; + // Wrapper for some integrations that can have special behaviours to show latex. + if (typeof this.integrationModel.getSelectedItem !== "undefined") { + item = this.integrationModel.getSelectedItem(focusElement, false); + } else { + item = Util.getSelectedItemOnTextarea(focusElement); + } + Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition); } else { - let range = null; - // In IE is needed keep the range due to after focus the modal window - // it can't be retrieved the last selection. - if (this.editionProperties.range) { - ({ range } = this.editionProperties); - this.editionProperties.range = null; - } else { - const editorSelection = this.integrationModel.getSelection(); - range = editorSelection.getRangeAt(0); - } - // Delete if something was surrounded. - range.deleteContents(); - let node = range.startContainer; - const position = range.startOffset; - if (node.nodeType === 3) { - // TEXT_NODE. - node = node.splitText(position); - node.parentNode.insertBefore(element, node); - } else if (node.nodeType === 1) { - // ELEMENT_NODE. - node.insertBefore(element, node.childNodes[position]); - } - this.placeCaretAfterNode(element); - } - } else if (focusElement.type === "textarea") { - focusElement.focus(); - } else { - const editorSelection = this.integrationModel.getSelection(); - editorSelection.removeAllRanges(); - if (this.editionProperties.range) { - const { range } = this.editionProperties; - this.editionProperties.range = null; - editorSelection.addRange(range); - } - } - } else if (this.editionProperties.latexRange) { - if (document.selection && document.getSelection === 0) { - this.editionProperties.isNewElement = true; - this.editionProperties.latexRange.select(); - this.insertElementOnSelection(element, focusElement, windowTarget); - } else { - this.editionProperties.latexRange.deleteContents(); - this.editionProperties.latexRange.insertNode(element); - this.placeCaretAfterNode(element); - } - } else if (focusElement.type === "textarea") { - let item; - // Wrapper for some integrations that can have special behaviours to show latex. - if (typeof this.integrationModel.getSelectedItem !== "undefined") { - item = this.integrationModel.getSelectedItem(focusElement, false); - } else { - item = Util.getSelectedItemOnTextarea(focusElement); - } - Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition); - } else { - mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml; - if (element && element.nodeName.toLowerCase() === "img") { - // Editor empty, formula has been erased on edit. - // There are editors (e.g: CKEditor) that put attributes in images. - // We don't allow that behaviour in our images. - Image.removeImgDataAttributes(this.editionProperties.temporalImage); - // Clone is needed to maintain event references to temporalImage. - Image.clone(element, this.editionProperties.temporalImage); - } else { - this.editionProperties.temporalImage.remove(); - } - this.placeCaretAfterNode(this.editionProperties.temporalImage); - } - // Build the telemeter payload separated to delete null/undefined entries. - const mathml = element?.dataset?.mathml; - let payload = { - mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, - mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, - elapsed_time: Date.now() - this.editionProperties.editionStartTime, - editor_origin: null, - toolbar: this.modalDialog.contentManager.toolbar, - size: mathml?.length, - }; - // Remove the desired null keys. - Object.keys(payload).forEach((key) => { - if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; - }); - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("INSERTED_FORMULA", { - ...payload, - }); - } catch (error) { - console.error("Error tracking INSERTED_FORMULA", error); - } - } - /** + mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml; + if (element && element.nodeName.toLowerCase() === "img") { + // Editor empty, formula has been erased on edit. + // There are editors (e.g: CKEditor) that put attributes in images. + // We don't allow that behaviour in our images. + Image.removeImgDataAttributes(this.editionProperties.temporalImage); + // Clone is needed to maintain event references to temporalImage. + Image.clone(element, this.editionProperties.temporalImage); + } else { + this.editionProperties.temporalImage.remove(); + } + this.placeCaretAfterNode(this.editionProperties.temporalImage); + } + // Build the telemeter payload separated to delete null/undefined entries. + const mathml = element?.dataset?.mathml; + let payload = { + mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, + mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, + elapsed_time: Date.now() - this.editionProperties.editionStartTime, + editor_origin: null, + toolbar: this.modalDialog.contentManager.toolbar, + size: mathml?.length + }; + // Remove the desired null keys. + Object.keys(payload).forEach((key)=>{ + if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; + }); + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("INSERTED_FORMULA", { + ...payload + }); + } catch (error) { + console.error("Error tracking INSERTED_FORMULA", error); + } + } + /** * Opens a modal dialog containing MathType editor.. * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted. * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise. */ openModalDialog(target, isIframe) { - // Count the time since the editor is open - this.editionProperties.editionStartTime = Date.now(); - // Textarea elements don't have normal document ranges. It only accepts latex edit. - this.editMode = "images"; - // In IE is needed keep the range due to after focus the modal window - // it can't be retrieved the last selection. - try { - if (isIframe) { - // Is needed focus the target first. - target.contentWindow.focus(); - const selection = target.contentWindow.getSelection(); - this.editionProperties.range = selection.getRangeAt(0); - } else { - // Is needed focus the target first. - target.focus(); - const selection = getSelection(); - this.editionProperties.range = selection.getRangeAt(0); - } - } catch (e) { - this.editionProperties.range = null; - } - if (isIframe === undefined) { - isIframe = true; - } - this.editionProperties.latexRange = null; - if (target) { - let selectedItem; - if (typeof this.integrationModel.getSelectedItem !== "undefined") { - selectedItem = this.integrationModel.getSelectedItem(target, isIframe); - } else { - selectedItem = Util.getSelectedItem(target, isIframe); - } - // Check LaTeX if and only if the node is a text node (nodeType==3). - if (selectedItem) { - // Case when image was selected and button pressed. - if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get("imageClassName"))) { - this.editionProperties.temporalImage = selectedItem.node; - this.editionProperties.isNewElement = false; - } else if (selectedItem.node.nodeType === 3) { - // If it's a text node means that editor is working with LaTeX. - if (this.integrationModel.getMathmlFromTextNode) { - // If integration has this function it isn't set range due to we don't - // know if it will be put into a textarea as a text or image. - const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition); - if (mathml) { - this.editMode = "latex"; - this.editionProperties.isNewElement = false; - this.editionProperties.temporalImage = document.createElement("img"); - this.editionProperties.temporalImage.setAttribute( - Configuration.get("imageMathmlAttribute"), - MathML.safeXmlEncode(mathml), - ); - } - } else { - const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition); - if (latexResult) { - const mathml = Latex.getMathMLFromLatex(latexResult.latex); - this.editMode = "latex"; - this.editionProperties.isNewElement = false; - this.editionProperties.temporalImage = document.createElement("img"); - this.editionProperties.temporalImage.setAttribute( - Configuration.get("imageMathmlAttribute"), - MathML.safeXmlEncode(mathml), - ); - const windowTarget = isIframe ? target.contentWindow : window; - if (target.tagName.toLowerCase() !== "textarea") { - if (document.selection) { - let leftOffset = 0; - let previousNode = latexResult.startNode.previousSibling; - while (previousNode) { - leftOffset += Util.getNodeLength(previousNode); - previousNode = previousNode.previousSibling; - } - this.editionProperties.latexRange = windowTarget.document.selection.createRange(); - this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode); - this.editionProperties.latexRange.move("character", leftOffset + latexResult.startPosition); - this.editionProperties.latexRange.moveEnd("character", latexResult.latex.length + 4); // Plus 4 for the '$$' characters. - } else { - this.editionProperties.latexRange = windowTarget.document.createRange(); - this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition); - this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition); - } - } - } - } - } - } else if (target.tagName.toLowerCase() === "textarea") { - // By default editMode is 'images', but when target is a textarea it needs to be 'latex'. - this.editMode = "latex"; - } - } - // Setting an object with the editor parameters. - // Editor parameters can be customized in several ways: - // 1 - editorAttributes: Contains the default editor attributes, - // usually the metrics in a comma separated string. Always exists. - // 2 - editorParameters: Object containing custom editor parameters. - // These parameters are defined in the backend. So they affects all integration instances. - // The backend send the default editor attributes in a coma separated - // with the following structure: key1=value1,key2=value2... - const defaultEditorAttributesArray = Configuration.get("editorAttributes").split(", "); - const defaultEditorAttributes = {}; - for (let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1) { - const tempAttribute = defaultEditorAttributesArray[i].split("="); - const key = tempAttribute[0]; - const value = tempAttribute[1]; - defaultEditorAttributes[key] = value; - } - // Custom editor parameters. - const editorAttributes = { - language: this.language, - }; - // Editor parameters in backend, usually configuration.ini. - const serverEditorParameters = Configuration.get("editorParameters"); - // Editor parameters through JavaScript configuration. - const clientEditorParameters = this.integrationModel.editorParameters; - Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters); - Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters); - // Now, update backwards: if user has set a custom language, pass that back to core properties - this.language = editorAttributes.language; - StringManager.language = this.language; - editorAttributes.rtl = this.integrationModel.rtl; - const customHeaders = Configuration.get("customHeaders"); - // This is not being used in the code, we are keeping it just in case it's needed. - // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend. - editorAttributes.customHeaders = - typeof customHeaders === "string" ? Util.convertStringToObject(customHeaders) : customHeaders; - const contentManagerAttributes = {}; - contentManagerAttributes.editorAttributes = editorAttributes; - contentManagerAttributes.language = this.language; - contentManagerAttributes.customEditors = this.customEditors; - contentManagerAttributes.environment = this.environment; - if (this.modalDialog == null) { - this.modalDialog = new ModalDialog(editorAttributes); - this.contentManager = new ContentManager(contentManagerAttributes); - // When an instance of ContentManager is created we need to wait until - // the ContentManager is ready by listening 'onLoad' event. - const listener = Listeners.newListener("onLoad", () => { - this.contentManager.dbclick = this.editionProperties.dbclick; - this.contentManager.isNewElement = this.editionProperties.isNewElement; - if (this.editionProperties.temporalImage != null) { - const mathML = MathML.safeXmlDecode( - this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute")), - ); - this.contentManager.mathML = mathML; - } - }); - this.contentManager.addListener(listener); - this.contentManager.init(); - this.modalDialog.setContentManager(this.contentManager); - this.contentManager.setModalDialogInstance(this.modalDialog); - } else { - this.contentManager.dbclick = this.editionProperties.dbclick; - this.contentManager.isNewElement = this.editionProperties.isNewElement; - if (this.editionProperties.temporalImage != null) { - const mathML = MathML.safeXmlDecode( - this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute")), - ); - this.contentManager.mathML = mathML; - } + // Count the time since the editor is open + this.editionProperties.editionStartTime = Date.now(); + // Textarea elements don't have normal document ranges. It only accepts latex edit. + this.editMode = "images"; + // In IE is needed keep the range due to after focus the modal window + // it can't be retrieved the last selection. + try { + if (isIframe) { + // Is needed focus the target first. + target.contentWindow.focus(); + const selection = target.contentWindow.getSelection(); + this.editionProperties.range = selection.getRangeAt(0); + } else { + // Is needed focus the target first. + target.focus(); + const selection = getSelection(); + this.editionProperties.range = selection.getRangeAt(0); + } + } catch (e) { + this.editionProperties.range = null; + } + if (isIframe === undefined) { + isIframe = true; + } + this.editionProperties.latexRange = null; + if (target) { + let selectedItem; + if (typeof this.integrationModel.getSelectedItem !== "undefined") { + selectedItem = this.integrationModel.getSelectedItem(target, isIframe); + } else { + selectedItem = Util.getSelectedItem(target, isIframe); + } + // Check LaTeX if and only if the node is a text node (nodeType==3). + if (selectedItem) { + // Case when image was selected and button pressed. + if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get("imageClassName"))) { + this.editionProperties.temporalImage = selectedItem.node; + this.editionProperties.isNewElement = false; + } else if (selectedItem.node.nodeType === 3) { + // If it's a text node means that editor is working with LaTeX. + if (this.integrationModel.getMathmlFromTextNode) { + // If integration has this function it isn't set range due to we don't + // know if it will be put into a textarea as a text or image. + const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition); + if (mathml) { + this.editMode = "latex"; + this.editionProperties.isNewElement = false; + this.editionProperties.temporalImage = document.createElement("img"); + this.editionProperties.temporalImage.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + } + } else { + const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition); + if (latexResult) { + const mathml = Latex.getMathMLFromLatex(latexResult.latex); + this.editMode = "latex"; + this.editionProperties.isNewElement = false; + this.editionProperties.temporalImage = document.createElement("img"); + this.editionProperties.temporalImage.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + const windowTarget = isIframe ? target.contentWindow : window; + if (target.tagName.toLowerCase() !== "textarea") { + if (document.selection) { + let leftOffset = 0; + let previousNode = latexResult.startNode.previousSibling; + while(previousNode){ + leftOffset += Util.getNodeLength(previousNode); + previousNode = previousNode.previousSibling; + } + this.editionProperties.latexRange = windowTarget.document.selection.createRange(); + this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode); + this.editionProperties.latexRange.move("character", leftOffset + latexResult.startPosition); + this.editionProperties.latexRange.moveEnd("character", latexResult.latex.length + 4); // Plus 4 for the '$$' characters. + } else { + this.editionProperties.latexRange = windowTarget.document.createRange(); + this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition); + this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition); + } + } + } + } + } + } else if (target.tagName.toLowerCase() === "textarea") { + // By default editMode is 'images', but when target is a textarea it needs to be 'latex'. + this.editMode = "latex"; + } + } + // Setting an object with the editor parameters. + // Editor parameters can be customized in several ways: + // 1 - editorAttributes: Contains the default editor attributes, + // usually the metrics in a comma separated string. Always exists. + // 2 - editorParameters: Object containing custom editor parameters. + // These parameters are defined in the backend. So they affects all integration instances. + // The backend send the default editor attributes in a coma separated + // with the following structure: key1=value1,key2=value2... + const defaultEditorAttributesArray = Configuration.get("editorAttributes").split(", "); + const defaultEditorAttributes = {}; + for(let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1){ + const tempAttribute = defaultEditorAttributesArray[i].split("="); + const key = tempAttribute[0]; + const value = tempAttribute[1]; + defaultEditorAttributes[key] = value; + } + // Custom editor parameters. + const editorAttributes = { + language: this.language + }; + // Editor parameters in backend, usually configuration.ini. + const serverEditorParameters = Configuration.get("editorParameters"); + // Editor parameters through JavaScript configuration. + const clientEditorParameters = this.integrationModel.editorParameters; + Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters); + Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters); + // Now, update backwards: if user has set a custom language, pass that back to core properties + this.language = editorAttributes.language; + StringManager.language = this.language; + editorAttributes.rtl = this.integrationModel.rtl; + const customHeaders = Configuration.get("customHeaders"); + // This is not being used in the code, we are keeping it just in case it's needed. + // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend. + editorAttributes.customHeaders = typeof customHeaders === "string" ? Util.convertStringToObject(customHeaders) : customHeaders; + const contentManagerAttributes = {}; + contentManagerAttributes.editorAttributes = editorAttributes; + contentManagerAttributes.language = this.language; + contentManagerAttributes.customEditors = this.customEditors; + contentManagerAttributes.environment = this.environment; + if (this.modalDialog == null) { + this.modalDialog = new ModalDialog(editorAttributes); + this.contentManager = new ContentManager(contentManagerAttributes); + // When an instance of ContentManager is created we need to wait until + // the ContentManager is ready by listening 'onLoad' event. + const listener = Listeners.newListener("onLoad", ()=>{ + this.contentManager.dbclick = this.editionProperties.dbclick; + this.contentManager.isNewElement = this.editionProperties.isNewElement; + if (this.editionProperties.temporalImage != null) { + const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute"))); + this.contentManager.mathML = mathML; + } + }); + this.contentManager.addListener(listener); + this.contentManager.init(); + this.modalDialog.setContentManager(this.contentManager); + this.contentManager.setModalDialogInstance(this.modalDialog); + } else { + this.contentManager.dbclick = this.editionProperties.dbclick; + this.contentManager.isNewElement = this.editionProperties.isNewElement; + if (this.editionProperties.temporalImage != null) { + const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute"))); + this.contentManager.mathML = mathML; + } + } + this.contentManager.setIntegrationModel(this.integrationModel); + this.modalDialog.open(); } - this.contentManager.setIntegrationModel(this.integrationModel); - this.modalDialog.open(); - } - /** + /** * Returns the {@link CustomEditors} instance. * @return {CustomEditors} The current {@link CustomEditors} instance. */ getCustomEditors() { - return this.customEditors; - } + return this.customEditors; + } } /** * Core static listeners. @@ -9935,8 +9719,7 @@ if (!String.prototype.startsWith) { * @private */ Core._initialized = false; -var warnIcon = - '\n\n\n'; +var warnIcon = "\n\n\n"; // eslint-disable-next-line no-unused-vars, import/named /** @@ -9959,474 +9742,451 @@ var warnIcon = * @property {Object} [integrationModelProperties.integrationParameters] * - Overwritten integration parameters. */ class IntegrationModel { - /** + /** * @classdesc * This class represents an integration model, allowing the integration script to * communicate with Core class. Each integration must extend this class. * @constructs * @param {IntegrationModelProperties} integrationModelProperties - */ constructor(integrationModelProperties) { - /** + */ constructor(integrationModelProperties){ + /** * Language. Needed for accessibility and locales. English by default. */ this.language = "en"; - /** + /** * Service parameters * @type {ServiceProviderProperties} */ this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {}; - /** + /** * Configuration service path. The integration service is needed by Core class to * load all the backend configuration into the frontend and also to create the paths * of all services (all services lives in the same route). Mandatory property. */ this.configurationService = ""; - if ("configurationService" in integrationModelProperties) { - this.serviceProviderProperties.URI = integrationModelProperties.configurationService; - console.warn("Deprecated property configurationService. Use serviceParameters on instead.", [ - integrationModelProperties.configurationService, - ]); - } - /** + if ("configurationService" in integrationModelProperties) { + this.serviceProviderProperties.URI = integrationModelProperties.configurationService; + console.warn("Deprecated property configurationService. Use serviceParameters on instead.", [ + integrationModelProperties.configurationService + ]); + } + /** * Plugin version. Needed to stats and caching. * @type {string} */ this.version = "version" in integrationModelProperties ? integrationModelProperties.version : ""; - /** + /** * DOM target in which the plugin works. Needed to associate events, insert formulas, etc. * Mandatory property. */ this.target = null; - if ("target" in integrationModelProperties) { - this.target = integrationModelProperties.target; - } else { - throw new Error("IntegrationModel constructor error: target property missed."); - } - /** + if ("target" in integrationModelProperties) { + this.target = integrationModelProperties.target; + } else { + throw new Error("IntegrationModel constructor error: target property missed."); + } + /** * Integration script name. Needed to know the plugin path. */ if ("scriptName" in integrationModelProperties) { - this.scriptName = integrationModelProperties.scriptName; - } - /** + this.scriptName = integrationModelProperties.scriptName; + } + /** * Object containing the arguments needed by the callback function. */ this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {}; - /** + /** * Contains information about the integration environment: * like the name of the editor, the version, etc. */ this.environment = integrationModelProperties.environment ?? {}; - /** + /** * Indicates if the DOM target is - or not - and iframe. */ this.isIframe = false; - if (this.target != null) { - this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; - } - /** + if (this.target != null) { + this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; + } + /** * Instance of the integration editor object. Usually the entry point to access the API * of a HTML editor. */ this.editorObject = integrationModelProperties.editorObject ?? null; - /** + /** * Specifies if the direction of the text is RTL. false by default. */ this.rtl = integrationModelProperties.rtl ?? false; - /** + /** * Specifies if the integration model exposes the locale strings. false by default. */ this.managesLanguage = integrationModelProperties.managesLanguage ?? false; - /** + /** * Specify if editor will open in hand mode only */ this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false; - /** + /** * Indicates if an image is selected. Needed to resize the image to the original size in case * the image is resized. * @type {boolean} */ this.temporalImageResizing = false; - /** + /** * The Core class instance associated to the integration model. * @type {Core} */ this.core = null; - /** + /** * Integration model listeners. * @type {Listeners} */ this.listeners = new Listeners(); - // Parameters overwrite. - if ("integrationParameters" in integrationModelProperties) { - IntegrationModel.integrationParameters.forEach((parameter) => { - if (parameter in integrationModelProperties.integrationParameters) { - // Don't add empty parameters. - const value = integrationModelProperties.integrationParameters[parameter]; - if (Object.keys(value).length !== 0) { - this[parameter] = value; - } - } - }); - } - } - /** + // Parameters overwrite. + if ("integrationParameters" in integrationModelProperties) { + IntegrationModel.integrationParameters.forEach((parameter)=>{ + if (parameter in integrationModelProperties.integrationParameters) { + // Don't add empty parameters. + const value = integrationModelProperties.integrationParameters[parameter]; + if (Object.keys(value).length !== 0) { + this[parameter] = value; + } + } + }); + } + } + /** * Init function. Usually called from the integration side once the core.js file is loaded. */ init() { - // Check if language is an object and select the property necessary - this.language = this.getLanguage(); - // We need to wait until Core class is loaded ('onLoad' event) before - // call the callback method. - const listener = Listeners.newListener("onLoad", () => { - this.callbackFunction(this.callbackMethodArguments); - }); - // Backwards compatibility. - if (this.serviceProviderProperties.URI.indexOf("configuration") !== -1) { - const uri = this.serviceProviderProperties.URI; - const server = ServiceProvider.getServerLanguageFromService(uri); - this.serviceProviderProperties.server = server; - const configurationIndex = this.serviceProviderProperties.URI.indexOf("configuration"); - const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex); - this.serviceProviderProperties.URI = subsTring; - } - let serviceParametersURI = this.serviceProviderProperties.URI; - serviceParametersURI = - serviceParametersURI.indexOf("/") === 0 || serviceParametersURI.indexOf("http") === 0 - ? serviceParametersURI - : Util.concatenateUrl(this.getPath(), serviceParametersURI); - this.serviceProviderProperties.URI = serviceParametersURI; - const coreProperties = {}; - coreProperties.serviceProviderProperties = this.serviceProviderProperties; - this.setCore(new Core(coreProperties)); - this.core.addListener(listener); - this.core.language = this.language; - // Initializing Core class. - this.core.init(); - // TODO: Move to Core constructor. - this.core.setEnvironment(this.environment); - // No internet connection modal. - let attributes = {}; - attributes.class = attributes.id = "wrs_modal_offline"; - this.offlineModal = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_content_offline"; - this.offlineModalContent = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_offline_close"; - this.offlineModalClose = Util.createElement("span", attributes); - this.offlineModalClose.innerHTML = "×"; - attributes = {}; - attributes.class = "wrs_modal_offline_warn"; - this.offlineModalWarn = Util.createElement("span", attributes); - let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`; - this.offlineModalWarn.setAttribute("style", generalStyle); - attributes = {}; - attributes.class = "wrs_modal_offline_text_container"; - this.offlineModalMessage = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_offline_text_warn"; - this.offlineModalMessage1 = Util.createElement("p", attributes); - this.offlineModalMessage1.innerHTML = "You are not online!"; - attributes = {}; - attributes.class = "wrs_modal_offline_text"; - this.offlineModalMessage2 = Util.createElement("p", attributes); - this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`; - //Append offline modal elements - this.offlineModalContent.appendChild(this.offlineModalClose); - this.offlineModalMessage.appendChild(this.offlineModalMessage1); - this.offlineModalMessage.appendChild(this.offlineModalMessage2); - this.offlineModalContent.appendChild(this.offlineModalMessage); - this.offlineModalContent.appendChild(this.offlineModalWarn); - this.offlineModal.appendChild(this.offlineModalContent); - document.body.appendChild(this.offlineModal); - let modal = document.getElementById("wrs_modal_offline"); - this.offlineModalClose.addEventListener("click", function () { - modal.style.display = "none"; - }); - // Store editor name for telemetry purposes. - let editorName = this.environment.editor; - editorName = editorName.slice(0, -1); // Remove version number from editors - if (editorName.includes("TinyMCE")) editorName = "TinyMCE"; // Remove version from Tinymce editor. - if (editorName.includes("Generic")) editorName = "Generic"; // Remove version from Generic editor. - let solutionTelemeter = editorName; - // If moodle, add information to hosts and solution. - let isMoodle = !!(typeof M === "object" && M !== null), - lms; - if (isMoodle) { - solutionTelemeter = "Moodle"; - lms = { - nam: "moodle", - fam: "lms", - ver: this.environment.moodleVersion, - category: this.environment.moodleCourseCategory, - course: this.environment.moodleCourseName, - }; - if (!editorName.includes("TinyMCE")) { - editorName = "Atto"; - } - } - // Get the OS and its version. - let OSData = this.getOS(); - // Get the broswer and its version. - let broswerData = this.getBrowser(); - // Create list of hosts to send to telemetry. - let hosts = [ - { - nam: broswerData.detectedBrowser, - fam: "browser", - ver: broswerData.versionBrowser, - }, - { - nam: editorName.toLowerCase(), - fam: "html-editor", - ver: this.environment.editorVersion, - }, - { - nam: OSData.detectedOS, - fam: "os", - ver: OSData.versionOS, - }, - { - nam: window.location.hostname, - fam: "domain", - }, - lms, - ]; - // Filter hosts to remove empty objects and empty keys. - hosts = hosts.filter(function (element) { - if (element) Object.keys(element).forEach((key) => (element[key] === "unknown" ? delete element[key] : {})); - return element !== undefined; - }); - // Initialize telemeter - Telemeter.init({ - solution: { - name: "MathType for " + solutionTelemeter, - version: this.version, - }, - hosts: hosts, - config: { - test: false, - debug: false, - dry_run: false, - api_key: "eda2ce9b-0e8a-46f2-acdd-c228a615314e", - }, - url: undefined, - }); - } - /** + // Check if language is an object and select the property necessary + this.language = this.getLanguage(); + // We need to wait until Core class is loaded ('onLoad' event) before + // call the callback method. + const listener = Listeners.newListener("onLoad", ()=>{ + this.callbackFunction(this.callbackMethodArguments); + }); + // Backwards compatibility. + if (this.serviceProviderProperties.URI.indexOf("configuration") !== -1) { + const uri = this.serviceProviderProperties.URI; + const server = ServiceProvider.getServerLanguageFromService(uri); + this.serviceProviderProperties.server = server; + const configurationIndex = this.serviceProviderProperties.URI.indexOf("configuration"); + const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex); + this.serviceProviderProperties.URI = subsTring; + } + let serviceParametersURI = this.serviceProviderProperties.URI; + serviceParametersURI = serviceParametersURI.indexOf("/") === 0 || serviceParametersURI.indexOf("http") === 0 ? serviceParametersURI : Util.concatenateUrl(this.getPath(), serviceParametersURI); + this.serviceProviderProperties.URI = serviceParametersURI; + const coreProperties = {}; + coreProperties.serviceProviderProperties = this.serviceProviderProperties; + this.setCore(new Core(coreProperties)); + this.core.addListener(listener); + this.core.language = this.language; + // Initializing Core class. + this.core.init(); + // TODO: Move to Core constructor. + this.core.setEnvironment(this.environment); + // No internet connection modal. + let attributes = {}; + attributes.class = attributes.id = "wrs_modal_offline"; + this.offlineModal = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_content_offline"; + this.offlineModalContent = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_offline_close"; + this.offlineModalClose = Util.createElement("span", attributes); + this.offlineModalClose.innerHTML = "×"; + attributes = {}; + attributes.class = "wrs_modal_offline_warn"; + this.offlineModalWarn = Util.createElement("span", attributes); + let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`; + this.offlineModalWarn.setAttribute("style", generalStyle); + attributes = {}; + attributes.class = "wrs_modal_offline_text_container"; + this.offlineModalMessage = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_offline_text_warn"; + this.offlineModalMessage1 = Util.createElement("p", attributes); + this.offlineModalMessage1.innerHTML = "You are not online!"; + attributes = {}; + attributes.class = "wrs_modal_offline_text"; + this.offlineModalMessage2 = Util.createElement("p", attributes); + this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`; + //Append offline modal elements + this.offlineModalContent.appendChild(this.offlineModalClose); + this.offlineModalMessage.appendChild(this.offlineModalMessage1); + this.offlineModalMessage.appendChild(this.offlineModalMessage2); + this.offlineModalContent.appendChild(this.offlineModalMessage); + this.offlineModalContent.appendChild(this.offlineModalWarn); + this.offlineModal.appendChild(this.offlineModalContent); + document.body.appendChild(this.offlineModal); + let modal = document.getElementById("wrs_modal_offline"); + this.offlineModalClose.addEventListener("click", function() { + modal.style.display = "none"; + }); + // Store editor name for telemetry purposes. + let editorName = this.environment.editor; + editorName = editorName.slice(0, -1); // Remove version number from editors + if (editorName.includes("TinyMCE")) editorName = "TinyMCE"; // Remove version from Tinymce editor. + if (editorName.includes("Generic")) editorName = "Generic"; // Remove version from Generic editor. + let solutionTelemeter = editorName; + // If moodle, add information to hosts and solution. + let isMoodle = !!(typeof M === "object" && M !== null), lms; + if (isMoodle) { + solutionTelemeter = "Moodle"; + lms = { + nam: "moodle", + fam: "lms", + ver: this.environment.moodleVersion, + category: this.environment.moodleCourseCategory, + course: this.environment.moodleCourseName + }; + if (!editorName.includes("TinyMCE")) { + editorName = "Atto"; + } + } + // Get the OS and its version. + let OSData = this.getOS(); + // Get the broswer and its version. + let broswerData = this.getBrowser(); + // Create list of hosts to send to telemetry. + let hosts = [ + { + nam: broswerData.detectedBrowser, + fam: "browser", + ver: broswerData.versionBrowser + }, + { + nam: editorName.toLowerCase(), + fam: "html-editor", + ver: this.environment.editorVersion + }, + { + nam: OSData.detectedOS, + fam: "os", + ver: OSData.versionOS + }, + { + nam: window.location.hostname, + fam: "domain" + }, + lms + ]; + // Filter hosts to remove empty objects and empty keys. + hosts = hosts.filter(function(element) { + if (element) Object.keys(element).forEach((key)=>element[key] === "unknown" ? delete element[key] : {}); + return element !== undefined; + }); + // Initialize telemeter + Telemeter.init({ + solution: { + name: "MathType for " + solutionTelemeter, + version: this.version + }, + hosts: hosts, + config: { + test: false, + debug: false, + dry_run: false, + api_key: "eda2ce9b-0e8a-46f2-acdd-c228a615314e" + }, + url: undefined + }); + } + /** * Returns the Browser name and its version. * @return {array} - detectedBrowser = Operating System name. * versionBrowser = Operating System version. */ getBrowser() { - // default value for OS just in case nothing is detected - let detectedBrowser = "unknown", - versionBrowser = "unknown"; - let userAgent = window.navigator.userAgent; - if (/Brave/.test(userAgent)) { - detectedBrowser = "brave"; - if (userAgent.indexOf("Brave/")) { - let start = userAgent.indexOf("Brave") + 6; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } - } else if (userAgent.indexOf("Edg/") !== -1) { - detectedBrowser = "edge_chromium"; - let start = userAgent.indexOf("Edg/") + 4; - versionBrowser = userAgent - .substring(start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Edg/.test(userAgent)) { - detectedBrowser = "edge"; - let start = userAgent.indexOf("Edg") + 3; - start = start + userAgent.substring(start).indexOf("/"); - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) { - detectedBrowser = "firefox"; - let start = userAgent.indexOf("Firefox"); - start = start === -1 ? userAgent.indexOf("FxiOS") : start; - start = start + userAgent.substring(start).indexOf("/") + 1; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent.substring(start, end + start).replace("_", "."); - } else if (/OPR/.test(userAgent)) { - detectedBrowser = "opera"; - let start = userAgent.indexOf("OPR/") + 4; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) { - detectedBrowser = "chrome"; - let start = userAgent.indexOf("Chrome"); - start = start === -1 ? userAgent.indexOf("CriOS") : start; - start = start + userAgent.substring(start).indexOf("/") + 1; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent.substring(start, end + start).replace("_", "."); - } else if (/Safari/.test(userAgent)) { - detectedBrowser = "safari"; - let start = userAgent.indexOf("Version/"); - start = start + userAgent.substring(start).indexOf("/") + 1; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + // default value for OS just in case nothing is detected + let detectedBrowser = "unknown", versionBrowser = "unknown"; + let userAgent = window.navigator.userAgent; + if (/Brave/.test(userAgent)) { + detectedBrowser = "brave"; + if (userAgent.indexOf("Brave/")) { + let start = userAgent.indexOf("Brave") + 6; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } + } else if (userAgent.indexOf("Edg/") !== -1) { + detectedBrowser = "edge_chromium"; + let start = userAgent.indexOf("Edg/") + 4; + versionBrowser = userAgent.substring(start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Edg/.test(userAgent)) { + detectedBrowser = "edge"; + let start = userAgent.indexOf("Edg") + 3; + start = start + userAgent.substring(start).indexOf("/"); + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) { + detectedBrowser = "firefox"; + let start = userAgent.indexOf("Firefox"); + start = start === -1 ? userAgent.indexOf("FxiOS") : start; + start = start + userAgent.substring(start).indexOf("/") + 1; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + } else if (/OPR/.test(userAgent)) { + detectedBrowser = "opera"; + let start = userAgent.indexOf("OPR/") + 4; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) { + detectedBrowser = "chrome"; + let start = userAgent.indexOf("Chrome"); + start = start === -1 ? userAgent.indexOf("CriOS") : start; + start = start + userAgent.substring(start).indexOf("/") + 1; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + } else if (/Safari/.test(userAgent)) { + detectedBrowser = "safari"; + let start = userAgent.indexOf("Version/"); + start = start + userAgent.substring(start).indexOf("/") + 1; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + } + return { + detectedBrowser, + versionBrowser + }; } - return { - detectedBrowser, - versionBrowser, - }; - } - /** + /** * Returns the operating system and its version. * @return {array} - detectedOS = Operating System name. * versionOS = Operating System version. */ getOS() { - // default value for OS just in case nothing is detected - let detectedOS = "unknown", - versionOS = "unknown"; - // Retrieve properties to easily detect the OS - let userAgent = window.navigator.userAgent, - platform = window.navigator.platform, - macosPlatforms = ["Macintosh", "MacIntel", "MacPPC", "Mac68K"], - windowsPlatforms = ["Win32", "Win64", "Windows", "WinCE"], - iosPlatforms = ["iPhone", "iPad", "iPod"]; - // Find OS and their respective versions - if (macosPlatforms.indexOf(platform) !== -1) { - detectedOS = "macos"; - if (userAgent.indexOf("OS X") !== -1) { - let start = userAgent.indexOf("OS X") + 5; - let end = userAgent.substring(start).indexOf(" "); - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } - } else if (iosPlatforms.indexOf(platform) !== -1) { - detectedOS = "ios"; - if (userAgent.indexOf("OS ") !== -1) { - let start = userAgent.indexOf("OS ") + 3; - let end = userAgent.substring(start).indexOf(")"); - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } - } else if (windowsPlatforms.indexOf(platform) !== -1) { - detectedOS = "windows"; - let start = userAgent.indexOf("Windows"); - let end = userAgent.substring(start).indexOf(";"); - if (end === -1) { - end = userAgent.substring(start).indexOf(")"); - } - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Android/.test(userAgent)) { - detectedOS = "android"; - let start = userAgent.indexOf("Android"); - let end = userAgent.substring(start).indexOf(";"); - if (end === -1) { - end = userAgent.substring(start).indexOf(")"); - } - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/CrOS/.test(userAgent)) { - detectedOS = "chromeos"; - let start = userAgent.indexOf("CrOS ") + 5; - start = start + userAgent.substring(start).indexOf(" "); - let end = userAgent.substring(start).indexOf(")"); - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (detectedOS === "unknown" && /Linux/.test(platform)) { - detectedOS = "linux"; + // default value for OS just in case nothing is detected + let detectedOS = "unknown", versionOS = "unknown"; + // Retrieve properties to easily detect the OS + let userAgent = window.navigator.userAgent, platform = window.navigator.platform, macosPlatforms = [ + "Macintosh", + "MacIntel", + "MacPPC", + "Mac68K" + ], windowsPlatforms = [ + "Win32", + "Win64", + "Windows", + "WinCE" + ], iosPlatforms = [ + "iPhone", + "iPad", + "iPod" + ]; + // Find OS and their respective versions + if (macosPlatforms.indexOf(platform) !== -1) { + detectedOS = "macos"; + if (userAgent.indexOf("OS X") !== -1) { + let start = userAgent.indexOf("OS X") + 5; + let end = userAgent.substring(start).indexOf(" "); + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } + } else if (iosPlatforms.indexOf(platform) !== -1) { + detectedOS = "ios"; + if (userAgent.indexOf("OS ") !== -1) { + let start = userAgent.indexOf("OS ") + 3; + let end = userAgent.substring(start).indexOf(")"); + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } + } else if (windowsPlatforms.indexOf(platform) !== -1) { + detectedOS = "windows"; + let start = userAgent.indexOf("Windows"); + let end = userAgent.substring(start).indexOf(";"); + if (end === -1) { + end = userAgent.substring(start).indexOf(")"); + } + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Android/.test(userAgent)) { + detectedOS = "android"; + let start = userAgent.indexOf("Android"); + let end = userAgent.substring(start).indexOf(";"); + if (end === -1) { + end = userAgent.substring(start).indexOf(")"); + } + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/CrOS/.test(userAgent)) { + detectedOS = "chromeos"; + let start = userAgent.indexOf("CrOS ") + 5; + start = start + userAgent.substring(start).indexOf(" "); + let end = userAgent.substring(start).indexOf(")"); + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (detectedOS === "unknown" && /Linux/.test(platform)) { + detectedOS = "linux"; + } + return { + detectedOS, + versionOS + }; } - return { - detectedOS, - versionOS, - }; - } - /** + /** * Returns the absolute path of the integration script. * @return {string} - Absolute path for the integration script. */ getPath() { - if (typeof this.scriptName === "undefined") { - throw new Error("scriptName property needed for getPath."); - } - const col = document.getElementsByTagName("script"); - let path = ""; - for (let i = 0; i < col.length; i += 1) { - const j = col[i].src.lastIndexOf(this.scriptName); - if (j >= 0) { - path = col[i].src.substr(0, j - 1); - } - } - return path; - } - /** + if (typeof this.scriptName === "undefined") { + throw new Error("scriptName property needed for getPath."); + } + const col = document.getElementsByTagName("script"); + let path = ""; + for(let i = 0; i < col.length; i += 1){ + const j = col[i].src.lastIndexOf(this.scriptName); + if (j >= 0) { + path = col[i].src.substr(0, j - 1); + } + } + return path; + } + /** * Returns integration model plugin version * @param {string} - Plugin version */ getVersion() { - return this.version; - } - /** + return this.version; + } + /** * Sets the language property. * @param {string} language - language code. */ setLanguage(language) { - this.language = language; - } - /** + this.language = language; + } + /** * Sets a Core instance. * @param {Core} core - instance of Core class. */ setCore(core) { - this.core = core; - core.setIntegrationModel(this); - } - /** + this.core = core; + core.setIntegrationModel(this); + } + /** * Returns the Core instance. * @returns {Core} instance of Core class. */ getCore() { - return this.core; - } - /** + return this.core; + } + /** * Sets the object target and updates the iframe property. * @param {HTMLElement} target - target object. */ setTarget(target) { - this.target = target; - this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; - } - /** + this.target = target; + this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; + } + /** * Sets the editor object. * @param {Object} editorObject - The editor object. */ setEditorObject(editorObject) { - this.editorObject = editorObject; - } - /** + this.editorObject = editorObject; + } + /** * Opens formula editor to editing a new formula. Can be overwritten in order to make some * actions from integration part before the formula is edited. */ openNewFormulaEditor() { - if (window.navigator.onLine) { - this.core.editionProperties.dbclick = false; - this.core.editionProperties.isNewElement = true; - this.core.openModalDialog(this.target, this.isIframe); - } else { - let modal = document.getElementById("wrs_modal_offline"); - modal.style.display = "block"; + if (window.navigator.onLine) { + this.core.editionProperties.dbclick = false; + this.core.editionProperties.isNewElement = true; + this.core.openModalDialog(this.target, this.isIframe); + } else { + let modal = document.getElementById("wrs_modal_offline"); + modal.style.display = "block"; + } } - } - /** + /** * Opens formula editor to editing an existing formula. Can be overwritten in order to make some * actions from integration part before the formula is edited. */ openExistingFormulaEditor() { - if (window.navigator.onLine) { - this.core.editionProperties.isNewElement = false; - this.core.openModalDialog(this.target, this.isIframe); - } else { - let modal = document.getElementById("wrs_modal_offline"); - modal.style.display = "block"; + if (window.navigator.onLine) { + this.core.editionProperties.isNewElement = false; + this.core.openModalDialog(this.target, this.isIframe); + } else { + let modal = document.getElementById("wrs_modal_offline"); + modal.style.display = "block"; + } } - } - /** + /** * Wrapper to Core.updateFormula method. * Transform a MathML into a image formula. * Then the image formula is inserted in the specified target, creating a new image (new formula) @@ -10434,34 +10194,30 @@ var warnIcon = * @param {string} mathml - MathML to generate the formula. * @param {string} editMode - Edit Mode (LaTeX or images). */ updateFormula(mathml) { - if (this.editorParameters) { - mathml = com.wiris.editor.util.EditorUtils.addAnnotation( - mathml, - "application/vnd.wiris.mtweb-params+json", - JSON.stringify(this.editorParameters), - ); - } - let focusElement; - let windowTarget; - const wirisProperties = null; - if (this.isIframe) { - focusElement = this.target.contentWindow; - windowTarget = this.target.contentWindow; - } else { - focusElement = this.target; - windowTarget = window; - } - let obj = this.core.beforeUpdateFormula(mathml, wirisProperties); - if (!obj) { - return ""; - } - obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties); - if (!obj) { - return ""; + if (this.editorParameters) { + mathml = com.wiris.editor.util.EditorUtils.addAnnotation(mathml, "application/vnd.wiris.mtweb-params+json", JSON.stringify(this.editorParameters)); + } + let focusElement; + let windowTarget; + const wirisProperties = null; + if (this.isIframe) { + focusElement = this.target.contentWindow; + windowTarget = this.target.contentWindow; + } else { + focusElement = this.target; + windowTarget = window; + } + let obj = this.core.beforeUpdateFormula(mathml, wirisProperties); + if (!obj) { + return ""; + } + obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties); + if (!obj) { + return ""; + } + return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex); } - return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex); - } - /** + /** * Wrapper to Core.insertFormula method. * Inserts the formula in the specified target, creating * a new image (new formula) or updating an existing one. @@ -10469,23 +10225,23 @@ var warnIcon = * @param {string} editMode - Edit Mode (LaTeX or images). * @returns {ReturnObject} - Object with the information of the node or latex to insert. */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties); - // Delete temporal image when inserted - this.core.editionProperties.temporalImage = null; - return obj; - } - /** + const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties); + // Delete temporal image when inserted + this.core.editionProperties.temporalImage = null; + return obj; + } + /** * Returns the target selection. * @returns {Selection} target selection. */ getSelection() { - if (this.isIframe) { - this.target.contentWindow.focus(); - return this.target.contentWindow.getSelection(); - } - this.target.focus(); - return window.getSelection(); - } - /** + if (this.isIframe) { + this.target.contentWindow.focus(); + return this.target.contentWindow.getSelection(); + } + this.target.focus(); + return window.getSelection(); + } + /** * Add events to formulas in the DOM target. The events added are the following: * - doubleClickHandler: handles Double-click event on formulas by opening an editor * to edit them. @@ -10494,130 +10250,124 @@ var warnIcon = * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size * in case the formula is resized. */ addEvents() { - const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target; - Util.addElementEvents( - eventTarget, - (element, event) => { - this.doubleClickHandler(element, event); - // Avoid creating the double click listener more than once for each element. - event.stopImmediatePropagation(); - }, - (element, event) => { - this.mousedownHandler(element, event); - }, - (element, event) => { - this.mouseupHandler(element, event); - }, - ); - } - /** + const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target; + Util.addElementEvents(eventTarget, (element, event)=>{ + this.doubleClickHandler(element, event); + // Avoid creating the double click listener more than once for each element. + event.stopImmediatePropagation(); + }, (element, event)=>{ + this.mousedownHandler(element, event); + }, (element, event)=>{ + this.mouseupHandler(element, event); + }); + } + /** * Remove events to formulas in the DOM target. */ removeEvents() { - const eventTarget = - this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target; - if (!eventTarget) { - return; - } - Util.removeElementEvents(eventTarget); - } - /** + const eventTarget = this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target; + if (!eventTarget) { + return; + } + Util.removeElementEvents(eventTarget); + } + /** * Remove events, modals and set this.editorObject to null in order to prevent memory leaks. */ destroy() { - this.removeEvents(); - // Destroy modal dialog if exists. - if (this.core.modalDialog) { - this.core.modalDialog.destroy(); - } - // Remove offline modal dialog if exists. - if (this.offlineModal) { - this.offlineModal.remove(); - } - this.editorObject = null; - } - /** + this.removeEvents(); + // Destroy modal dialog if exists. + if (this.core.modalDialog) { + this.core.modalDialog.destroy(); + } + // Remove offline modal dialog if exists. + if (this.offlineModal) { + this.offlineModal.remove(); + } + this.editorObject = null; + } + /** * Handles a Double-click on the target element. Opens an editor * to re-edit the double-clicked formula. * @param {HTMLElement} element - DOM object target. */ doubleClickHandler(element) { - this.core.editionProperties.dbclick = true; - if (element.nodeName.toLowerCase() === "img") { - this.core.getCustomEditors().disable(); - const customEditorAttributeName = Configuration.get("imageCustomEditorName"); - if (element.hasAttribute(customEditorAttributeName)) { - const customEditor = element.getAttribute(customEditorAttributeName); - this.core.getCustomEditors().enable(customEditor); - } - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - this.core.editionProperties.temporalImage = element; - this.core.editionProperties.isNewElement = true; - this.openExistingFormulaEditor(); - } - } - } - /** + this.core.editionProperties.dbclick = true; + if (element.nodeName.toLowerCase() === "img") { + this.core.getCustomEditors().disable(); + const customEditorAttributeName = Configuration.get("imageCustomEditorName"); + if (element.hasAttribute(customEditorAttributeName)) { + const customEditor = element.getAttribute(customEditorAttributeName); + this.core.getCustomEditors().enable(customEditor); + } + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + this.core.editionProperties.temporalImage = element; + this.core.editionProperties.isNewElement = true; + this.openExistingFormulaEditor(); + } + } + } + /** * Handles a mouse up event on the target element. Restores the image size to avoid * resizing formulas. */ mouseupHandler() { - if (this.temporalImageResizing) { - setTimeout(() => { - Image.fixAfterResize(this.temporalImageResizing); - }, 10); + if (this.temporalImageResizing) { + setTimeout(()=>{ + Image.fixAfterResize(this.temporalImageResizing); + }, 10); + } } - } - /** + /** * Handles a mouse down event on the target element. Saves the formula size to avoid * resizing formulas. * @param {HTMLElement} element - target element. */ mousedownHandler(element) { - if (element.nodeName.toLowerCase() === "img") { - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - this.temporalImageResizing = element; - } + if (element.nodeName.toLowerCase() === "img") { + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + this.temporalImageResizing = element; + } + } } - } - /** + /** * Returns the integration language. By default the browser agent. This method * should be overwritten to obtain the integration language, for example using the * plugin API of an HTML editor. * @returns {string} integration language. */ getLanguage() { - return this.getBrowserLanguage(); - } - /** + return this.getBrowserLanguage(); + } + /** * Returns the browser language. * @returns {string} the browser language. */ // eslint-disable-next-line class-methods-use-this - getBrowserLanguage() { - let language = "en"; - if (navigator.userLanguage) { - language = navigator.userLanguage.substring(0, 2); - } else if (navigator.language) { - language = navigator.language.substring(0, 2); - } else { - language = "en"; + getBrowserLanguage() { + let language = "en"; + if (navigator.userLanguage) { + language = navigator.userLanguage.substring(0, 2); + } else if (navigator.language) { + language = navigator.language.substring(0, 2); + } else { + language = "en"; + } + return language; } - return language; - } - /** + /** * This function is called once the {@link Core} is loaded. IntegrationModel class * will fire this method when {@link Core} 'onLoad' event is fired. * This method should content all the logic to init * the integration. */ callbackFunction() { - // It's needed to wait until the integration target is ready. The event is fired - // from the integration side. - const listener = Listeners.newListener("onTargetReady", () => { - this.addEvents(this.target); - }); - this.listeners.add(listener); - } - /** + // It's needed to wait until the integration target is ready. The event is fired + // from the integration side. + const listener = Listeners.newListener("onTargetReady", ()=>{ + this.addEvents(this.target); + }); + this.listeners.add(listener); + } + /** * Function called when the content submits an action. */ // eslint-disable-next-line class-methods-use-this - notifyWindowClosed() { + notifyWindowClosed() { // Nothing. - } - /** + } + /** * Wrapper. * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js * in order to get mathml from a text node that can contain normal LaTeX or other chosen text. @@ -10625,41 +10375,41 @@ var warnIcon = * @param {int} caretPosition - caret position inside the text node. * @returns {string} MathML inside the text node. */ // eslint-disable-next-line class-methods-use-this, no-unused-vars - getMathmlFromTextNode(textNode, caretPosition) {} - /** + getMathmlFromTextNode(textNode, caretPosition) {} + /** * Wrapper * It fills wrs event object of nonLatex with the desired data. * @param {Object} event - event object. * @param {Object} window dom window object. * @param {string} mathml valid mathml. */ // eslint-disable-next-line class-methods-use-this, no-unused-vars - fillNonLatexNode(event, window1, mathml) {} - /** + fillNonLatexNode(event, window1, mathml) {} + /** Wrapper. * Returns selected item from the target. * @param {HTMLElement} target - target element * @param {boolean} iframe */ // eslint-disable-next-line class-methods-use-this, no-unused-vars - getSelectedItem(target, isIframe) {} - // Set temporal image to null and make focus come back. - static setActionsOnCancelButtons() { - // Make focus come back on the previous place it was when click cancel button - const currentInstance = WirisPlugin.currentInstance; - const editorSelection = currentInstance.getSelection(); - editorSelection.removeAllRanges(); - if (currentInstance.core.editionProperties.range) { - const { range } = currentInstance.core.editionProperties; - currentInstance.core.editionProperties.range = null; - editorSelection.addRange(range); - if (range.startOffset !== range.endOffset) { - currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage); - } - } - // eslint-disable-next-line no-undef - if (WirisPlugin.currentInstance) { - WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line - } - } + getSelectedItem(target, isIframe) {} + // Set temporal image to null and make focus come back. + static setActionsOnCancelButtons() { + // Make focus come back on the previous place it was when click cancel button + const currentInstance = WirisPlugin.currentInstance; + const editorSelection = currentInstance.getSelection(); + editorSelection.removeAllRanges(); + if (currentInstance.core.editionProperties.range) { + const { range } = currentInstance.core.editionProperties; + currentInstance.core.editionProperties.range = null; + editorSelection.addRange(range); + if (range.startOffset !== range.endOffset) { + currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage); + } + } + // eslint-disable-next-line no-undef + if (WirisPlugin.currentInstance) { + WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line + } + } } // To know if the integration that extends this class implements // wrapper methods, they are set as undefined. @@ -10669,50 +10419,53 @@ IntegrationModel.prototype.getSelectedItem = undefined; /** * An object containing a list with the overwritable class constructor properties. * @type {Object} - */ IntegrationModel.integrationParameters = ["serviceProviderProperties", "editorParameters"]; + */ IntegrationModel.integrationParameters = [ + "serviceProviderProperties", + "editorParameters" +]; /** * This class represents the MathType integration for CKEditor5. * @extends {IntegrationModel} */ class CKEditor5Integration extends IntegrationModel { - constructor(ckeditorIntegrationModelProperties) { - const editor = ckeditorIntegrationModelProperties.editorObject; - if (typeof editor.config !== "undefined" && typeof editor.config.get("mathTypeParameters") !== "undefined") { - ckeditorIntegrationModelProperties.integrationParameters = editor.config.get("mathTypeParameters"); - } - /** + constructor(ckeditorIntegrationModelProperties){ + const editor = ckeditorIntegrationModelProperties.editorObject; + if (typeof editor.config !== "undefined" && typeof editor.config.get("mathTypeParameters") !== "undefined") { + ckeditorIntegrationModelProperties.integrationParameters = editor.config.get("mathTypeParameters"); + } + /** * CKEditor5 Integration. * * @param {integrationModelProperties} integrationModelAttributes */ super(ckeditorIntegrationModelProperties); - /** + /** * Folder name used for the integration inside CKEditor plugins folder. */ this.integrationFolderName = "ckeditor_wiris"; - } - /** + } + /** * @inheritdoc * @returns {string} - The CKEditor instance language. * @override */ getLanguage() { - // Returns the CKEDitor instance language taking into account that the language can be an object. - // Try to get editorParameters.language, fail silently otherwise - try { - return this.editorParameters.language; - } catch (e) {} - const languageObject = this.editorObject.config.get("language"); - if (languageObject != null) { - if (typeof languageObject === "object") { - // eslint-disable-next-line no-prototype-builtins - if (languageObject.hasOwnProperty("ui")) { - return languageObject.ui; + // Returns the CKEDitor instance language taking into account that the language can be an object. + // Try to get editorParameters.language, fail silently otherwise + try { + return this.editorParameters.language; + } catch (e) {} + const languageObject = this.editorObject.config.get("language"); + if (languageObject != null) { + if (typeof languageObject === "object") { + // eslint-disable-next-line no-prototype-builtins + if (languageObject.hasOwnProperty("ui")) { + return languageObject.ui; + } + return languageObject; + } + return languageObject; } - return languageObject; - } - return languageObject; + return super.getLanguage(); } - return super.getLanguage(); - } - /** + /** * Adds callbacks to the following CKEditor listeners: * - 'focus' - updates the current instance. * - 'contentDom' - adds 'doubleclick' callback. @@ -10722,761 +10475,740 @@ IntegrationModel.prototype.getSelectedItem = undefined; * - 'getData' - parses the data converting images into selected save mode (MathML by default). * - 'mode' - recalculates the active element. */ addEditorListeners() { - const editor = this.editorObject; - if (typeof editor.config.wirislistenersdisabled === "undefined" || !editor.config.wirislistenersdisabled) { - this.checkElement(); + const editor = this.editorObject; + if (typeof editor.config.wirislistenersdisabled === "undefined" || !editor.config.wirislistenersdisabled) { + this.checkElement(); + } } - } - /** + /** * Checks the current container and assign events in case that it doesn't have them. * CKEditor replaces several times the element element during its execution, * so we must assign the events again to editor element. */ checkElement() { - const editor = this.editorObject; - const newElement = editor.sourceElement; - // If the element wasn't treated, add the events. - if (!newElement.wirisActive) { - this.setTarget(newElement); - this.addEvents(); - // Set the element as treated - newElement.wirisActive = true; - } - } - /** + const editor = this.editorObject; + const newElement = editor.sourceElement; + // If the element wasn't treated, add the events. + if (!newElement.wirisActive) { + this.setTarget(newElement); + this.addEvents(); + // Set the element as treated + newElement.wirisActive = true; + } + } + /** * @inheritdoc * @param {HTMLElement} element - HTMLElement target. * @param {MouseEvent} event - event which trigger the handler. */ doubleClickHandler(element, event) { - this.core.editionProperties.dbclick = true; - if (this.editorObject.isReadOnly === false) { - if (element.nodeName.toLowerCase() === "img") { - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - // Some plugins (image2, image) open a dialog on Double-click. On formulas - // doubleclick event ends here. - if (typeof event.stopPropagation !== "undefined") { - // old I.E compatibility. - event.stopPropagation(); - } else { - event.returnValue = false; - } - this.core.getCustomEditors().disable(); - const customEditorAttr = element.getAttribute(Configuration.get("imageCustomEditorName")); - if (customEditorAttr) { - this.core.getCustomEditors().enable(customEditorAttr); - } - this.core.editionProperties.temporalImage = element; - this.openExistingFormulaEditor(); - } - } - } - } - /** @inheritdoc */ static getCorePath() { - return null; // TODO - } - /** @inheritdoc */ callbackFunction() { - super.callbackFunction(); - this.addEditorListeners(); - } - openNewFormulaEditor() { - // Store the editor selection as it will be lost upon opening the modal - this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; - return super.openNewFormulaEditor(); - } - /** + this.core.editionProperties.dbclick = true; + if (this.editorObject.isReadOnly === false) { + if (element.nodeName.toLowerCase() === "img") { + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + // Some plugins (image2, image) open a dialog on Double-click. On formulas + // doubleclick event ends here. + if (typeof event.stopPropagation !== "undefined") { + // old I.E compatibility. + event.stopPropagation(); + } else { + event.returnValue = false; + } + this.core.getCustomEditors().disable(); + const customEditorAttr = element.getAttribute(Configuration.get("imageCustomEditorName")); + if (customEditorAttr) { + this.core.getCustomEditors().enable(customEditorAttr); + } + this.core.editionProperties.temporalImage = element; + this.openExistingFormulaEditor(); + } + } + } + } + /** @inheritdoc */ static getCorePath() { + return null; // TODO + } + /** @inheritdoc */ callbackFunction() { + super.callbackFunction(); + this.addEditorListeners(); + } + openNewFormulaEditor() { + // Store the editor selection as it will be lost upon opening the modal + this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; + // Focus on the selected editor when multiple editor instances are present + WirisPlugin.currentInstance = this; + return super.openNewFormulaEditor(); + } + /** * Replaces old formula with new MathML or inserts it in caret position if new * @param {String} mathml MathML to update old one or insert * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image */ insertMathml(mathml) { - // This returns the value returned by the callback function (writer => {...}) - return this.editorObject.model.change((writer) => { - const core = this.getCore(); - const selection = this.editorObject.model.document.selection; - const modelElementNew = writer.createElement("mathml", { - formula: mathml, - ...Object.fromEntries(selection.getAttributes()), - }); - // Obtain the DOM object corresponding to the formula - if (core.editionProperties.isNewElement) { - // Don't bother inserting anything at all if the MathML is empty. - if (!mathml) return; - const viewSelection = - this.core.editionProperties.selection || this.editorObject.editing.view.document.selection; - const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition()); - this.editorObject.model.insertObject(modelElementNew, modelPosition); - // Remove selection - if (!viewSelection.isCollapsed) { - for (const range of viewSelection.getRanges()) { - writer.remove(this.editorObject.editing.mapper.toModelRange(range)); - } - } - // Set carret after the formula - const position = this.editorObject.model.createPositionAfter(modelElementNew); - writer.setSelection(position); - } else { - const img = core.editionProperties.temporalImage; - const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent; - const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement); - // Insert the new and remove the old one - const position = this.editorObject.model.createPositionBefore(modelElementOld); - // If the given MathML is empty, don't insert a new formula. - if (mathml) { - this.editorObject.model.insertObject(modelElementNew, position); - } - writer.remove(modelElementOld); - } - // eslint-disable-next-line consistent-return - return modelElementNew; - }); - } - /** + // This returns the value returned by the callback function (writer => {...}) + return this.editorObject.model.change((writer)=>{ + const core = this.getCore(); + const selection = this.editorObject.model.document.selection; + const modelElementNew = writer.createElement("mathml", { + formula: mathml, + ...Object.fromEntries(selection.getAttributes()) + }); + // Obtain the DOM object corresponding to the formula + if (core.editionProperties.isNewElement) { + // Don't bother inserting anything at all if the MathML is empty. + if (!mathml) return; + const viewSelection = this.core.editionProperties.selection || this.editorObject.editing.view.document.selection; + const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition()); + this.editorObject.model.insertObject(modelElementNew, modelPosition); + // Remove selection + if (!viewSelection.isCollapsed) { + for (const range of viewSelection.getRanges()){ + writer.remove(this.editorObject.editing.mapper.toModelRange(range)); + } + } + // Set carret after the formula + const position = this.editorObject.model.createPositionAfter(modelElementNew); + writer.setSelection(position); + } else { + const img = core.editionProperties.temporalImage; + const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent; + const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement); + // Insert the new and remove the old one + const position = this.editorObject.model.createPositionBefore(modelElementOld); + // If the given MathML is empty, don't insert a new formula. + if (mathml) { + this.editorObject.model.insertObject(modelElementNew, position); + } + writer.remove(modelElementOld); + } + // eslint-disable-next-line consistent-return + return modelElementNew; + }); + } + /** * Finds the text node corresponding to given DOM text element. * @param {element} viewElement Element to find corresponding text node of. * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist. */ findText(viewElement) { - // eslint-disable-line consistent-return - // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down - let pivot = viewElement; - let element; - while (!element) { - element = this.editorObject.editing.mapper.toModelElement( - this.editorObject.editing.view.domConverter.domToView(pivot), - ); - pivot = pivot.parentElement; - } - // Navigate through all the subtree under `pivot` in order to find the correct text node - const range = this.editorObject.model.createRangeIn(element); - const descendants = Array.from(range.getItems()); - for (const node of descendants) { - let viewElementData = viewElement.data; - if (viewElement.nodeType === 3) { - // Remove invisible white spaces - viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), ""); - } - if (node.is("textProxy") && node.data === viewElementData.replace(String.fromCharCode(160), " ")) { - return node.textNode; - } - } - } - /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - // eslint-disable-line no-unused-vars - const returnObject = {}; - let mathmlOrigin; - if (!mathml) { - this.insertMathml(""); - } else if (this.core.editMode === "latex") { - returnObject.latex = Latex.getLatexFromMathML(mathml); - returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); - this.editorObject.model.change((writer) => { - const { latexRange } = this.core.editionProperties; - const startNode = this.findText(latexRange.startContainer); - const endNode = this.findText(latexRange.endContainer); - let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset); - let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset); - let range = writer.createRange(startPosition, endPosition); - // When Latex is next to image/formula. - if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) { - // Get the position of the latex to be replaced. - let latexEdited = - "$$" + - Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + - "$$"; - let data = latexRange.startContainer.data; - // Remove invisible characters. - data = data.replaceAll(String.fromCharCode(8288), ""); - // Get to the start of the latex we are editing. - let offset = data.indexOf(latexEdited); - let dataOffset = data.substring(offset); - let second$ = dataOffset.substring(2).indexOf("$$") + 4; - let substring = dataOffset.substr(0, second$); - data = data.replace(substring, ""); - if (!data) { - startPosition = writer.createPositionBefore(startNode); - range = startNode; - } else { - startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset); - endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset); - range = writer.createRange(startPosition, endPosition); - } - } - writer.remove(range); - writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition); - }); - } else { - mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml; - try { - returnObject.node = this.editorObject.editing.view.domConverter.viewToDom( - this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), - windowTarget.document, - ); - } catch (e) { - const x = e.toString(); - if (x.includes("CKEditorError: Cannot read property 'parent' of undefined")) { - this.core.modalDialog.cancelAction(); - } - } - } - // Build the telemeter payload separated to delete null/undefined entries. - let payload = { - mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, - mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, - elapsed_time: Date.now() - this.core.editionProperties.editionStartTime, - editor_origin: null, - toolbar: this.core.modalDialog.contentManager.toolbar, - size: mathml?.length, - }; - // Remove desired null keys. - Object.keys(payload).forEach((key) => { - if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; - }); - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("INSERTED_FORMULA", { - ...payload, - }); - } catch (error) { - console.error("Error tracking INSERTED_FORMULA", error); + // eslint-disable-line consistent-return + // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down + let pivot = viewElement; + let element; + while(!element){ + element = this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(pivot)); + pivot = pivot.parentElement; + } + // Navigate through all the subtree under `pivot` in order to find the correct text node + const range = this.editorObject.model.createRangeIn(element); + const descendants = Array.from(range.getItems()); + for (const node of descendants){ + let viewElementData = viewElement.data; + if (viewElement.nodeType === 3) { + // Remove invisible white spaces + viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), ""); + } + if (node.is("textProxy") && node.data === viewElementData.replace(String.fromCharCode(160), " ")) { + return node.textNode; + } + } } - /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula. + /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { + // eslint-disable-line no-unused-vars + const returnObject = {}; + let mathmlOrigin; + if (!mathml) { + this.insertMathml(""); + } else if (this.core.editMode === "latex") { + returnObject.latex = Latex.getLatexFromMathML(mathml); + returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); + this.editorObject.model.change((writer)=>{ + const { latexRange } = this.core.editionProperties; + const startNode = this.findText(latexRange.startContainer); + const endNode = this.findText(latexRange.endContainer); + let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset); + let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset); + let range = writer.createRange(startPosition, endPosition); + // When Latex is next to image/formula. + if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) { + // Get the position of the latex to be replaced. + let latexEdited = "$$" + Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + "$$"; + let data = latexRange.startContainer.data; + // Remove invisible characters. + data = data.replaceAll(String.fromCharCode(8288), ""); + // Get to the start of the latex we are editing. + let offset = data.indexOf(latexEdited); + let dataOffset = data.substring(offset); + let second$ = dataOffset.substring(2).indexOf("$$") + 4; + let substring = dataOffset.substr(0, second$); + data = data.replace(substring, ""); + if (!data) { + startPosition = writer.createPositionBefore(startNode); + range = startNode; + } else { + startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset); + endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset); + range = writer.createRange(startPosition, endPosition); + } + } + writer.remove(range); + writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition); + }); + } else { + mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml; + try { + returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), windowTarget.document); + } catch (e) { + const x = e.toString(); + if (x.includes("CKEditorError: Cannot read property 'parent' of undefined")) { + this.core.modalDialog.cancelAction(); + } + } + } + // Build the telemeter payload separated to delete null/undefined entries. + let payload = { + mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, + mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, + elapsed_time: Date.now() - this.core.editionProperties.editionStartTime, + editor_origin: null, + toolbar: this.core.modalDialog.contentManager.toolbar, + size: mathml?.length + }; + // Remove desired null keys. + Object.keys(payload).forEach((key)=>{ + if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; + }); + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("INSERTED_FORMULA", { + ...payload + }); + } catch (error) { + console.error("Error tracking INSERTED_FORMULA", error); + } + /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula. We probably should add it here as well, but we should look further into how */ // this.editorObject.fire('change'); - // Remove temporal image of inserted formula - this.core.editionProperties.temporalImage = null; - return returnObject; - } - /** + // Remove temporal image of inserted formula + this.core.editionProperties.temporalImage = null; + return returnObject; + } + /** * Function called when the content submits an action. */ notifyWindowClosed() { - this.editorObject.editing.view.focus(); - } + this.editorObject.editing.view.focus(); + } } /** * Command for opening the MathType editor */ class MathTypeCommand extends Command { - execute(options = {}) { - // Check we get a valid integration - // eslint-disable-next-line no-prototype-builtins - if (!options.hasOwnProperty("integration") || !(options.integration instanceof CKEditor5Integration)) { - throw 'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'; - } - // Save the integration instance as a property of the command. - this.integration = options.integration; - // Set custom editor or disable it - this.setEditor(); - // Open the editor - this.openEditor(); - } - /** + execute(options = {}) { + // Check we get a valid integration + // eslint-disable-next-line no-prototype-builtins + if (!options.hasOwnProperty("integration") || !(options.integration instanceof CKEditor5Integration)) { + throw 'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'; + } + // Save the integration instance as a property of the command. + this.integration = options.integration; + // Set custom editor or disable it + this.setEditor(); + // Open the editor + this.openEditor(); + } + /** * Sets the appropriate custom editor, if any, or disables them. */ setEditor() { - // It's possible that a custom editor was last used. - // We need to disable it to avoid wrong behaviors. - this.integration.core.getCustomEditors().disable(); - } - /** + // It's possible that a custom editor was last used. + // We need to disable it to avoid wrong behaviors. + this.integration.core.getCustomEditors().disable(); + } + /** * Checks whether we are editing an existing formula or a new one and opens the editor. */ openEditor() { - this.integration.core.editionProperties.dbclick = false; - const image = this._getSelectedImage(); - if ( - typeof image !== "undefined" && - image !== null && - image.classList.contains(WirisPlugin.Configuration.get("imageClassName")) - ) { - this.integration.core.editionProperties.temporalImage = image; - this.integration.openExistingFormulaEditor(); - } else { - this.integration.openNewFormulaEditor(); + this.integration.core.editionProperties.dbclick = false; + const image = this._getSelectedImage(); + if (typeof image !== "undefined" && image !== null && image.classList.contains(WirisPlugin.Configuration.get("imageClassName"))) { + this.integration.core.editionProperties.temporalImage = image; + this.integration.openExistingFormulaEditor(); + } else { + this.integration.openNewFormulaEditor(); + } } - } - /** + /** * Gets the currently selected formula image * @returns {Element} selected image, if any, undefined otherwise */ _getSelectedImage() { - const { selection } = this.editor.editing.view.document; - // If we can not extract the formula, fall back to default behavior. - if (selection.isCollapsed || selection.rangeCount !== 1) { - return; - } - // Look for the wrapping the formula and then for the inside - const range = selection.getFirstRange(); - let image; - for (const span of range) { - if (span.item.name !== "span") { - return; - } - image = span.item.getChild(0); - break; - } - if (!image) { - return; - } - // eslint-disable-next-line consistent-return - return this.editor.editing.view.domConverter.mapViewToDom(image); - } + const { selection } = this.editor.editing.view.document; + // If we can not extract the formula, fall back to default behavior. + if (selection.isCollapsed || selection.rangeCount !== 1) { + return; + } + // Look for the wrapping the formula and then for the inside + const range = selection.getFirstRange(); + let image; + for (const span of range){ + if (span.item.name !== "span") { + return; + } + image = span.item.getChild(0); + break; + } + if (!image) { + return; + } + // eslint-disable-next-line consistent-return + return this.editor.editing.view.domConverter.mapViewToDom(image); + } } /** * Command for opening the ChemType editor */ class ChemTypeCommand extends MathTypeCommand { - setEditor() { - this.integration.core.getCustomEditors().enable("chemistry"); - } + setEditor() { + this.integration.core.getCustomEditors().enable("chemistry"); + } } -var mathIcon = - '\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n'; +var mathIcon = "\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n"; -var chemIcon = - '\n\n\n\n\n\n'; +var chemIcon = "\n\n\n\n\n\n"; var name = "@wiris/mathtype-ckeditor5"; -var version = "8.9.2"; +var version = "8.10.0"; var description = "MathType Web for CKEditor5 editor"; var keywords = [ - "chem", - "chemistry", - "chemtype", - "ckeditor", - "ckeditor5", - "editor", - "equation", - "latex", - "math", - "mathml", - "maths", - "mathtype", - "wiris", + "chem", + "chemistry", + "chemtype", + "ckeditor", + "ckeditor5", + "editor", + "equation", + "latex", + "math", + "mathml", + "maths", + "mathtype", + "wiris" ]; var repository = "https://github.com/wiris/html-integrations/tree/stable/packages/mathtype-ckeditor5"; var homepage = "https://www.wiris.com/"; var bugs = { - email: "support@wiris.com", + email: "support@wiris.com" }; var license = "MIT"; var author = "WIRIS Team (http://www.wiris.com)"; -var files = ["dist", "src", "icons", "theme", "lang"]; +var files = [ + "dist", + "src", + "icons", + "theme", + "lang" +]; var main = "src/plugin.js"; var type = "module"; var exports = { - ".": "./src/plugin.js", - "./dist/*.css": "./dist/*.css", - "./dist/*": "./dist/*", - "./src/*": "./src/*", - "./theme/*": "./theme/*", - "./package.json": "./package.json", + ".": "./src/plugin.js", + "./dist/*": "./dist/*", + "./browser/*": null, + "./src/*": "./src/*", + "./theme/*": "./theme/*", + "./package.json": "./package.json" }; var scripts = { - build: "node ./scripts/build-dist.mjs", - "build:dist": "node ./scripts/build-dist.mjs", - prepare: "npm run build:dist", + build: "node ./scripts/build-dist.mjs", + "build:dist": "node ./scripts/build-dist.mjs", + prepare: "npm run build:dist" }; var dependencies = { - "@wiris/mathtype-html-integration-devkit": "1.17.3", + "@wiris/mathtype-html-integration-devkit": "1.17.3" }; var devDependencies = { - "@ckeditor/ckeditor5-dev-build-tools": "^40.2.0", - ckeditor5: ">=42.0.0", + "@ckeditor/ckeditor5-dev-build-tools": "^42.0.0", + ckeditor5: ">=43.0.0" }; var peerDependencies = { - ckeditor5: ">=42.0.0", + ckeditor5: ">=43.0.0" }; var packageInfo = { - name: name, - version: version, - description: description, - keywords: keywords, - repository: repository, - homepage: homepage, - bugs: bugs, - license: license, - author: author, - files: files, - main: main, - type: type, - exports: exports, - scripts: scripts, - dependencies: dependencies, - devDependencies: devDependencies, - peerDependencies: peerDependencies, + name: name, + version: version, + description: description, + keywords: keywords, + repository: repository, + homepage: homepage, + bugs: bugs, + license: license, + author: author, + files: files, + main: main, + type: type, + exports: exports, + scripts: scripts, + dependencies: dependencies, + devDependencies: devDependencies, + peerDependencies: peerDependencies }; // CKEditor imports let currentInstance = null; // eslint-disable-line import/no-mutable-exports class MathType extends Plugin { - static get requires() { - return [Widget]; - } - static get pluginName() { - return "MathType"; - } - init() { - // Create the MathType API Integration object - const integration = this._addIntegration(); - currentInstance = integration; - // Add the MathType and ChemType commands to the editor - this._addCommands(); - // Add the buttons for MathType and ChemType - this._addViews(integration); - // Registers the element in the schema - this._addSchema(); - // Add the downcast and upcast converters - this._addConverters(integration); - // Expose the WirisPlugin variable to the window - this._exposeWiris(); - } - /** + static get requires() { + return [ + Widget + ]; + } + static get pluginName() { + return "MathType"; + } + init() { + // Create the MathType API Integration object + const integration = this._addIntegration(); + currentInstance = integration; + // Add the MathType and ChemType commands to the editor + this._addCommands(); + // Add the buttons for MathType and ChemType + this._addViews(integration); + // Registers the element in the schema + this._addSchema(); + // Add the downcast and upcast converters + this._addConverters(integration); + // Expose the WirisPlugin variable to the window + this._exposeWiris(); + } + /** * Inherited from Plugin class: Executed when CKEditor5 is destroyed */ destroy() { - // eslint-disable-line class-methods-use-this - currentInstance.destroy(); - } - /** + // eslint-disable-line class-methods-use-this + currentInstance.destroy(); + } + /** * Create the MathType API Integration object * @returns {CKEditor5Integration} the integration object */ _addIntegration() { - const { editor } = this; - /** + const { editor } = this; + /** * Integration model constructor attributes. * @type {integrationModelProperties} */ const integrationProperties = {}; - integrationProperties.environment = {}; - integrationProperties.environment.editor = "CKEditor5"; - integrationProperties.environment.editorVersion = "5.x"; - integrationProperties.version = packageInfo.version; - integrationProperties.editorObject = editor; - integrationProperties.serviceProviderProperties = {}; - integrationProperties.serviceProviderProperties.URI = "https://www.wiris.net/demo/plugins/app"; - integrationProperties.serviceProviderProperties.server = "java"; - integrationProperties.target = editor.sourceElement; - integrationProperties.scriptName = "bundle.js"; - integrationProperties.managesLanguage = true; - // etc - // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element. - // To avoid a wrong behaviour, this integration only starts if the workspace container exists. - let integration; - if (integrationProperties.target) { - // Instance of the integration associated to this editor instance - integration = new CKEditor5Integration(integrationProperties); - integration.init(); - integration.listeners.fire("onTargetReady", {}); - integration.checkElement(); - this.listenTo( - editor.editing.view.document, - "click", - (evt, data) => { - // Is Double-click - if (data.domEvent.detail === 2) { - integration.doubleClickHandler(data.domTarget, data.domEvent); - evt.stop(); - } - }, - { - priority: "highest", - }, - ); + integrationProperties.environment = {}; + integrationProperties.environment.editor = "CKEditor5"; + integrationProperties.environment.editorVersion = "5.x"; + integrationProperties.version = packageInfo.version; + integrationProperties.editorObject = editor; + integrationProperties.serviceProviderProperties = {}; + integrationProperties.serviceProviderProperties.URI = "https://www.wiris.net/demo/plugins/app"; + integrationProperties.serviceProviderProperties.server = "java"; + integrationProperties.target = editor.sourceElement; + integrationProperties.scriptName = "bundle.js"; + integrationProperties.managesLanguage = true; + // etc + // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element. + // To avoid a wrong behaviour, this integration only starts if the workspace container exists. + let integration; + if (integrationProperties.target) { + // Instance of the integration associated to this editor instance + integration = new CKEditor5Integration(integrationProperties); + integration.init(); + integration.listeners.fire("onTargetReady", {}); + integration.checkElement(); + this.listenTo(editor.editing.view.document, "click", (evt, data)=>{ + // Is Double-click + if (data.domEvent.detail === 2) { + integration.doubleClickHandler(data.domTarget, data.domEvent); + evt.stop(); + } + }, { + priority: "highest" + }); + } + return integration; } - return integration; - } - /** + /** * Add the MathType and ChemType commands to the editor */ _addCommands() { - const { editor } = this; - // Add command to open the formula editor - editor.commands.add("MathType", new MathTypeCommand(editor)); - // Add command to open the chemistry formula editor - editor.commands.add("ChemType", new ChemTypeCommand(editor)); - } - /** + const { editor } = this; + // Add command to open the formula editor + editor.commands.add("MathType", new MathTypeCommand(editor)); + // Add command to open the chemistry formula editor + editor.commands.add("ChemType", new ChemTypeCommand(editor)); + } + /** * Add the buttons for MathType and ChemType * @param {CKEditor5Integration} integration the integration object */ _addViews(integration) { - const { editor } = this; - // Check if MathType editor is enabled - if (Configuration.get("editorEnabled")) { - // Add button for the formula editor - editor.ui.componentFactory.add("MathType", (locale) => { - const view = new ButtonView(locale); - // View is enabled iff command is enabled - view.bind("isEnabled").to(editor.commands.get("MathType"), "isEnabled"); - view.set({ - label: StringManager.get("insert_math", integration.getLanguage()), - icon: mathIcon, - tooltip: true, - }); - // Callback executed once the image is clicked. - view.on("execute", () => { - editor.execute("MathType", { - integration, - }); - }); - return view; - }); - } - // Check if ChemType editor is enabled - if (Configuration.get("chemEnabled")) { - // Add button for the chemistry formula editor - editor.ui.componentFactory.add("ChemType", (locale) => { - const view = new ButtonView(locale); - // View is enabled iff command is enabled - view.bind("isEnabled").to(editor.commands.get("ChemType"), "isEnabled"); - view.set({ - label: StringManager.get("insert_chem", integration.getLanguage()), - icon: chemIcon, - tooltip: true, - }); - // Callback executed once the image is clicked. - view.on("execute", () => { - editor.execute("ChemType", { - integration, - }); - }); - return view; - }); + const { editor } = this; + // Check if MathType editor is enabled + if (Configuration.get("editorEnabled")) { + // Add button for the formula editor + editor.ui.componentFactory.add("MathType", (locale)=>{ + const view = new ButtonView(locale); + // View is enabled iff command is enabled + view.bind("isEnabled").to(editor.commands.get("MathType"), "isEnabled"); + view.set({ + label: StringManager.get("insert_math", integration.getLanguage()), + icon: mathIcon, + tooltip: true + }); + // Callback executed once the image is clicked. + view.on("execute", ()=>{ + editor.execute("MathType", { + integration + }); + }); + return view; + }); + } + // Check if ChemType editor is enabled + if (Configuration.get("chemEnabled")) { + // Add button for the chemistry formula editor + editor.ui.componentFactory.add("ChemType", (locale)=>{ + const view = new ButtonView(locale); + // View is enabled iff command is enabled + view.bind("isEnabled").to(editor.commands.get("ChemType"), "isEnabled"); + view.set({ + label: StringManager.get("insert_chem", integration.getLanguage()), + icon: chemIcon, + tooltip: true + }); + // Callback executed once the image is clicked. + view.on("execute", ()=>{ + editor.execute("ChemType", { + integration + }); + }); + return view; + }); + } + // Observer for the Double-click event + editor.editing.view.addObserver(ClickObserver); } - // Observer for the Double-click event - editor.editing.view.addObserver(ClickObserver); - } - /** + /** * Registers the element in the schema */ _addSchema() { - const { schema } = this.editor.model; - schema.register("mathml", { - inheritAllFrom: "$inlineObject", - allowAttributes: ["formula"], - }); - } - /** + const { schema } = this.editor.model; + schema.register("mathml", { + inheritAllFrom: "$inlineObject", + allowAttributes: [ + "formula" + ] + }); + } + /** * Add the downcast and upcast converters */ _addConverters(integration) { - const { editor } = this; - // Editing view -> Model - editor.conversion.for("upcast").elementToElement({ - view: { - name: "span", - classes: "ck-math-widget", - }, - model: (viewElement, { writer: modelWriter }) => { - const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute("data-mathml")); - return modelWriter.createElement("mathml", { - formula, + const { editor } = this; + // Editing view -> Model + editor.conversion.for("upcast").elementToElement({ + view: { + name: "span", + classes: "ck-math-widget" + }, + model: (viewElement, { writer: modelWriter })=>{ + const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute("data-mathml")); + return modelWriter.createElement("mathml", { + formula + }); + } }); - }, - }); - // Data view -> Model - editor.data.upcastDispatcher.on("element:math", (evt, data, conversionApi) => { - const { consumable, writer } = conversionApi; - const { viewItem } = data; - // When element was already consumed then skip it. - if ( - !consumable.test(viewItem, { - name: true, - }) - ) { - return; - } - // If we encounter any with a LaTeX annotation inside, - // convert it into a "$$...$$" string. - const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define - // Get the formula of the (which is all its children). - const processor = new XmlDataProcessor(editor.editing.view.document); - // Only god knows why the following line makes viewItem lose all of its children, - // so we obtain isLatex before doing this because we need viewItem's children for that. - const upcastWriter = new UpcastWriter(editor.editing.view.document); - const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren()); - // and obtain the attributes of too! - const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}="${value}"`).join(""); - // We process the document fragment - let formula = processor.toData(viewDocumentFragment) || ""; - // And obtain the complete formula - formula = Util.htmlSanitize(`${formula}`); - // Replaces the < & > characters to its HTMLEntity to avoid render issues. - formula = formula.replaceAll('"<"', '"<"').replaceAll('">"', '">"').replaceAll("><<", "><<"); - /* Model node that contains what's going to actually be inserted. This can be either: + // Data view -> Model + editor.data.upcastDispatcher.on("element:math", (evt, data, conversionApi)=>{ + const { consumable, writer } = conversionApi; + const { viewItem } = data; + // When element was already consumed then skip it. + if (!consumable.test(viewItem, { + name: true + })) { + return; + } + // If we encounter any with a LaTeX annotation inside, + // convert it into a "$$...$$" string. + const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define + // Get the formula of the (which is all its children). + const processor = new XmlDataProcessor(editor.editing.view.document); + // Only god knows why the following line makes viewItem lose all of its children, + // so we obtain isLatex before doing this because we need viewItem's children for that. + const upcastWriter = new UpcastWriter(editor.editing.view.document); + const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren()); + // and obtain the attributes of too! + const mathAttributes = [ + ...viewItem.getAttributes() + ].map(([key, value])=>` ${key}="${value}"`).join(""); + // We process the document fragment + let formula = processor.toData(viewDocumentFragment) || ""; + // And obtain the complete formula + formula = Util.htmlSanitize(`${formula}`); + // Replaces the < & > characters to its HTMLEntity to avoid render issues. + formula = formula.replaceAll('"<"', '"<"').replaceAll('">"', '">"').replaceAll("><<", "><<"); + /* Model node that contains what's going to actually be inserted. This can be either: - A element with a formula attribute set to the given formula, or - - If the original had a LaTeX annotation, then the annotation surrounded by "$$...$$" */ const modelNode = - isLatex - ? writer.createText(Parser.initParse(formula, integration.getLanguage())) - : writer.createElement("mathml", { - formula, + - If the original had a LaTeX annotation, then the annotation surrounded by "$$...$$" */ const modelNode = isLatex ? writer.createText(Parser.initParse(formula, integration.getLanguage())) : writer.createElement("mathml", { + formula }); - // Find allowed parent for element that we are going to insert. - // If current parent does not allow to insert element but one of the ancestors does - // then split nodes to allowed parent. - const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor); - // When there is no split result it means that we can't insert element to model tree, so let's skip it. - if (!splitResult) { - return; - } - // Insert element on allowed position. - conversionApi.writer.insert(modelNode, splitResult.position); - // Consume appropriate value from consumable values list. - consumable.consume(viewItem, { - name: true, - }); - const parts = conversionApi.getSplitParts(modelNode); - // Set conversion result range. - data.modelRange = writer.createRange( - conversionApi.writer.createPositionBefore(modelNode), - conversionApi.writer.createPositionAfter(parts[parts.length - 1]), - ); - // Now we need to check where the `modelCursor` should be. - if (splitResult.cursorParent) { - // If we split parent to insert our element then we want to continue conversion in the new part of the split parent. - // - // before: foo[] - // after: foo[] - data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0); - } else { - // Otherwise just continue after inserted element. - data.modelCursor = data.modelRange.end; - } - }); - /** + // Find allowed parent for element that we are going to insert. + // If current parent does not allow to insert element but one of the ancestors does + // then split nodes to allowed parent. + const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor); + // When there is no split result it means that we can't insert element to model tree, so let's skip it. + if (!splitResult) { + return; + } + // Insert element on allowed position. + conversionApi.writer.insert(modelNode, splitResult.position); + // Consume appropriate value from consumable values list. + consumable.consume(viewItem, { + name: true + }); + const parts = conversionApi.getSplitParts(modelNode); + // Set conversion result range. + data.modelRange = writer.createRange(conversionApi.writer.createPositionBefore(modelNode), conversionApi.writer.createPositionAfter(parts[parts.length - 1])); + // Now we need to check where the `modelCursor` should be. + if (splitResult.cursorParent) { + // If we split parent to insert our element then we want to continue conversion in the new part of the split parent. + // + // before: foo[] + // after: foo[] + data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0); + } else { + // Otherwise just continue after inserted element. + data.modelCursor = data.modelRange.end; + } + }); + /** * Whether the given view element has a LaTeX annotation element. * @param {*} math * @returns {bool} */ function mathIsLatex(math) { - const semantics = math.getChild(0); - if (!semantics || semantics.name !== "semantics") return false; - for (const child of semantics.getChildren()) { - if (child.name === "annotation" && child.getAttribute("encoding") === "LaTeX") { - return true; - } - } - return false; - } - function createViewWidget(modelItem, { writer: viewWriter }) { - const widgetElement = viewWriter.createContainerElement("span", { - class: "ck-math-widget", - }); - const mathUIElement = createViewImage(modelItem, { - writer: viewWriter, - }); // eslint-disable-line no-use-before-define - if (mathUIElement) { - viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement); - } - return toWidget(widgetElement, viewWriter); - } - function createViewImage(modelItem, { writer: viewWriter }) { - const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); - const mathString = modelItem.getAttribute("formula").replaceAll('ref="<"', 'ref="<"'); - const imgHtml = Parser.initParse(mathString, integration.getLanguage()); - const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0); - /* Although we use the HtmlDataProcessor to obtain the attributes, + const semantics = math.getChild(0); + if (!semantics || semantics.name !== "semantics") return false; + for (const child of semantics.getChildren()){ + if (child.name === "annotation" && child.getAttribute("encoding") === "LaTeX") { + return true; + } + } + return false; + } + function createViewWidget(modelItem, { writer: viewWriter }) { + const widgetElement = viewWriter.createContainerElement("span", { + class: "ck-math-widget" + }); + const mathUIElement = createViewImage(modelItem, { + writer: viewWriter + }); // eslint-disable-line no-use-before-define + if (mathUIElement) { + viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement); + } + return toWidget(widgetElement, viewWriter); + } + function createViewImage(modelItem, { writer: viewWriter }) { + const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); + const mathString = modelItem.getAttribute("formula").replaceAll('ref="<"', 'ref="<"'); + const imgHtml = Parser.initParse(mathString, integration.getLanguage()); + const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0); + /* Although we use the HtmlDataProcessor to obtain the attributes, we must create a new EmptyElement which is independent of the DataProcessor being used by this editor instance */ if (imgElement) { - return viewWriter.createEmptyElement("img", imgElement.getAttributes(), { - renderUnsafeAttributes: ["src"], + return viewWriter.createEmptyElement("img", imgElement.getAttributes(), { + renderUnsafeAttributes: [ + "src" + ] + }); + } + return null; + } + // Model -> Editing view + editor.conversion.for("editingDowncast").elementToElement({ + model: "mathml", + view: createViewWidget }); - } - return null; - } - // Model -> Editing view - editor.conversion.for("editingDowncast").elementToElement({ - model: "mathml", - view: createViewWidget, - }); - // Model -> Data view - editor.conversion.for("dataDowncast").elementToElement({ - model: "mathml", - view: createDataString, - }); - /** + // Model -> Data view + editor.conversion.for("dataDowncast").elementToElement({ + model: "mathml", + view: createDataString + }); + /** * Makes a copy of the given view node. * @param {module:engine/view/node~Node} sourceNode Node to copy. * @returns {module:engine/view/node~Node} Copy of the node. */ function clone(viewWriter, sourceNode) { - if (sourceNode.is("text")) { - return viewWriter.createText(sourceNode.data); - } - if (sourceNode.is("element")) { - if (sourceNode.is("emptyElement")) { - return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes()); - } - const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes()); - for (const child of sourceNode.getChildren()) { - viewWriter.insert(viewWriter.createPositionAt(element, "end"), clone(viewWriter, child)); - } - return element; - } - throw new Exception("Given node has unsupported type."); // eslint-disable-line no-undef - } - function createDataString(modelItem, { writer: viewWriter }) { - const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); - let mathString = Parser.endParseSaveMode(modelItem.getAttribute("formula")); - const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0); - return clone(viewWriter, sourceMathElement); - } - // This stops the view selection getting into the s and messing up caret movement - editor.editing.mapper.on( - "viewToModelPosition", - viewToModelPositionOutsideModelElement(editor.model, (viewElement) => viewElement.hasClass("ck-math-widget")), - ); - // Keep a reference to the original get and set function. - editor.data; - /** + if (sourceNode.is("text")) { + return viewWriter.createText(sourceNode.data); + } + if (sourceNode.is("element")) { + if (sourceNode.is("emptyElement")) { + return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes()); + } + const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes()); + for (const child of sourceNode.getChildren()){ + viewWriter.insert(viewWriter.createPositionAt(element, "end"), clone(viewWriter, child)); + } + return element; + } + throw new Exception("Given node has unsupported type."); // eslint-disable-line no-undef + } + function createDataString(modelItem, { writer: viewWriter }) { + const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); + let mathString = Parser.endParseSaveMode(modelItem.getAttribute("formula")); + const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0); + return clone(viewWriter, sourceMathElement); + } + // This stops the view selection getting into the s and messing up caret movement + editor.editing.mapper.on("viewToModelPosition", viewToModelPositionOutsideModelElement(editor.model, (viewElement)=>viewElement.hasClass("ck-math-widget"))); + // Keep a reference to the original get and set function. + editor.data; + /** * Hack to transform $$latex$$ into in editor.getData()'s output. - */ editor.data.on( - "get", - (e) => { - let output = e.return; - // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any. - // For text or latex formulas, it returns the original output. - e.return = MathML.removeSemantics(output, "application/json"); - }, - { - priority: "low", - }, - ); - /** + */ editor.data.on("get", (e)=>{ + let output = e.return; + // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any. + // For text or latex formulas, it returns the original output. + e.return = MathML.removeSemantics(output, "application/json"); + }, { + priority: "low" + }); + /** * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData(). - */ editor.data.on( - "set", - (e, args) => { - // Retrieve the data to be set on the CKEditor. - let modifiedData = args[0]; - // Regex to find all mathml formulas. - const regexp = //gm; - // Get all MathML formulas and store them in an array. - // Using the conditional operator on data.main because the data parameter has different types depending on: - // editor.data.set can be used directly or by the source editing plugin. - // With the source editor plugin, data is an object with the key `main` which contains the source code string. - // When using the editor.data.set method, the data is a string with the content to be set to the editor. - let formulas = Object.values(modifiedData)[0] - ? [...Object.values(modifiedData)[0].matchAll(regexp)] - : [...modifiedData.matchAll(regexp)]; - // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation. - formulas.forEach((formula) => { - let mathml = formula[0]; - if (mathml.includes('encoding="LaTeX"')) { - // LaTeX found. - let latex = "$$$" + Latex.getLatexFromMathML(mathml) + "$$$"; // We add $$$ instead of $$ because the replace function ignores one $. - modifiedData = modifiedData.replace(mathml, latex); - } + */ editor.data.on("set", (e, args)=>{ + // Retrieve the data to be set on the CKEditor. + let modifiedData = args[0]; + // Regex to find all mathml formulas. + const regexp = //gm; + // Get all MathML formulas and store them in an array. + // Using the conditional operator on data.main because the data parameter has different types depending on: + // editor.data.set can be used directly or by the source editing plugin. + // With the source editor plugin, data is an object with the key `main` which contains the source code string. + // When using the editor.data.set method, the data is a string with the content to be set to the editor. + let formulas = Object.values(modifiedData)[0] ? [ + ...Object.values(modifiedData)[0].matchAll(regexp) + ] : [ + ...modifiedData.matchAll(regexp) + ]; + // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation. + formulas.forEach((formula)=>{ + let mathml = formula[0]; + if (mathml.includes('encoding="LaTeX"')) { + // LaTeX found. + let latex = "$$$" + Latex.getLatexFromMathML(mathml) + "$$$"; // We add $$$ instead of $$ because the replace function ignores one $. + modifiedData = modifiedData.replace(mathml, latex); + } + }); + args[0] = modifiedData; + }, { + priority: "high" }); - args[0] = modifiedData; - }, - { - priority: "high", - }, - ); - } - /** + } + /** * Expose the WirisPlugin variable to the window */ // eslint-disable-next-line class-methods-use-this - _exposeWiris() { - window.WirisPlugin = { - Core, - Parser, - Image, - MathML, - Util, - Configuration, - Listeners, - IntegrationModel, - currentInstance, - Latex, - }; - } + _exposeWiris() { + window.WirisPlugin = { + Core, + Parser, + Image, + MathML, + Util, + Configuration, + Listeners, + IntegrationModel, + currentInstance, + Latex + }; + } } export { MathType as default }; diff --git a/packages/ckeditor5/dist/browser/index.js.map b/packages/ckeditor5/dist/browser/index.js.map index 291d79b4e..d1ea83754 100644 --- a/packages/ckeditor5/dist/browser/index.js.map +++ b/packages/ckeditor5/dist/browser/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../../../../node_modules/dompurify/dist/purify.js","../../../devkit/src/constants.js","../../../devkit/src/mathml.js","../../../devkit/src/configuration.js","../../../devkit/src/textcache.js","../../../devkit/src/listeners.js","../../../devkit/src/serviceprovider.js","../../../devkit/src/latex.js","../../../devkit/src/stringmanager.js","../../../devkit/src/util.js","../../../devkit/src/image.js","../../../devkit/src/accessibility.js","../../../devkit/src/parser.js","../../../devkit/src/editorlistener.js","../../../devkit/telemeter-wasm/telemeter_wasm.js","../../../devkit/src/telemeter.js","../../../devkit/src/contentmanager.js","../../../devkit/src/customeditors.js","../../../devkit/src/jsvariables.js","../../../devkit/src/event.js","../../../devkit/src/popupmessage.js","../../../devkit/src/modal.js","../../../devkit/src/polyfills.js","../../../devkit/src/core.src.js","../../../devkit/src/integrationmodel.js","../../src/integration.js","../../src/commands.js","../../src/plugin.js"],"sourcesContent":["/*! @license DOMPurify 3.1.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.5/LICENSE */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMPurify = factory());\n})(this, (function () { 'use strict';\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create\n } = Object; // eslint-disable-line import/no-mutable-exports\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n\n /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n\n /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n\n /**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\n function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n\n /**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\n function cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n\n /**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\n function clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n\n /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\n function lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.5';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n node.remove();\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any ocurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","/**\n * This class represents all the constants needed in a MathType integration among different classes.\n * If a constant should be used across different classes should be defined using attribute\n * accessors.\n */\nexport default class Constants {\n /**\n * Safe XML entities.\n * @type {Object}\n */\n static get safeXmlCharactersEntities() {\n return {\n tagOpener: \"«\",\n tagCloser: \"»\",\n doubleQuote: \"¨\",\n realDoubleQuote: \""\",\n };\n }\n\n /**\n * Blackboard invalid safe characters.\n * @type {Object}\n */\n static get safeBadBlackboardCharacters() {\n return {\n ltElement: \"«mo»<«/mo»\",\n gtElement: \"«mo»>«/mo»\",\n ampElement: \"«mo»&«/mo»\",\n };\n }\n\n /**\n * Blackboard valid safe characters.\n * @type{Object}\n */\n static get safeGoodBlackboardCharacters() {\n return {\n ltElement: \"«mo»§lt;«/mo»\",\n gtElement: \"«mo»§gt;«/mo»\",\n ampElement: \"«mo»§amp;«/mo»\",\n };\n }\n\n /**\n * Standard XML special characters.\n * @type {Object}\n */\n static get xmlCharacters() {\n return {\n id: \"xmlCharacters\",\n tagOpener: \"<\", // Hex: \\x3C.\n tagCloser: \">\", // Hex: \\x3E.\n doubleQuote: '\"', // Hex: \\x22.\n ampersand: \"&\", // Hex: \\x26.\n quote: \"'\", // Hex: \\x27.\n };\n }\n\n /**\n * Safe XML special characters. This characters are used instead the standard\n * the standard to parse the MathML if safeXML save mode is enable. Each XML\n * special character have a UTF-8 representation.\n * @type {Object}\n */\n static get safeXmlCharacters() {\n return {\n id: \"safeXmlCharacters\",\n tagOpener: \"«\", // Hex: \\xAB.\n tagCloser: \"»\", // Hex: \\xBB.\n doubleQuote: \"¨\", // Hex: \\xA8.\n ampersand: \"§\", // Hex: \\xA7.\n quote: \"`\", // Hex: \\x60.\n realDoubleQuote: \"¨\",\n };\n }\n}\n","import Constants from \"./constants\";\nimport Util from \"./util\";\n\n/**\n * @classdesc\n * This class represents a class to manage MathML objects.\n */\nexport default class MathML {\n /**\n * Checks if the mathml at position i is inside an HTML attribute or not.\n * @param {string} content - a string containing MathML code.\n * @param {number} i - search index.\n * @return {boolean} true if is inside an HTML attribute. false otherwise.\n */\n static isMathmlInAttribute(content, i) {\n // Regex =\n // '^[\\'\"][\\\\s]*=[\\\\s]*[\\\\w-]+([\\\\s]*(\"[^\"]*\"|\\'[^\\']*\\')[\\\\s]*\n // =[\\\\s]*[\\\\w-]+[\\\\s]*)*[\\\\s]+gmi<';\n const mathAtt = \"['\\\"][\\\\s]*=[\\\\s]*[\\\\w-]+\"; // \"=att OR '=att\n const attContent = \"\\\"[^\\\"]*\\\"|'[^']*'\"; // \"blabla\" OR 'blabla'\n const att = `[\\\\s]*(${attContent})[\\\\s]*=[\\\\s]*[\\\\w-]+[\\\\s]*`; // \"blabla\"=att OR 'blabla'=att\n const atts = `('${att}')*`; // \"blabla\"=att1 \"blabla\"=att2\n const regex = `^${mathAtt}${atts}[\\\\s]+gmi<`; // \"=att \"blabla\"=att1 \"blabla\"=att2 gmi< .\n const expression = new RegExp(regex);\n\n const actualContent = content.substring(0, i);\n const reversed = actualContent.split(\"\").reverse().join(\"\");\n const exists = expression.test(reversed);\n\n return exists;\n }\n\n /**\n * Decodes an encoded MathML with standard XML tags.\n * We use these entities because IE doesn't support html entities\n * on its attributes sometimes. Yes, sometimes.\n * @param {string} input - string to be decoded.\n * @return {string} decoded string.\n */\n static safeXmlDecode(input) {\n let { tagOpener } = Constants.safeXmlCharactersEntities;\n let { tagCloser } = Constants.safeXmlCharactersEntities;\n let { doubleQuote } = Constants.safeXmlCharactersEntities;\n let { realDoubleQuote } = Constants.safeXmlCharactersEntities;\n // Decoding entities.\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n // Added to fix problem due to import from 1.9.x.\n input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote);\n\n // Blackboard.\n const { ltElement } = Constants.safeBadBlackboardCharacters;\n const { gtElement } = Constants.safeBadBlackboardCharacters;\n const { ampElement } = Constants.safeBadBlackboardCharacters;\n if (\"_wrs_blackboard\" in window && window._wrs_blackboard) {\n input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement);\n input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement);\n input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement);\n }\n\n ({ tagOpener } = Constants.safeXmlCharacters);\n ({ tagCloser } = Constants.safeXmlCharacters);\n ({ doubleQuote } = Constants.safeXmlCharacters);\n ({ realDoubleQuote } = Constants.safeXmlCharacters);\n const { ampersand } = Constants.safeXmlCharacters;\n const { quote } = Constants.safeXmlCharacters;\n\n // Decoding characters.\n input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.xmlCharacters.ampersand);\n input = input.split(quote).join(Constants.xmlCharacters.quote);\n\n // We are replacing $ by & when its part of an entity for retro-compatibility.\n // Now, the standard is replace § by &.\n let returnValue = \"\";\n let currentEntity = null;\n\n for (let i = 0; i < input.length; i += 1) {\n const character = input.charAt(i);\n if (currentEntity == null) {\n if (character === \"$\") {\n currentEntity = \"\";\n } else {\n returnValue += character;\n }\n } else if (character === \";\") {\n returnValue += `&${currentEntity}`;\n currentEntity = null;\n } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) {\n // Character is part of an entity.\n currentEntity += character;\n } else {\n returnValue += `$${currentEntity}`; // Is not an entity.\n currentEntity = null;\n i -= 1; // Parse again the current character.\n }\n }\n\n return returnValue;\n }\n\n /**\n * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags.\n * We use these entities because IE doesn't support html entities on its attributes sometimes.\n * @param {string} input - input string to be encoded\n * @returns {string} encoded string.\n */\n static safeXmlEncode(input) {\n const { tagOpener } = Constants.xmlCharacters;\n const { tagCloser } = Constants.xmlCharacters;\n const { doubleQuote } = Constants.xmlCharacters;\n const { ampersand } = Constants.xmlCharacters;\n const { quote } = Constants.xmlCharacters;\n\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand);\n input = input.split(quote).join(Constants.safeXmlCharacters.quote);\n\n return input;\n }\n\n /**\n * Converts special symbols (> 128) to entities and replaces all textual\n * entities by its number entities.\n * @param {string} mathml - MathML string containing - or not - special symbols\n * @returns {string} MathML with all textual entities replaced.\n */\n static mathMLEntities(mathml) {\n let toReturn = \"\";\n\n for (let i = 0; i < mathml.length; i += 1) {\n const character = mathml.charAt(i);\n\n // Parsing > 128 characters.\n if (mathml.codePointAt(i) > 128) {\n toReturn += `&#${mathml.codePointAt(i)};`;\n // For UTF-32 characters we need to move the index one position.\n if (mathml.codePointAt(i) > 0xffff) {\n i += 1;\n }\n } else if (character === \"&\") {\n const end = mathml.indexOf(\";\", i + 1);\n if (end >= 0) {\n const container = document.createElement(\"span\");\n container.innerHTML = mathml.substring(i, end + 1);\n toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`;\n i = end;\n } else {\n toReturn += character;\n }\n } else {\n toReturn += character;\n }\n }\n\n return toReturn;\n }\n\n /**\n * Add a custom editor name with the prefix wrs_ to a MathML class attribute.\n * @param {string} mathml - a MathML string created with a custom editor, like chemistry.\n * @param {string} customEditor - custom editor name.\n * @returns {string} MathML string with his class containing the editor toolbar string.\n */\n static addCustomEditorClassAttribute(mathml, customEditor) {\n let toReturn = \"\";\n\n const start = mathml.indexOf(\"\");\n if (mathml.indexOf(\"class\") === -1) {\n // Adding custom editor type.\n toReturn = `${mathml.substr(start, end)} class=\"wrs_${customEditor}\">`;\n toReturn += mathml.substr(end + 1, mathml.length);\n return toReturn;\n }\n }\n return mathml;\n }\n\n /**\n * Remove a custom editor name from the MathML class attribute.\n * @param {string} mathml - a MathML string.\n * @param {string} customEditor - custom editor name.\n * @returns {string} The input MathML without customEditor name in his class.\n */\n static removeCustomEditorClassAttribute(mathml, customEditor) {\n // Discard MathML without the specified class.\n if (mathml.indexOf(\"class\") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) {\n return mathml;\n }\n\n // Trivial case: class attribute value equal to editor name. Then\n // class attribute is removed.\n // First try to remove it with a space before if there is one\n // Otherwise without the space\n if (mathml.indexOf(` class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(` class=\"wrs_${customEditor}\"`, \"\");\n } else if (mathml.indexOf(`class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(`class=\"wrs_${customEditor}\"`, \"\");\n }\n\n // Non Trivial case: class attribute contains editor name.\n return mathml.replace(`wrs_${customEditor}`, \"\");\n }\n\n /**\n * Adds annotation tag in MathML element.\n * @param {String} mathml - valid MathML.\n * @param {String} content - value to put inside annotation tag.\n * @param {String} annotationEncoding - annotation encoding.\n * @returns {String} - 'mathml' with an annotation that contains\n * 'content' and encoding 'encoding'.\n */\n static addAnnotation(mathml, content, annotationEncoding) {\n // If contains annotation, also contains semantics tag.\n const containsAnnotation = mathml.indexOf(\"\");\n mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`;\n } else if (MathML.isEmpty(mathml)) {\n const endIndexInline = mathml.indexOf(\"/>\");\n const endIndexNonInline = mathml.indexOf(\">\");\n const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline;\n mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`;\n } else {\n const beginMathMLContent = mathml.indexOf(\">\") + 1;\n const endMathmlContent = mathml.lastIndexOf(\"\");\n const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent);\n mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len\n }\n\n return mathmlWithAnnotation;\n }\n\n /**\n * Removes specific annotation tag in MathML element.\n * In case of remove the unique annotation, also is removed semantics tag.\n * @param {String} mathml - valid MathML.\n * @param {String} annotationEncoding - annotation encoding to remove.\n * @returns {String} - 'mathml' without the annotation encoding specified.\n */\n static removeAnnotation(mathml, annotationEncoding) {\n let mathmlWithoutAnnotation = mathml;\n const openAnnotationTag = ``;\n const closeAnnotationTag = \"\";\n const startAnnotationIndex = mathml.indexOf(openAnnotationTag);\n if (startAnnotationIndex !== -1) {\n let differentAnnotationFound = false;\n let differentAnnotationIndex = mathml.indexOf(\"\\s*?()?/gm;\n\n // If `mrow` is found right after the `annotation` ending tag, it's removed as well\n // alongside `semantics` closing tag and the whole `annotation` tag and its contents.\n const semanticsEndingTagRegex = /(<\\/mrow>)?\\s*/gm;\n\n return mathml.replace(semanticsStartingTagRegex, \"\").replace(semanticsEndingTagRegex, \"\");\n }\n\n /**\n * Transforms all xml mathml occurrences that contain semantics to the same\n * xml mathml occurrences without semantics.\n * @param {string} text - string that can contain xml mathml occurrences.\n * @param {Constants} [characters] - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * xmlCharacters by default.\n * @returns {string} - 'text' with all xml mathml occurrences without annotation tag.\n */\n static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) {\n const mathTagStart = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const mathTagEndline = `/${characters.tagCloser}`;\n const { tagCloser } = characters;\n const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`;\n const annotationTagStart = `${characters.tagOpener}annotation encoding=`;\n\n let output = \"\";\n let start = text.indexOf(mathTagStart);\n let end = 0;\n while (start !== -1) {\n output += text.substring(end, start);\n\n // MathML can be written as '' or ''.\n const mathTagEndIndex = text.indexOf(mathTagEnd, start);\n const mathTagEndlineIndex = text.indexOf(mathTagEndline, start);\n const firstTagCloser = text.indexOf(tagCloser, start);\n if (mathTagEndIndex !== -1) {\n end = mathTagEndIndex;\n } else if (mathTagEndlineIndex === firstTagCloser - 1) {\n end = mathTagEndlineIndex;\n }\n\n const semanticsIndex = text.indexOf(semanticsTagStart, start);\n if (semanticsIndex !== -1) {\n const mmlTagStart = text.substring(start, semanticsIndex);\n const annotationIndex = text.indexOf(annotationTagStart, start);\n if (annotationIndex !== -1) {\n const startIndex = semanticsIndex + semanticsTagStart.length;\n const mmlContent = text.substring(startIndex, annotationIndex);\n output += mmlTagStart + mmlContent + mathTagEnd;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n end += mathTagEnd.length;\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n }\n\n output += text.substring(end, text.length);\n return output;\n }\n\n /**\n * Returns true if a MathML contains a certain class.\n * @param {string} mathML - input MathML.\n * @param {string} className - className.\n * @returns {boolean} true if the input MathML contains the input class.\n * false otherwise.\n * @static\n */\n static containClass(mathML, className) {\n const classIndex = mathML.indexOf(\"class\");\n if (classIndex === -1) {\n return false;\n }\n const classTagEndIndex = mathML.indexOf(\">\", classIndex);\n const classTag = mathML.substring(classIndex, classTagEndIndex);\n if (classTag.indexOf(className) !== -1) {\n return true;\n }\n return false;\n }\n\n /**\n * Returns true if mathml is empty. Otherwise, false.\n * @param {string} mathml - valid MathML with standard XML tags.\n * @returns {boolean} - true if mathml is empty. Otherwise, false.\n */\n static isEmpty(mathml) {\n // MathML can have the shape or ''.\n const closeTag = \">\";\n const closeTagInline = \"/>\";\n const firstCloseTagIndex = mathml.indexOf(closeTag);\n const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline);\n let empty = false;\n // MathML is always empty in the second shape.\n if (firstCloseTagInlineIndex !== -1) {\n if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) {\n empty = true;\n }\n }\n\n // MathML is always empty in the first shape when there aren't elements\n // between math tags.\n if (!empty) {\n const mathTagEndRegex = new RegExp(\"\");\n const mathTagEndArray = mathTagEndRegex.exec(mathml);\n if (mathTagEndArray) {\n empty = firstCloseTagIndex + 1 === mathTagEndArray.index;\n }\n }\n\n return empty;\n }\n\n /**\n * Encodes html entities inside properties.\n * @param {String} mathml - valid MathML with standard XML tags.\n * @returns {String} - 'mathml' with property entities encoded.\n */\n static encodeProperties(mathml) {\n // Search all the properties.\n const regex = /\\w+=\".*?\"/g;\n // Encode html entities.\n const replacer = (match) => {\n // It has the shape:\n // .\n const quoteIndex = match.indexOf('\"');\n const propertyValue = match.substring(quoteIndex + 1, match.length - 1);\n const propertyValueEncoded = Util.htmlEntities(propertyValue);\n const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}\"`;\n return matchEncoded;\n };\n\n const mathmlEncoded = mathml.replace(regex, replacer);\n return mathmlEncoded;\n }\n}\n","/**\n * This class represents the configuration class.\n * Usually used to retrieve configuration properties generated in the backend into the frontend.\n */\nexport default class Configuration {\n /**\n * Adds a properties object to {@link Configuration.properties}.\n * @param {Object} properties - properties to append to current properties.\n */\n static addConfiguration(properties) {\n Object.assign(Configuration.properties, properties);\n }\n\n /**\n * Static property.\n * The configuration properties object.\n * @private\n * @type {Object}\n */\n static get properties() {\n return Configuration._properties;\n }\n\n /**\n * Static property setter.\n * Set configuration properties.\n * @param {Object} value - The property value.\n * @ignore\n */\n static set properties(value) {\n Configuration._properties = value;\n }\n\n /**\n * Returns the value of a property key.\n * @param {String} key - Property key\n * @returns {String} Property value\n */\n static get(key) {\n if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) {\n // Backwards compatibility.\n if (Object.prototype.hasOwnProperty.call(Configuration.properties, \"_wrs_conf_\")) {\n return Configuration.properties[`_wrs_conf_${key}`];\n }\n return false;\n }\n return Configuration.properties[key];\n }\n\n /**\n * Adds a new property to Configuration class.\n * @param {String} key - Property key.\n * @param {Object} value - Property value.\n */\n static set(key, value) {\n Configuration.properties[key] = value;\n }\n\n /**\n * Updates a property object value with new values.\n * @param {String} key - The property key to be updated.\n * @param {Object} propertyValue - Object containing the new values.\n */\n static update(key, propertyValue) {\n if (!Configuration.get(key)) {\n Configuration.set(key, propertyValue);\n } else {\n const updateProperty = Object.assign(Configuration.get(key), propertyValue);\n Configuration.set(key, updateProperty);\n }\n }\n}\n\n/**\n * Static properties object. Stores all configuration properties.\n * Needed to attribute accessors.\n * @private\n * @type {Object}\n */\nConfiguration._properties = {};\n","export default class TextCache {\n /**\n * @classdesc\n * This class represent a client-side text cache class. Contains pairs of\n * strings (key/value) which can be retrieved in any moment. Usually used\n * to store AJAX responses for text services like mathml2latex\n * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class).\n * @constructs\n */\n constructor() {\n /**\n * Cache array property storing the cache entries.\n * @type {Array.}\n */\n this.cache = [];\n }\n\n /**\n * This method populates a key/value pair into the {@link this.cache} property.\n * @param {String} key - Cache key, usually the service string parameter.\n * @param {String} value - Cache value, usually the service response.\n */\n populate(key, value) {\n this.cache[key] = value;\n }\n\n /**\n * Returns the cache value associated to certain cache key.\n * @param {String} key - Cache key, usually the service string parameter.\n * @return {String} value - Cache value, if exists. False otherwise.\n */\n get(key) {\n if (Object.prototype.hasOwnProperty.call(this.cache, key)) {\n return this.cache[key];\n }\n return false;\n }\n}\n","/**\n * This object represents a custom listener.\n * @typedef {Object} Listener\n * @property {String} Listener.eventName - The listener name.\n * @property {Function} Listener.callback - The listener callback function.\n */\n\nexport default class Listeners {\n /**\n * @classdesc\n * This class represents a custom listeners manager.\n * @constructs\n */\n constructor() {\n /**\n * Array containing all custom listeners.\n * @type {Object[]}\n */\n this.listeners = [];\n }\n\n /**\n * Add a listener to Listener class.\n * @param {Object} listener - A listener object.\n */\n add(listener) {\n this.listeners.push(listener);\n }\n\n /**\n * Fires MathType event listeners\n * @param {String} eventName - event name\n * @param {Event} event - event object.\n * @return {boolean} false if event has been prevented. true otherwise.\n */\n fire(eventName, event) {\n for (let i = 0; i < this.listeners.length && !event.cancelled; i += 1) {\n if (this.listeners[i].eventName === eventName) {\n // Calling listener.\n this.listeners[i].callback(event);\n }\n }\n return event.defaultPrevented;\n }\n\n /**\n * Creates a new listener object.\n * @param {string} eventName - Event name.\n * @param {Object} callback - Callback function.\n * @returns {object} the listener object.\n */\n static newListener(eventName, callback) {\n const listener = {};\n listener.eventName = eventName;\n listener.callback = callback;\n return listener;\n }\n}\n","import Util from \"./util\";\nimport Listeners from \"./listeners\";\nimport Configuration from \"./configuration\";\n\n/**\n * @typedef {Object} ServiceProviderProperties\n * @property {String} URI - Service URI.\n * @property {String} server - Service server language.\n */\n\n/**\n * @classdesc\n * Class representing a serviceProvider. A serviceProvider is a class containing\n * an arbitrary number of services with the correspondent path.\n */\nexport default class ServiceProvider {\n /**\n * Returns Service Provider listeners.\n * @type {Listeners}\n */\n static get listeners() {\n return ServiceProvider._listeners;\n }\n\n /**\n * Adds a {@link Listener} instance to {@link ServiceProvider} class.\n * @param {Listener} listener - Instance of {@link Listener}.\n */\n static addListener(listener) {\n ServiceProvider.listeners.add(listener);\n }\n\n /**\n * Fires events in Service Provider.\n * @param {String} eventName - Event name.\n * @param {Event} event - Event object.\n */\n static fireEvent(eventName, event) {\n ServiceProvider.listeners.fire(eventName, event);\n }\n\n /**\n * Service parameters.\n * @type {ServiceProviderProperties}\n *\n */\n static get parameters() {\n return ServiceProvider._parameters;\n }\n\n /**\n * Service parameters.\n * @private\n * @type {ServiceProviderProperties}\n */\n static set parameters(parameters) {\n ServiceProvider._parameters = parameters;\n }\n\n /**\n * Static property.\n * Return service provider paths.\n * @private\n * @type {String}\n */\n static get servicePaths() {\n return ServiceProvider._servicePaths;\n }\n\n /**\n * Static property setter.\n * Set service paths.\n * @param {String} value - The property value.\n * @ignore\n */\n static set servicePaths(value) {\n ServiceProvider._servicePaths = value;\n }\n\n /**\n * Adds a new service to the ServiceProvider.\n * @param {String} service - Service name.\n * @param {String} path - Service path.\n * @static\n */\n static setServicePath(service, path) {\n ServiceProvider.servicePaths[service] = path;\n }\n\n /**\n * Returns the service path for a certain service.\n * @param {String} serviceName - Service name.\n * @returns {String} The service path.\n * @static\n */\n static getServicePath(serviceName) {\n return ServiceProvider.servicePaths[serviceName];\n }\n\n /**\n * Static property.\n * Service provider integration path.\n * @type {String}\n */\n static get integrationPath() {\n return ServiceProvider._integrationPath;\n }\n\n /**\n * Static property setter.\n * Set service provider integration path.\n * @param {String} value - The property value.\n * @ignore\n */\n static set integrationPath(value) {\n ServiceProvider._integrationPath = value;\n }\n\n /**\n * Returns the server URL in the form protocol://serverName:serverPort.\n * @return {String} The client side server path.\n */\n static getServerURL() {\n const url = window.location.href;\n const arr = url.split(\"/\");\n const result = `${arr[0]}//${arr[2]}`;\n return result;\n }\n\n /**\n * Inits {@link this} class. Uses {@link this.integrationPath} as\n * base path to generate all backend services paths.\n * @param {Object} parameters - Function parameters.\n * @param {String} parameters.integrationPath - Service path.\n */\n static init(parameters) {\n ServiceProvider.parameters = parameters;\n // Services path (tech dependant).\n let configurationURI = ServiceProvider.createServiceURI(\"configurationjs\");\n let createImageURI = ServiceProvider.createServiceURI(\"createimage\");\n let showImageURI = ServiceProvider.createServiceURI(\"showimage\");\n let getMathMLURI = ServiceProvider.createServiceURI(\"getmathml\");\n let serviceURI = ServiceProvider.createServiceURI(\"service\");\n\n // Some backend integrations (like Java o Ruby) have an absolute backend path,\n // for example: /app/service. For them we calculate the absolute URL path, i.e\n // protocol://domain:port/app/service\n if (ServiceProvider.parameters.URI.indexOf(\"/\") === 0) {\n const serverPath = ServiceProvider.getServerURL();\n configurationURI = serverPath + configurationURI;\n showImageURI = serverPath + showImageURI;\n createImageURI = serverPath + createImageURI;\n getMathMLURI = serverPath + getMathMLURI;\n serviceURI = serverPath + serviceURI;\n }\n\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n ServiceProvider.setServicePath(\"showimage\", showImageURI);\n ServiceProvider.setServicePath(\"createimage\", createImageURI);\n ServiceProvider.setServicePath(\"service\", serviceURI);\n ServiceProvider.setServicePath(\"getmathml\", getMathMLURI);\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n\n ServiceProvider.listeners.fire(\"onInit\", {});\n }\n\n /**\n * Gets the content from an URL.\n * @param {String} url - Target URL.\n * @param {Object} [postVariables] - Object containing post variables.\n * null if a GET query should be done.\n * @returns {String} Content of the target URL.\n * @private\n * @static\n */\n static getUrl(url, postVariables) {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n const httpRequest = Util.createHttpRequest();\n\n if (httpRequest) {\n if (typeof postVariables === \"undefined\" || typeof postVariables === \"undefined\") {\n httpRequest.open(\"GET\", url, false);\n } else if (url.substr(0, 1) === \"/\" || url.substr(0, 7) === \"http://\" || url.substr(0, 8) === \"https://\") {\n httpRequest.open(\"POST\", url, false);\n } else {\n httpRequest.open(\"POST\", currentPath + url, false);\n }\n\n let header = Configuration.get(\"customHeaders\");\n if (header) {\n if (typeof header === \"string\") {\n header = Util.convertStringToObject(header);\n }\n Object.entries(header).forEach(([key, val]) => httpRequest.setRequestHeader(key, val));\n }\n\n if (typeof postVariables !== \"undefined\" && postVariables) {\n httpRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n httpRequest.send(Util.httpBuildQuery(postVariables));\n } else {\n httpRequest.send(null);\n }\n\n return httpRequest.responseText;\n }\n return \"\";\n }\n\n /**\n * Returns the response text of a certain service.\n * @param {String} service - Service name.\n * @param {String} postVariables - Post variables.\n * @param {Boolean} get - True if the request is GET instead of POST. false otherwise.\n * @returns {String} Service response text.\n */\n static getService(service, postVariables, get) {\n let response;\n if (get === true) {\n const getVariables = postVariables ? `?${postVariables}` : \"\";\n const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`;\n response = ServiceProvider.getUrl(serviceUrl);\n } else {\n const serviceUrl = ServiceProvider.getServicePath(service);\n response = ServiceProvider.getUrl(serviceUrl, postVariables);\n }\n return response;\n }\n\n /**\n * Returns the server language of a certain service. The possible values\n * are: php, aspx, java and ruby.\n * This method has backward compatibility purposes.\n * @param {String} service - The configuration service.\n * @returns {String} - The server technology associated with the configuration service.\n */\n static getServerLanguageFromService(service) {\n if (service.indexOf(\".php\") !== -1) {\n return \"php\";\n }\n if (service.indexOf(\".aspx\") !== -1) {\n return \"aspx\";\n }\n if (service.indexOf(\"wirispluginengine\") !== -1) {\n return \"ruby\";\n }\n return \"java\";\n }\n\n /**\n * Returns the URI associated with a certain service.\n * @param {String} service - The service name.\n * @return {String} The service path.\n */\n static createServiceURI(service) {\n const extension = ServiceProvider.serverExtension();\n return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension;\n }\n\n static serverExtension() {\n if (ServiceProvider.parameters.server.indexOf(\"php\") !== -1) {\n return \".php\";\n }\n if (ServiceProvider.parameters.server.indexOf(\"aspx\") !== -1) {\n return \".aspx\";\n }\n return \"\";\n }\n}\n\n/**\n * @property {String} service - The service name.\n * @property {String} path - The service path.\n * @static\n */\nServiceProvider._servicePaths = {};\n\n/**\n * The integration path. Contains the path of the configuration service.\n * Used to define the path for all services.\n * @type {String}\n * @private\n */\nServiceProvider._integrationPath = \"\";\n\n/**\n * ServiceProvider static listeners.\n * @type {Listeners}\n * @private\n */\nServiceProvider._listeners = new Listeners();\n\n/**\n * Service provider parameters.\n * @type {ServiceProviderParameters}\n */\nServiceProvider._parameters = {};\n","import TextCache from \"./textcache\";\nimport MathML from \"./mathml\";\nimport ServiceProvider from \"./serviceprovider\";\nimport Constants from \"./constants\";\nimport Util from \"./util\";\n\n/**\n * @classdesc\n * This class represents a LaTeX parser. Manages the services which allows to convert\n * LaTeX into MathML and MathML into LaTeX.\n */\nexport default class Latex {\n /**\n * Static property.\n * Return latex cache.\n * @private\n * @type {Cache}\n */\n static get cache() {\n return Latex._cache;\n }\n\n /**\n * Static property setter.\n * Set latex cache.\n * @param {Cache} value - The property value.\n * @ignore\n */\n static set cache(value) {\n Latex._cache = value;\n }\n\n /**\n * Converts MathML to LaTeX by calling mathml2latex service. For text services\n * we call a text service with the param mathml2latex.\n * @param {String} mathml - MathML String.\n * @return {String} LaTeX string generated by the MathML argument.\n */\n static getLatexFromMathML(mathml) {\n const mathmlWithoutSemantics = MathML.removeSemantics(mathml);\n /**\n * @type {TextCache}\n */\n const { cache } = Latex;\n\n const data = {\n service: \"mathml2latex\",\n mml: mathmlWithoutSemantics,\n };\n\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n\n // TODO: Error handling.\n let latex = \"\";\n\n if (jsonResponse.status === \"ok\") {\n latex = jsonResponse.result.text;\n const latexHtmlEntitiesEncoded = Util.htmlEntities(latex);\n // Inserting LaTeX semantics.\n const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, \"LaTeX\");\n cache.populate(latex, mathmlWithSemantics);\n }\n\n return latex;\n }\n\n /**\n * Converts LaTeX to MathML by calling latex2mathml service. For text services\n * we call a text service with the param latex2mathml.\n * @param {String} latex - String containing a LaTeX formula.\n * @param {Boolean} includeLatexOnSemantics\n * - If true LaTeX would me included into MathML semantics.\n * @return {String} MathML string generated by the LaTeX argument.\n */\n static getMathMLFromLatex(latex, includeLatexOnSemantics) {\n /**\n * @type {TextCache}\n */\n const latexCache = Latex.cache;\n\n if (Latex.cache.get(latex)) {\n return Latex.cache.get(latex);\n }\n const data = {\n service: \"latex2mathml\",\n latex,\n };\n\n if (includeLatexOnSemantics) {\n data.saveLatex = \"\";\n }\n\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n\n let output;\n if (jsonResponse.status === \"ok\") {\n let mathml = jsonResponse.result.text;\n mathml = mathml.split(\"\\r\").join(\"\").split(\"\\n\").join(\" \");\n\n // Populate LatexCache.\n if (mathml.indexOf(\"semantics\") === -1 && mathml.indexOf(\"annotation\") === -1) {\n const content = Util.htmlEntities(latex);\n mathml = MathML.addAnnotation(mathml, content, \"LaTeX\");\n output = mathml;\n } else {\n output = mathml;\n }\n if (!latexCache.get(latex)) {\n latexCache.populate(latex, mathml);\n }\n } else {\n output = `$$${latex}$$`;\n }\n return output;\n }\n\n /**\n * Converts all occurrences of MathML code to LaTeX.\n * The MathML code should containing to be converted.\n * @param {String} content - A string containing MathML valid code.\n * @param {Object} characters - An object containing special characters.\n * @return {String} A string containing all MathML annotated occurrences\n * replaced by the corresponding LaTeX code.\n */\n static parseMathmlToLatex(content, characters) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`;\n const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n let mathml;\n let startAnnotation;\n let closeAnnotation;\n\n while (start !== -1) {\n output += content.substring(end, start);\n end = content.indexOf(mathTagEnd, start);\n\n if (end === -1) {\n end = content.length - 1;\n } else {\n end += mathTagEnd.length;\n }\n\n mathml = content.substring(start, end);\n\n startAnnotation = mathml.indexOf(openTarget);\n if (startAnnotation !== -1) {\n startAnnotation += openTarget.length;\n closeAnnotation = mathml.indexOf(closeTarget);\n let latex = mathml.substring(startAnnotation, closeAnnotation);\n if (characters === Constants.safeXmlCharacters) {\n latex = MathML.safeXmlDecode(latex);\n }\n output += `$$${latex}$$`;\n // Populate latex into cache.\n\n Latex.cache.populate(latex, mathml);\n } else {\n output += mathml;\n }\n start = content.indexOf(mathTagBegin, end);\n }\n\n output += content.substring(end, content.length);\n return output;\n }\n\n /**\n * Extracts the latex of a determined position in a text.\n * @param {Node} textNode - textNode to extract the LaTeX\n * @param {Number} caretPosition - Starting position to find LaTeX.\n * @param {Object} latexTags - Optional parameter representing tags between latex is inserted.\n * It has the 'open' attribute for the open tag and the 'close' attribute for the close tag.\n * \"$$\" by default.\n * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found.\n * @static\n */\n static getLatexFromTextNode(textNode, caretPosition, latexTags) {\n // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument).\n // Tags used for LaTeX formulas.\n const defaultLatexTags = {\n open: \"$$\",\n close: \"$$\",\n };\n // latexTags is an optional parameter. If is not set, use default latexTags.\n if (typeof latexTags === \"undefined\" || latexTags == null) {\n latexTags = defaultLatexTags;\n }\n // Looking for the first textNode.\n let startNode = textNode;\n\n while (startNode.previousSibling && startNode.previousSibling.nodeType === 3) {\n // TEXT_NODE.\n startNode = startNode.previousSibling;\n }\n\n /**\n * Returns the next latex position and node from a specific node and position.\n * @param {Node} currentNode - Node where searching latex.\n * @param {Number} currentPosition - Current position inside the currentNode.\n * @param {Object} latexTagsToUse - Tags used at latex beginning and latex final.\n * \"$$\" by default.\n * @param {Boolean} tag - Tag containing the current search.\n * @returns {Object} Object containing the current node and the position.\n */\n function getNextLatexPosition(currentNode, currentPosition, tag) {\n let position = currentNode.nodeValue.indexOf(tag, currentPosition);\n\n while (position === -1) {\n currentNode = currentNode.nextSibling;\n\n if (!currentNode) {\n // TEXT_NODE.\n return null; // Not found.\n }\n\n position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1;\n }\n\n return {\n node: currentNode,\n position,\n };\n }\n\n /**\n * Determines if a node is previous, or not, to a second one.\n * @param {Node} node - Start node.\n * @param {Number} position - Start node position.\n * @param {Node} endNode - End node.\n * @param {Number} endPosition - End node position.\n * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise.\n */\n function isPrevious(node, position, endNode, endPosition) {\n if (node === endNode) {\n return position <= endPosition;\n }\n while (node && node !== endNode) {\n node = node.nextSibling;\n }\n\n return node === endNode;\n }\n\n let start;\n let end = {\n node: startNode,\n position: 0,\n };\n // Is supposed that open and close tags has the same length.\n const tagLength = latexTags.open.length;\n do {\n start = getNextLatexPosition(end.node, end.position, latexTags.open);\n\n if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) {\n return null;\n }\n\n end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close);\n\n if (end == null) {\n return null;\n }\n\n end.position += tagLength;\n } while (isPrevious(end.node, end.position, textNode, caretPosition));\n\n // Isolating latex.\n let latex;\n\n if (start.node === end.node) {\n latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength);\n } else {\n const index = start.position + tagLength;\n latex = start.node.nodeValue.substring(index, start.node.nodeValue.length);\n let currentNode = start.node;\n\n do {\n currentNode = currentNode.nextSibling;\n if (currentNode === end.node) {\n latex += end.node.nodeValue.substring(0, end.position - tagLength);\n } else {\n latex += currentNode.nodeValue ? currentNode.nodeValue : \"\";\n }\n } while (currentNode !== end.node);\n }\n\n return {\n latex,\n startNode: start.node,\n startPosition: start.position,\n endNode: end.node,\n endPosition: end.position,\n };\n }\n}\n\n/**\n * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string.\n * @type {Cache}\n * @static\n */\nLatex._cache = new TextCache();\n","import translations from \"../lang/strings.json\";\n/**\n * This class represents a string manager. It's used to load localized strings.\n */\nexport default class StringManager {\n constructor() {\n throw new Error(\"Static class StringManager can not be instantiated.\");\n }\n\n /**\n * Returns the associated value of certain string key. If the associated value\n * doesn't exits returns the original key.\n * @param {string} key - string key\n * @param {string} lang - DEFAULT = null. Specify the language to translate the string\n * @returns {string} correspondent value. If doesn't exists original key.\n */\n static get(key, lang) {\n // Default language definition\n let { language } = this;\n\n // If parameter language, use it\n if (lang) {\n language = lang;\n }\n\n // Cut down on strings. e.g. en_US -> en\n if (language && language.length > 2) {\n language = language.slice(0, 2);\n }\n\n // Check if we support the language\n if (!this.strings.hasOwnProperty(language)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown language ${language} set in StringManager.`);\n language = \"en\";\n }\n\n // Check if the key is supported in the given language\n if (!this.strings[language].hasOwnProperty(key)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown key ${key} for language ${language} in StringManager.`);\n return key;\n }\n\n return this.strings[language][key];\n }\n}\n\n/**\n * Dictionary of dictionaries:\n * Key: language code\n * Value: Key: id of the string\n * Value: translation of the string\n */\nStringManager.strings = translations;\n\n/**\n * Language of the translations; English by default\n */\nStringManager.language = \"en\";\n","/* eslint-disable no-bitwise */\nimport DOMPurify from \"dompurify\";\nimport MathML from \"./mathml\";\nimport Configuration from \"./configuration\";\nimport Latex from \"./latex\";\nimport StringManager from \"./stringmanager\";\n\n/**\n * This class represents an utility class.\n */\nexport default class Util {\n /**\n * Fires an event in a target.\n * @param {EventTarget} eventTarget - target where event should be fired.\n * @param {string} eventName event to fire.\n * @static\n */\n static fireEvent(eventTarget, eventName) {\n if (document.createEvent) {\n const eventObject = document.createEvent(\"HTMLEvents\");\n eventObject.initEvent(eventName, true, true);\n return !eventTarget.dispatchEvent(eventObject);\n }\n\n const eventObject = document.createEventObject();\n return eventTarget.fireEvent(`on${eventName}`, eventObject);\n }\n\n /**\n * Cross-browser addEventListener/attachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - callback function.\n * @static\n */\n static addEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.addEventListener) {\n eventTarget.addEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.attachEvent) {\n // Backwards compatibility.\n eventTarget.attachEvent(`on${eventName}`, callBackFunction);\n }\n }\n\n /**\n * Cross-browser removeEventListener/detachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - function to remove from the event target.\n * @static\n */\n static removeEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.removeEventListener) {\n eventTarget.removeEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.detachEvent) {\n eventTarget.detachEvent(`on${eventName}`, callBackFunction);\n }\n }\n\n /**\n * Adds the a callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @param {Function} doubleClickHandler - function to run when on dblclick event.\n * @param {Function} mousedownHandler - function to run when on mousedown event.\n * @param {Function} mouseupHandler - function to run when on mouseup event.\n * @static\n */\n static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) {\n if (doubleClickHandler) {\n this.callbackDblclick = (event) => {\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n doubleClickHandler(element, realEvent);\n };\n\n Util.addEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n }\n\n if (mousedownHandler) {\n this.callbackMousedown = (event) => {\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mousedownHandler(element, realEvent);\n };\n\n Util.addEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n }\n\n if (mouseupHandler) {\n this.callbackMouseup = (event) => {\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mouseupHandler(element, realEvent);\n };\n // Chrome doesn't trigger this event for eventTarget if we release the mouse button\n // while the mouse is outside the editor text field.\n // This is a workaround: we trigger the event independently of where the mouse\n // is when we release its button.\n Util.addEvent(document, \"mouseup\", this.callbackMouseup);\n Util.addEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n }\n\n /**\n * Remove all callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @static\n */\n static removeElementEvents(eventTarget) {\n Util.removeEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n Util.removeEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n Util.removeEvent(document, \"mouseup\", this.callbackMouseup);\n Util.removeEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n\n /**\n * Adds a class name to a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */\n static addClass(element, className) {\n if (!Util.containsClass(element, className)) {\n element.className += ` ${className}`;\n }\n }\n\n /**\n * Checks if a HTMLElement contains a certain class.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the className.\n * @returns {boolean} true if the HTMLElement contains the class name. false otherwise.\n * @static\n */\n static containsClass(element, className) {\n if (element == null || !(\"className\" in element)) {\n return false;\n }\n\n const currentClasses = element.className.split(\" \");\n\n for (let i = currentClasses.length - 1; i >= 0; i -= 1) {\n if (currentClasses[i] === className) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Remove a certain class for a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */\n static removeClass(element, className) {\n let newClassName = \"\";\n const classes = element.className.split(\" \");\n\n for (let i = 0; i < classes.length; i += 1) {\n if (classes[i] !== className) {\n newClassName += `${classes[i]} `;\n }\n }\n element.className = newClassName.trim();\n }\n\n /**\n * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's\n * used to parse old applets.\n * @param {string} text - string containing safeXml characters\n * @returns {string} a string with safeXml characters parsed.\n * @static\n */\n static convertOldXmlinitialtextAttribute(text) {\n // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x.\n // This could be removed in future.\n const val = \"value=\";\n\n const xitpos = text.indexOf(\"xmlinitialtext\");\n const valpos = text.indexOf(val, xitpos);\n const quote = text.charAt(valpos + val.length);\n const startquote = valpos + val.length + 1;\n const endquote = text.indexOf(quote, startquote);\n\n const value = text.substring(startquote, endquote);\n\n let newvalue = value.split(\"«\").join(\"§lt;\");\n newvalue = newvalue.split(\"»\").join(\"§gt;\");\n newvalue = newvalue.split(\"&\").join(\"§\");\n newvalue = newvalue.split(\"¨\").join(\"§quot;\");\n\n text = text.split(value).join(newvalue);\n return text;\n }\n\n /**\n * Convert a string representation of key-value pairs to an object.\n * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2'\n * @returns {Object} - Object containing the key-value pairs\n */\n static convertStringToObject(keyValueString) {\n if (!keyValueString || typeof keyValueString !== \"string\") {\n return {};\n }\n\n return keyValueString\n .split(\",\")\n .map((pair) => pair.trim().split(\"=\"))\n .reduce((resultObject, [key, value]) => {\n if (key && value) {\n resultObject[key] = value;\n }\n return resultObject;\n }, {});\n }\n\n /**\n * Cross-browser solution for creating new elements.\n * @param {string} tagName - tag name of the wished element.\n * @param {Object} attributes - an object where each key is a wished\n * attribute name and each value is its value.\n * @param {Object} [creator] - if supplied, this function will use\n * the \"createElement\" method from this param. Otherwise\n * document will be used as creator.\n * @returns {Element} The DOM element with the specified attributes assigned.\n * @static\n */\n static createElement(tagName, attributes, creator) {\n if (attributes === undefined) {\n attributes = {};\n }\n\n if (creator === undefined) {\n creator = document;\n }\n\n let element;\n\n /*\n * Internet Explorer fix:\n * If you create a new object dynamically, you can't set a non-standard attribute.\n * For example, you can't set the \"src\" attribute on an \"applet\" object.\n * Other browsers will throw an exception and will run the standard code.\n */\n try {\n let html = `<${tagName}`;\n\n Object.keys(attributes).forEach((attributeName) => {\n html += ` ${attributeName}=\"${Util.htmlEntities(attributes[attributeName])}\"`;\n });\n html += \">\";\n element = creator.createElement(html);\n } catch (e) {\n element = creator.createElement(tagName);\n Object.keys(attributes).forEach((attributeName) => {\n element.setAttribute(attributeName, attributes[attributeName]);\n });\n }\n return element;\n }\n\n /**\n * Creates new HTML from it's HTML code as string.\n * @param {string} objectCode - html code\n * @returns {Element} the HTML element.\n * @static\n */\n static createObject(objectCode, creator) {\n if (creator === undefined) {\n creator = document;\n }\n\n // Internet Explorer can't include \"param\" tag when is setting an innerHTML property.\n objectCode = objectCode\n .split(\"\").join(\"\").split(\"\").join(\"\");\n\n objectCode = objectCode\n .split(\"\").join(\"
\").split(\"\").join(\"
\");\n\n const container = Util.createElement(\"div\", {}, creator);\n container.innerHTML = objectCode;\n\n function recursiveParamsFix(object) {\n if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisParam\") {\n const attributesParsed = {};\n\n for (let i = 0; i < object.attributes.length; i += 1) {\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n\n const param = Util.createElement(\"param\", attributesParsed, creator);\n\n // IE fix.\n if (param.NAME) {\n param.name = param.NAME;\n param.value = param.VALUE;\n }\n\n param.removeAttribute(\"wirisObject\");\n object.parentNode.replaceChild(param, object);\n } else if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisApplet\") {\n const attributesParsed = {};\n\n for (let i = 0; i < object.attributes.length; i += 1) {\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n\n const applet = Util.createElement(\"applet\", attributesParsed, creator);\n applet.removeAttribute(\"wirisObject\");\n\n for (let i = 0; i < object.childNodes.length; i += 1) {\n recursiveParamsFix(object.childNodes[i]);\n\n if (object.childNodes[i].nodeName.toLowerCase() === \"param\") {\n applet.appendChild(object.childNodes[i]);\n i -= 1; // When we insert the object child into the applet, object loses one child.\n }\n }\n\n object.parentNode.replaceChild(applet, object);\n } else {\n for (let i = 0; i < object.childNodes.length; i += 1) {\n recursiveParamsFix(object.childNodes[i]);\n }\n }\n }\n\n recursiveParamsFix(container);\n return container.firstChild;\n }\n\n /**\n * Converts an Element to its HTML code.\n * @param {Element} element - entry element.\n * @return {string} the HTML code of the input element.\n * @static\n */\n static createObjectCode(element) {\n // In case that the image was not created, the object can be null or undefined.\n if (typeof element === \"undefined\" || element === null) {\n return null;\n }\n\n if (element.nodeType === 1) {\n // ELEMENT_NODE.\n let output = `<${element.tagName}`;\n\n for (let i = 0; i < element.attributes.length; i += 1) {\n if (element.attributes[i].specified) {\n output += ` ${element.attributes[i].name}=\"${Util.htmlEntities(element.attributes[i].value)}\"`;\n }\n }\n\n if (element.childNodes.length > 0) {\n output += \">\";\n\n for (let i = 0; i < element.childNodes.length; i += 1) {\n output += Util.createObject(element.childNodes[i]);\n }\n\n output += ``;\n } else if (element.nodeName === \"DIV\" || element.nodeName === \"SCRIPT\") {\n output += `>`;\n } else {\n output += \"/>\";\n }\n\n return output;\n }\n\n if (element.nodeType === 3) {\n // TEXT_NODE.\n return Util.htmlEntities(element.nodeValue);\n }\n\n return \"\";\n }\n\n /**\n * Concatenates two URL paths.\n * @param {string} path1 - first URL path\n * @param {string} path2 - second URL path\n * @returns {string} new URL.\n */\n static concatenateUrl(path1, path2) {\n let separator = \"\";\n if (path1.indexOf(\"/\") !== path1.length && path2.indexOf(\"/\") !== 0) {\n separator = \"/\";\n }\n return (path1 + separator + path2).replace(/([^:]\\/)\\/+/g, \"$1\");\n }\n\n /**\n * Parses a text and replaces all HTML special characters by their correspondent entities.\n * @param {string} input - text to be parsed.\n * @returns {string} the input text with all their special characters replaced by their entities.\n * @static\n */\n static htmlEntities(input) {\n return input.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\");\n }\n\n /**\n * Sanitize HTML to prevent XSS injections.\n * @param {string} html - html to be sanitize.\n * @returns {string} html sanitized.\n * @static\n */\n static htmlSanitize(html) {\n let annotationRegex = /\\/;\n // Get all the annotation content including the tags.\n let annotation = html.match(annotationRegex);\n // Sanitize html code without removing our supported MathML tags and attributes.\n html = DOMPurify.sanitize(html, {\n ADD_TAGS: [\"semantics\", \"annotation\", \"mstack\", \"msline\", \"msrow\"],\n ADD_ATTR: [\"linebreak\", \"charalign\", \"stackalign\"],\n });\n // Readd old annotation content.\n return html.replace(annotationRegex, annotation);\n }\n\n /**\n * Parses a text and replaces all the HTML entities by their characters.\n * @param {string} input - text to be parsed\n * @returns {string} the input text with all their entities replaced by characters.\n * @static\n */\n static htmlEntitiesDecode(input) {\n // Textarea element decodes when inner html is set.\n const textarea = document.createElement(\"textarea\");\n textarea.innerHTML = input;\n return textarea.value;\n }\n\n /**\n * Returns a cross-browser http request.\n * @return {object} httpRequest request object.\n * @returns {XMLHttpRequest|ActiveXObject} the proper request object.\n */\n static createHttpRequest() {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n if (currentPath.substr(0, 7) === \"file://\") {\n throw StringManager.get(\"exception_cross_site\");\n }\n\n if (typeof XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"Msxml2.XMLHTTP\");\n } catch (e) {\n try {\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (oc) {\n return null;\n }\n }\n }\n\n /**\n * Converts a hash to a HTTP query.\n * @param {Object[]} properties - a key/value object.\n * @returns {string} a HTTP query containing all the key value pairs with\n * all the special characters replaced by their entities.\n * @static\n */\n static httpBuildQuery(properties) {\n let result = \"\";\n\n Object.keys(properties).forEach((i) => {\n if (properties[i] != null) {\n result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`;\n }\n });\n\n // Deleting last '&' empty character.\n if (result.substring(result.length - 1) === \"&\") {\n result = result.substring(0, result.length - 1);\n }\n\n return result;\n }\n\n /**\n * Convert a hash to string sorting keys to get a deterministic output\n * @param {Object[]} hash - a key/value object.\n * @returns {string} a string with the form key1=value1...keyn=valuen\n * @static\n */\n static propertiesToString(hash) {\n // 1. Sort keys. We sort the keys because we want a deterministic output.\n const keys = [];\n Object.keys(hash).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(hash, key)) {\n keys.push(key);\n }\n });\n\n const n = keys.length;\n for (let i = 0; i < n; i += 1) {\n for (let j = i + 1; j < n; j += 1) {\n const s1 = keys[i];\n const s2 = keys[j];\n if (Util.compareStrings(s1, s2) > 0) {\n // Swap.\n keys[i] = s2;\n keys[j] = s1;\n }\n }\n }\n\n // 2. Generate output.\n let output = \"\";\n for (let i = 0; i < n; i += 1) {\n const key = keys[i];\n output += key;\n output += \"=\";\n let value = hash[key];\n value = value.replace(\"\\\\\", \"\\\\\\\\\");\n value = value.replace(\"\\n\", \"\\\\n\");\n value = value.replace(\"\\r\", \"\\\\r\");\n value = value.replace(\"\\t\", \"\\\\t\");\n\n output += value;\n output += \"\\n\";\n }\n return output;\n }\n\n /**\n * Compare two strings using charCodeAt method\n * @param {string} a - first string to compare.\n * @param {string} b - second string to compare.\n * @returns {number} the difference between a and b\n * @static\n */\n static compareStrings(a, b) {\n let i;\n const an = a.length;\n const bn = b.length;\n const n = an > bn ? bn : an;\n for (i = 0; i < n; i += 1) {\n const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i);\n if (c !== 0) {\n return c;\n }\n }\n return a.length - b.length;\n }\n\n /**\n * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters.\n * @param {string} string - input string\n * @param {number} idx - an integer greater than or equal to 0\n * and less than the length of the string\n * @returns {number} an integer representing the UTF-16 code of the string at the given index.\n * @static\n */\n static fixedCharCodeAt(string, idx) {\n idx = idx || 0;\n const code = string.charCodeAt(idx);\n let hi;\n let low;\n\n /* High surrogate (could change last hex to 0xDB7F to treat high\n private surrogates as single characters) */\n\n if (code >= 0xd800 && code <= 0xdbff) {\n hi = code;\n low = string.charCodeAt(idx + 1);\n if (Number.isNaN(low)) {\n throw StringManager.get(\"exception_high_surrogate\");\n }\n return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000;\n }\n\n if (code >= 0xdc00 && code <= 0xdfff) {\n // Low surrogate.\n /* We return false to allow loops to skip this iteration since should have\n already handled high surrogate above in the previous iteration. */\n return false;\n }\n return code;\n }\n\n /**\n * Returns an URL with it's query params converted into array.\n * @param {string} url - input URL.\n * @returns {Object[]} an array containing all URL query params.\n * @static\n */\n static urlToAssArray(url) {\n let i;\n i = url.indexOf(\"?\");\n if (i > 0) {\n const query = url.substring(i + 1);\n const ss = query.split(\"&\");\n const h = {};\n for (i = 0; i < ss.length; i += 1) {\n const s = ss[i];\n const kv = s.split(\"=\");\n if (kv.length > 1) {\n h[kv[0]] = decodeURIComponent(kv[1].replace(/\\+/g, \" \"));\n }\n }\n return h;\n }\n return {};\n }\n\n /**\n * Returns an encoded URL by replacing each instance of certain characters by\n * one, two, three or four escape sequences using encodeURIComponent method.\n * !'()* . will not be encoded.\n *\n * @param {string} clearString - URL string to be encoded\n * @returns {string} URL with it's special characters replaced.\n * @static\n */\n static urlEncode(clearString) {\n let output = \"\";\n // Method encodeURIComponent doesn't encode !'()*~ .\n output = encodeURIComponent(clearString);\n return output;\n }\n\n // TODO: To parser?\n /**\n * Converts the HTML of a image into the output code that WIRIS must return.\n * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula)\n * or the Wiriscas attribute of a WIRIS applet.\n * @param {string} imgCode - the html code from a formula or a CAS image.\n * @param {boolean} convertToXml - true if the image should be converted to XML.\n * @param {boolean} convertToSafeXml - true if the image should be converted to safeXML.\n * @returns {string} the XML or safeXML of a WIRIS image.\n * @static\n */\n static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) {\n const imgObject = Util.createObject(imgCode);\n if (imgObject) {\n if (\n imgObject.className === Configuration.get(\"imageClassName\") ||\n imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"))\n ) {\n if (!convertToXml) {\n return imgCode;\n }\n\n const dataMathML = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n // To handle annotations, first we need the MathML in XML.\n let mathML = MathML.safeXmlDecode(dataMathML);\n\n if (!Configuration.get(\"saveHandTraces\")) {\n mathML = MathML.removeAnnotation(mathML, \"application/json\");\n }\n\n if (mathML == null) {\n mathML = imgObject.getAttribute(\"alt\");\n }\n\n if (convertToSafeXml) {\n const safeMathML = MathML.safeXmlEncode(mathML);\n return safeMathML;\n }\n\n return mathML;\n }\n }\n return imgCode;\n }\n\n /**\n * Gets the node length in characters.\n * @param {Node} node - HTML node.\n * @returns {number} node length.\n * @static\n */\n static getNodeLength(node) {\n const staticNodeLengths = {\n IMG: 1,\n BR: 1,\n };\n\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return node.nodeValue.length;\n }\n\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n let length = staticNodeLengths[node.nodeName.toUpperCase()];\n\n if (length === undefined) {\n length = 0;\n }\n\n for (let i = 0; i < node.childNodes.length; i += 1) {\n length += Util.getNodeLength(node.childNodes[i]);\n }\n return length;\n }\n return 0;\n }\n\n /**\n * Gets a selected node or text from an editable HTMLElement.\n * If the caret is on a text node, concatenates it with all the previous and next text nodes.\n * @param {HTMLElement} target - the editable HTMLElement.\n * @param {boolean} isIframe - specifies if the target is an iframe or not\n * @param {boolean} forceGetSelection - if true, ignores IE system to get\n * the current selection and uses window.getSelection()\n * @returns {object} an object with the 'node' key set if the item is an\n * element or the keys 'node' and 'caretPosition' if the element is text.\n * @static\n */\n static getSelectedItem(target, isIframe, forceGetSelection) {\n let windowTarget;\n\n if (isIframe) {\n windowTarget = target.contentWindow;\n windowTarget.focus();\n } else {\n windowTarget = window;\n target.focus();\n }\n\n if (document.selection && !forceGetSelection) {\n const range = windowTarget.document.selection.createRange();\n\n if (range.parentElement) {\n if (range.htmlText.length > 0) {\n if (range.text.length === 0) {\n return Util.getSelectedItem(target, isIframe, true);\n }\n\n return null;\n }\n\n windowTarget.document.execCommand(\"InsertImage\", false, \"#\");\n let temporalObject = range.parentElement();\n\n if (temporalObject.nodeName.toUpperCase() !== \"IMG\") {\n // IE9 fix: parentElement() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML('');\n temporalObject = windowTarget.document.getElementById(\"wrs_openEditorWindow_temporalObject\");\n }\n\n let node;\n let caretPosition;\n\n if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) {\n // TEXT_NODE.\n node = temporalObject.nextSibling;\n caretPosition = 0;\n } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) {\n node = temporalObject.previousSibling;\n caretPosition = node.nodeValue.length;\n } else {\n node = windowTarget.document.createTextNode(\"\");\n temporalObject.parentNode.insertBefore(node, temporalObject);\n caretPosition = 0;\n }\n\n temporalObject.parentNode.removeChild(temporalObject);\n\n return {\n node,\n caretPosition,\n };\n }\n\n if (range.length > 1) {\n return null;\n }\n\n return {\n node: range.item(0),\n };\n }\n\n if (windowTarget.getSelection) {\n let range;\n const selection = windowTarget.getSelection();\n\n try {\n range = selection.getRangeAt(0);\n } catch (e) {\n range = windowTarget.document.createRange();\n }\n\n const node = range.startContainer;\n\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return {\n node,\n caretPosition: range.startOffset,\n };\n }\n\n if (node !== range.endContainer) {\n return null;\n }\n\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n const position = range.startOffset;\n\n if (node.childNodes[position]) {\n // In case that a formula is detected but not selected,\n // we create an empty span where we could insert the new formula.\n if (range.startOffset === range.endOffset) {\n if (\n position !== 0 &&\n node.childNodes[position - 1].localName === \"span\" &&\n node.childNodes[position].classList?.contains(\"Wirisformula\")\n ) {\n node.childNodes[position - 1].remove();\n return Util.getSelectedItem(target, isIframe, forceGetSelection);\n } else if (node.childNodes[position].classList?.contains(\"Wirisformula\")) {\n if (\n (position > 0 && node.childNodes[position - 1].classList?.contains(\"Wirisformula\")) ||\n position === 0\n ) {\n var emptySpan = document.createElement(\"span\");\n node.insertBefore(emptySpan, node.childNodes[position]);\n return {\n node: node.childNodes[position],\n };\n }\n }\n }\n return {\n node: node.childNodes[position],\n };\n }\n }\n }\n\n return null;\n }\n\n /**\n * Returns null if there isn't any item or if it is malformed.\n * Otherwise returns an object containing the node with the MathML image\n * and the cursor position inside the textarea.\n * @param {HTMLTextAreaElement} textarea - textarea element.\n * @returns {Object} An object containing the node, the index of the\n * beginning of the selected text, caret position and the start and end position of the\n * text node.\n * @static\n */\n static getSelectedItemOnTextarea(textarea) {\n const textNode = document.createTextNode(textarea.value);\n const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart);\n if (textNodeValues === null) {\n return null;\n }\n\n return {\n node: textNode,\n caretPosition: textarea.selectionStart,\n startPosition: textNodeValues.startPosition,\n endPosition: textNodeValues.endPosition,\n };\n }\n\n /**\n * Looks for elements that match the given name in a HTML code string.\n * Important: this function is very concrete for WIRIS code.\n * It takes as preconditions lots of behaviors that are not the general case.\n * @param {string} code - HTML code.\n * @param {string} name - element name.\n * @param {boolean} autoClosed - true if the elements are autoClosed.\n * @return {Object[]} an object containing all HTML elements of code matching the name argument.\n * @static\n */\n static getElementsByNameFromString(code, name, autoClosed) {\n const elements = [];\n code = code.toLowerCase();\n name = name.toLowerCase();\n let start = code.indexOf(`<${name} `);\n\n while (start !== -1) {\n // Look for nodes.\n let endString;\n\n if (autoClosed) {\n endString = \">\";\n } else {\n endString = ``;\n }\n\n let end = code.indexOf(endString, start);\n\n if (end !== -1) {\n end += endString.length;\n elements.push({\n start,\n end,\n });\n } else {\n end = start + 1;\n }\n\n start = code.indexOf(`<${name} `, end);\n }\n\n return elements;\n }\n\n /**\n * Returns the numeric value of a base64 character.\n * @param {string} character - base64 character.\n * @returns {number} base64 character numeric value.\n * @static\n */\n static decode64(character) {\n const PLUS = \"+\".charCodeAt(0);\n const SLASH = \"/\".charCodeAt(0);\n const NUMBER = \"0\".charCodeAt(0);\n const LOWER = \"a\".charCodeAt(0);\n const UPPER = \"A\".charCodeAt(0);\n const PLUS_URL_SAFE = \"-\".charCodeAt(0);\n const SLASH_URL_SAFE = \"_\".charCodeAt(0);\n const code = character.charCodeAt(0);\n\n if (code === PLUS || code === PLUS_URL_SAFE) {\n return 62; // Char '+'.\n }\n if (code === SLASH || code === SLASH_URL_SAFE) {\n return 63; // Char '/'.\n }\n if (code < NUMBER) {\n return -1; // No match.\n }\n if (code < NUMBER + 10) {\n return code - NUMBER + 26 + 26;\n }\n if (code < UPPER + 26) {\n return code - UPPER;\n }\n if (code < LOWER + 26) {\n return code - LOWER + 26;\n }\n\n return null;\n }\n\n /**\n * Converts a base64 string to a array of bytes.\n * @param {string} b64String - base64 string.\n * @param {number} length - dimension of byte array (by default whole string).\n * @return {Object[]} the resultant byte array.\n * @static\n */\n static b64ToByteArray(b64String, length) {\n let tmp;\n\n if (b64String.length % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\"); // Tipped base64. Length is fixed.\n }\n\n const arr = [];\n\n let l;\n let placeHolders;\n if (!length) {\n // All b64String string.\n if (b64String.charAt(b64String.length - 2) === \"=\") {\n placeHolders = 2;\n } else if (b64String.charAt(b64String.length - 1) === \"=\") {\n placeHolders = 1;\n } else {\n placeHolders = 0;\n }\n l = placeHolders > 0 ? b64String.length - 4 : b64String.length;\n } else {\n l = length;\n }\n\n let i;\n for (i = 0; i < l; i += 4) {\n // Ignoring code checker standards (bitewise operators).\n // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information.\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp =\n (Util.decode64(b64String.charAt(i)) << 18) |\n (Util.decode64(b64String.charAt(i + 1)) << 12) |\n (Util.decode64(b64String.charAt(i + 2)) << 6) |\n Util.decode64(b64String.charAt(i + 3));\n\n arr.push((tmp >> 16) & 0xff);\n arr.push((tmp >> 8) & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n\n if (placeHolders) {\n if (placeHolders === 2) {\n // Ignoring code checker standards (bitewise operators).\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp = (Util.decode64(b64String.charAt(i)) << 2) | (Util.decode64(b64String.charAt(i + 1)) >> 4);\n arr.push(tmp & 0xff);\n } else if (placeHolders === 1) {\n // eslint-disable-next-line max-len\n tmp =\n (Util.decode64(b64String.charAt(i)) << 10) |\n (Util.decode64(b64String.charAt(i + 1)) << 4) |\n (Util.decode64(b64String.charAt(i + 2)) >> 2);\n arr.push((tmp >> 8) & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n }\n return arr;\n }\n\n /**\n * Returns the first 32-bit signed integer from a byte array.\n * @param {Object[]} bytes - array of bytes.\n * @returns {number} the 32-bit signed integer.\n * @static\n */\n static readInt32(bytes) {\n if (bytes.length < 4) {\n return false;\n }\n const int32 = bytes.splice(0, 4);\n // @codingStandardsIgnoreStart¡\n return (int32[0] << 24) | (int32[1] << 16) | (int32[2] << 8) | (int32[3] << 0);\n // @codingStandardsIgnoreEnd\n }\n\n /**\n * Read the first byte from a byte array.\n * @param {Object} bytes - input byte array.\n * @returns {number} first byte of the byte array.\n * @static\n */\n static readByte(bytes) {\n // @codingStandardsIgnoreStart\n return bytes.shift() << 0;\n // @codingStandardsIgnoreEnd\n }\n\n /**\n * Read an arbitrary number of bytes, from a fixed position on a byte array.\n * @param {Object[]} bytes - byte array.\n * @param {number} pos - start position.\n * @param {number} len - number of bytes to read.\n * @returns {Object[]} the byte array.\n * @static\n */\n static readBytes(bytes, pos, len) {\n return bytes.splice(pos, len);\n }\n\n /**\n * Inserts or modifies formulas or CAS on a textarea.\n * @param {HTMLTextAreaElement} textarea - textarea target.\n * @param {string} text - text to add in the textarea. For example, to add the link to the image,\n * call this function as (textarea, Parser.createImageSrc(mathml));\n * @static\n */\n static updateTextArea(textarea, text) {\n if (textarea && text) {\n textarea.focus();\n\n if (textarea.selectionStart != null) {\n const { selectionEnd } = textarea;\n const selectionStart = textarea.value.substring(0, textarea.selectionStart);\n const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length);\n textarea.value = selectionStart + text + selectionEndSub;\n textarea.selectionEnd = selectionEnd + text.length;\n } else {\n const selection = document.selection.createRange();\n selection.text = text;\n }\n }\n }\n\n /**\n * Modifies existing formula on a textarea.\n * @param {HTMLTextAreaElement} textarea - text area target.\n * @param {string} text - text to add in the textarea. For example, if you want to add the link\n * to the image,you can call this function as\n * Util.updateTextarea(textarea, Parser.createImageSrc(mathml));\n * @param {number} start - beginning index from textarea where it needs to be replaced by text.\n * @param {number} end - ending index from textarea where it needs to be replaced by text\n * @static\n */\n static updateExistingTextOnTextarea(textarea, text, start, end) {\n textarea.focus();\n const textareaStart = textarea.value.substring(0, start);\n textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length);\n textarea.selectionEnd = start + text.length;\n }\n\n /**\n * Add a parameter with it's correspondent value to an URL (GET).\n * @param {string} path - URL path\n * @param {string} parameter - parameter\n * @param {string} value - value\n * @static\n */\n static addArgument(path, parameter, value) {\n let sep;\n if (path.indexOf(\"?\") > 0) {\n sep = \"&\";\n } else {\n sep = \"?\";\n }\n return `${path + sep + parameter}=${value}`;\n }\n}\n","import Configuration from \"./configuration\";\nimport Util from \"./util\";\n\n/**\n * @classdesc\n * This class represents MathType Image class. Contains all the logic related\n * to MathType images manipulation.\n * All MathType images are generated using the appropriate MathType\n * integration service: showimage or createimage.\n *\n * There are two available image formats:\n * - svg (default)\n * - png\n *\n * There are two formats for the image src attribute:\n * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64.\n * - A link to the showimage service.\n */\nexport default class Image {\n /**\n * Removes data attributes from an image.\n * @param {HTMLImageElement} img - Image where remove data attributes.\n */\n static removeImgDataAttributes(img) {\n const attributesToRemove = [];\n const { attributes } = img;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf(\"data-\") === 0) {\n // Is preferred keep an array and remove after the search\n // because when attribute is removed the array of attributes\n // is modified.\n attributesToRemove.push(attribute.name);\n }\n });\n\n attributesToRemove.forEach((attribute) => {\n img.removeAttribute(attribute);\n });\n }\n\n /**\n * @static\n * Clones all MathType image attributes from a HTMLImageElement to another.\n * @param {HTMLImageElement} originImg - The original image.\n * @param {HTMLImageElement} destImg - The destination image.\n */\n static clone(originImg, destImg) {\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (!originImg.hasAttribute(customEditorAttributeName)) {\n destImg.removeAttribute(customEditorAttributeName);\n }\n\n const mathmlAttributeName = Configuration.get(\"imageMathmlAttribute\");\n const imgAttributes = [\n mathmlAttributeName,\n customEditorAttributeName,\n \"alt\",\n \"height\",\n \"width\",\n \"style\",\n \"src\",\n \"role\",\n ];\n\n imgAttributes.forEach((iterator) => {\n const originAttribute = originImg.getAttribute(iterator);\n if (originAttribute) {\n destImg.setAttribute(iterator, originAttribute);\n }\n });\n }\n\n /**\n * Determines whether an img src contains an SVG.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src contains an SVG, false otherwise\n */\n static isSvg(img) {\n return img.src.startsWith(\"data:image/svg+xml;\");\n }\n\n /**\n * Determines whether an img src is encoded in base64 or not.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src is encoded in base64, false otherwise\n */\n static isBase64(img) {\n return img.src.startsWith(\"data:image/svg+xml;base64,\") || img.src.startsWith(\"data:image/png;base64,\");\n }\n\n /**\n * Calculates the metrics of a MathType image given the the service response and the image format.\n * @param {HTMLImageElement} img - The HTMLImageElement.\n * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL.\n * @param {Boolean} jsonResponse - True the response of the image service is a\n * JSON object. False otherwise.\n */\n static setImgSize(img, uri, jsonResponse) {\n let ar;\n let base64String;\n let bytes;\n let svgString;\n if (jsonResponse) {\n // Cleaning data:image/png;base64.\n if (Image.isSvg(img)) {\n // SVG format.\n // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string.\n if (!Image.isBase64(img)) {\n ar = Image.getMetricsFromSvgString(uri);\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n svgString = \"\";\n bytes = Util.b64ToByteArray(base64String, base64String.length);\n for (let i = 0; i < bytes.length; i += 1) {\n svgString += String.fromCharCode(bytes[i]);\n }\n ar = Image.getMetricsFromSvgString(svgString);\n }\n // PNG format: we store all metrics information in the first 88 bytes.\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n bytes = Util.b64ToByteArray(base64String, 88);\n ar = Image.getMetricsFromBytes(bytes);\n }\n // Backwards compatibility: we store the metrics into createimage response.\n } else {\n ar = Util.urlToAssArray(uri);\n }\n let width = ar.cw;\n if (!width) {\n return;\n }\n let height = ar.ch;\n let baseline = ar.cb;\n const { dpi } = ar;\n if (dpi) {\n width = (width * 96) / dpi;\n height = (height * 96) / dpi;\n baseline = (baseline * 96) / dpi;\n }\n img.width = width;\n img.height = height;\n img.style.verticalAlign = `-${height - baseline}px`;\n }\n\n /**\n * Calculates the metrics of an image which has been resized. Is used to restore the original\n * metrics of a resized image.\n * @param {HTMLImageElement } img - The resized HTMLImageElement.\n */\n static fixAfterResize(img) {\n img.removeAttribute(\"style\");\n img.removeAttribute(\"width\");\n img.removeAttribute(\"height\");\n // In order to avoid resize with max-width css property.\n img.style.maxWidth = \"none\";\n\n const processImg = (img) => {\n if (img.src.indexOf(\"data:image\") !== -1) {\n if (img.src.indexOf(\"data:image/svg+xml\") !== -1) {\n // Image is in base64: decode it in order to calculate the size, and then bring it back to base64\n // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it\n // (which would actually make more sense for readibility and efficiency).\n if (img.src.indexOf(\"data:image/svg+xml;base64,\") !== -1) {\n // 'data:image/svg+xml;base64,'.length === 26\n const base64String = img.getAttribute(\"src\").substring(26);\n const svgString = window.atob(base64String);\n const encodedSvgString = encodeURIComponent(svgString);\n img.setAttribute(\"src\", `data:image/svg+xml;charset=utf8,${encodedSvgString}`);\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n // Return src to base64!\n img.setAttribute(\"src\", `data:image/svg+xml;base64,${base64String}`);\n } else {\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n }\n } else {\n // 'data:image/png;base64,' === 22.\n const base64 = img.src.substring(22, img.src.length);\n Image.setImgSize(img, base64, true);\n }\n } else {\n Image.setImgSize(img, img.src);\n }\n };\n\n // If the image doesn't contain a blob, just process it normally\n if (img.src.indexOf(\"blob:\") === -1) {\n processImg(img);\n // if it does contain a blob, then read that, replace the src with the decoded content, and process it\n } else {\n let reader = new FileReader();\n reader.onload = function () {\n img.setAttribute(\"src\", reader.result);\n processImg(img);\n };\n fetch(img.src)\n .then((r) => r.blob())\n .then((blob) => {\n reader.readAsDataURL(blob);\n });\n }\n }\n\n /**\n * Returns the metrics (height, width and baseline) contained in a SVG image generated\n * by the MathType image service. This image contains as an extra custom attribute:\n * the baseline (wrs:baseline).\n * @param {String} svgString - The SVG image.\n * @return {Array} - The image metrics.\n */\n static getMetricsFromSvgString(svgString) {\n let first = svgString.indexOf('height=\"');\n let last = svgString.indexOf('\"', first + 8, svgString.length);\n const height = svgString.substring(first + 8, last);\n\n first = svgString.indexOf('width=\"');\n last = svgString.indexOf('\"', first + 7, svgString.length);\n const width = svgString.substring(first + 7, last);\n\n first = svgString.indexOf('wrs:baseline=\"');\n last = svgString.indexOf('\"', first + 14, svgString.length);\n const baseline = svgString.substring(first + 14, last);\n\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n if (typeof baseline !== \"undefined\") {\n arr.cb = baseline;\n }\n return arr;\n }\n return [];\n }\n\n /**\n * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array.\n * @param {Array.} bytes - png byte array.\n * @return {Array} The png metrics.\n */\n static getMetricsFromBytes(bytes) {\n Util.readBytes(bytes, 0, 8);\n let width;\n let height;\n let typ;\n let baseline;\n let dpi;\n while (bytes.length >= 4) {\n typ = Util.readInt32(bytes);\n if (typ === 0x49484452) {\n width = Util.readInt32(bytes);\n height = Util.readInt32(bytes);\n // Read 5 bytes.\n Util.readInt32(bytes);\n Util.readByte(bytes);\n } else if (typ === 0x62615345) {\n // Baseline: 'baSE'.\n baseline = Util.readInt32(bytes);\n } else if (typ === 0x70485973) {\n // Dpis: 'pHYs'.\n dpi = Util.readInt32(bytes);\n dpi = Math.round(dpi / 39.37);\n Util.readInt32(bytes);\n Util.readByte(bytes);\n }\n Util.readInt32(bytes);\n }\n\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n arr.dpi = dpi;\n if (baseline) {\n arr.cb = baseline;\n }\n\n return arr;\n }\n return [];\n }\n}\n","import TextCache from \"./textcache\";\nimport ServiceProvider from \"./serviceprovider\";\nimport MathML from \"./mathml\";\nimport StringManager from \"./stringmanager\";\n\n/**\n * @classdesc\n * This class represents MathType accessible class. Converts MathML to accessible text and manages\n * the associated client-side cache.\n */\nexport default class Accessibility {\n /**\n * Static property.\n * Accessibility cache, each entry contains a MathML and its correspondent accessibility text.\n * @type {TextCache}\n */\n static get cache() {\n return Accessibility._cache;\n }\n\n /**\n * Static property setter.\n * Set accessibility cache.\n * @param {TextCahe} value - The property value.\n * @ignore\n */\n static set cache(value) {\n Accessibility._cache = value;\n }\n\n /**\n * Converts MathML strings to its accessible text representation.\n * @param {String} mathML - MathML to be converted to accessible text.\n * @param {String} [language] - Language of the accessible text. 'en' by default.\n * @param {Array.} [data] - Parameters to send to mathml2accessible service.\n * @return {String} Accessibility text.\n */\n static mathMLToAccessible(mathML, language, data) {\n if (typeof language === \"undefined\") {\n language = \"en\";\n }\n // Check MathML class. If the class is chemistry,\n // we add chemistry to data to force accessibility service\n // to load chemistry grammar.\n if (MathML.containClass(mathML, \"wrs_chemistry\")) {\n data.mode = \"chemistry\";\n }\n // Ignore accesibility styles\n data.ignoreStyles = true;\n let accessibleText = \"\";\n\n if (Accessibility.cache.get(mathML)) {\n accessibleText = Accessibility.cache.get(mathML);\n } else {\n data.service = \"mathml2accessible\";\n data.lang = language;\n const accessibleJsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n if (accessibleJsonResponse.status !== \"error\") {\n accessibleText = accessibleJsonResponse.result.text;\n Accessibility.cache.populate(mathML, accessibleText);\n } else {\n accessibleText = StringManager.get(\"error_convert_accessibility\");\n }\n }\n\n return accessibleText;\n }\n}\n\n/**\n * Contains an instance of TextCache class to manage the JavaScript accessible cache.\n * Each entry of the cache object contains the MathML and it's correspondent accessibility text.\n * @private\n * @type {TextCache}\n */\nAccessibility._cache = new TextCache();\n","import Util from \"./util\";\nimport Latex from \"./latex\";\nimport MathML from \"./mathml\";\nimport Image from \"./image\";\nimport Accessibility from \"./accessibility\";\nimport ServiceProvider from \"./serviceprovider\";\nimport Configuration from \"./configuration\";\nimport Constants from \"./constants\";\n// eslint-disable-next-line no-unused-vars\nimport md5 from \"./md5\";\n\n/**\n * @classdesc\n * This class represent a MahML parser. Converts MathML into formulas depending on the\n * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured\n * in the backend.\n */\nexport default class Parser {\n /**\n * Converts a MathML string to an img element.\n * @param {Document} creator - Document object to call createElement method.\n * @param {string} mathml - MathML code\n * @param {Object[]} wirisProperties - object containing WIRIS custom properties\n * @param {language} language - custom language for accessibility.\n * @returns {HTMLImageElement} the formula image corresponding to initial MathML string.\n * @static\n */\n static mathmlToImgObject(creator, mathml, wirisProperties, language) {\n const imgObject = creator.createElement(\"img\");\n imgObject.align = \"middle\";\n imgObject.style.maxWidth = \"none\";\n let data = wirisProperties || {};\n\n // Take into account the backend config\n const wirisEditorProperties = Configuration.get(\"editorParameters\");\n data = { ...wirisEditorProperties, ...data };\n\n data.mml = mathml;\n data.lang = language;\n // Request metrics of the generated image.\n data.metrics = \"true\";\n data.centerbaseline = \"false\";\n\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n\n // Render js params: _wrs_int_wirisProperties contains some js render params.\n // Since MathML can support render params, js params should be send only to editor.\n\n imgObject.className = Configuration.get(\"imageClassName\");\n\n if (mathml.indexOf('class=\"') !== -1) {\n // We check here if the MathML has been created from a customEditor (such chemistry)\n // to add custom editor name attribute to img object (if necessary).\n let mathmlSubstring = mathml.substring(mathml.indexOf('class=\"') + 'class=\"'.length, mathml.length);\n mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('\"'));\n mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length);\n imgObject.setAttribute(Configuration.get(\"imageCustomEditorName\"), mathmlSubstring);\n }\n\n // Performance enabled.\n if (\n Configuration.get(\"wirisPluginPerformance\") &&\n (Configuration.get(\"saveMode\") === \"xml\" || Configuration.get(\"saveMode\") === \"safeXml\")\n ) {\n let result = JSON.parse(Parser.createShowImageSrc(data, language));\n if (result.status === \"warning\") {\n // POST call.\n // if the mathml is malformed, this function will throw an exception.\n try {\n result = JSON.parse(ServiceProvider.getService(\"showimage\", data));\n } catch (e) {\n return null;\n }\n }\n ({ result } = result);\n if (result.format === \"png\") {\n imgObject.src = `data:image/png;base64,${result.content}`;\n } else {\n imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`;\n }\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n Image.setImgSize(imgObject, result.content, true);\n\n if (Configuration.get(\"enableAccessibility\")) {\n if (typeof result.alt === \"undefined\") {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n } else {\n imgObject.alt = result.alt;\n }\n }\n } else {\n const result = Parser.createImageSrc(mathml, data);\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n imgObject.src = result;\n Image.setImgSize(\n imgObject,\n result,\n Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\",\n );\n if (Configuration.get(\"enableAccessibility\")) {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n }\n }\n\n if (typeof Parser.observer !== \"undefined\") {\n Parser.observer.observe(imgObject);\n }\n\n // Role math https://www.w3.org/TR/wai-aria/roles#math.\n imgObject.setAttribute(\"role\", \"math\");\n return imgObject;\n }\n\n /**\n * Returns the source to showimage service by calling createimage service. The\n * output of the createimage service is a URL path pointing to showimage service.\n * This method is called when performance is disabled.\n * @param {string} mathml - MathML code.\n * @param {Object[]} data - data object containing service parameters.\n * @returns {string} the showimage path.\n */\n static createImageSrc(mathml, data) {\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n\n let result = ServiceProvider.getService(\"createimage\", data);\n\n if (result.indexOf(\"@BASE@\") !== -1) {\n // Replacing '@BASE@' with the base URL of createimage.\n const baseParts = ServiceProvider.getServicePath(\"createimage\").split(\"/\");\n baseParts.pop();\n result = result.split(\"@BASE@\").join(baseParts.join(\"/\"));\n }\n\n return result;\n }\n\n /**\n * Parses initial HTML code. If the HTML contains data generated by WIRIS,\n * this data would be converted as following:\n *
\n   * MathML code: Image containing the corresponding MathML formulas.\n   * MathML code with LaTeX annotation : LaTeX string.\n   * 
\n * @param {string} code - HTML code containing MathML data.\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code with the original MathML converted into LaTeX and images.\n */\n static initParse(code, language) {\n /* Note: The code inside this function has been inverted.\n If you invert again the code then you cannot use correctly LaTeX\n in Moodle.\n */\n code = Parser.initParseSaveMode(code, language);\n return Parser.initParseEditMode(code);\n }\n\n /**\n * Parses initial HTML code depending on the save mode. Transforms all MathML\n * occurrences for it's correspondent image or LaTeX.\n * @param {string} code - HTML code to be parsed\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code parsed.\n */\n static initParseSaveMode(code, language) {\n if (Configuration.get(\"saveMode\")) {\n // Converting XML to tags.\n code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters);\n code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters);\n code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language);\n code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language);\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"base642showimage\");\n }\n }\n return code;\n }\n\n /**\n * Parses initial HTML code depending on the edit mode.\n * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will\n * be converted into a LaTeX string instead of an image.\n * @param {string} code - HTML code containing MathML.\n * @returns {string} parsed HTML code.\n */\n static initParseEditMode(code) {\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n const imgList = Util.getElementsByNameFromString(code, \"img\", true);\n const token = 'encoding=\"LaTeX\">';\n // While replacing images with latex, the indexes of the found images changes\n // respecting the original code, so this carry is needed.\n let carry = 0;\n\n for (let i = 0; i < imgList.length; i += 1) {\n const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry);\n\n if (imgCode.indexOf(` class=\"${Configuration.get(\"imageClassName\")}\"`) !== -1) {\n let mathmlStartToken = ` ${Configuration.get(\"imageMathmlAttribute\")}=\"`;\n let mathmlStart = imgCode.indexOf(mathmlStartToken);\n\n if (mathmlStart === -1) {\n mathmlStartToken = ' alt=\"';\n mathmlStart = imgCode.indexOf(mathmlStartToken);\n }\n\n if (mathmlStart !== -1) {\n mathmlStart += mathmlStartToken.length;\n const mathmlEnd = imgCode.indexOf('\"', mathmlStart);\n const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd)));\n let latexStartPosition = mathml.indexOf(token);\n\n if (latexStartPosition !== -1) {\n latexStartPosition += token.length;\n const latexEndPosition = mathml.indexOf(\"\", latexStartPosition);\n const latex = mathml.substring(latexStartPosition, latexEndPosition);\n\n const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`;\n const start = code.substring(0, imgList[i].start + carry);\n const end = code.substring(imgList[i].end + carry);\n code = start + replaceText + end;\n carry += replaceText.length - (imgList[i].end - imgList[i].start);\n }\n }\n }\n }\n }\n\n return code;\n }\n\n /**\n * Parses end HTML code. The end HTML code is HTML code with embedded images\n * or LaTeX formulas created with MathType.
\n * By default this method converts the formula images and LaTeX strings in MathML.
\n * If image mode is enabled the images will not be converted into MathML. For further information see {@link https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-web-interface-features/full-mathml-mode---wirisplugins-js.html}.\n * @param {string} code - HTML to be parsed\n * @returns {string} the HTML code parsed.\n */\n static endParse(code) {\n // Transform LaTeX ocurrences to MathML elements.\n const codeEndParsedEditMode = Parser.endParseEditMode(code);\n // Transform img elements to MathML elements.\n const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode);\n return codeEndParseSaveMode;\n }\n\n /**\n * Parses end HTML code depending on the edit mode.\n * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML.\n * @param {string} code - HTML code to be parsed.\n * @returns {string} HTML code parsed.\n */\n static endParseEditMode(code) {\n // Converting LaTeX to images.\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n let output = \"\";\n let endPosition = 0;\n let startPosition = code.indexOf(\"$$\");\n while (startPosition !== -1) {\n output += code.substring(endPosition, startPosition);\n endPosition = code.indexOf(\"$$\", startPosition + 2);\n\n if (endPosition !== -1) {\n // Before, it was a condition here to execute the next codelines\n // 'latex.indexOf('<') == -1'.\n // We don't know why it was used, but seems to have a conflict with\n // latex formulas that contains '<'.\n const latex = code.substring(startPosition + 2, endPosition);\n const decodedLatex = Util.htmlEntitiesDecode(latex);\n let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true));\n if (!Configuration.get(\"saveHandTraces\")) {\n // Remove hand traces.\n mathml = MathML.removeAnnotation(mathml, \"application/json\");\n }\n output += mathml;\n endPosition += 2;\n } else {\n output += \"$$\";\n endPosition = startPosition + 2;\n }\n\n startPosition = code.indexOf(\"$$\", endPosition);\n }\n\n output += code.substring(endPosition, code.length);\n code = output;\n }\n\n return code;\n }\n\n /**\n * Parses end HTML code depending on the save mode. Converts all\n * images into the element determined by the save mode:\n * - xml: Parses images formulas into MathML.\n * - safeXml: Parses images formulas into safeMAthML\n * - base64: Parses images into base64 images.\n * - image: Parse images into images (no parsing)\n * @param {string} code - HTML code to be parsed\n * @returns {string} HTML code parsed.\n */\n static endParseSaveMode(code) {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"img264\");\n }\n }\n\n return code;\n }\n\n /**\n * Auxiliar function that builds the data object to send to the showimage endpoint\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object with the data to send to showimage.\n */\n static createShowImageSrcData(data, language) {\n const dataMd5 = {};\n const renderParams = [\n \"mml\",\n \"color\",\n \"centerbaseline\",\n \"zoom\",\n \"dpi\",\n \"fontSize\",\n \"fontFamily\",\n \"defaultStretchy\",\n \"backgroundColor\",\n \"format\",\n ];\n renderParams.forEach((param) => {\n if (typeof data[param] !== \"undefined\") {\n dataMd5[param] = data[param];\n }\n });\n // Data variables to get.\n const dataObject = {};\n Object.keys(data).forEach((key) => {\n // We don't need mathml in this request we try to get cached.\n // Only need the formula md5 calculated before.\n if (key !== \"mml\") {\n dataObject[key] = data[key];\n }\n });\n\n dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5));\n dataObject.lang = typeof language === \"undefined\" ? \"en\" : language;\n dataObject.version = Configuration.get(\"version\");\n\n return dataObject;\n }\n\n /**\n * Returns the result to call showimage service with the formula md5 as parameter.\n * The result could be:\n * - {'status' : warning'} : The image associated to the MathML md5 is not in cache.\n * - {'status' : 'ok' ...} : The image associated to the MathML md5 is in cache.\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object containing showimage response.\n */\n static createShowImageSrc(data, language) {\n const dataObject = this.createShowImageSrcData(data, language);\n const result = ServiceProvider.getService(\"showimage\", Util.httpBuildQuery(dataObject), true);\n return result;\n }\n\n /**\n * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src)\n * or showimage img tags (i.e with showimage.php on src)\n * @param {string} code - HTML code\n * @param {string} mode - base642showimage or img2mathml or img264 transform.\n * @returns {string} html - code transformed.\n */\n static codeImgTransform(code, mode) {\n let output = \"\";\n let endPosition = 0;\n const pattern = /\") {\n endPosition = i + 1;\n }\n\n i += 1;\n }\n\n if (endPosition < startPosition) {\n // The img tag is stripped.\n output += code.substring(startPosition, code.length);\n return output;\n }\n let imgCode = code.substring(startPosition, endPosition);\n const imgObject = Util.createObject(imgCode);\n let xmlCode = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n let convertToXml;\n let convertToSafeXml;\n\n if (mode === \"base642showimage\") {\n if (xmlCode == null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null);\n output += Util.createObjectCode(imgCode);\n } else if (mode === \"img2mathml\") {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n convertToXml = true;\n convertToSafeXml = true;\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n convertToXml = true;\n convertToSafeXml = false;\n }\n }\n output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml);\n } else if (mode === \"img264\") {\n if (xmlCode === null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n\n const properties = {};\n properties.base64 = \"true\";\n imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null);\n // Metrics.\n Image.setImgSize(imgCode, imgCode.src, true);\n output += Util.createObjectCode(imgCode);\n }\n }\n output += code.substring(endPosition, code.length);\n return output;\n }\n\n /**\n * Converts all occurrences of MathML to the corresponding image.\n * @param {string} content - string with valid MathML code.\n * The MathML code doesn't contain semantics.\n * @param {Constants} characters - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * @param {string} language - a valid language code\n * in order to generate formula accessibility.\n * @returns {string} The input string with all the MathML\n * occurrences replaced by the corresponding image.\n */\n static parseMathmlToImg(content, characters, language) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n\n while (start !== -1) {\n output += content.substring(end, start);\n // Avoid WIRIS images to be parsed.\n const imageMathmlAtrribute = content.indexOf(Configuration.get(\"imageMathmlAttribute\"));\n end = content.indexOf(mathTagEnd, start);\n\n if (end === -1) {\n end = content.length - 1;\n } else if (imageMathmlAtrribute !== -1) {\n // First close tag of img attribute\n // If a mathmlAttribute exists should be inside a img tag.\n end += content.indexOf(\"/>\", start);\n } else {\n end += mathTagEnd.length;\n }\n\n if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) {\n let mathml = content.substring(start, end);\n mathml =\n characters.id === Constants.safeXmlCharacters.id\n ? MathML.safeXmlDecode(mathml)\n : MathML.mathMLEntities(mathml);\n output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language));\n } else {\n output += content.substring(start, end);\n }\n\n start = content.indexOf(mathTagBegin, end);\n }\n\n output += content.substring(end, content.length);\n return output;\n }\n}\n\n// Mutation observers to avoid wiris image formulas class be removed.\nif (typeof MutationObserver !== \"undefined\") {\n const mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.oldValue === Configuration.get(\"imageClassName\") &&\n mutation.attributeName === \"class\" &&\n mutation.target.className.indexOf(Configuration.get(\"imageClassName\")) === -1\n ) {\n mutation.target.className = Configuration.get(\"imageClassName\");\n }\n });\n });\n\n Parser.observer = Object.create(mutationObserver);\n Parser.observer.Config = { attributes: true, attributeOldValue: true };\n // We use own default config.\n Parser.observer.observe = function (target) {\n Object.getPrototypeOf(this).observe(target, this.Config);\n };\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-extra-semi */\n\n// The rules above are disabled because we are implementing\n// an external interface.\n\nexport default class EditorListener {\n /**\n * @classdesc\n * Determines if the content of the\n * MathType Editor has changes.\n * @implements {EditorListeners}\n * @constructs\n */\n constructor() {\n /**\n * Indicates if the content of the editor has changed.\n * @type {Boolean}\n */\n this.isContentChanged = false;\n\n /**\n * Indicates if the listener should be waiting for changes in the editor.\n * @type {Boolean}\n */\n this.waitingForChanges = false;\n }\n\n /**\n * Sets {@link EditorListener.isContentChanged} property.\n * @param {Boolean} value - The new vlue.\n */\n setIsContentChanged(value) {\n this.isContentChanged = value;\n }\n\n /**\n * Returns true if the content of the editor has been changed, false otherwise.\n * @return {Boolean}\n */\n getIsContentChanged() {\n return this.isContentChanged;\n }\n\n /**\n * Determines if the EditorListener should wait for any changes.\n * @param {Boolean} value - True if the editor should wait for changes, false otherwise.\n */\n setWaitingForChanges(value) {\n this.waitingForChanges = value;\n }\n\n /**\n * EditorListener method to overwrite.\n * @type {JsEditor}\n * @ignore\n */\n caretPositionChanged(_editor) {}\n\n /**\n * EditorListener method to overwrite\n * @type {JsEditor}\n * @ignore\n */\n clipboardChanged(_editor) {}\n\n /**\n * Determines if the content of an editor has been changed.\n * @param {JsEditor} editor - editor object.\n */\n contentChanged(_editor) {\n if (this.waitingForChanges === true && this.isContentChanged === false) {\n this.isContentChanged = true;\n }\n }\n\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} editor - The editor instance.\n */\n styleChanged(_editor) {}\n\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} - The editor instance.\n */\n transformationReceived(_editor) {}\n}\n","let wasm;\n\nconst cachedTextDecoder =\n typeof TextDecoder !== \"undefined\"\n ? new TextDecoder(\"utf-8\", { ignoreBOM: true, fatal: true })\n : {\n decode: () => {\n throw Error(\"TextDecoder not available\");\n },\n };\n\nif (typeof TextDecoder !== \"undefined\") {\n cachedTextDecoder.decode();\n}\n\nlet cachedUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nconst heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) {\n return heap[idx];\n}\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder =\n typeof TextEncoder !== \"undefined\"\n ? new TextEncoder(\"utf-8\")\n : {\n encode: () => {\n throw Error(\"TextEncoder not available\");\n },\n };\n\nconst encodeString =\n typeof cachedTextEncoder.encodeInto === \"function\"\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length,\n };\n };\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8Memory0()\n .subarray(ptr, ptr + buf.length)\n .set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7f) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0;\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nlet cachedFloat64Memory0 = null;\n\nfunction getFloat64Memory0() {\n if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) {\n cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64Memory0;\n}\n\nlet cachedBigInt64Memory0 = null;\n\nfunction getBigInt64Memory0() {\n if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) {\n cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer);\n }\n return cachedBigInt64Memory0;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == \"number\" || type == \"boolean\" || val == null) {\n return `${val}`;\n }\n if (type == \"string\") {\n return `\"${val}\"`;\n }\n if (type == \"symbol\") {\n const description = val.description;\n if (description == null) {\n return \"Symbol\";\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == \"function\") {\n const name = val.name;\n if (typeof name == \"string\" && name.length > 0) {\n return `Function(${name})`;\n } else {\n return \"Function\";\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = \"[\";\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for (let i = 1; i < length; i++) {\n debug += \", \" + debugString(val[i]);\n }\n debug += \"]\";\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == \"Object\") {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return \"Object(\" + JSON.stringify(val) + \")\";\n } catch (_) {\n return \"Object\";\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction makeClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n try {\n return f(state.a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b);\n state.a = 0;\n }\n }\n };\n real.original = state;\n\n return real;\n}\nfunction __wbg_adapter_46(arg0, arg1, arg2) {\n wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n\n return real;\n}\nfunction __wbg_adapter_49(arg0, arg1) {\n wasm.__wbindgen_export_4(arg0, arg1);\n}\n\nfunction __wbg_adapter_52(arg0, arg1, arg2) {\n wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export_6(addHeapObject(e));\n }\n}\nfunction __wbg_adapter_103(arg0, arg1, arg2, arg3) {\n wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\n/**\n */\nexport function main_js() {\n wasm.main_js();\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n */\nexport const Level = Object.freeze({\n Err: 0,\n 0: \"Err\",\n Warn: 1,\n 1: \"Warn\",\n Info: 2,\n 2: \"Info\",\n Debug: 3,\n 3: \"Debug\",\n});\n/**\n */\nexport class Telemeter {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_telemeter_free(ptr);\n }\n /**\n * @param {any} solution\n * @param {any} hosts\n * @param {any} config\n */\n constructor(solution, hosts, config) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n this.__wbg_ptr = r0 >>> 0;\n return this;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} sender_id\n * @returns {Promise}\n */\n identify(sender_id) {\n const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {string} event_type\n * @param {any} event_payload\n * @returns {Promise}\n */\n track(event_type, event_payload) {\n const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload));\n return takeObject(ret);\n }\n /**\n * @param {any} level\n * @param {string} message\n * @param {any} payload\n * @returns {Promise}\n */\n log(level, message, payload) {\n const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload));\n return takeObject(ret);\n }\n /**\n * @returns {Promise}\n */\n finish() {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.telemeter_finish(ptr);\n return takeObject(ret);\n }\n /**\n * @param {boolean | undefined} [new_debug_status]\n */\n debug(new_debug_status) {\n wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === \"function\" && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === \"function\") {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n if (module.headers.get(\"Content-Type\") != \"application/wasm\") {\n console.warn(\n \"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\",\n e,\n );\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_string_new = function (arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_c728d68b8b34487e = function () {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_status_7841bb47be2a8f16 = function (arg0) {\n const ret = getObject(arg0).status;\n return ret;\n };\n imports.wbg.__wbg_headers_ea7ef583d1564b08 = function (arg0) {\n const ret = getObject(arg0).headers;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new0_ad75dd38f92424e2 = function () {\n const ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function (arg0) {\n const ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbindgen_object_drop_ref = function (arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbindgen_is_object = function (arg0) {\n const val = getObject(arg0);\n const ret = typeof val === \"object\" && val !== null;\n return ret;\n };\n imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function (arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_process_5b786e71d465a513 = function (arg0) {\n const ret = getObject(arg0).process;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_versions_c2ab80650590b6a2 = function (arg0) {\n const ret = getObject(arg0).versions;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_node_523d7bd03ef69fba = function (arg0) {\n const ret = getObject(arg0).node;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_string = function (arg0) {\n const ret = typeof getObject(arg0) === \"string\";\n return ret;\n };\n imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function (arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_require_2784e593a4674877 = function () {\n return handleError(function () {\n const ret = module.require;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function (arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_4a9aa5157afeb382 = function (arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_1989a20442400aaa = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_done_bc26bf4ada718266 = function (arg0) {\n const ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_value_0570714ff7d75f35 = function (arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function () {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_2aff440840bb6202 = function () {\n return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_next_15da6a3df9290720 = function (arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_function = function (arg0) {\n const ret = typeof getObject(arg0) === \"function\";\n return ret;\n };\n imports.wbg.__wbg_call_669127b9d730c650 = function () {\n return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_object_clone_ref = function (arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_3fad056edded10bd = function () {\n return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_window_a4f46c98a61d4089 = function () {\n return handleError(function () {\n const ret = window.window;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_globalThis_17eff828815f7d84 = function () {\n return handleError(function () {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_global_46f939f6541643c5 = function () {\n return handleError(function () {\n const ret = global.global;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_is_undefined = function (arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function (arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isArray_38525be7442aa21e = function (arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_call_53fc3abd42e24ec8 = function () {\n return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function (arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_new_feb65b865d980ae2 = function (arg0, arg1) {\n try {\n var state0 = { a: arg0, b: arg1 };\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_103(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n };\n imports.wbg.__wbindgen_memory = function () {\n const ret = wasm.memory;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_buffer_344d9b41efe96da7 = function (arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_d8a000788389a31e = function (arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_dcfd613a3420f908 = function (arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n };\n imports.wbg.__wbg_length_a5587d6cd79ab197 = function (arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function (arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"string\" ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_stringify_4039297315a25b00 = function () {\n return handleError(function (arg0) {\n const ret = JSON.stringify(getObject(arg0));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_set_40f7786a25a9cc7e = function () {\n return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_has_cdf8b85f6e903c80 = function () {\n return handleError(function (arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_fetch_701fcd2bde06379a = function (arg0, arg1) {\n const ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function (arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function (arg0, arg1, arg2) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_e4960143e41697a4 = function () {\n return handleError(function () {\n const ret = new AbortController();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_signal_1ed842bebd6ae322 = function (arg0) {\n const ret = getObject(arg0).signal;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_abort_8355f201f30300bb = function (arg0) {\n getObject(arg0).abort();\n };\n imports.wbg.__wbindgen_error_new = function (arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function (arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function (arg0) {\n const v = getObject(arg0);\n const ret = typeof v === \"boolean\" ? (v ? 1 : 0) : 2;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function (arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"number\" ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_entries_6d727b73ee02b7ce = function (arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_String_917f38a1211cf44b = function (arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function (arg0, arg1) {\n console.warn(getObject(arg0), getObject(arg1));\n };\n imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function (arg0) {\n const ret = getObject(arg0).readyState;\n return ret;\n };\n imports.wbg.__wbg_warn_4affe1093892a4ef = function (arg0) {\n console.warn(getObject(arg0));\n };\n imports.wbg.__wbg_close_f4135085ec3fc8f0 = function () {\n return handleError(function (arg0) {\n getObject(arg0).close();\n }, arguments);\n };\n imports.wbg.__wbg_new_b9b318679315404f = function () {\n return handleError(function (arg0, arg1) {\n const ret = new WebSocket(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function (arg0, arg1) {\n getObject(arg0).binaryType = takeObject(arg1);\n };\n imports.wbg.__wbg_log_7811587c4c6d2844 = function (arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_error_f0a6627f4b23c19d = function (arg0) {\n console.error(getObject(arg0));\n };\n imports.wbg.__wbg_info_3ca7870690403fee = function (arg0) {\n console.info(getObject(arg0));\n };\n imports.wbg.__wbg_document_183cf1eecfdbffee = function (arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function (arg0) {\n const ret = getObject(arg0).visibilityState;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function (arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_cace2e0b3ddc0502 = function (arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function () {\n return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function () {\n return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbindgen_is_bigint = function (arg0) {\n const ret = typeof getObject(arg0) === \"bigint\";\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function (arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_in = function (arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function (arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_eq = function (arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).localStorage;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function () {\n return handleError(function (arg0, arg1, arg2, arg3) {\n const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n }, arguments);\n };\n imports.wbg.__wbg_navigator_7078da62d92ff5ad = function (arg0) {\n const ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).mediaDevices;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).enumerateDevices();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setItem_fe04f524052a3839 = function () {\n return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbindgen_cb_drop = function (arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n return ret;\n };\n imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function (arg0, arg1) {\n const ret = getObject(arg1).deviceId;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Response;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function () {\n return handleError(function (arg0, arg1) {\n getObject(arg0).randomFillSync(takeObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function (arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getRandomValues_504510b5564925af = function () {\n return handleError(function (arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbindgen_bigint_get_as_i64 = function (arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof v === \"bigint\" ? v : undefined;\n getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbindgen_debug_string = function (arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbindgen_throw = function (arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_then_89e1c559530b85cf = function (arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function (arg0) {\n queueMicrotask(getObject(arg0));\n };\n imports.wbg.__wbg_then_1bbc9edafd859b06 = function (arg0, arg1, arg2) {\n const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function (arg0) {\n const ret = getObject(arg0).queueMicrotask;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_resolve_a3252b2860f0a09e = function (arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_url_1f609e63ff1a7983 = function (arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_send_2860805104507701 = function () {\n return handleError(function (arg0, arg1, arg2) {\n getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));\n }, arguments);\n };\n imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_new_19676474aa414d62 = function () {\n return handleError(function () {\n const ret = new Headers();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_append_feec4143bbf21904 = function () {\n return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function () {\n return handleError(function (arg0, arg1, arg2) {\n const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_closure_wrapper1532 = function (arg0, arg1, arg2) {\n const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1602 = function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1834 = function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52);\n return addHeapObject(ret);\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, maybe_memory) {}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedBigInt64Memory0 = null;\n cachedFloat64Memory0 = null;\n cachedInt32Memory0 = null;\n cachedUint8Memory0 = null;\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(input) {\n if (wasm !== undefined) return wasm;\n\n if (typeof input === \"undefined\") {\n input = new URL(\"telemeter_wasm_bg.wasm\", import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (\n typeof input === \"string\" ||\n (typeof Request === \"function\" && input instanceof Request) ||\n (typeof URL === \"function\" && input instanceof URL)\n ) {\n input = fetch(input);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await input, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import init, { Telemeter as TelemeterWASM } from \"../telemeter-wasm\";\n\n/**\n * @classdesc\n * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data\n * to Telemetry in a more comfortable and homogeneous way.\n */\nexport default class Telemeter {\n /**\n * Inits Telemeter class.\n * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)}\n * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry.\n * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated.\n * @param {Object} telemeterAttributes.config - Configuration parameters.\n */\n static init(telemeterAttributes) {\n if (!this.telemeter && !this.waitingForInit) {\n this.waitingForInit = true;\n init(telemeterAttributes.url)\n .then(() => {\n this.telemeter = new TelemeterWASM(\n telemeterAttributes.solution,\n telemeterAttributes.hosts,\n telemeterAttributes.config,\n );\n })\n .catch((error) => {\n console.log(error);\n })\n .finally(() => (this.waitingForInit = false));\n }\n }\n\n /**\n * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session.\n */\n static async finish() {\n if (!this.telemeter) return;\n\n try {\n let local_telemeter = this.telemeter;\n this.telemeter = undefined;\n await local_telemeter.finish();\n } catch (e) {\n console.error(e);\n }\n }\n}\n","import Configuration from \"./configuration\";\nimport Core from \"./core.src\";\nimport EditorListener from \"./editorlistener\";\nimport Listeners from \"./listeners\";\nimport MathML from \"./mathml\";\nimport Util from \"./util\";\nimport Telemeter from \"./telemeter\";\n\nexport default class ContentManager {\n /**\n * @classdesc\n * This class represents a modal dialog, managing the following:\n * - The insertion of content into the current instance of the {@link ModalDialog} class.\n * - The actions to be done once the modal object has been submitted\n * (submitAction} method).\n * - The update of the content when the {@link ModalDialog} class is also updated,\n * for example when ModalDialog is re-opened.\n * - The communication between the {@link ModalDialog} class and itself, if the content\n * has been changed (hasChanges} method).\n * @constructs\n * @param {Object} contentManagerAttributes - Object containing all attributes needed to\n * create a new instance.\n */\n constructor(contentManagerAttributes) {\n /**\n * An object containing MathType editor parameters. See\n * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information.\n * @type {Object}\n */\n this.editorAttributes = {};\n if (\"editorAttributes\" in contentManagerAttributes) {\n this.editorAttributes = contentManagerAttributes.editorAttributes;\n } else {\n throw new Error(\"ContentManager constructor error: editorAttributes property missed.\");\n }\n\n /**\n * CustomEditors instance. Contains the custom editors.\n * @type {CustomEditors}\n */\n this.customEditors = null;\n if (\"customEditors\" in contentManagerAttributes) {\n this.customEditors = contentManagerAttributes.customEditors;\n }\n\n /**\n * Environment properties. This object contains data about the integration platform.\n * @type {Object}\n * @property {String} editor - Editor name. Usually the HTML editor.\n * @property {String} mode - Save mode. Xml by default.\n * @property {String} version - Plugin version.\n */\n this.environment = {};\n if (\"environment\" in contentManagerAttributes) {\n this.environment = contentManagerAttributes.environment;\n } else {\n throw new Error(\"ContentManager constructor error: environment property missed\");\n }\n\n /**\n * ContentManager language.\n * @type {String}\n */\n this.language = \"\";\n if (\"language\" in contentManagerAttributes) {\n this.language = contentManagerAttributes.language;\n } else {\n throw new Error(\"ContentManager constructor error: language property missed\");\n }\n\n /**\n * {@link EditorListener} instance. Manages the changes inside the editor.\n * @type {EditorListener}\n */\n this.editorListener = new EditorListener();\n\n /**\n * MathType editor instance.\n * @type {JsEditor}\n */\n this.editor = null;\n\n /**\n * Navigator user agent.\n * @type {String}\n */\n this.ua = navigator.userAgent.toLowerCase();\n\n /**\n * Mobile device properties object\n * @type {DeviceProperties}\n */\n this.deviceProperties = {};\n this.deviceProperties.isAndroid = this.ua.indexOf(\"android\") > -1;\n this.deviceProperties.isIOS = ContentManager.isIOS();\n\n /**\n * Custom editor toolbar.\n * @type {String}\n */\n this.toolbar = null;\n\n /**\n * Custom editor toolbar.\n * @type {String}\n */\n this.dbclick = null;\n\n /**\n * Instance of the {@link ModalDialog} class associated with the current\n * {@link ContentManager} instance.\n * @type {ModalDialog}\n */\n this.modalDialogInstance = null;\n\n /**\n * ContentManager listeners.\n * @type {Listeners}\n */\n this.listeners = new Listeners();\n\n /**\n * MathML associated to the ContentManager instance.\n * @type {String}\n */\n this.mathML = null;\n\n /**\n * Indicates if the edited element is a new one or not.\n * @type {Boolean}\n */\n this.isNewElement = true;\n\n /**\n * {@link IntegrationModel} instance. Needed to call wrapper methods.\n * @type {IntegrationModel}\n */\n this.integrationModel = null;\n }\n\n /**\n * Adds a new listener to the current {@link ContentManager} instance.\n * @param {Object} listener - The listener to be added.\n */\n addListener(listener) {\n this.listeners.add(listener);\n }\n\n /**\n * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager}\n * instance.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance.\n */\n setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n\n /**\n * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance.\n * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance\n */\n setModalDialogInstance(modalDialogInstance) {\n this.modalDialogInstance = modalDialogInstance;\n }\n\n /**\n * Inserts the content into the current {@link ModalDialog} instance updating\n * the title and inserting the JavaScript editor.\n */\n insert() {\n // Before insert the editor we update the modal object title to avoid weird render display.\n this.updateTitle(this.modalDialogInstance);\n this.insertEditor(this.modalDialogInstance);\n }\n\n /**\n * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until\n * editor's JavaScript is loaded.\n */\n insertEditor() {\n if (ContentManager.isEditorLoaded()) {\n this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes);\n this.editor.insertInto(this.modalDialogInstance.contentContainer);\n this.editor.focus();\n if (this.modalDialogInstance.rtl) {\n this.editor.action(\"rtl\");\n }\n // Setting div in rtl in case of it's activated.\n if (this.editor.getEditorModel().isRTL()) {\n this.editor.element.style.direction = \"rtl\";\n }\n\n // Editor listener: this object manages the changes logic of editor.\n this.editor.getEditorModel().addEditorListener(this.editorListener);\n\n // iOS events.\n if (this.modalDialogInstance.deviceProperties.isIOS) {\n setTimeout(function () {\n // Make sure the modalDialogInstance is available when the timeout is over\n // to avoid throw errors and stop execution.\n if (this.hasOwnProperty(\"modalDialogInstance\")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins\n }, 400);\n\n const formulaDisplayDiv = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n Util.addEvent(formulaDisplayDiv, \"focus\", this.modalDialogInstance.handleOpenedIosSoftkeyboard);\n Util.addEvent(formulaDisplayDiv, \"blur\", this.modalDialogInstance.handleClosedIosSoftkeyboard);\n }\n // Fire onLoad event. Necessary to set the MathML into the editor\n // after is loaded.\n this.listeners.fire(\"onLoad\", {});\n } else {\n setTimeout(ContentManager.prototype.insertEditor.bind(this), 100);\n }\n }\n\n /**\n * Initializes the current class by loading MathType script.\n */\n init() {\n if (!ContentManager.isEditorLoaded()) {\n this.addEditorAsExternalDependency();\n }\n }\n\n /**\n * Adds script element to the DOM to include editor externally.\n */\n addEditorAsExternalDependency() {\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n let editorUrl = Configuration.get(\"editorUrl\");\n\n // We create an object url for parse url string and work more efficiently.\n const anchorElement = document.createElement(\"a\");\n\n ContentManager.setHrefToAnchorElement(anchorElement, editorUrl);\n ContentManager.setProtocolToAnchorElement(anchorElement);\n\n editorUrl = ContentManager.getURLFromAnchorElement(anchorElement);\n\n // Load editor URL. We add stats as GET params.\n const stats = this.getEditorStats();\n script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`;\n\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n }\n\n /**\n * Sets the specified url to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set 'url'.\n * @param {String} url - URL to set.\n */\n static setHrefToAnchorElement(anchorElement, url) {\n anchorElement.href = url;\n }\n\n /**\n * Sets the current protocol to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set its protocol.\n */\n static setProtocolToAnchorElement(anchorElement) {\n // Change to https if necessary.\n if (window.location.href.indexOf(\"https://\") === 0) {\n // It check if browser is https and configuration is http.\n // If this is so, we will replace protocol.\n if (anchorElement.protocol === \"http:\") {\n anchorElement.protocol = \"https:\";\n }\n }\n }\n\n /**\n * Returns the url of the anchor element adding the current port\n * if it is needed.\n * @param {HTMLAnchorElement} anchorElement - Element where extract the url.\n * @returns {String}\n */\n static getURLFromAnchorElement(anchorElement) {\n // Check protocol and remove port if it's standard.\n const removePort = anchorElement.port === \"80\" || anchorElement.port === \"443\" || anchorElement.port === \"\";\n return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? \"\" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith(\"/\") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len\n }\n\n /**\n * Returns object with editor stats.\n *\n * @typedef {Object} EditorStatsObject\n * @property {string} editor - Editor name.\n * @property {string} mode - Current configuration for formula save mode.\n * @property {string} version - Current plugins version.\n * @returns {EditorStatsObject}\n */\n getEditorStats() {\n // Editor stats. Use environment property to set it.\n const stats = {};\n if (\"editor\" in this.environment) {\n stats.editor = this.environment.editor;\n } else {\n stats.editor = \"unknown\";\n }\n\n if (\"mode\" in this.environment) {\n stats.mode = this.environment.mode;\n } else {\n stats.mode = Configuration.get(\"saveMode\");\n }\n\n if (\"version\" in this.environment) {\n stats.version = this.environment.version;\n } else {\n stats.version = Configuration.get(\"version\");\n }\n\n return stats;\n }\n\n /**\n * Returns true if device is iOS. Otherwise, false.\n * @returns {Boolean}\n */\n static isIOS() {\n return (\n [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\n );\n }\n\n /**\n * Returns true if device is Mobile. Otherwise, false.\n * @returns {Boolean}\n */\n static isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n /**\n * Returns true if editor is loaded. Otherwise, false.\n * @returns {Boolean}\n */\n static isEditorLoaded() {\n // To know if editor JavaScript is loaded we need to wait until\n // window.com.wiris.jsEditor.JsEditor.newInstance is ready.\n return (\n window.com &&\n window.com.wiris &&\n window.com.wiris.jsEditor &&\n window.com.wiris.jsEditor.JsEditor &&\n window.com.wiris.jsEditor.JsEditor.newInstance\n );\n }\n\n /**\n * Sets the {@link ContentManager.editor} initial content.\n */\n setInitialContent() {\n if (!this.isNewElement) {\n this.setMathML(this.mathML);\n }\n }\n\n /**\n * Sets a MathML into {@link ContentManager.editor} instance.\n * @param {String} mathml - MathML string.\n * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set.\n * False by default.\n */\n setMathML(mathml, focusDisabled) {\n // By default focus is enabled.\n if (typeof focusDisabled === \"undefined\") {\n focusDisabled = false;\n }\n // Using setMathML method is not a change produced by the user but for the API\n // so we set to false the contentChange property of editorListener.\n this.editor.setMathMLWithCallback(mathml, () => {\n this.editorListener.setWaitingForChanges(true);\n });\n\n // We need to wait a little until the callback finish.\n setTimeout(() => {\n this.editorListener.setIsContentChanged(false);\n }, 500);\n\n // In some scenarios - like closing modal object - editor mustn't be focused.\n if (!focusDisabled) {\n this.onFocus();\n }\n }\n\n /**\n * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by\n * {@link ModalDialog.focus}.\n */\n onFocus() {\n if (typeof this.editor !== \"undefined\" && this.editor != null) {\n this.editor.focus();\n\n // On WordPress integration, the focus gets lost right after setting it.\n // To fix this, we enforce another focus some milliseconds after this behaviour.\n setTimeout(() => {\n this.editor.focus();\n }, 100);\n }\n }\n\n /**\n * Updates the edition area by calling {@link IntegrationModel.updateFormula}.\n * Triggered by {@link ModalDialog.submitAction}.\n */\n submitAction() {\n if (!this.editor.isFormulaEmpty()) {\n let mathML = this.editor.getMathMLWithSemantics();\n // Add class for custom editors.\n if (this.customEditors.getActiveEditor() !== null) {\n const { toolbar } = this.customEditors.getActiveEditor();\n mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar);\n } else {\n // We need - if exists - the editor name from MathML\n // class attribute.\n Object.keys(this.customEditors.editors).forEach((key) => {\n mathML = MathML.removeCustomEditorClassAttribute(mathML, key);\n });\n }\n const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML);\n this.integrationModel.updateFormula(mathmlEntitiesEncoded);\n } else {\n this.integrationModel.updateFormula(null);\n }\n\n this.customEditors.disable();\n this.integrationModel.notifyWindowClosed();\n\n // Set disabled focus to prevent lost focus.\n this.setEmptyMathML();\n this.customEditors.disable();\n }\n\n /**\n * Sets an empty MathML as {@link ContentManager.editor} content.\n * This will open the MT/CT editor with the hand mode.\n * It adds dir rtl in case of it's activated.\n */\n setEmptyMathML() {\n const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS;\n const isRTL = this.editor.getEditorModel().isRTL();\n\n if (isMobile || this.integrationModel.forcedHandMode) {\n // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode.\n const mathML = `[]`;\n this.setMathML(mathML, true);\n } else {\n // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation.\n const mathML = ``;\n this.setMathML(mathML, true);\n }\n }\n\n /**\n * Open event. Triggered by {@link ModalDialog.open}. Does the following:\n * - Updates the {@link ContentManager.editor} content\n * (with an empty MathML or an existing formula),\n * - Updates the {@link ContentManager.editor} toolbar.\n * - Recovers the the focus.\n */\n onOpen() {\n if (this.isNewElement) {\n this.setEmptyMathML();\n } else {\n this.setMathML(this.mathML);\n }\n let toolbar = this.updateToolbar();\n this.onFocus();\n\n if (this.deviceProperties.isIOS) {\n const zoom = document.documentElement.clientWidth / window.innerWidth;\n\n if (zoom !== 1) {\n // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed.\n this.setKeyboardMode();\n }\n }\n\n let trigger = this.dbclick ? \"formula\" : \"button\";\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"OPENED_MTCT_EDITOR\", {\n toolbar: toolbar,\n trigger: trigger,\n });\n } catch (error) {\n console.error(\"Error tracking OPENED_MTCT_EDITOR\", error);\n }\n\n Core.globalListeners.fire(\"onModalOpen\", {});\n\n if (this.integrationModel.forcedHandMode) {\n this.hideHandModeButton();\n\n // In case we have a keyboard written formula, we still want it to be opened with handMode.\n if (this.mathML && !this.mathML.includes('') && !this.isNewElement) {\n this.openHandOnKeyboardMathML(this.mathML, this.editor);\n }\n }\n }\n\n /**\n * Change Editor in keyboard mode when is loaded\n */\n setKeyboardMode() {\n const wrsEditor = document.getElementsByClassName(\"wrs_handOpen wrs_disablePalette\")[0];\n if (wrsEditor) {\n wrsEditor.classList.remove(\"wrs_handOpen\");\n wrsEditor.classList.remove(\"wrs_disablePalette\");\n } else {\n setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100);\n }\n }\n\n /**\n * Hides the hand <-> keyboard mode switch.\n *\n * This method relies completely on the classes used on different HTML elements within the editor itself, meaning\n * any change on those classes will make this code stop working properly.\n *\n * On top of that, some of those classes are changed on runtime (for example, the one that makes some buttons change).\n * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it.\n * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button.\n */\n hideHandModeButton(forced = true) {\n if (this.handSwitchHidden) {\n return; // hand <-> keyboard button already hidden.\n }\n\n // \"Open hand mode\" button takes a little bit to be available.\n // This selector gets the hand <-> keyboard mode switch\n const handModeButtonSelector =\n \"div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]\";\n\n // If in \"forced mode\", we hide the \"keyboard button\" so the user can't can't change between hand and keyboard modes.\n // We use an observer to ensure that the button it hidden as soon as it appears.\n if (forced) {\n const mutationInstance = new MutationObserver((mutations) => {\n const handModeButton = document.querySelector(handModeButtonSelector);\n if (handModeButton) {\n handModeButton.hidden = true;\n this.handSwitchHidden = true;\n mutationInstance.disconnect();\n }\n });\n mutationInstance.observe(document.body, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n });\n }\n }\n\n /**\n * It will open any formula written in Keyboard mode with the hand mode with the default hand trace.\n *\n * @param {String} mathml The original KeyBoard MathML\n * @param {Object} editor The editor object.\n */\n async openHandOnKeyboardMathML(mathml, editor) {\n // First, as an editor requirement, we need to update the editor object with the current MathML formula.\n // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed.\n await new Promise((resolve) => {\n editor.setMathMLWithCallback(mathml, resolve);\n });\n\n // We wait until the hand editor object exists.\n await this.waitForHand(editor);\n\n // Logic to get the hand traces and open the formula in hand mode.\n // This logic comes from the editor.\n const handEditor = editor.hand;\n editor.handTemporalMathML = editor.getMathML();\n const handCoordinates = editor.editorModel.getHandStrokes();\n handEditor.setStrokes(handCoordinates);\n handEditor.fitStrokes(true);\n editor.openHand();\n }\n\n /**\n * Waits until the hand editor object exists.\n * @param {Obect} editor The editor object.\n */\n async waitForHand(editor) {\n while (!editor.hand) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n\n /**\n * Sets the correct toolbar depending if exist other custom toolbars\n * at the same time (e.g: Chemistry).\n */\n updateToolbar() {\n this.updateTitle(this.modalDialogInstance);\n const customEditor = this.customEditors.getActiveEditor();\n\n let toolbar;\n if (customEditor) {\n toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar;\n\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n }\n } else {\n toolbar = this.getToolbar();\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n this.customEditors.disable();\n }\n }\n\n return toolbar;\n }\n\n /**\n * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled\n * sets the custom editor title. Otherwise sets the default title.\n */\n updateTitle() {\n const customEditor = this.customEditors.getActiveEditor();\n if (customEditor) {\n this.modalDialogInstance.setTitle(customEditor.title);\n } else {\n this.modalDialogInstance.setTitle(\"MathType\");\n }\n }\n\n /**\n * Returns the editor toolbar, depending on the configuration local or server side.\n * @returns {String} - Toolbar identifier.\n */\n getToolbar() {\n let toolbar = \"general\";\n if (\"toolbar\" in this.editorAttributes) {\n ({ toolbar } = this.editorAttributes);\n }\n // TODO: Change global integration variable for integration custom toolbar.\n if (toolbar === \"general\") {\n // eslint-disable-next-line camelcase\n toolbar =\n typeof _wrs_int_wirisProperties === \"undefined\" || typeof _wrs_int_wirisProperties.toolbar === \"undefined\"\n ? \"general\"\n : _wrs_int_wirisProperties.toolbar;\n }\n\n return toolbar;\n }\n\n /**\n * Sets the current {@link ContentManager.editor} instance toolbar.\n * @param {String} toolbar - The toolbar name.\n */\n setToolbar(toolbar) {\n this.toolbar = toolbar;\n this.editor.setParams({ toolbar: this.toolbar });\n }\n\n /**\n * Sets the custom headers added on editor requests.\n * @returns {Object} headers - key value headers.\n */\n setCustomHeaders(headers) {\n let headersObj = {};\n\n // We control that we only get String or Object as the input.\n if (typeof headers === \"object\") {\n headersObj = headers;\n } else if (typeof headers === \"string\") {\n headersObj = Util.convertStringToObject(headers);\n }\n\n this.editor.setParams({ customHeaders: headersObj });\n return headersObj;\n }\n\n /**\n * Returns true if the content of the editor has been changed. The logic of the changes\n * is delegated to {@link EditorListener} class.\n * @returns {Boolean} True if the editor content has been changed. False otherwise.\n */\n hasChanges() {\n return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged();\n }\n\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */\n onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) {\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n // Code to detect Esc event.\n // There should be only one element with class name 'wrs_pressed' at the same time.\n let list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_select wrs_pressed\");\n if (list.length === 0) {\n this.modalDialogInstance.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.modalDialogInstance.submitButton) {\n // Focus is on OK button.\n this.editor.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.querySelector('[title=\"Manual\"]') === document.activeElement) {\n // Focus is on minimize button (_).\n this.modalDialogInstance.closeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n if (document.activeElement === this.modalDialogInstance.minimizeDiv) {\n // Focus on cancel button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n this.modalDialogInstance.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.modalDialogInstance.cancelButton) {\n // Focus is on X button.\n this.modalDialogInstance.minimizeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.activeElement === this.modalDialogInstance.closeDiv) {\n // Focus on help button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n const element = document.querySelector('[title=\"Manual\"]');\n element.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n } else {\n // There should be only one element with class name 'wrs_formulaDisplay'.\n const element = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n if (element.getAttribute(\"class\") === \"wrs_formulaDisplay wrs_focused\") {\n // Focus is on formuladisplay.\n this.modalDialogInstance.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n }\n }\n}\n","/**\n * A custom editor is MathType editor with a different\n * @typedef {Object} CustomEditor\n * @property {String} CustomEditor.name - Custom editor name.\n * @property {String} CustomEditor.toolbar - Custom editor toolbar.\n * @property {String} CustomEditor.icon - Custom editor icon.\n * @property {String} CustomEditor.confVariable - Configuration property to manage\n * the availability of the custom editor.\n * @property {String} CustomEditor.title - Custom editor modal dialog title.\n * @property {String} CustomEditor.tooltip - Custom editor icon tooltip.\n */\n\nexport default class CustomEditors {\n /**\n * @classdesc\n * This class represents the MathType custom editors manager.\n * A custom editor is MathType editor with a custom toolbar.\n * This class associates a {@link CustomEditor} to:\n * - It's own formulas\n * - A custom toolbar\n * - An icon to open it from a HTML editor.\n * - A tooltip for the icon.\n * - A global variable to enable or disable it globally.\n * @constructs\n */\n constructor() {\n /**\n * The custom editors.\n * @type {Array.}\n */\n\n this.editors = [];\n /**\n * The active editor name.\n * @type {String}\n */\n this.activeEditor = \"default\";\n }\n\n /**\n * Adds a {@link CustomEditor} to editors array.\n * @param {String} editorName - The editor name.\n * @param {CustomEditor} editorParams - The custom editor parameters.\n */\n addEditor(editorName, editorParams) {\n const customEditor = {};\n customEditor.name = editorParams.name;\n customEditor.toolbar = editorParams.toolbar;\n customEditor.icon = editorParams.icon;\n customEditor.confVariable = editorParams.confVariable;\n customEditor.title = editorParams.title;\n customEditor.tooltip = editorParams.tooltip;\n this.editors[editorName] = customEditor;\n }\n\n /**\n * Enables a {@link CustomEditor}.\n * @param {String} customEditorName - The custom editor name.\n */\n enable(customEditorName) {\n this.activeEditor = customEditorName;\n }\n\n /**\n * Disables a {@link CustomEditor}.\n */\n disable() {\n this.activeEditor = \"default\";\n }\n\n /**\n * Returns the active editor.\n * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise.\n */\n getActiveEditor() {\n if (this.activeEditor !== \"default\") {\n return this.editors[this.activeEditor];\n }\n return null;\n }\n}\n","/**\n * Represents the configuration properties generated from the frontend (JavaScript variables).\n * @type {Object}\n * @property {string} imageClassName - Default MathType formula image class.\n * @property {string} imageClassName - Default MathType CAS image class.\n * @ignore\n */\nconst jsProperties = {\n imageCustomEditorName: \"data-custom-editor\",\n imageClassName: \"Wirisformula\",\n CASClassName: \"Wiriscas\",\n};\nexport default jsProperties;\n","export default class Event {\n /**\n * @classdesc\n * This class represents a custom event. Events should be fired by the {@link Listener} class.\n *\n * ```js\n * let customEvent = new Event();\n * customEvent.properties = {};\n *\n * let listeners = new Listeners();\n * listeners.newListener(eventName, callback);\n *\n * listeners.fire(eventName, customEvent) *\n * ```\n * @constructs\n */\n constructor() {\n /**\n * Indicates if the event should be cancelled.\n * @type {Boolean}\n */\n\n this.cancelled = false;\n /**\n * Indicates if the event should be prevented.\n * @type {Boolean}\n */\n this.defaultPrevented = false;\n }\n\n /**\n * Cancels the event.\n */\n cancel() {\n this.cancelled = true;\n }\n\n /**\n * Prevents the default action.\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n}\n","import IntegrationModel from \"./integrationmodel\";\n\n/**\n\n */\nexport default class PopUpMessage {\n /**\n * @classdesc\n * This class represents a dialog message overlaying a DOM element in order to\n * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears\n * o canceled. In this last case a callback function should be called.\n * @constructs\n * @param {Object} popupMessageAttributes - Object containing popup properties.\n * @param {HTMLElement} popupMessageAttributes.overlayElement - Element to overlay.\n * @param {Object} popupMessageAttributes.callbacks - Contains callback\n * methods for close and cancel actions.\n * @param {Object} popupMessageAttributes.strings - Contains all the strings needed.\n */\n constructor(popupMessageAttributes) {\n /**\n * Element to be overlaid when the popup appears.\n */\n this.overlayElement = popupMessageAttributes.overlayElement;\n\n this.callbacks = popupMessageAttributes.callbacks;\n\n /**\n * HTMLElement element to wrap all HTML elements inside the popupMessage.\n */\n this.overlayWrapper = this.overlayElement.appendChild(document.createElement(\"div\"));\n this.overlayWrapper.setAttribute(\"class\", \"wrs_popupmessage_overlay_envolture\");\n\n /**\n * HTMLElement to display the popup message, close button and cancel button.\n */\n this.message = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n this.message.id = \"wrs_popupmessage\";\n this.message.setAttribute(\"class\", \"wrs_popupmessage_panel\");\n this.message.setAttribute(\"role\", \"dialog\");\n this.message.setAttribute(\"aria-describedby\", \"description_txt\");\n const paragraph = document.createElement(\"p\");\n const text = document.createTextNode(popupMessageAttributes.strings.message);\n paragraph.appendChild(text);\n paragraph.id = \"description_txt\";\n this.message.appendChild(paragraph);\n\n /**\n * HTML element overlaying the overlayElement.\n */\n const overlay = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n overlay.setAttribute(\"class\", \"wrs_popupmessage_overlay\");\n // We create a overlay that close popup message on click in there\n overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n\n /**\n * HTML element containing cancel and close buttons.\n */\n this.buttonArea = this.message.appendChild(document.createElement(\"div\"));\n this.buttonArea.setAttribute(\"class\", \"wrs_popupmessage_button_area\");\n this.buttonArea.id = \"wrs_popup_button_area\";\n\n // Close button arguments.\n const buttonSubmitArguments = {\n class: \"wrs_button_accept\",\n innerHTML: popupMessageAttributes.strings.submitString,\n id: \"wrs_popup_accept_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-close-button\",\n };\n\n /**\n * Close button arguments.\n */\n this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this));\n this.buttonArea.appendChild(this.closeButton);\n\n // Cancel button arguments.\n const buttonCancelArguments = {\n class: \"wrs_button_cancel\",\n innerHTML: popupMessageAttributes.strings.cancelString,\n id: \"wrs_popup_cancel_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-cancel-button\",\n };\n\n /**\n * Cancel button.\n */\n this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this));\n this.buttonArea.appendChild(this.cancelButton);\n }\n\n /**\n * This method create a button with arguments and return button dom object\n * @param {Object} parameters - An object containing id, class and innerHTML button text.\n * @param {String} parameters.id - Button id.\n * @param {String} parameters.class - Button class name.\n * @param {String} parameters.innerHTML - Button innerHTML text.\n * @param {Object} callback- Callback method to call on click event.\n * @returns {HTMLElement} HTML button.\n */\n // eslint-disable-next-line class-methods-use-this\n createButton(parameters, callback) {\n let element = {};\n element = document.createElement(\"button\");\n element.setAttribute(\"id\", parameters.id);\n element.setAttribute(\"class\", parameters.class);\n element.innerHTML = parameters.innerHTML;\n element.addEventListener(\"click\", callback);\n if (parameters[\"data-testid\"]) {\n element.setAttribute(\"data-testid\", parameters[\"data-testid\"]);\n }\n\n return element;\n }\n\n /**\n * Shows the popupmessage containing a message, and two buttons\n * to cancel the action or close the modal dialog.\n */\n show() {\n if (this.overlayWrapper.style.display !== \"block\") {\n // Clear focus with blur for prevent press any key.\n document.activeElement.blur();\n this.overlayWrapper.style.display = \"block\";\n this.closeButton.focus();\n } else {\n this.overlayWrapper.style.display = \"none\";\n // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow\n }\n }\n\n /**\n * This method cancels the popupMessage: the dialog disappears revealing the overlaid element.\n * A callback method is called (if defined). For example a method to focus the overlaid element.\n */\n cancelAction() {\n this.overlayWrapper.style.display = \"none\";\n if (typeof this.callbacks.cancelCallback !== \"undefined\") {\n this.callbacks.cancelCallback();\n // Set temporal image to null to prevent loading\n // an existent formula when starting one from scratch. Make focus come back too.\n // IntegrationModel.setActionsOnCancelButtons();\n }\n }\n\n /**\n * This method closes the popupMessage: the dialog disappears and the close callback is called.\n * For example to close the overlaid element.\n */\n closeAction() {\n this.cancelAction();\n if (typeof this.callbacks.closeCallback !== \"undefined\") {\n this.callbacks.closeCallback();\n }\n IntegrationModel.setActionsOnCancelButtons();\n }\n\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */\n onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Code to detect Esc event.\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n this.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.closeButton) {\n this.cancelButton.focus();\n } else {\n this.closeButton.focus();\n }\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport PopUpMessage from \"./popupmessage\";\nimport Util from \"./util\";\nimport Configuration from \"./configuration\";\nimport Listeners from \"./listeners\";\nimport StringManager from \"./stringmanager\";\nimport ContentManager from \"./contentmanager\";\nimport Telemeter from \"./telemeter\";\nimport IntegrationModel from \"./integrationmodel\";\nimport Core from \"./core.src\";\n\nimport closeIcon from \"../styles/icons/general/close_icon.svg\"; //eslint-disable-line\nimport closeHoverIcon from \"../styles/icons/hover/close_icon_h.svg\"; //eslint-disable-line\nimport fullsIcon from \"../styles/icons/general/fulls_icon.svg\"; //eslint-disable-line\nimport fullsHoverIcon from \"../styles/icons/hover/fulls_icon_h.svg\"; //eslint-disable-line\nimport minIcon from \"../styles/icons/general/min_icon.svg\"; //eslint-disable-line\nimport minHoverIcon from \"../styles/icons/hover/min_icon_h.svg\"; //eslint-disable-line\nimport minsIcon from \"../styles/icons/general/mins_icon.svg\"; //eslint-disable-line\nimport minsHoverIcon from \"../styles/icons/hover/mins_icon_h.svg\"; //eslint-disable-line\nimport maxIcon from \"../styles/icons/general/max_icon.svg\"; //eslint-disable-line\nimport maxHoverIcon from \"../styles/icons/hover/max_icon_h.svg\"; //eslint-disable-line\n\n/**\n * @typedef {Object} DeviceProperties\n * @property {String} DeviceProperties.orientation - Indicates of the orientation of the device.\n * @property {Boolean} DeviceProperties.isAndroid - True if the device is Android. False otherwise.\n * @property {Boolean} DeviceProperties.isIOS - True if the device is iOS. False otherwise.\n * @property {Boolean} DeviceProperties.isMobile - True if the device is a mobile one.\n * False otherwise.\n * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one.\n * False otherwise.\n */\n\nexport default class ModalDialog {\n /**\n * @classdesc\n * This class represents a modal dialog. The modal dialog admits\n * a {@link ContentManager} instance to manage the content of the dialog.\n * @constructs\n * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes.\n */\n constructor(modalDialogAttributes) {\n this.attributes = modalDialogAttributes;\n\n // Metrics.\n const ua = navigator.userAgent.toLowerCase();\n const isAndroid = ua.indexOf(\"android\") > -1;\n const isIOS = ContentManager.isIOS();\n this.iosSoftkeyboardOpened = false;\n this.iosMeasureUnit = ua.indexOf(\"crios\") === -1 ? \"%\" : \"vh\";\n this.iosDivHeight = `100%${this.iosMeasureUnit}`;\n\n const deviceWidth = window.outerWidth;\n const deviceHeight = window.outerHeight;\n\n const landscape = deviceWidth > deviceHeight;\n const portrait = deviceWidth < deviceHeight;\n\n // TODO: Detect isMobile without using editor metrics.\n const isLandscape = landscape && this.attributes.height > deviceHeight;\n const isPortrait = portrait && this.attributes.width > deviceWidth;\n const isMobile = ContentManager.isMobile();\n\n // Obtain number of current instance.\n this.instanceId = document.getElementsByClassName(\"wrs_modal_dialogContainer\").length;\n\n // Device object properties.\n\n /**\n * @type {DeviceProperties}\n */\n this.deviceProperties = {\n orientation: landscape ? \"landscape\" : \"portrait\",\n isAndroid,\n isIOS,\n isMobile,\n isDesktop: !isMobile && !isIOS && !isAndroid,\n };\n\n this.properties = {\n created: false,\n state: \"\",\n previousState: \"\",\n position: { bottom: 0, right: 10 },\n size: { height: 338, width: 580 },\n };\n\n /**\n * Object to keep website's style before change it on lock scroll for mobile devices.\n * @type {Object}\n * @property {String} bodyStylePosition - Previous body style position.\n * @property {String} bodyStyleOverflow - Previous body style overflow.\n * @property {String} htmlStyleOverflow - Previous body style overflow.\n * @property {String} windowScrollX - Previous window's scroll Y.\n * @property {String} windowScrollY - Previous window's scroll X.\n */\n this.websiteBeforeLockParameters = null;\n\n let attributes = {};\n attributes.class = \"wrs_modal_overlay\";\n attributes.id = this.getElementId(attributes.class);\n this.overlay = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_title_bar\";\n attributes.id = this.getElementId(attributes.class);\n this.titleBar = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_title\";\n attributes.id = this.getElementId(attributes.class);\n this.title = Util.createElement(\"div\", attributes);\n this.title.innerHTML = \"offline\";\n\n attributes = {};\n attributes.class = \"wrs_modal_close_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"close\");\n attributes.style = {};\n this.closeDiv = Util.createElement(\"a\", attributes);\n this.closeDiv.setAttribute(\"role\", \"button\");\n this.closeDiv.setAttribute(\"tabindex\", 3);\n // Apply styles and events after the creation as createElement doesn't process them correctly\n let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`;\n let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`;\n this.closeDiv.setAttribute(\"style\", generalStyle);\n this.closeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.closeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.closeDiv.setAttribute(\"data-testid\", \"mtcteditor-close-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_stack_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"exit_fullscreen\");\n this.stackDiv = Util.createElement(\"a\", attributes);\n this.stackDiv.setAttribute(\"role\", \"button\");\n this.stackDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`;\n hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`;\n this.stackDiv.setAttribute(\"style\", generalStyle);\n this.stackDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.stackDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.stackDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-disable-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_maximize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"fullscreen\");\n this.maximizeDiv = Util.createElement(\"a\", attributes);\n this.maximizeDiv.setAttribute(\"role\", \"button\");\n this.maximizeDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`;\n this.maximizeDiv.setAttribute(\"style\", generalStyle);\n this.maximizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.maximizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.maximizeDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-enable-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_minimize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"minimize\");\n this.minimizeDiv = Util.createElement(\"a\", attributes);\n this.minimizeDiv.setAttribute(\"role\", \"button\");\n this.minimizeDiv.setAttribute(\"tabindex\", 1);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identify the element in automated testing\n this.minimizeDiv.setAttribute(\"data-testid\", \"mtcteditor-minimize-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_dialogContainer\";\n attributes.id = this.getElementId(attributes.class);\n attributes.role = \"dialog\";\n this.container = Util.createElement(\"div\", attributes);\n this.container.setAttribute(\"aria-labeledby\", \"wrs_modal_title[0]\");\n\n attributes = {};\n attributes.class = \"wrs_modal_wrapper\";\n attributes.id = this.getElementId(attributes.class);\n this.wrapper = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_content_container\";\n attributes.id = this.getElementId(attributes.class);\n this.contentContainer = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_controls\";\n attributes.id = this.getElementId(attributes.class);\n this.controls = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_buttons_container\";\n attributes.id = this.getElementId(attributes.class);\n this.buttonContainer = Util.createElement(\"div\", attributes);\n\n // Buttons: all button must be created using createSubmitButton method.\n this.submitButton = this.createSubmitButton(\n {\n id: this.getElementId(\"wrs_modal_button_accept\"),\n class: \"wrs_modal_button_accept\",\n innerHTML: StringManager.get(\"accept\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-insert-button\",\n },\n this.submitAction.bind(this),\n );\n\n this.cancelButton = this.createSubmitButton(\n {\n id: this.getElementId(\"wrs_modal_button_cancel\"),\n class: \"wrs_modal_button_cancel\",\n innerHTML: StringManager.get(\"cancel\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cancel-button\",\n },\n this.cancelAction.bind(this),\n );\n\n this.contentManager = null;\n\n // Overlay popup.\n const popupStrings = {\n cancelString: StringManager.get(\"cancel\"),\n submitString: StringManager.get(\"close\"),\n message: StringManager.get(\"close_modal_warning\"),\n };\n\n const callbacks = {\n closeCallback: () => {\n this.close(\"mtc_close\");\n },\n cancelCallback: () => {\n this.focus();\n },\n };\n\n const popupupProperties = {\n overlayElement: this.container,\n callbacks,\n strings: popupStrings,\n };\n\n this.popup = new PopUpMessage(popupupProperties);\n\n /**\n * Indicates if directionality of the modal dialog is RTL. false by default.\n * @type {Boolean}\n */\n this.rtl = false;\n if (\"rtl\" in this.attributes) {\n this.rtl = this.attributes.rtl;\n }\n\n // Event handlers need modal instance context.\n this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this);\n this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this);\n }\n\n /**\n * This method sets an ContentManager instance to ModalDialog. ContentManager\n * manages the logic of ModalDialog content: submit, update, close and changes.\n * @param {ContentManager} contentManager - ContentManager instance.\n */\n setContentManager(contentManager) {\n this.contentManager = contentManager;\n }\n\n /**\n * Returns the modal contentElement object.\n * @returns {ContentManager} the instance of the ContentManager class.\n */\n getContentManager() {\n return this.contentManager;\n }\n\n /**\n * This method is called when the modal object has been submitted. Calls\n * contentElement submitAction method - if exists - and closes the modal\n * object. No logic about the content should be placed here,\n * contentElement.submitAction is the responsible of the content logic.\n */\n async submitAction() {\n if (typeof this.contentManager.submitAction !== \"undefined\") {\n this.contentManager.submitAction();\n }\n\n await this.close(\"mtc_insert\");\n }\n\n /**\n * Performs the cancel action.\n * If there are no changes in the content, it closes the modal.\n * Otherwise, it shows a pop-up message to confirm the cancel action.\n * @returns {Promise} - A promise that resolves when the modal is closed.\n */\n async cancelAction() {\n if (typeof this.contentManager.hasChanges === \"undefined\" || !this.contentManager.hasChanges()) {\n IntegrationModel.setActionsOnCancelButtons();\n await this.close(\"mtc_close\");\n } else {\n this.showPopUpMessage();\n }\n }\n\n /**\n * Returns a button element.\n * @param {Object} properties - Input button properties.\n * @param {String} properties.class - Input button class.\n * @param {String} properties.innerHTML - Input button innerHTML.\n * @param {Object} callback - Callback function associated to click event.\n * @returns {HTMLButtonElement} The button element.\n *\n */\n // eslint-disable-next-line class-methods-use-this\n createSubmitButton(properties, callback) {\n class SubmitButton {\n constructor() {\n this.element = document.createElement(\"button\");\n this.element.id = properties.id;\n this.element.className = properties.class;\n this.element.innerHTML = properties.innerHTML;\n this.element.dataset.testid = properties[\"data-testid\"];\n Util.addEvent(this.element, \"click\", callback);\n }\n\n getElement() {\n return this.element;\n }\n }\n return new SubmitButton(properties, callback).getElement();\n }\n\n /**\n * Creates the modal window object inserting a contentElement object.\n */\n create() {\n /* Modal Window Structure\n _____________________________________________________________________________________\n |wrs_modal_dialog_Container |\n | _________________________________________________________________________________ |\n | |title_bar minimize_button stack_button close_button | |\n | |_______________________________________________________________________________| |\n | |wrapper | |\n | | _____________________________________________________________________________ | |\n | | |content | | |\n | | | | | |\n | | | | | |\n | | |___________________________________________________________________________| | |\n | | _____________________________________________________________________________ | |\n | | |controls | | |\n | | | ___________________________________ | | |\n | | | |buttonContainer | | | |\n | | | | _______________________________ | | | |\n | | | | |button_accept | button_cancel| | | | |\n | | | |_|_____________ |______________|_| | | |\n | | |___________________________________________________________________________| | |\n | |_______________________________________________________________________________| |\n |___________________________________________________________________________________| */\n\n this.titleBar.appendChild(this.closeDiv);\n this.titleBar.appendChild(this.stackDiv);\n this.titleBar.appendChild(this.maximizeDiv);\n this.titleBar.appendChild(this.minimizeDiv);\n this.titleBar.appendChild(this.title);\n\n if (this.deviceProperties.isDesktop) {\n this.container.appendChild(this.titleBar);\n }\n\n this.wrapper.appendChild(this.contentContainer);\n this.wrapper.appendChild(this.controls);\n\n this.controls.appendChild(this.buttonContainer);\n\n this.buttonContainer.appendChild(this.submitButton);\n this.buttonContainer.appendChild(this.cancelButton);\n\n this.container.appendChild(this.wrapper);\n\n // Check if browser has scrollBar before modal has modified.\n this.recalculateScrollBar();\n\n document.body.appendChild(this.container);\n document.body.appendChild(this.overlay);\n\n if (this.deviceProperties.isDesktop) {\n // Desktop.\n this.createModalWindowDesktop();\n this.createResizeButtons();\n\n this.addListeners();\n // Maximize window only when the configuration is set and the device is not iOS or Android.\n if (Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n } else if (this.deviceProperties.isAndroid) {\n this.createModalWindowAndroid();\n } else if (this.deviceProperties.isIOS) {\n this.createModalWindowIos();\n }\n\n if (this.contentManager != null) {\n this.contentManager.insert(this);\n }\n\n this.properties.open = true;\n this.properties.created = true;\n\n // Checks language directionality.\n if (this.isRTL()) {\n this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`;\n this.container.className += \" wrs_modal_rtl\";\n }\n }\n\n /**\n * Creates a button in the modal object to resize it.\n */\n createResizeButtons() {\n // This is a definition of Resize Button Bottom-Right.\n this.resizerBR = document.createElement(\"div\");\n this.resizerBR.className = \"wrs_bottom_right_resizer\";\n this.resizerBR.innerHTML = \"◢\";\n // To identifiy the element in automated testing\n this.resizerBR.dataset.testid = \"mtcteditor-resize-button-right\";\n // This is a definition of Resize Button Top-Left.\n this.resizerTL = document.createElement(\"div\");\n this.resizerTL.className = \"wrs_bottom_left_resizer\";\n // To identifiy the element in automated testing\n this.resizerTL.dataset.testid = \"mtcteditor-resize-button-left\";\n // Append resize buttons to modal.\n this.container.appendChild(this.resizerBR);\n this.titleBar.appendChild(this.resizerTL);\n // Add events to resize on click and drag.\n Util.addEvent(this.resizerBR, \"mousedown\", this.activateResizeStateBR.bind(this));\n Util.addEvent(this.resizerTL, \"mousedown\", this.activateResizeStateTL.bind(this));\n }\n\n /**\n * Initialize variables for Bottom-Right resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */\n activateResizeStateBR(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, false);\n }\n\n /**\n * Initialize variables for Top-Left resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */\n activateResizeStateTL(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, true);\n }\n\n /**\n * Common method to initialize variables at resize.\n * @param {MouseEvent} mouseEvent - Mouse event.\n */\n initializeResizeProperties(mouseEvent, leftOption) {\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n this.resizeDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y,\n };\n // Save Initial state of modal to compare on drag and obtain the difference.\n this.initialWidth = parseInt(this.container.style.width, 10);\n this.initialHeight = parseInt(this.container.style.height, 10);\n if (!leftOption) {\n this.initialRight = parseInt(this.container.style.right, 10);\n this.initialBottom = parseInt(this.container.style.bottom, 10);\n } else {\n this.leftScale = true;\n }\n if (!this.initialRight) {\n this.initialRight = 0;\n }\n if (!this.initialBottom) {\n this.initialBottom = 0;\n }\n // Disable mouse events on editor when we start to drag modal.\n document.body.style[\"user-select\"] = \"none\";\n }\n\n /**\n * This method opens the modal window, restoring the previous state, position and metrics,\n * if exists. By default the modal object opens in stack mode.\n */\n open() {\n // Removing close class.\n this.removeClass(\"wrs_closed\");\n // Hiding keyboard for mobile devices.\n const { isIOS } = this.deviceProperties;\n const { isAndroid } = this.deviceProperties;\n const { isMobile } = this.deviceProperties;\n if (isIOS || isAndroid || isMobile) {\n // Restore scale to 1.\n this.restoreWebsiteScale();\n this.lockWebsiteScroll();\n // Due to editor wait we need to wait until editor focus.\n setTimeout(() => {\n this.hideKeyboard();\n }, 400);\n }\n\n // New modal window. He need to create the whole object.\n if (!this.properties.created) {\n this.create();\n } else {\n // Previous state closed. Open method can be called even the previous state is open,\n // for example updating the content of the modal object.\n if (!this.properties.open) {\n this.properties.open = true;\n\n // Restoring the previous open state: if the modal object has been closed\n // re-open it should preserve the state and the metrics.\n if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) {\n this.restoreState();\n }\n }\n\n // Maximize window only when the configuration is set and the device is not iOs or Android.\n if (this.deviceProperties.isDesktop && Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n\n // In iOS we need to recalculate the size of the modal object because\n // iOS keyboard is a float div which can overlay the modal object.\n if (this.deviceProperties.isIOS) {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`${100 + this.iosMeasureUnit}`);\n }\n }\n\n if (!ContentManager.isEditorLoaded()) {\n const listener = Listeners.newListener(\"onLoad\", () => {\n this.contentManager.onOpen(this);\n });\n this.contentManager.addListener(listener);\n } else {\n this.contentManager.onOpen(this);\n }\n }\n\n /**\n * Closes the modal.\n * Removes specific CSS classes, saves modal properties, unlocks website scroll,\n * sets the 'open' property to false, and triggers the 'onModalClose' event.\n * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger.\n * @returns {Promise} A promise that resolves when the modal is closed.\n */\n async close(trigger) {\n this.removeClass(\"wrs_maximized\");\n this.removeClass(\"wrs_minimized\");\n this.removeClass(\"wrs_stack\");\n this.addClass(\"wrs_closed\");\n this.saveModalProperties();\n this.unlockWebsiteScroll();\n this.properties.open = false;\n\n if (trigger) {\n try {\n await Telemeter.telemeter.track(\"CLOSED_MTCT_EDITOR\", {\n toolbar: this.contentManager.toolbar,\n trigger: trigger,\n });\n } catch (error) {\n console.error(\"Error tracking CLOSED_MTCT_EDITOR\", error);\n }\n }\n\n Core.globalListeners.fire(\"onModalClose\", {});\n }\n /**\n * Closes modal window and destroys the object.\n */\n destroy() {\n // Close modal window.\n this.close();\n // Remove listeners and destroy the object.\n this.removeListeners();\n this.overlay.remove();\n this.container.remove();\n // Reset properties to allow open again.\n this.properties.created = false;\n }\n\n /**\n * Sets the website scale to one.\n */\n // eslint-disable-next-line class-methods-use-this\n restoreWebsiteScale() {\n let viewportmeta = document.querySelector(\"meta[name=viewport]\");\n // Let the equal symbols in order to search and make meta's final content.\n const contentAttrsToUpdate = [\"initial-scale=\", \"minimum-scale=\", \"maximum-scale=\"];\n const contentAttrsValuesToUpdate = [\"1.0\", \"1.0\", \"1.0\"];\n const setMetaAttrFunc = (viewportelement, contentAttrs) => {\n const contentAttr = viewportelement.getAttribute(\"content\");\n // If it exists, we need to maintain old values and put our values.\n if (contentAttr) {\n const attrArray = contentAttr.split(\",\");\n let finalContentMeta = \"\";\n const oldAttrs = [];\n for (let i = 0; i < attrArray.length; i += 1) {\n let isAttrToUpdate = false;\n let j = 0;\n while (!isAttrToUpdate && j < contentAttrs.length) {\n if (attrArray[i].indexOf(contentAttrs[j])) {\n isAttrToUpdate = true;\n }\n j += 1;\n }\n\n if (!isAttrToUpdate) {\n oldAttrs.push(attrArray[i]);\n }\n }\n\n for (let i = 0; i < contentAttrs.length; i += 1) {\n const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i];\n finalContentMeta += i === 0 ? attr : `,${attr}`;\n }\n\n for (let i = 0; i < oldAttrs.length; i += 1) {\n finalContentMeta += `,${oldAttrs[i]}`;\n }\n viewportelement.setAttribute(\"content\", finalContentMeta);\n // It needs to set to empty because setAttribute refresh only when attribute is different.\n viewportelement.setAttribute(\"content\", \"\");\n viewportelement.setAttribute(\"content\", contentAttr);\n } else {\n viewportelement.setAttribute(\"content\", \"initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\");\n viewportelement.removeAttribute(\"content\");\n }\n };\n\n if (!viewportmeta) {\n viewportmeta = document.createElement(\"meta\");\n document.getElementsByTagName(\"head\")[0].appendChild(viewportmeta);\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate, contentAttrsValuesToUpdate);\n viewportmeta.remove();\n } else {\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate, contentAttrsValuesToUpdate);\n }\n }\n\n /**\n * Locks website scroll for mobile devices.\n */\n lockWebsiteScroll() {\n this.websiteBeforeLockParameters = {\n bodyStylePosition: document.body.style.position ? document.body.style.position : \"\",\n bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : \"\",\n htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : \"\",\n windowScrollX: window.scrollX,\n windowScrollY: window.scrollY,\n };\n }\n\n /**\n * Unlocks website scroll for mobile devices.\n */\n unlockWebsiteScroll() {\n if (this.websiteBeforeLockParameters) {\n document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition;\n document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow;\n document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow;\n const { windowScrollX } = this.websiteBeforeLockParameters;\n const { windowScrollY } = this.websiteBeforeLockParameters;\n window.scrollTo(windowScrollX, windowScrollY);\n this.websiteBeforeLockParameters = null;\n }\n }\n\n /**\n * Util function to known if browser is IE11.\n * @returns {Boolean} true if the browser is IE11. false otherwise.\n */\n // eslint-disable-next-line class-methods-use-this\n isIE11() {\n if (\n navigator.userAgent.search(\"Msie/\") >= 0 ||\n navigator.userAgent.search(\"Trident/\") >= 0 ||\n navigator.userAgent.search(\"Edge/\") >= 0\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Returns if the current language type is RTL.\n * @return {Boolean} true if current language is RTL. false otherwise.\n */\n isRTL() {\n if (this.attributes.language === \"ar\" || this.attributes.language === \"he\") {\n return true;\n }\n return this.rtl;\n }\n\n /**\n * Adds a class to all modal ModalDialog DOM elements.\n * @param {String} className - Class name.\n */\n addClass(className) {\n Util.addClass(this.overlay, className);\n Util.addClass(this.titleBar, className);\n Util.addClass(this.overlay, className);\n Util.addClass(this.container, className);\n Util.addClass(this.contentContainer, className);\n Util.addClass(this.stackDiv, className);\n Util.addClass(this.minimizeDiv, className);\n Util.addClass(this.maximizeDiv, className);\n Util.addClass(this.wrapper, className);\n }\n\n /**\n * Remove a class from all modal DOM elements.\n * @param {String} className - Class name.\n */\n removeClass(className) {\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.titleBar, className);\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.container, className);\n Util.removeClass(this.contentContainer, className);\n Util.removeClass(this.stackDiv, className);\n Util.removeClass(this.minimizeDiv, className);\n Util.removeClass(this.maximizeDiv, className);\n Util.removeClass(this.wrapper, className);\n }\n\n /**\n * Create modal dialog for desktop.\n */\n createModalWindowDesktop() {\n this.addClass(\"wrs_modal_desktop\");\n this.stack();\n }\n\n /**\n * Create modal dialog for non android devices.\n */\n createModalWindowAndroid() {\n this.addClass(\"wrs_modal_android\");\n window.addEventListener(\"resize\", this.orientationChangeAndroidSoftkeyboard.bind(this));\n }\n\n /**\n * Create modal dialog for iOS devices.\n */\n createModalWindowIos() {\n this.addClass(\"wrs_modal_ios\");\n // Refresh the size when the orientation is changed.\n window.addEventListener(\"resize\", this.orientationChangeIosSoftkeyboard.bind(this));\n }\n\n /**\n * Restore previous state, position and size of previous stacked modal dialog.\n */\n restoreState() {\n if (this.properties.state === \"maximized\") {\n // Reset states for prevent return to stack state.\n this.maximize();\n } else if (this.properties.state === \"minimized\") {\n // Reset states for prevent return to stack state.\n this.properties.state = this.properties.previousState;\n this.properties.previousState = \"\";\n this.minimize();\n } else {\n this.stack();\n }\n }\n\n /**\n * Stacks the modal object.\n */\n stack() {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"stack\";\n this.removeClass(\"wrs_maximized\");\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n this.addClass(\"wrs_stack\");\n\n // Change maximize/minimize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n\n this.restoreModalProperties();\n\n if (typeof this.resizerBR !== \"undefined\" && typeof this.resizerTL !== \"undefined\") {\n this.setResizeButtonsVisibility();\n }\n\n // Need recalculate position of actual modal because window can was changed in fullscreenmode.\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n this.focus();\n }\n\n /**\n * Minimizes the modal object.\n */\n minimize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n this.title.style.cursor = \"pointer\";\n if (this.properties.state === \"minimized\" && this.properties.previousState === \"stack\") {\n this.stack();\n } else if (this.properties.state === \"minimized\" && this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n // Setting css to prevent important tag into css style.\n this.container.style.height = \"30px\";\n this.container.style.width = \"250px\";\n this.container.style.bottom = \"0px\";\n this.container.style.right = \"10px\";\n\n this.removeListeners();\n this.properties.previousState = this.properties.state;\n this.properties.state = \"minimized\";\n this.setResizeButtonsVisibility();\n this.minimizeDiv.title = StringManager.get(\"maximize\");\n\n if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.removeClass(\"wrs_stack\");\n } else {\n this.removeClass(\"wrs_maximized\");\n }\n this.addClass(\"wrs_minimized\");\n\n // Change minimize icon to maximize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n }\n }\n\n /**\n * Maximizes the modal object.\n */\n maximize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n if (this.properties.state !== \"maximized\") {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"maximized\";\n }\n // Don't permit resize on maximize mode.\n this.setResizeButtonsVisibility();\n\n if (Util.containsClass(this.overlay, \"wrs_minimized\")) {\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n } else if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.container.style.left = null;\n this.container.style.top = null;\n this.removeClass(\"wrs_stack\");\n }\n\n this.addClass(\"wrs_maximized\");\n\n // Change maximize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n\n // Set size to 80% screen with a max size.\n this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10));\n if (this.container.clientHeight > 700) {\n this.container.style.height = \"700px\";\n }\n if (this.container.clientWidth > 1200) {\n this.container.style.width = \"1200px\";\n }\n\n // Setting modal position in center on screen.\n const { innerHeight } = window;\n const { innerWidth } = window;\n const { offsetHeight } = this.container;\n const { offsetWidth } = this.container;\n const bottom = innerHeight / 2 - offsetHeight / 2;\n const right = innerWidth / 2 - offsetWidth / 2;\n\n this.setPosition(bottom, right);\n this.recalculateScale();\n this.recalculatePosition();\n this.recalculateSize();\n this.focus();\n }\n\n /**\n * Expand again the modal object from a minimized state.\n */\n reExpand() {\n if (this.properties.state === \"minimized\") {\n if (this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n this.stack();\n }\n this.title.style.cursor = \"\";\n }\n }\n\n /**\n * Sets modal size.\n * @param {Number} height - Height of the ModalDialog\n * @param {Number} width - Width of the ModalDialog.\n */\n setSize(height, width) {\n this.container.style.height = `${height}px`;\n this.container.style.width = `${width}px`;\n this.recalculateSize();\n }\n\n /**\n * Sets modal position using bottom and right style attributes.\n * @param {number} bottom - bottom attribute.\n * @param {number} right - right attribute.\n */\n setPosition(bottom, right) {\n this.container.style.bottom = `${bottom}px`;\n this.container.style.right = `${right}px`;\n }\n\n /**\n * Saves position and size parameters of and open ModalDialog. This attributes\n * are needed to restore it on re-open.\n */\n saveModalProperties() {\n // Saving values of modal only when modal is in stack state.\n if (this.properties.state === \"stack\") {\n this.properties.position.bottom = parseInt(this.container.style.bottom, 10);\n this.properties.position.right = parseInt(this.container.style.right, 10);\n this.properties.size.width = parseInt(this.container.style.width, 10);\n this.properties.size.height = parseInt(this.container.style.height, 10);\n }\n }\n\n /**\n * Restore ModalDialog position and size parameters.\n */\n restoreModalProperties() {\n if (this.properties.state === \"stack\") {\n // Restoring Bottom and Right values from last modal.\n this.setPosition(this.properties.position.bottom, this.properties.position.right);\n // Restoring Height and Left values from last modal.\n this.setSize(this.properties.size.height, this.properties.size.width);\n }\n }\n\n /**\n * Sets the modal dialog initial size.\n */\n recalculateSize() {\n this.wrapper.style.width = `${this.container.clientWidth - 12}px`;\n this.wrapper.style.height = `${this.container.clientHeight - 38}px`;\n this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`;\n }\n\n /**\n * Enable or disable visibility of resize buttons in modal window depend on state.\n */\n setResizeButtonsVisibility() {\n if (this.properties.state === \"stack\") {\n this.resizerTL.style.visibility = \"visible\";\n this.resizerBR.style.visibility = \"visible\";\n } else {\n this.resizerTL.style.visibility = \"hidden\";\n this.resizerBR.style.visibility = \"hidden\";\n }\n }\n\n /**\n * Makes an object draggable adding mouse and touch events.\n */\n addListeners() {\n // Button events (maximize, minimize, stack and close).\n this.maximizeDiv.addEventListener(\"click\", this.maximize.bind(this), true);\n this.stackDiv.addEventListener(\"click\", this.stack.bind(this), true);\n this.minimizeDiv.addEventListener(\"click\", this.minimize.bind(this), true);\n this.closeDiv.addEventListener(\"click\", this.cancelAction.bind(this));\n this.maximizeDiv.addEventListener(\n \"keypress\",\n function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n }\n },\n true,\n );\n this.stackDiv.addEventListener(\n \"keypress\",\n function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n },\n true,\n );\n this.minimizeDiv.addEventListener(\n \"keypress\",\n function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n },\n true,\n );\n this.closeDiv.addEventListener(\"keypress\", function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n });\n this.title.addEventListener(\"click\", this.reExpand.bind(this));\n\n // Overlay events (close).\n this.overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n\n // Mouse events.\n Util.addEvent(window, \"mousedown\", this.startDrag.bind(this));\n Util.addEvent(window, \"mouseup\", this.stopDrag.bind(this));\n Util.addEvent(window, \"mousemove\", this.drag.bind(this));\n Util.addEvent(window, \"resize\", this.onWindowResize.bind(this));\n // Key events.\n Util.addEvent(window, \"keydown\", this.onKeyDown.bind(this));\n }\n\n /**\n * Removes draggable events from an object.\n */\n removeListeners() {\n // Mouse events.\n Util.removeEvent(window, \"mousedown\", this.startDrag);\n Util.removeEvent(window, \"mouseup\", this.stopDrag);\n Util.removeEvent(window, \"mousemove\", this.drag);\n Util.removeEvent(window, \"resize\", this.onWindowResize);\n // Key events.\n Util.removeEvent(window, \"keydown\", this.onKeyDown);\n }\n\n /**\n * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists)\n * @param {MouseEvent} mouseEvent - Mouse event.\n * @return {Object} With the X and Y coordinates.\n */\n // eslint-disable-next-line class-methods-use-this\n eventClient(mouseEvent) {\n if (typeof mouseEvent.clientX === \"undefined\" && mouseEvent.changedTouches) {\n const client = {\n X: mouseEvent.changedTouches[0].clientX,\n Y: mouseEvent.changedTouches[0].clientY,\n };\n return client;\n }\n const client = {\n X: mouseEvent.clientX,\n Y: mouseEvent.clientY,\n };\n return client;\n }\n\n /**\n * Start drag function: set the object dragDataObject with the draggable\n * object offsets coordinates.\n * when drag starts (on touchstart or mousedown events).\n * @param {MouseEvent} mouseEvent - Touchstart or mousedown event.\n */\n startDrag(mouseEvent) {\n if (this.properties.state === \"minimized\") {\n return;\n }\n if (mouseEvent.target === this.title) {\n if (typeof this.dragDataObject === \"undefined\" || this.dragDataObject === null) {\n // Save first click mouse point on screen.\n this.dragDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y,\n };\n // Reset last drag position when start drag.\n this.lastDrag = {\n x: \"0px\",\n y: \"0px\",\n };\n // Init right and bottom values for window modal if it isn't exist.\n if (this.container.style.right === \"\") {\n this.container.style.right = \"0px\";\n }\n if (this.container.style.bottom === \"\") {\n this.container.style.bottom = \"0px\";\n }\n\n // Needed for IE11 for apply disabled mouse events on editor because\n // internet explorer needs a dynamic object to apply this property.\n if (this.isIE11()) {\n // this.iframe.style['position'] = 'relative';\n }\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n // Obtain screen limits for prevent overflow.\n this.limitWindow = this.getLimitWindow();\n }\n }\n }\n\n /**\n * Updates dragDataObject with the draggable object coordinates when\n * the draggable object is being moved.\n * @param {MouseEvent} mouseEvent - The mouse event.\n */\n drag(mouseEvent) {\n if (this.dragDataObject) {\n mouseEvent.preventDefault();\n // Calculate max and min between actual mouse position and limit of screeen.\n // It restric the movement of modal into window.\n let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y);\n limitY = Math.max(this.limitWindow.maxPointer.y, limitY);\n let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x);\n limitX = Math.max(this.limitWindow.maxPointer.x, limitX);\n // Subtract limit with first position to obtain relative pixels increment\n // to the anchor point.\n const dragX = `${limitX - this.dragDataObject.x}px`;\n const dragY = `${limitY - this.dragDataObject.y}px`;\n // Save last valid position of modal before window overflow.\n this.lastDrag = {\n x: dragX,\n y: dragY,\n };\n // This move modal with hardware acceleration.\n this.container.style.transform = `translate3d(${dragX},${dragY},0)`;\n }\n if (this.resizeDataObject) {\n const { innerWidth } = window;\n const { innerHeight } = window;\n let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7);\n let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7);\n if (limitX < 0) {\n limitX = 0;\n }\n\n if (limitY < 0) {\n limitY = 0;\n }\n\n let scaleMultiplier;\n if (this.leftScale) {\n scaleMultiplier = -1;\n } else {\n scaleMultiplier = 1;\n }\n\n this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`;\n this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`;\n if (!this.leftScale) {\n if (this.resizeDataObject.x - limitX - this.initialWidth < -580) {\n this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`;\n } else {\n this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`;\n this.container.style.width = \"580px\";\n }\n if (this.resizeDataObject.y - limitY < this.initialHeight - 338) {\n this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`;\n } else {\n this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`;\n this.container.style.height = \"338px\";\n }\n }\n this.recalculateScale();\n this.recalculatePosition();\n }\n }\n\n /**\n * Returns the boundaries of actual window to limit modal movement.\n * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen.\n */\n getLimitWindow() {\n // Obtain dimensions of window page.\n const maxWidth = window.innerWidth;\n const maxHeight = window.innerHeight;\n\n // Calculate relative position of mouse point into window.\n const { offsetHeight } = this.container;\n const contStyleBottom = parseInt(this.container.style.bottom, 10);\n const contStyleRight = parseInt(this.container.style.right, 10);\n\n const { pageXOffset } = window;\n const dragY = this.dragDataObject.y;\n const dragX = this.dragDataObject.x;\n\n const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset));\n const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight;\n\n // Calculate limits with sizes of window, modal and mouse position.\n const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY;\n const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY);\n const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth;\n const maxPointerX = this.container.offsetWidth - offSetToolbarX;\n const minPointer = { x: minPointerX, y: minPointerY };\n const maxPointer = { x: maxPointerX, y: maxPointerY };\n return { minPointer, maxPointer };\n }\n\n /**\n * Returns the scrollbar width size of browser\n * @returns {Number} The scrollbar width.\n */\n // eslint-disable-next-line class-methods-use-this\n getScrollBarWidth() {\n // Create a paragraph with full width of page.\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n\n // Create a hidden div to compare sizes.\n const outer = document.createElement(\"div\");\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.appendChild(inner);\n\n document.body.appendChild(outer);\n const widthOuter = inner.offsetWidth;\n\n // Change type overflow of paragraph for measure scrollbar.\n outer.style.overflow = \"scroll\";\n let widthInner = inner.offsetWidth;\n\n // If measure is the same, we compare with internal div.\n if (widthOuter === widthInner) {\n widthInner = outer.clientWidth;\n }\n document.body.removeChild(outer);\n\n return widthOuter - widthInner;\n }\n\n /**\n * Set the dragDataObject to null.\n */\n stopDrag() {\n // Due to we have multiple events that call this function, we need only to execute\n // the next modifiers one time,\n // when the user stops to drag and dragDataObject is not null (the object to drag is attached).\n if (this.dragDataObject || this.resizeDataObject) {\n // If modal doesn't change, it's not necessary to set position with interpolation.\n this.container.style.transform = \"\";\n if (this.dragDataObject) {\n this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`;\n this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`;\n }\n // We make focus on editor after drag modal windows to prevent lose focus.\n this.focus();\n // Restore mouse events on iframe.\n // this.iframe.style['pointer-events'] = 'auto';\n document.body.style[\"user-select\"] = \"\";\n // Restore static state of iframe if we use Internet Explorer.\n if (this.isIE11()) {\n // this.iframe.style['position'] = null;\n }\n // Active text select event.\n Util.removeClass(document.body, \"wrs_noselect\");\n Util.removeClass(this.overlay, \"wrs_overlay_active\");\n }\n this.dragDataObject = null;\n this.resizeDataObject = null;\n this.initialWidth = null;\n this.leftScale = null;\n }\n\n /**\n * Recalculates scale for modal when resize browser window.\n */\n onWindowResize() {\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n }\n\n /**\n * Triggers keyboard events:\n * - Tab key tab to go to submit button.\n * - Esc key to close the modal dialog.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */\n onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Popupmessage is not oppened.\n if (this.popup.overlayWrapper.style.display !== \"block\") {\n // Code to detect Esc event\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n if (this.properties.open) {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.cancelButton) {\n this.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.submitButton) {\n this.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n }\n } else {\n // Popupmessage oppened.\n this.popup.onKeyDown(keyboardEvent);\n }\n }\n }\n\n /**\n * Recalculating position for modal dialog when the browser is resized.\n */\n recalculatePosition() {\n this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`;\n if (parseInt(this.container.style.right, 10) < 0) {\n this.container.style.right = \"0px\";\n }\n this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`;\n if (parseInt(this.container.style.bottom, 10) < 0) {\n this.container.style.bottom = \"0px\";\n }\n }\n\n /**\n * Recalculating scale for modal when the browser is resized.\n */\n recalculateScale() {\n let sizeModified = false;\n\n if (parseInt(this.container.style.width, 10) > 580) {\n this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`;\n sizeModified = true;\n } else {\n this.container.style.width = \"580px\";\n sizeModified = true;\n }\n\n if (parseInt(this.container.style.height, 10) > 338) {\n this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`;\n sizeModified = true;\n } else {\n this.container.style.height = \"338px\";\n sizeModified = true;\n }\n\n if (sizeModified) {\n this.recalculateSize();\n }\n }\n\n /**\n * Recalculating width of browser scroll bar.\n */\n recalculateScrollBar() {\n this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth;\n if (this.hasScrollBar) {\n this.scrollbarWidth = this.getScrollBarWidth();\n } else {\n this.scrollbarWidth = 0;\n }\n }\n\n /**\n * Hide soft keyboards on iOS devices.\n */\n // eslint-disable-next-line class-methods-use-this\n hideKeyboard() {\n // iOS keyboard can't be detected or hide directly from JavaScript.\n // So, this method simulates that user focus a text input and blur\n // the selection.\n const inputField = document.createElement(\"input\");\n this.container.appendChild(inputField);\n inputField.focus();\n inputField.blur();\n // Is removed to not see it.\n inputField.remove();\n }\n\n /**\n * Focus to contentManager object.\n */\n focus() {\n if (this.contentManager != null && typeof this.contentManager.onFocus !== \"undefined\") {\n this.contentManager.onFocus();\n }\n }\n\n /**\n * Returns true when the device is on portrait mode.\n */\n // eslint-disable-next-line class-methods-use-this\n portraitMode() {\n return window.innerHeight > window.innerWidth;\n }\n\n /**\n * Event handler that change container size when IOS soft keyboard is opened.\n */\n handleOpenedIosSoftkeyboard() {\n if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n }\n this.iosSoftkeyboardOpened = true;\n }\n\n /**\n * Event handler that change container size when IOS soft keyboard is closed.\n */\n handleClosedIosSoftkeyboard() {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n\n /**\n * Change container sizes when orientation is changed on iOS.\n */\n orientationChangeIosSoftkeyboard() {\n if (this.iosSoftkeyboardOpened) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n } else {\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n }\n\n /**\n * Change container sizes when orientation is changed on Android.\n */\n orientationChangeAndroidSoftkeyboard() {\n this.setContainerHeight(\"100%\");\n }\n\n /**\n * Set iframe container height.\n * @param {Number} height - New height.\n */\n setContainerHeight(height) {\n this.iosDivHeight = height;\n this.wrapper.style.height = height;\n }\n\n /**\n * Check content of editor before close action.\n */\n showPopUpMessage() {\n if (this.properties.state === \"minimized\") {\n this.stack();\n }\n this.popup.show();\n }\n\n /**\n * Sets the title of the modal dialog.\n * @param {String} title - Modal dialog title.\n */\n setTitle(title) {\n this.title.innerHTML = title;\n }\n\n /**\n * Returns the id of an element, adding the instance number to\n * the element class name:\n * className --> className[idNumber]\n * @param {String} className - The element class name.\n * @returns {String} A string appending the instance id to the className.\n */\n getElementId(className) {\n return `${className}[${this.instanceId}]`;\n }\n}\n","/* eslint-disable */\nvar polyfills;\nexport default polyfills;\n\n// Polyfills.\n/*! http://mths.be/codepointat v0.1.0 by @mathias */\nif (!String.prototype.codePointAt) {\n (function () {\n \"use strict\"; // needed to support `apply`/`call` with `undefined`/`null`\n var codePointAt = function (position) {\n if (this == null) {\n throw TypeError();\n }\n var string = String(this);\n var size = string.length;\n // `ToInteger`\n var index = position ? Number(position) : 0;\n if (index != index) {\n // better `isNaN`\n index = 0;\n }\n // Account for out-of-bounds indices:\n if (index < 0 || index >= size) {\n return undefined;\n }\n // Get the first code unit\n var first = string.charCodeAt(index);\n var second;\n if (\n // check if it’s the start of a surrogate pair\n first >= 0xd800 &&\n first <= 0xdbff && // high surrogate\n size > index + 1 // there is a next code unit\n ) {\n second = string.charCodeAt(index + 1);\n if (second >= 0xdc00 && second <= 0xdfff) {\n // low surrogate\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;\n }\n }\n return first;\n };\n if (Object.defineProperty) {\n Object.defineProperty(String.prototype, \"codePointAt\", {\n value: codePointAt,\n configurable: true,\n writable: true,\n });\n } else {\n String.prototype.codePointAt = codePointAt;\n }\n })();\n}\n\n// Object.assign polyfill.\nif (typeof Object.assign != \"function\") {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) {\n // .length of function is 2\n \"use strict\";\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) {\n // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true,\n });\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nif (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, \"includes\", {\n value: function (searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" s null or is not defined');\n }\n\n // 1. Let O be ? ToObject(this value).\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. if len is 0, return false.\n if (len === 0) {\n return false;\n }\n\n // 4. Let n be ? ToInteger(fromIndex).\n // (if fromIndex is undefinedo, this step generates the value 0.)\n var n = fromIndex | 0;\n\n // 5. if n ≥ 0, then\n // a. Let k be n.\n // 6. Else n < 0,\n // a. Let k be len + n.\n // b. if k < 0, let k be 0.\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n function sameValueZero(x, y) {\n return x === y || (typeof x === \"number\" && typeof y === \"number\" && isNaN(x) && isNaN(y));\n }\n\n // 7. Repeat while k < len\n while (k < len) {\n // a. let element k be the result of ? Get(O, ! ToString(k)).\n // b. if SameValueZero(searchElement, elementK) is true, return true.\n if (sameValueZero(o[k], searchElement)) {\n return true;\n }\n // c. Increase k by 1.\n k++;\n }\n\n // 8. Return false\n return false;\n },\n });\n}\n\nif (!String.prototype.includes) {\n String.prototype.includes = function (search, start) {\n \"use strict\";\n\n if (search instanceof RegExp) {\n throw TypeError(\"first argument must not be a RegExp\");\n }\n if (start === undefined) {\n start = 0;\n }\n return this.indexOf(search, start) !== -1;\n };\n}\n\nif (!String.prototype.startsWith) {\n Object.defineProperty(String.prototype, \"startsWith\", {\n value: function (search, rawPos) {\n var pos = rawPos > 0 ? rawPos | 0 : 0;\n return this.substring(pos, pos + search.length) === search;\n },\n });\n}\n","import Parser from \"./parser\";\nimport Util from \"./util\";\nimport StringManager from \"./stringmanager\";\nimport ContentManager from \"./contentmanager\";\nimport Latex from \"./latex\";\nimport MathML from \"./mathml\";\nimport CustomEditors from \"./customeditors\";\nimport Configuration from \"./configuration\";\nimport jsProperties from \"./jsvariables\";\nimport Event from \"./event\";\nimport Listeners from \"./listeners\";\nimport Image from \"./image\";\nimport ServiceProvider from \"./serviceprovider\";\nimport ModalDialog from \"./modal\";\nimport Telemeter from \"./telemeter\";\nimport \"./polyfills\";\nimport \"../styles/styles.css\";\n\n/**\n * @typedef {Object} CoreProperties\n * @property {ServiceProviderProperties} serviceProviderProperties\n * - The ServiceProvider class properties. *\n */\nexport default class Core {\n /**\n * @classdesc\n * This class represents MathType integration Core, managing the following:\n * - Integration initialization.\n * - Event managing.\n * - Insertion of formulas into the edit area.\n * ```js\n * let core = new Core();\n * core.addListener(listener);\n * core.language = 'en';\n *\n * // Initializing Core class.\n * core.init(configurationService);\n * ```\n * @constructs\n * Core constructor.\n * @param {CoreProperties}\n */\n constructor(coreProperties) {\n /**\n * Language. Needed for accessibility and locales. 'en' by default.\n * @type {String}\n */\n this.language = \"en\";\n\n /**\n * Edit mode, 'images' by default. Admits the following values:\n * - images\n * - latex\n * @type {String}\n */\n this.editMode = \"images\";\n\n /**\n * Modal dialog instance.\n * @type {ModalDialog}\n */\n this.modalDialog = null;\n\n /**\n * The instance of {@link CustomEditors}. By default\n * the only custom editor is the Chemistry editor.\n * @type {CustomEditors}\n */\n this.customEditors = new CustomEditors();\n\n /**\n * Chemistry editor.\n * @type {CustomEditor}\n */\n const chemEditorParams = {\n name: \"Chemistry\",\n toolbar: \"chemistry\",\n icon: \"chem.png\",\n confVariable: \"chemEnabled\",\n title: \"ChemType\",\n tooltip: \"Insert a chemistry formula - ChemType\", // TODO: Localize tooltip.\n };\n\n this.customEditors.addEditor(\"chemistry\", chemEditorParams);\n\n /**\n * Environment properties. This object contains data about the integration platform.\n * @typedef IntegrationEnvironment\n * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor.\n * @property {String} IntegrationEnvironment.mode - Integration save mode.\n * @property {String} IntegrationEnvironment.version - Integration version.\n *\n */\n\n /**\n * The environment properties object.\n * @type {IntegrationEnvironment}\n */\n this.environment = {};\n\n /**\n * @typedef EditionProperties\n * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one.\n * False otherwise.\n * @property {HTMLImageElement} editionProperties.temporalImage- The image element.\n * Null if the formula is new.\n * @property {Range} editionProperties.latexRange - Tha range that contains the LaTeX formula.\n * @property {Range} editionProperties.range - The range that contains the image element.\n * @property {String} editionProperties.editMode - The edition mode. 'images' by default.\n */\n\n /**\n * The properties of the current edition process.\n * @type {EditionProperties}\n */\n this.editionProperties = {};\n\n this.editionProperties.isNewElement = true;\n this.editionProperties.temporalImage = null;\n this.editionProperties.latexRange = null;\n this.editionProperties.range = null;\n this.editionProperties.editionStartTime = null;\n\n /**\n * The {@link IntegrationModel} instance.\n * @type {IntegrationModel}\n */\n this.integrationModel = null;\n\n /**\n * The {@link ContentManager} instance.\n * @type {ContentManager}\n */\n this.contentManager = null;\n\n /**\n * The current browser.\n * @type {String}\n */\n this.browser = (() => {\n const ua = navigator.userAgent;\n let browser = \"none\";\n if (ua.search(\"Edge/\") >= 0) {\n browser = \"EDGE\";\n } else if (ua.search(\"Chrome/\") >= 0) {\n browser = \"CHROME\";\n } else if (ua.search(\"Trident/\") >= 0) {\n browser = \"IE\";\n } else if (ua.search(\"Firefox/\") >= 0) {\n browser = \"FIREFOX\";\n } else if (ua.search(\"Safari/\") >= 0) {\n browser = \"SAFARI\";\n }\n return browser;\n })();\n\n /**\n * Plugin listeners.\n * @type {Array.}\n */\n this.listeners = new Listeners();\n\n /**\n * Service provider properties.\n * @type {ServiceProviderProperties}\n */\n this.serviceProviderProperties = {};\n if (\"serviceProviderProperties\" in coreProperties) {\n this.serviceProviderProperties = coreProperties.serviceProviderProperties;\n } else {\n throw new Error(\"serviceProviderProperties property missing.\");\n }\n }\n\n /**\n * Static property.\n * Core listeners.\n * @private\n * @type {Listeners}\n */\n static get globalListeners() {\n return Core._globalListeners;\n }\n\n /**\n * Static property setter.\n * Set core listeners.\n * @param {Listeners} value - The property value.\n * @ignore\n */\n static set globalListeners(value) {\n Core._globalListeners = value;\n }\n\n /**\n * Core state. Says if it was loaded previously.\n * True when Core.init was called. Otherwise, false.\n * @private\n * @type {Boolean}\n */\n static get initialized() {\n return Core._initialized;\n }\n\n /**\n * Core state. Says if it was loaded previously.\n * @param {Boolean} value - True to say that Core.init was called. Otherwise, false.\n * @ignore\n */\n static set initialized(value) {\n Core._initialized = value;\n }\n\n /**\n * Sets the {@link Core.integrationModel} property.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property.\n */\n setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n\n /**\n * Sets the {@link Core.environment} property.\n * @param {IntegrationEnvironment} integrationEnvironment -\n * The {@link IntegrationEnvironment} object.\n */\n setEnvironment(integrationEnvironment) {\n if (\"editor\" in integrationEnvironment) {\n this.environment.editor = integrationEnvironment.editor;\n }\n if (\"mode\" in integrationEnvironment) {\n this.environment.mode = integrationEnvironment.mode;\n }\n if (\"version\" in integrationEnvironment) {\n this.environment.version = integrationEnvironment.version;\n }\n }\n\n /**\n * Sets the custom headers added on editor requests if contentManager isn't undefined.\n * @returns {Object} headers - key value headers.\n */\n setHeaders(headers) {\n const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers;\n Configuration.set(\"customHeaders\", headerObject);\n }\n\n /**\n * Returns the current {@link ModalDialog} instance.\n * @returns {ModalDialog} The current {@link ModalDialog} instance.\n */\n getModalDialog() {\n return this.modalDialog;\n }\n\n /**\n * Inits the {@link Core} class, doing the following:\n * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON.\n * - Updates {@link Configuration} class with the previous configuration properties.\n * - Updates the {@link ServiceProvider} class using the configuration service path as reference.\n * - Loads language strings.\n * - Fires onLoad event.\n * @param {Object} serviceParameters - Service parameters.\n */\n init() {\n if (!Core.initialized) {\n const serviceProviderListener = Listeners.newListener(\"onInit\", () => {\n const jsConfiguration = ServiceProvider.getService(\"configurationjs\", \"\", \"get\");\n const jsonConfiguration = JSON.parse(jsConfiguration);\n Configuration.addConfiguration(jsonConfiguration);\n // Adding JavaScript (not backend) configuration variables.\n Configuration.addConfiguration(jsProperties);\n // Fire 'onLoad' event:\n // All integration must listen this event in order to know if the plugin\n // has been properly loaded.\n StringManager.language = this.language;\n this.listeners.fire(\"onLoad\", {});\n });\n\n ServiceProvider.addListener(serviceProviderListener);\n ServiceProvider.init(this.serviceProviderProperties);\n\n Core.initialized = true;\n } else {\n // Case when there are more than two editor instances.\n // After the first editor all the other editors don't need to load any file or service.\n this.listeners.fire(\"onLoad\", {});\n }\n }\n\n /**\n * Adds a {@link Listener} to the current instance of the {@link Core} class.\n * @param {Listener} listener - The listener object.\n */\n addListener(listener) {\n this.listeners.add(listener);\n }\n\n /**\n * Adds the global {@link Listener} instance to {@link Core} class.\n * @param {Listener} listener - The event listener to be added.\n * @static\n */\n static addGlobalListener(listener) {\n Core.globalListeners.add(listener);\n }\n\n beforeUpdateFormula(mathml, wirisProperties) {\n /**\n * This event is fired before updating the formula.\n * @type {Object}\n * @property {String} mathml - MathML to be transformed.\n * @property {String} editMode - Edit mode.\n * @property {Object} wirisProperties - Extra attributes for the formula.\n * @property {String} language - Formula language.\n */\n const beforeUpdateEvent = new Event();\n\n beforeUpdateEvent.mathml = mathml;\n\n // Cloning wirisProperties object\n // We don't want wirisProperties object modified.\n beforeUpdateEvent.wirisProperties = {};\n\n if (wirisProperties != null) {\n Object.keys(wirisProperties).forEach((attr) => {\n beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr];\n });\n }\n\n // Read only.\n beforeUpdateEvent.language = this.language;\n beforeUpdateEvent.editMode = this.editMode;\n\n if (this.listeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n\n if (Core.globalListeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n\n return {\n mathml: beforeUpdateEvent.mathml,\n wirisProperties: beforeUpdateEvent.wirisProperties,\n };\n }\n\n /**\n * Converts a MathML into it's correspondent image and inserts the image is\n * inserted in a HTMLElement target by creating\n * a new image or updating an existing one.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the insertion.\n * @param {Window} windowTarget - The window element where the editable content is.\n * @param {String} mathml - The MathML.\n * @param {Array.} wirisProperties - The extra attributes for the formula.\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n /**\n * It is the object with the information of the node or latex to insert.\n * @typedef ReturnObject\n * @property {Node} [node] - The DOM node to insert.\n * @property {String} [latex] - The latex to insert.\n */\n const returnObject = {};\n\n if (!mathml) {\n this.insertElementOnSelection(null, focusElement, windowTarget);\n } else if (this.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n // this.integrationModel.getNonLatexNode is an integration wrapper\n // to have special behaviours for nonLatex.\n // Not all the integrations have special behaviours for nonLatex.\n if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) {\n const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.latex = returnObject.latex;\n this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml);\n } else {\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n }\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n } else {\n returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language);\n\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n }\n\n return returnObject;\n }\n\n afterUpdateFormula(focusElement, windowTarget, node, latex) {\n /**\n * This event is fired after update the formula.\n * @type {Event}\n * @param {String} editMode - edit mode.\n * @param {Object} windowTarget - target window.\n * @param {Object} focusElement - target element to be focused after update.\n * @param {String} latex - LaTeX generated by the formula (editMode=latex).\n * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise).\n */\n const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.node = node;\n afterUpdateEvent.latex = latex;\n\n if (this.listeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n\n if (Core.globalListeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n\n return {};\n }\n\n /**\n * Sets the caret after a given Node and set the focus to the owner document.\n * @param {Node} node - The Node element.\n */\n placeCaretAfterNode(node) {\n if (node === null) return;\n\n this.integrationModel.getSelection();\n const nodeDocument = node.ownerDocument;\n if (typeof nodeDocument.getSelection !== \"undefined\" && !!node.parentElement) {\n const range = nodeDocument.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const selection = nodeDocument.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n nodeDocument.body.focus();\n }\n }\n\n /**\n * Replaces a Selection object with an HTMLElement.\n * @param {HTMLElement} element - The HTMLElement to replace the selection.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace.\n * @param {Window} windowTarget - The window target.\n */\n insertElementOnSelection(element, focusElement, windowTarget) {\n let mathmlOrigin = null;\n if (this.editionProperties.isNewElement) {\n if (element) {\n if (focusElement.type === \"textarea\") {\n Util.updateTextArea(focusElement, element.textContent);\n } else if (document.selection && document.getSelection === 0) {\n let range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n\n if (!(\"parentElement\" in range)) {\n windowTarget.document.execCommand(\"delete\", false);\n range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n }\n\n if (\"parentElement\" in range) {\n const temporalObject = range.parentElement();\n\n if (temporalObject.nodeName.toUpperCase() === \"IMG\") {\n temporalObject.parentNode.replaceChild(element, temporalObject);\n } else {\n // IE9 fix: parentNode() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML(Util.createObjectCode(element));\n }\n }\n } else {\n let range = null;\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n if (this.editionProperties.range) {\n ({ range } = this.editionProperties);\n this.editionProperties.range = null;\n } else {\n const editorSelection = this.integrationModel.getSelection();\n range = editorSelection.getRangeAt(0);\n }\n\n // Delete if something was surrounded.\n range.deleteContents();\n\n let node = range.startContainer;\n const position = range.startOffset;\n\n if (node.nodeType === 3) {\n // TEXT_NODE.\n node = node.splitText(position);\n node.parentNode.insertBefore(element, node);\n } else if (node.nodeType === 1) {\n // ELEMENT_NODE.\n node.insertBefore(element, node.childNodes[position]);\n }\n\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n focusElement.focus();\n } else {\n const editorSelection = this.integrationModel.getSelection();\n editorSelection.removeAllRanges();\n\n if (this.editionProperties.range) {\n const { range } = this.editionProperties;\n this.editionProperties.range = null;\n editorSelection.addRange(range);\n }\n }\n } else if (this.editionProperties.latexRange) {\n if (document.selection && document.getSelection === 0) {\n this.editionProperties.isNewElement = true;\n this.editionProperties.latexRange.select();\n this.insertElementOnSelection(element, focusElement, windowTarget);\n } else {\n this.editionProperties.latexRange.deleteContents();\n this.editionProperties.latexRange.insertNode(element);\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n let item;\n // Wrapper for some integrations that can have special behaviours to show latex.\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n item = this.integrationModel.getSelectedItem(focusElement, false);\n } else {\n item = Util.getSelectedItemOnTextarea(focusElement);\n }\n Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition);\n } else {\n mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml;\n if (element && element.nodeName.toLowerCase() === \"img\") {\n // Editor empty, formula has been erased on edit.\n // There are editors (e.g: CKEditor) that put attributes in images.\n // We don't allow that behaviour in our images.\n Image.removeImgDataAttributes(this.editionProperties.temporalImage);\n // Clone is needed to maintain event references to temporalImage.\n Image.clone(element, this.editionProperties.temporalImage);\n } else {\n this.editionProperties.temporalImage.remove();\n }\n this.placeCaretAfterNode(this.editionProperties.temporalImage);\n }\n\n // Build the telemeter payload separated to delete null/undefined entries.\n const mathml = element?.dataset?.mathml;\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.editionProperties.editionStartTime,\n editor_origin: null, // TODO read formula to find out whether it comes from Oxygen Desktop\n toolbar: this.modalDialog.contentManager.toolbar,\n size: mathml?.length,\n };\n\n // Remove the desired null keys.\n Object.keys(payload).forEach((key) => {\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload,\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n }\n\n /**\n * Opens a modal dialog containing MathType editor..\n * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted.\n * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise.\n */\n openModalDialog(target, isIframe) {\n // Count the time since the editor is open\n this.editionProperties.editionStartTime = Date.now();\n\n // Textarea elements don't have normal document ranges. It only accepts latex edit.\n this.editMode = \"images\";\n\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n try {\n if (isIframe) {\n // Is needed focus the target first.\n target.contentWindow.focus();\n const selection = target.contentWindow.getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n } else {\n // Is needed focus the target first.\n target.focus();\n const selection = getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n }\n } catch (e) {\n this.editionProperties.range = null;\n }\n\n if (isIframe === undefined) {\n isIframe = true;\n }\n\n this.editionProperties.latexRange = null;\n\n if (target) {\n let selectedItem;\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n selectedItem = this.integrationModel.getSelectedItem(target, isIframe);\n } else {\n selectedItem = Util.getSelectedItem(target, isIframe);\n }\n\n // Check LaTeX if and only if the node is a text node (nodeType==3).\n if (selectedItem) {\n // Case when image was selected and button pressed.\n if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get(\"imageClassName\"))) {\n this.editionProperties.temporalImage = selectedItem.node;\n this.editionProperties.isNewElement = false;\n } else if (selectedItem.node.nodeType === 3) {\n // If it's a text node means that editor is working with LaTeX.\n if (this.integrationModel.getMathmlFromTextNode) {\n // If integration has this function it isn't set range due to we don't\n // know if it will be put into a textarea as a text or image.\n const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (mathml) {\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(\n Configuration.get(\"imageMathmlAttribute\"),\n MathML.safeXmlEncode(mathml),\n );\n }\n } else {\n const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (latexResult) {\n const mathml = Latex.getMathMLFromLatex(latexResult.latex);\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(\n Configuration.get(\"imageMathmlAttribute\"),\n MathML.safeXmlEncode(mathml),\n );\n const windowTarget = isIframe ? target.contentWindow : window;\n\n if (target.tagName.toLowerCase() !== \"textarea\") {\n if (document.selection) {\n let leftOffset = 0;\n let previousNode = latexResult.startNode.previousSibling;\n\n while (previousNode) {\n leftOffset += Util.getNodeLength(previousNode);\n previousNode = previousNode.previousSibling;\n }\n\n this.editionProperties.latexRange = windowTarget.document.selection.createRange();\n this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode);\n this.editionProperties.latexRange.move(\"character\", leftOffset + latexResult.startPosition);\n this.editionProperties.latexRange.moveEnd(\"character\", latexResult.latex.length + 4); // Plus 4 for the '$$' characters.\n } else {\n this.editionProperties.latexRange = windowTarget.document.createRange();\n this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition);\n this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition);\n }\n }\n }\n }\n }\n } else if (target.tagName.toLowerCase() === \"textarea\") {\n // By default editMode is 'images', but when target is a textarea it needs to be 'latex'.\n this.editMode = \"latex\";\n }\n }\n\n // Setting an object with the editor parameters.\n // Editor parameters can be customized in several ways:\n // 1 - editorAttributes: Contains the default editor attributes,\n // usually the metrics in a comma separated string. Always exists.\n // 2 - editorParameters: Object containing custom editor parameters.\n // These parameters are defined in the backend. So they affects all integration instances.\n\n // The backend send the default editor attributes in a coma separated\n // with the following structure: key1=value1,key2=value2...\n const defaultEditorAttributesArray = Configuration.get(\"editorAttributes\").split(\", \");\n const defaultEditorAttributes = {};\n for (let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1) {\n const tempAttribute = defaultEditorAttributesArray[i].split(\"=\");\n const key = tempAttribute[0];\n const value = tempAttribute[1];\n defaultEditorAttributes[key] = value;\n }\n // Custom editor parameters.\n const editorAttributes = {\n language: this.language, // Default language value\n };\n // Editor parameters in backend, usually configuration.ini.\n const serverEditorParameters = Configuration.get(\"editorParameters\");\n // Editor parameters through JavaScript configuration.\n const clientEditorParameters = this.integrationModel.editorParameters;\n Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters);\n Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters);\n\n // Now, update backwards: if user has set a custom language, pass that back to core properties\n this.language = editorAttributes.language;\n StringManager.language = this.language;\n\n editorAttributes.rtl = this.integrationModel.rtl;\n\n const customHeaders = Configuration.get(\"customHeaders\");\n // This is not being used in the code, we are keeping it just in case it's needed.\n // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend.\n editorAttributes.customHeaders =\n typeof customHeaders === \"string\" ? Util.convertStringToObject(customHeaders) : customHeaders;\n\n const contentManagerAttributes = {};\n contentManagerAttributes.editorAttributes = editorAttributes;\n contentManagerAttributes.language = this.language;\n contentManagerAttributes.customEditors = this.customEditors;\n contentManagerAttributes.environment = this.environment;\n\n if (this.modalDialog == null) {\n this.modalDialog = new ModalDialog(editorAttributes);\n this.contentManager = new ContentManager(contentManagerAttributes);\n // When an instance of ContentManager is created we need to wait until\n // the ContentManager is ready by listening 'onLoad' event.\n const listener = Listeners.newListener(\"onLoad\", () => {\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(\n this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")),\n );\n this.contentManager.mathML = mathML;\n }\n });\n this.contentManager.addListener(listener);\n this.contentManager.init();\n this.modalDialog.setContentManager(this.contentManager);\n this.contentManager.setModalDialogInstance(this.modalDialog);\n } else {\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(\n this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")),\n );\n this.contentManager.mathML = mathML;\n }\n }\n this.contentManager.setIntegrationModel(this.integrationModel);\n this.modalDialog.open();\n }\n\n /**\n * Returns the {@link CustomEditors} instance.\n * @return {CustomEditors} The current {@link CustomEditors} instance.\n */\n getCustomEditors() {\n return this.customEditors;\n }\n}\n\n/**\n * Core static listeners.\n * @type {Listeners}\n * @private\n */\nCore._globalListeners = new Listeners();\n\n/**\n * Resources state. Says if they were loaded or not.\n * @type {Boolean}\n * @private\n */\nCore._initialized = false;\n","// eslint-disable-next-line no-unused-vars, import/named\nimport Core from \"./core.src\";\nimport Image from \"./image\";\nimport Listeners from \"./listeners\";\nimport Util from \"./util\";\nimport Configuration from \"./configuration\";\nimport ServiceProvider from \"./serviceprovider\";\nimport Telemeter from \"./telemeter\";\nimport warnIcon from \"../styles/icons/general/warn_icon.svg\"; //eslint-disable-line\n\n/**\n * @typedef {Object} IntegrationModelProperties\n * @property {string} configurationService - Configuration service path.\n * This parameter is needed to determine all services paths.\n * @property {HTMLElement} integrationModelProperties.target - HTML target.\n * @property {string} integrationModelProperties.scriptName - Integration script name.\n * Usually the name of the integration script.\n * @property {Object} integrationModelProperties.environment - integration environment properties.\n * @property {Object} [integrationModelProperties.callbackMethodArguments] - object containing\n * callback method arguments.\n * @property {string} [integrationModelProperties.version] - integration version number.\n * @property {Object} [integrationModelProperties.editorObject] - object containing\n * the integration editor instance.\n * @property {boolean} [integrationModelProperties.rtl] - true if the editor is in RTL mode.\n * false otherwise.\n * @property {ServiceProviderProperties} [integrationModelProperties.serviceProviderProperties]\n * - The service parameters.\n * @property {Object} [integrationModelProperties.integrationParameters]\n * - Overwritten integration parameters.\n */\n\nexport default class IntegrationModel {\n /**\n * @classdesc\n * This class represents an integration model, allowing the integration script to\n * communicate with Core class. Each integration must extend this class.\n * @constructs\n * @param {IntegrationModelProperties} integrationModelProperties\n */\n constructor(integrationModelProperties) {\n /**\n * Language. Needed for accessibility and locales. English by default.\n */\n this.language = \"en\";\n\n /**\n * Service parameters\n * @type {ServiceProviderProperties}\n */\n this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {};\n\n /**\n * Configuration service path. The integration service is needed by Core class to\n * load all the backend configuration into the frontend and also to create the paths\n * of all services (all services lives in the same route). Mandatory property.\n */\n this.configurationService = \"\";\n if (\"configurationService\" in integrationModelProperties) {\n this.serviceProviderProperties.URI = integrationModelProperties.configurationService;\n console.warn(\"Deprecated property configurationService. Use serviceParameters on instead.\", [\n integrationModelProperties.configurationService,\n ]);\n }\n\n /**\n * Plugin version. Needed to stats and caching.\n * @type {string}\n */\n this.version = \"version\" in integrationModelProperties ? integrationModelProperties.version : \"\";\n\n /**\n * DOM target in which the plugin works. Needed to associate events, insert formulas, etc.\n * Mandatory property.\n */\n this.target = null;\n if (\"target\" in integrationModelProperties) {\n this.target = integrationModelProperties.target;\n } else {\n throw new Error(\"IntegrationModel constructor error: target property missed.\");\n }\n\n /**\n * Integration script name. Needed to know the plugin path.\n */\n if (\"scriptName\" in integrationModelProperties) {\n this.scriptName = integrationModelProperties.scriptName;\n }\n\n /**\n * Object containing the arguments needed by the callback function.\n */\n this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {};\n\n /**\n * Contains information about the integration environment:\n * like the name of the editor, the version, etc.\n */\n this.environment = integrationModelProperties.environment ?? {};\n\n /**\n * Indicates if the DOM target is - or not - and iframe.\n */\n this.isIframe = false;\n if (this.target != null) {\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n\n /**\n * Instance of the integration editor object. Usually the entry point to access the API\n * of a HTML editor.\n */\n this.editorObject = integrationModelProperties.editorObject ?? null;\n\n /**\n * Specifies if the direction of the text is RTL. false by default.\n */\n this.rtl = integrationModelProperties.rtl ?? false;\n\n /**\n * Specifies if the integration model exposes the locale strings. false by default.\n */\n this.managesLanguage = integrationModelProperties.managesLanguage ?? false;\n\n /**\n * Specify if editor will open in hand mode only\n */\n this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false;\n\n /**\n * Indicates if an image is selected. Needed to resize the image to the original size in case\n * the image is resized.\n * @type {boolean}\n */\n this.temporalImageResizing = false;\n\n /**\n * The Core class instance associated to the integration model.\n * @type {Core}\n */\n this.core = null;\n\n /**\n * Integration model listeners.\n * @type {Listeners}\n */\n this.listeners = new Listeners();\n\n // Parameters overwrite.\n if (\"integrationParameters\" in integrationModelProperties) {\n IntegrationModel.integrationParameters.forEach((parameter) => {\n if (parameter in integrationModelProperties.integrationParameters) {\n // Don't add empty parameters.\n const value = integrationModelProperties.integrationParameters[parameter];\n if (Object.keys(value).length !== 0) {\n this[parameter] = value;\n }\n }\n });\n }\n }\n\n /**\n * Init function. Usually called from the integration side once the core.js file is loaded.\n */\n init() {\n // Check if language is an object and select the property necessary\n this.language = this.getLanguage();\n\n // We need to wait until Core class is loaded ('onLoad' event) before\n // call the callback method.\n const listener = Listeners.newListener(\"onLoad\", () => {\n this.callbackFunction(this.callbackMethodArguments);\n });\n\n // Backwards compatibility.\n if (this.serviceProviderProperties.URI.indexOf(\"configuration\") !== -1) {\n const uri = this.serviceProviderProperties.URI;\n const server = ServiceProvider.getServerLanguageFromService(uri);\n this.serviceProviderProperties.server = server;\n const configurationIndex = this.serviceProviderProperties.URI.indexOf(\"configuration\");\n const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex);\n this.serviceProviderProperties.URI = subsTring;\n }\n\n let serviceParametersURI = this.serviceProviderProperties.URI;\n serviceParametersURI =\n serviceParametersURI.indexOf(\"/\") === 0 || serviceParametersURI.indexOf(\"http\") === 0\n ? serviceParametersURI\n : Util.concatenateUrl(this.getPath(), serviceParametersURI);\n\n this.serviceProviderProperties.URI = serviceParametersURI;\n\n const coreProperties = {};\n coreProperties.serviceProviderProperties = this.serviceProviderProperties;\n\n this.setCore(new Core(coreProperties));\n this.core.addListener(listener);\n this.core.language = this.language;\n\n // Initializing Core class.\n this.core.init();\n // TODO: Move to Core constructor.\n this.core.setEnvironment(this.environment);\n\n // No internet connection modal.\n let attributes = {};\n attributes.class = attributes.id = \"wrs_modal_offline\";\n this.offlineModal = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_content_offline\";\n this.offlineModalContent = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_close\";\n this.offlineModalClose = Util.createElement(\"span\", attributes);\n this.offlineModalClose.innerHTML = \"×\";\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_warn\";\n this.offlineModalWarn = Util.createElement(\"span\", attributes);\n let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`;\n this.offlineModalWarn.setAttribute(\"style\", generalStyle);\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_container\";\n this.offlineModalMessage = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_warn\";\n this.offlineModalMessage1 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage1.innerHTML = \"You are not online!\";\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_text\";\n this.offlineModalMessage2 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`;\n\n //Append offline modal elements\n this.offlineModalContent.appendChild(this.offlineModalClose);\n this.offlineModalMessage.appendChild(this.offlineModalMessage1);\n this.offlineModalMessage.appendChild(this.offlineModalMessage2);\n this.offlineModalContent.appendChild(this.offlineModalMessage);\n this.offlineModalContent.appendChild(this.offlineModalWarn);\n this.offlineModal.appendChild(this.offlineModalContent);\n document.body.appendChild(this.offlineModal);\n\n let modal = document.getElementById(\"wrs_modal_offline\");\n this.offlineModalClose.addEventListener(\"click\", function () {\n modal.style.display = \"none\";\n });\n\n // Store editor name for telemetry purposes.\n let editorName = this.environment.editor;\n editorName = editorName.slice(0, -1); // Remove version number from editors\n if (editorName.includes(\"TinyMCE\")) editorName = \"TinyMCE\"; // Remove version from Tinymce editor.\n if (editorName.includes(\"Generic\")) editorName = \"Generic\"; // Remove version from Generic editor.\n let solutionTelemeter = editorName;\n\n // If moodle, add information to hosts and solution.\n let isMoodle = !!(typeof M === \"object\" && M !== null),\n lms;\n\n if (isMoodle) {\n solutionTelemeter = \"Moodle\";\n lms = {\n nam: \"moodle\",\n fam: \"lms\",\n ver: this.environment.moodleVersion,\n category: this.environment.moodleCourseCategory,\n course: this.environment.moodleCourseName,\n };\n if (!editorName.includes(\"TinyMCE\")) {\n editorName = \"Atto\";\n }\n }\n\n // Get the OS and its version.\n let OSData = this.getOS();\n\n // Get the broswer and its version.\n let broswerData = this.getBrowser();\n\n // Create list of hosts to send to telemetry.\n let hosts = [\n {\n nam: broswerData.detectedBrowser,\n fam: \"browser\",\n ver: broswerData.versionBrowser,\n },\n {\n nam: editorName.toLowerCase(),\n fam: \"html-editor\",\n ver: this.environment.editorVersion,\n },\n {\n nam: OSData.detectedOS,\n fam: \"os\",\n ver: OSData.versionOS,\n },\n {\n nam: window.location.hostname,\n fam: \"domain\",\n },\n lms,\n ];\n\n // Filter hosts to remove empty objects and empty keys.\n hosts = hosts.filter(function (element) {\n if (element) Object.keys(element).forEach((key) => (element[key] === \"unknown\" ? delete element[key] : {}));\n return element !== undefined;\n });\n\n // Initialize telemeter\n Telemeter.init({\n solution: {\n name: \"MathType for \" + solutionTelemeter,\n version: this.version,\n },\n hosts: hosts,\n config: {\n test: false, // True to use the staging Telemetry endpoint instead of the production one.\n debug: false, // True to show more information about Telemeter's execution and use dev-tools.\n dry_run: false, // True to skip sending data to the Telemetry endpoint (for example for unit tests).\n api_key: \"eda2ce9b-0e8a-46f2-acdd-c228a615314e\", // to auth against Telemetry. Data team is the responsible of providing it.\n },\n url: undefined,\n });\n }\n\n /**\n * Returns the Browser name and its version.\n * @return {array} - detectedBrowser = Operating System name.\n * versionBrowser = Operating System version.\n */\n getBrowser() {\n // default value for OS just in case nothing is detected\n let detectedBrowser = \"unknown\",\n versionBrowser = \"unknown\";\n\n let userAgent = window.navigator.userAgent;\n\n if (/Brave/.test(userAgent)) {\n detectedBrowser = \"brave\";\n if (userAgent.indexOf(\"Brave/\")) {\n let start = userAgent.indexOf(\"Brave\") + 6;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n }\n } else if (userAgent.indexOf(\"Edg/\") !== -1) {\n detectedBrowser = \"edge_chromium\";\n let start = userAgent.indexOf(\"Edg/\") + 4;\n versionBrowser = userAgent\n .substring(start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Edg/.test(userAgent)) {\n detectedBrowser = \"edge\";\n let start = userAgent.indexOf(\"Edg\") + 3;\n start = start + userAgent.substring(start).indexOf(\"/\");\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) {\n detectedBrowser = \"firefox\";\n let start = userAgent.indexOf(\"Firefox\");\n start = start === -1 ? userAgent.indexOf(\"FxiOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/OPR/.test(userAgent)) {\n detectedBrowser = \"opera\";\n let start = userAgent.indexOf(\"OPR/\") + 4;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) {\n detectedBrowser = \"chrome\";\n let start = userAgent.indexOf(\"Chrome\");\n start = start === -1 ? userAgent.indexOf(\"CriOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/Safari/.test(userAgent)) {\n detectedBrowser = \"safari\";\n let start = userAgent.indexOf(\"Version/\");\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n }\n\n return { detectedBrowser, versionBrowser };\n }\n\n /**\n * Returns the operating system and its version.\n * @return {array} - detectedOS = Operating System name.\n * versionOS = Operating System version.\n */\n getOS() {\n // default value for OS just in case nothing is detected\n let detectedOS = \"unknown\",\n versionOS = \"unknown\";\n\n // Retrieve properties to easily detect the OS\n let userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = [\"Macintosh\", \"MacIntel\", \"MacPPC\", \"Mac68K\"],\n windowsPlatforms = [\"Win32\", \"Win64\", \"Windows\", \"WinCE\"],\n iosPlatforms = [\"iPhone\", \"iPad\", \"iPod\"];\n\n // Find OS and their respective versions\n if (macosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"macos\";\n if (userAgent.indexOf(\"OS X\") !== -1) {\n let start = userAgent.indexOf(\"OS X\") + 5;\n let end = userAgent.substring(start).indexOf(\" \");\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n }\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"ios\";\n if (userAgent.indexOf(\"OS \") !== -1) {\n let start = userAgent.indexOf(\"OS \") + 3;\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n }\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"windows\";\n let start = userAgent.indexOf(\"Windows\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Android/.test(userAgent)) {\n detectedOS = \"android\";\n let start = userAgent.indexOf(\"Android\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/CrOS/.test(userAgent)) {\n detectedOS = \"chromeos\";\n let start = userAgent.indexOf(\"CrOS \") + 5;\n start = start + userAgent.substring(start).indexOf(\" \");\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (detectedOS === \"unknown\" && /Linux/.test(platform)) {\n detectedOS = \"linux\";\n }\n\n return { detectedOS, versionOS };\n }\n\n /**\n * Returns the absolute path of the integration script.\n * @return {string} - Absolute path for the integration script.\n */\n getPath() {\n if (typeof this.scriptName === \"undefined\") {\n throw new Error(\"scriptName property needed for getPath.\");\n }\n const col = document.getElementsByTagName(\"script\");\n let path = \"\";\n for (let i = 0; i < col.length; i += 1) {\n const j = col[i].src.lastIndexOf(this.scriptName);\n if (j >= 0) {\n path = col[i].src.substr(0, j - 1);\n }\n }\n return path;\n }\n\n /**\n * Returns integration model plugin version\n * @param {string} - Plugin version\n */\n getVersion() {\n return this.version;\n }\n\n /**\n * Sets the language property.\n * @param {string} language - language code.\n */\n setLanguage(language) {\n this.language = language;\n }\n\n /**\n * Sets a Core instance.\n * @param {Core} core - instance of Core class.\n */\n setCore(core) {\n this.core = core;\n core.setIntegrationModel(this);\n }\n\n /**\n * Returns the Core instance.\n * @returns {Core} instance of Core class.\n */\n getCore() {\n return this.core;\n }\n\n /**\n * Sets the object target and updates the iframe property.\n * @param {HTMLElement} target - target object.\n */\n setTarget(target) {\n this.target = target;\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n\n /**\n * Sets the editor object.\n * @param {Object} editorObject - The editor object.\n */\n setEditorObject(editorObject) {\n this.editorObject = editorObject;\n }\n\n /**\n * Opens formula editor to editing a new formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */\n openNewFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.dbclick = false;\n this.core.editionProperties.isNewElement = true;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n\n /**\n * Opens formula editor to editing an existing formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */\n openExistingFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.isNewElement = false;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n\n /**\n * Wrapper to Core.updateFormula method.\n * Transform a MathML into a image formula.\n * Then the image formula is inserted in the specified target, creating a new image (new formula)\n * or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n */\n updateFormula(mathml) {\n if (this.editorParameters) {\n mathml = com.wiris.editor.util.EditorUtils.addAnnotation(\n mathml,\n \"application/vnd.wiris.mtweb-params+json\",\n JSON.stringify(this.editorParameters),\n );\n }\n let focusElement;\n let windowTarget;\n const wirisProperties = null;\n\n if (this.isIframe) {\n focusElement = this.target.contentWindow;\n windowTarget = this.target.contentWindow;\n } else {\n focusElement = this.target;\n windowTarget = window;\n }\n\n let obj = this.core.beforeUpdateFormula(mathml, wirisProperties);\n\n if (!obj) {\n return \"\";\n }\n\n obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties);\n\n if (!obj) {\n return \"\";\n }\n\n return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex);\n }\n\n /**\n * Wrapper to Core.insertFormula method.\n * Inserts the formula in the specified target, creating\n * a new image (new formula) or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties);\n\n // Delete temporal image when inserted\n this.core.editionProperties.temporalImage = null;\n\n return obj;\n }\n\n /**\n * Returns the target selection.\n * @returns {Selection} target selection.\n */\n getSelection() {\n if (this.isIframe) {\n this.target.contentWindow.focus();\n return this.target.contentWindow.getSelection();\n }\n this.target.focus();\n return window.getSelection();\n }\n\n /**\n * Add events to formulas in the DOM target. The events added are the following:\n * - doubleClickHandler: handles Double-click event on formulas by opening an editor\n * to edit them.\n * - mouseDownHandler: handles mouse down event on formulas by saving the size of the formula\n * in case the the formula is resized.\n * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size\n * in case the formula is resized.\n */\n addEvents() {\n const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target;\n Util.addElementEvents(\n eventTarget,\n (element, event) => {\n this.doubleClickHandler(element, event);\n // Avoid creating the double click listener more than once for each element.\n event.stopImmediatePropagation();\n },\n (element, event) => {\n this.mousedownHandler(element, event);\n },\n (element, event) => {\n this.mouseupHandler(element, event);\n },\n );\n }\n\n /**\n * Remove events to formulas in the DOM target.\n */\n removeEvents() {\n const eventTarget =\n this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target;\n\n if (!eventTarget) {\n return;\n }\n\n Util.removeElementEvents(eventTarget);\n }\n\n /**\n * Remove events, modals and set this.editorObject to null in order to prevent memory leaks.\n */\n destroy() {\n this.removeEvents();\n // Destroy modal dialog if exists.\n if (this.core.modalDialog) {\n this.core.modalDialog.destroy();\n }\n\n // Remove offline modal dialog if exists.\n if (this.offlineModal) {\n this.offlineModal.remove();\n }\n\n this.editorObject = null;\n }\n\n /**\n * Handles a Double-click on the target element. Opens an editor\n * to re-edit the double-clicked formula.\n * @param {HTMLElement} element - DOM object target.\n */\n doubleClickHandler(element) {\n this.core.editionProperties.dbclick = true;\n if (element.nodeName.toLowerCase() === \"img\") {\n this.core.getCustomEditors().disable();\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (element.hasAttribute(customEditorAttributeName)) {\n const customEditor = element.getAttribute(customEditorAttributeName);\n this.core.getCustomEditors().enable(customEditor);\n }\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.core.editionProperties.temporalImage = element;\n this.core.editionProperties.isNewElement = true;\n this.openExistingFormulaEditor();\n }\n }\n }\n\n /**\n * Handles a mouse up event on the target element. Restores the image size to avoid\n * resizing formulas.\n */\n mouseupHandler() {\n if (this.temporalImageResizing) {\n setTimeout(() => {\n Image.fixAfterResize(this.temporalImageResizing);\n }, 10);\n }\n }\n\n /**\n * Handles a mouse down event on the target element. Saves the formula size to avoid\n * resizing formulas.\n * @param {HTMLElement} element - target element.\n */\n mousedownHandler(element) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.temporalImageResizing = element;\n }\n }\n }\n\n /**\n * Returns the integration language. By default the browser agent. This method\n * should be overwritten to obtain the integration language, for example using the\n * plugin API of an HTML editor.\n * @returns {string} integration language.\n */\n getLanguage() {\n return this.getBrowserLanguage();\n }\n\n /**\n * Returns the browser language.\n * @returns {string} the browser language.\n */\n // eslint-disable-next-line class-methods-use-this\n getBrowserLanguage() {\n let language = \"en\";\n if (navigator.userLanguage) {\n language = navigator.userLanguage.substring(0, 2);\n } else if (navigator.language) {\n language = navigator.language.substring(0, 2);\n } else {\n language = \"en\";\n }\n return language;\n }\n\n /**\n * This function is called once the {@link Core} is loaded. IntegrationModel class\n * will fire this method when {@link Core} 'onLoad' event is fired.\n * This method should content all the logic to init\n * the integration.\n */\n callbackFunction() {\n // It's needed to wait until the integration target is ready. The event is fired\n // from the integration side.\n const listener = Listeners.newListener(\"onTargetReady\", () => {\n this.addEvents(this.target);\n });\n this.listeners.add(listener);\n }\n\n /**\n * Function called when the content submits an action.\n */\n // eslint-disable-next-line class-methods-use-this\n notifyWindowClosed() {\n // Nothing.\n }\n\n /**\n * Wrapper.\n * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js\n * in order to get mathml from a text node that can contain normal LaTeX or other chosen text.\n * @param {string} textNode - text node to extract the MathML.\n * @param {int} caretPosition - caret position inside the text node.\n * @returns {string} MathML inside the text node.\n */\n\n // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getMathmlFromTextNode(textNode, caretPosition) {}\n\n /**\n * Wrapper\n * It fills wrs event object of nonLatex with the desired data.\n * @param {Object} event - event object.\n * @param {Object} window dom window object.\n * @param {string} mathml valid mathml.\n */\n // eslint-disable-next-line class-methods-use-this, no-unused-vars\n fillNonLatexNode(event, window, mathml) {}\n\n /**\n Wrapper.\n * Returns selected item from the target.\n * @param {HTMLElement} target - target element\n * @param {boolean} iframe\n */\n // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getSelectedItem(target, isIframe) {}\n\n // Set temporal image to null and make focus come back.\n static setActionsOnCancelButtons() {\n // Make focus come back on the previous place it was when click cancel button\n const currentInstance = WirisPlugin.currentInstance;\n const editorSelection = currentInstance.getSelection();\n editorSelection.removeAllRanges();\n\n if (currentInstance.core.editionProperties.range) {\n const { range } = currentInstance.core.editionProperties;\n currentInstance.core.editionProperties.range = null;\n editorSelection.addRange(range);\n if (range.startOffset !== range.endOffset) {\n currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage);\n }\n }\n\n // eslint-disable-next-line no-undef\n if (WirisPlugin.currentInstance) {\n WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line\n }\n }\n}\n\n// To know if the integration that extends this class implements\n// wrapper methods, they are set as undefined.\nIntegrationModel.prototype.getMathmlFromTextNode = undefined;\nIntegrationModel.prototype.fillNonLatexNode = undefined;\nIntegrationModel.prototype.getSelectedItem = undefined;\n\n/**\n * An object containing a list with the overwritable class constructor properties.\n * @type {Object}\n */\nIntegrationModel.integrationParameters = [\"serviceProviderProperties\", \"editorParameters\"];\n","import IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Telemeter from \"@wiris/mathtype-html-integration-devkit/src/telemeter.js\";\n\n/**\n * This class represents the MathType integration for CKEditor5.\n * @extends {IntegrationModel}\n */\nexport default class CKEditor5Integration extends IntegrationModel {\n constructor(ckeditorIntegrationModelProperties) {\n const editor = ckeditorIntegrationModelProperties.editorObject;\n\n if (typeof editor.config !== \"undefined\" && typeof editor.config.get(\"mathTypeParameters\") !== \"undefined\") {\n ckeditorIntegrationModelProperties.integrationParameters = editor.config.get(\"mathTypeParameters\");\n }\n /**\n * CKEditor5 Integration.\n *\n * @param {integrationModelProperties} integrationModelAttributes\n */\n super(ckeditorIntegrationModelProperties);\n\n /**\n * Folder name used for the integration inside CKEditor plugins folder.\n */\n this.integrationFolderName = \"ckeditor_wiris\";\n }\n\n /**\n * @inheritdoc\n * @returns {string} - The CKEditor instance language.\n * @override\n */\n getLanguage() {\n // Returns the CKEDitor instance language taking into account that the language can be an object.\n // Try to get editorParameters.language, fail silently otherwise\n try {\n return this.editorParameters.language;\n } catch (e) {}\n const languageObject = this.editorObject.config.get(\"language\");\n if (languageObject != null) {\n if (typeof languageObject === \"object\") {\n // eslint-disable-next-line no-prototype-builtins\n if (languageObject.hasOwnProperty(\"ui\")) {\n return languageObject.ui;\n }\n return languageObject;\n }\n return languageObject;\n }\n return super.getLanguage();\n }\n\n /**\n * Adds callbacks to the following CKEditor listeners:\n * - 'focus' - updates the current instance.\n * - 'contentDom' - adds 'doubleclick' callback.\n * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas.\n * - 'setData' - parses the data converting MathML into images.\n * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications.\n * - 'getData' - parses the data converting images into selected save mode (MathML by default).\n * - 'mode' - recalculates the active element.\n */\n addEditorListeners() {\n const editor = this.editorObject;\n\n if (typeof editor.config.wirislistenersdisabled === \"undefined\" || !editor.config.wirislistenersdisabled) {\n this.checkElement();\n }\n }\n\n /**\n * Checks the current container and assign events in case that it doesn't have them.\n * CKEditor replaces several times the element element during its execution,\n * so we must assign the events again to editor element.\n */\n checkElement() {\n const editor = this.editorObject;\n const newElement = editor.sourceElement;\n\n // If the element wasn't treated, add the events.\n if (!newElement.wirisActive) {\n this.setTarget(newElement);\n this.addEvents();\n // Set the element as treated\n newElement.wirisActive = true;\n }\n }\n\n /**\n * @inheritdoc\n * @param {HTMLElement} element - HTMLElement target.\n * @param {MouseEvent} event - event which trigger the handler.\n */\n doubleClickHandler(element, event) {\n this.core.editionProperties.dbclick = true;\n if (this.editorObject.isReadOnly === false) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n // Some plugins (image2, image) open a dialog on Double-click. On formulas\n // doubleclick event ends here.\n if (typeof event.stopPropagation !== \"undefined\") {\n // old I.E compatibility.\n event.stopPropagation();\n } else {\n event.returnValue = false;\n }\n this.core.getCustomEditors().disable();\n const customEditorAttr = element.getAttribute(Configuration.get(\"imageCustomEditorName\"));\n if (customEditorAttr) {\n this.core.getCustomEditors().enable(customEditorAttr);\n }\n this.core.editionProperties.temporalImage = element;\n this.openExistingFormulaEditor();\n }\n }\n }\n }\n\n /** @inheritdoc */\n static getCorePath() {\n return null; // TODO\n }\n\n /** @inheritdoc */\n callbackFunction() {\n super.callbackFunction();\n this.addEditorListeners();\n }\n\n openNewFormulaEditor() {\n // Store the editor selection as it will be lost upon opening the modal\n this.core.editionProperties.selection = this.editorObject.editing.view.document.selection;\n\n return super.openNewFormulaEditor();\n }\n\n /**\n * Replaces old formula with new MathML or inserts it in caret position if new\n * @param {String} mathml MathML to update old one or insert\n * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image\n */\n insertMathml(mathml) {\n // This returns the value returned by the callback function (writer => {...})\n return this.editorObject.model.change((writer) => {\n const core = this.getCore();\n const selection = this.editorObject.model.document.selection;\n\n const modelElementNew = writer.createElement(\"mathml\", {\n formula: mathml,\n ...Object.fromEntries(selection.getAttributes()), // To keep the format, such as style and font\n });\n\n // Obtain the DOM object corresponding to the formula\n if (core.editionProperties.isNewElement) {\n // Don't bother inserting anything at all if the MathML is empty.\n if (!mathml) return;\n\n const viewSelection =\n this.core.editionProperties.selection || this.editorObject.editing.view.document.selection;\n const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition());\n\n this.editorObject.model.insertObject(modelElementNew, modelPosition);\n\n // Remove selection\n if (!viewSelection.isCollapsed) {\n for (const range of viewSelection.getRanges()) {\n writer.remove(this.editorObject.editing.mapper.toModelRange(range));\n }\n }\n\n // Set carret after the formula\n const position = this.editorObject.model.createPositionAfter(modelElementNew);\n writer.setSelection(position);\n } else {\n const img = core.editionProperties.temporalImage;\n const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent;\n const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement);\n\n // Insert the new and remove the old one\n const position = this.editorObject.model.createPositionBefore(modelElementOld);\n\n // If the given MathML is empty, don't insert a new formula.\n if (mathml) {\n this.editorObject.model.insertObject(modelElementNew, position);\n }\n writer.remove(modelElementOld);\n }\n\n // eslint-disable-next-line consistent-return\n return modelElementNew;\n });\n }\n\n /**\n * Finds the text node corresponding to given DOM text element.\n * @param {element} viewElement Element to find corresponding text node of.\n * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist.\n */\n findText(viewElement) {\n // eslint-disable-line consistent-return\n // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down\n let pivot = viewElement;\n let element;\n while (!element) {\n element = this.editorObject.editing.mapper.toModelElement(\n this.editorObject.editing.view.domConverter.domToView(pivot),\n );\n pivot = pivot.parentElement;\n }\n\n // Navigate through all the subtree under `pivot` in order to find the correct text node\n const range = this.editorObject.model.createRangeIn(element);\n const descendants = Array.from(range.getItems());\n for (const node of descendants) {\n let viewElementData = viewElement.data;\n if (viewElement.nodeType === 3) {\n // Remove invisible white spaces\n viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), \"\");\n }\n if (node.is(\"textProxy\") && node.data === viewElementData.replace(String.fromCharCode(160), \" \")) {\n return node.textNode;\n }\n }\n }\n\n /** @inheritdoc */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n // eslint-disable-line no-unused-vars\n const returnObject = {};\n\n let mathmlOrigin;\n if (!mathml) {\n this.insertMathml(\"\");\n } else if (this.core.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n\n this.editorObject.model.change((writer) => {\n const { latexRange } = this.core.editionProperties;\n\n const startNode = this.findText(latexRange.startContainer);\n const endNode = this.findText(latexRange.endContainer);\n\n let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset);\n let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset);\n\n let range = writer.createRange(startPosition, endPosition);\n\n // When Latex is next to image/formula.\n if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) {\n // Get the position of the latex to be replaced.\n let latexEdited =\n \"$$\" +\n Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) +\n \"$$\";\n let data = latexRange.startContainer.data;\n\n // Remove invisible characters.\n data = data.replaceAll(String.fromCharCode(8288), \"\");\n\n // Get to the start of the latex we are editing.\n let offset = data.indexOf(latexEdited);\n let dataOffset = data.substring(offset);\n let second$ = dataOffset.substring(2).indexOf(\"$$\") + 4;\n let substring = dataOffset.substr(0, second$);\n data = data.replace(substring, \"\");\n\n if (!data) {\n startPosition = writer.createPositionBefore(startNode);\n range = startNode;\n } else {\n startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset);\n endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset);\n range = writer.createRange(startPosition, endPosition);\n }\n }\n\n writer.remove(range);\n writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition);\n });\n } else {\n mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml;\n try {\n returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(\n this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)),\n windowTarget.document,\n );\n } catch (e) {\n const x = e.toString();\n if (x.includes(\"CKEditorError: Cannot read property 'parent' of undefined\")) {\n this.core.modalDialog.cancelAction();\n }\n }\n }\n\n // Build the telemeter payload separated to delete null/undefined entries.\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.core.editionProperties.editionStartTime,\n editor_origin: null, // TODO read formula to find out whether it comes from Oxygen Desktop\n toolbar: this.core.modalDialog.contentManager.toolbar,\n size: mathml?.length,\n };\n\n // Remove desired null keys.\n Object.keys(payload).forEach((key) => {\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload,\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n\n /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula.\n We probably should add it here as well, but we should look further into how */\n // this.editorObject.fire('change');\n\n // Remove temporal image of inserted formula\n this.core.editionProperties.temporalImage = null;\n\n return returnObject;\n }\n\n /**\n * Function called when the content submits an action.\n */\n notifyWindowClosed() {\n this.editorObject.editing.view.focus();\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { Command } from \"ckeditor5/src/core.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\n/**\n * Command for opening the MathType editor\n */\nexport class MathTypeCommand extends Command {\n execute(options = {}) {\n // Check we get a valid integration\n // eslint-disable-next-line no-prototype-builtins\n if (!options.hasOwnProperty(\"integration\") || !(options.integration instanceof CKEditor5Integration)) {\n throw 'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options';\n }\n\n // Save the integration instance as a property of the command.\n this.integration = options.integration;\n\n // Set custom editor or disable it\n this.setEditor();\n\n // Open the editor\n this.openEditor();\n }\n\n /**\n * Sets the appropriate custom editor, if any, or disables them.\n */\n setEditor() {\n // It's possible that a custom editor was last used.\n // We need to disable it to avoid wrong behaviors.\n this.integration.core.getCustomEditors().disable();\n }\n\n /**\n * Checks whether we are editing an existing formula or a new one and opens the editor.\n */\n openEditor() {\n this.integration.core.editionProperties.dbclick = false;\n const image = this._getSelectedImage();\n if (\n typeof image !== \"undefined\" &&\n image !== null &&\n image.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))\n ) {\n this.integration.core.editionProperties.temporalImage = image;\n this.integration.openExistingFormulaEditor();\n } else {\n this.integration.openNewFormulaEditor();\n }\n }\n\n /**\n * Gets the currently selected formula image\n * @returns {Element} selected image, if any, undefined otherwise\n */\n _getSelectedImage() {\n const { selection } = this.editor.editing.view.document;\n\n // If we can not extract the formula, fall back to default behavior.\n if (selection.isCollapsed || selection.rangeCount !== 1) {\n return;\n }\n\n // Look for the wrapping the formula and then for the inside\n\n const range = selection.getFirstRange();\n\n let image;\n\n for (const span of range) {\n if (span.item.name !== \"span\") {\n return;\n }\n image = span.item.getChild(0);\n break;\n }\n\n if (!image) {\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return this.editor.editing.view.domConverter.mapViewToDom(image);\n }\n}\n\n/**\n * Command for opening the ChemType editor\n */\nexport class ChemTypeCommand extends MathTypeCommand {\n setEditor() {\n this.integration.core.getCustomEditors().enable(\"chemistry\");\n }\n}\n","// CKEditor imports\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView } from 'ckeditor5/src/ui.js';\nimport { ClickObserver, HtmlDataProcessor, XmlDataProcessor, UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { Widget, toWidget, viewToModelPositionOutsideModelElement } from 'ckeditor5/src/widget.js';\n\n// MathType API imports\nimport IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Core from \"@wiris/mathtype-html-integration-devkit/src/core.src.js\";\nimport Parser from \"@wiris/mathtype-html-integration-devkit/src/parser.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Image from \"@wiris/mathtype-html-integration-devkit/src/image.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Listeners from \"@wiris/mathtype-html-integration-devkit/src/listeners.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport StringManager from \"@wiris/mathtype-html-integration-devkit/src/stringmanager.js\";\n\n// Local imports\nimport { MathTypeCommand, ChemTypeCommand } from \"./commands.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\nimport mathIcon from \"../theme/icons/ckeditor5-formula.svg\";\nimport chemIcon from \"../theme/icons/ckeditor5-chem.svg\";\n\nimport packageInfo from \"../package.json\";\n\nexport let currentInstance = null; // eslint-disable-line import/no-mutable-exports\n\nexport default class MathType extends Plugin {\n static get requires() {\n return [Widget];\n }\n\n static get pluginName() {\n return \"MathType\";\n }\n\n init() {\n // Create the MathType API Integration object\n const integration = this._addIntegration();\n currentInstance = integration;\n\n // Add the MathType and ChemType commands to the editor\n this._addCommands();\n\n // Add the buttons for MathType and ChemType\n this._addViews(integration);\n\n // Registers the element in the schema\n this._addSchema();\n\n // Add the downcast and upcast converters\n this._addConverters(integration);\n\n // Expose the WirisPlugin variable to the window\n this._exposeWiris();\n }\n\n /**\n * Inherited from Plugin class: Executed when CKEditor5 is destroyed\n */\n destroy() {\n // eslint-disable-line class-methods-use-this\n currentInstance.destroy();\n }\n\n /**\n * Create the MathType API Integration object\n * @returns {CKEditor5Integration} the integration object\n */\n _addIntegration() {\n const { editor } = this;\n\n /**\n * Integration model constructor attributes.\n * @type {integrationModelProperties}\n */\n const integrationProperties = {};\n integrationProperties.environment = {};\n integrationProperties.environment.editor = \"CKEditor5\";\n integrationProperties.environment.editorVersion = \"5.x\";\n integrationProperties.version = packageInfo.version;\n integrationProperties.editorObject = editor;\n integrationProperties.serviceProviderProperties = {};\n integrationProperties.serviceProviderProperties.URI = \"https://www.wiris.net/demo/plugins/app\";\n integrationProperties.serviceProviderProperties.server = \"java\";\n integrationProperties.target = editor.sourceElement;\n integrationProperties.scriptName = \"bundle.js\";\n integrationProperties.managesLanguage = true;\n // etc\n\n // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element.\n // To avoid a wrong behaviour, this integration only starts if the workspace container exists.\n let integration;\n if (integrationProperties.target) {\n // Instance of the integration associated to this editor instance\n integration = new CKEditor5Integration(integrationProperties);\n integration.init();\n integration.listeners.fire(\"onTargetReady\", {});\n\n integration.checkElement();\n\n this.listenTo(\n editor.editing.view.document,\n \"click\",\n (evt, data) => {\n // Is Double-click\n if (data.domEvent.detail === 2) {\n integration.doubleClickHandler(data.domTarget, data.domEvent);\n evt.stop();\n }\n },\n { priority: \"highest\" },\n );\n }\n\n return integration;\n }\n\n /**\n * Add the MathType and ChemType commands to the editor\n */\n _addCommands() {\n const { editor } = this;\n\n // Add command to open the formula editor\n editor.commands.add(\"MathType\", new MathTypeCommand(editor));\n\n // Add command to open the chemistry formula editor\n editor.commands.add(\"ChemType\", new ChemTypeCommand(editor));\n }\n\n /**\n * Add the buttons for MathType and ChemType\n * @param {CKEditor5Integration} integration the integration object\n */\n _addViews(integration) {\n const { editor } = this;\n\n // Check if MathType editor is enabled\n if (Configuration.get(\"editorEnabled\")) {\n // Add button for the formula editor\n editor.ui.componentFactory.add(\"MathType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"MathType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_math\", integration.getLanguage()),\n icon: mathIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"MathType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Check if ChemType editor is enabled\n if (Configuration.get(\"chemEnabled\")) {\n // Add button for the chemistry formula editor\n editor.ui.componentFactory.add(\"ChemType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"ChemType\"), \"isEnabled\");\n\n view.set({\n label: StringManager.get(\"insert_chem\", integration.getLanguage()),\n icon: chemIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"ChemType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Observer for the Double-click event\n editor.editing.view.addObserver(ClickObserver);\n }\n\n /**\n * Registers the element in the schema\n */\n _addSchema() {\n const { schema } = this.editor.model;\n\n schema.register(\"mathml\", {\n inheritAllFrom: \"$inlineObject\",\n allowAttributes: [\"formula\"],\n });\n }\n\n /**\n * Add the downcast and upcast converters\n */\n _addConverters(integration) {\n const { editor } = this;\n\n // Editing view -> Model\n editor.conversion.for(\"upcast\").elementToElement({\n view: {\n name: \"span\",\n classes: \"ck-math-widget\",\n },\n model: (viewElement, { writer: modelWriter }) => {\n const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute(\"data-mathml\"));\n return modelWriter.createElement(\"mathml\", {\n formula,\n });\n },\n });\n\n // Data view -> Model\n editor.data.upcastDispatcher.on(\"element:math\", (evt, data, conversionApi) => {\n const { consumable, writer } = conversionApi;\n const { viewItem } = data;\n\n // When element was already consumed then skip it.\n if (!consumable.test(viewItem, { name: true })) {\n return;\n }\n\n // If we encounter any with a LaTeX annotation inside,\n // convert it into a \"$$...$$\" string.\n const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define\n\n // Get the formula of the (which is all its children).\n const processor = new XmlDataProcessor(editor.editing.view.document);\n\n // Only god knows why the following line makes viewItem lose all of its children,\n // so we obtain isLatex before doing this because we need viewItem's children for that.\n const upcastWriter = new UpcastWriter(editor.editing.view.document);\n const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren());\n\n // and obtain the attributes of too!\n const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}=\"${value}\"`).join(\"\");\n\n // We process the document fragment\n let formula = processor.toData(viewDocumentFragment) || \"\";\n\n // And obtain the complete formula\n formula = Util.htmlSanitize(`${formula}`);\n\n // Replaces the < & > characters to its HTMLEntity to avoid render issues.\n formula = formula.replaceAll('\"<\"', '\"<\"').replaceAll('\">\"', '\">\"').replaceAll(\"><<\", \"><<\");\n\n /* Model node that contains what's going to actually be inserted. This can be either:\n - A element with a formula attribute set to the given formula, or\n - If the original had a LaTeX annotation, then the annotation surrounded by \"$$...$$\" */\n const modelNode = isLatex\n ? writer.createText(Parser.initParse(formula, integration.getLanguage()))\n : writer.createElement(\"mathml\", { formula });\n\n // Find allowed parent for element that we are going to insert.\n // If current parent does not allow to insert element but one of the ancestors does\n // then split nodes to allowed parent.\n const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor);\n\n // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n if (!splitResult) {\n return;\n }\n\n // Insert element on allowed position.\n conversionApi.writer.insert(modelNode, splitResult.position);\n\n // Consume appropriate value from consumable values list.\n consumable.consume(viewItem, { name: true });\n\n const parts = conversionApi.getSplitParts(modelNode);\n\n // Set conversion result range.\n data.modelRange = writer.createRange(\n conversionApi.writer.createPositionBefore(modelNode),\n conversionApi.writer.createPositionAfter(parts[parts.length - 1]),\n );\n\n // Now we need to check where the `modelCursor` should be.\n if (splitResult.cursorParent) {\n // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n //\n // before: foo[]\n // after: foo[]\n\n data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n } else {\n // Otherwise just continue after inserted element.\n data.modelCursor = data.modelRange.end;\n }\n });\n\n /**\n * Whether the given view element has a LaTeX annotation element.\n * @param {*} math\n * @returns {bool}\n */\n function mathIsLatex(math) {\n const semantics = math.getChild(0);\n if (!semantics || semantics.name !== \"semantics\") return false;\n for (const child of semantics.getChildren()) {\n if (child.name === \"annotation\" && child.getAttribute(\"encoding\") === \"LaTeX\") {\n return true;\n }\n }\n return false;\n }\n\n function createViewWidget(modelItem, { writer: viewWriter }) {\n const widgetElement = viewWriter.createContainerElement(\"span\", {\n class: \"ck-math-widget\",\n });\n\n const mathUIElement = createViewImage(modelItem, { writer: viewWriter }); // eslint-disable-line no-use-before-define\n\n if (mathUIElement) {\n viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement);\n }\n\n return toWidget(widgetElement, viewWriter);\n }\n\n function createViewImage(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n const mathString = modelItem.getAttribute(\"formula\").replaceAll('ref=\"<\"', 'ref=\"<\"');\n const imgHtml = Parser.initParse(mathString, integration.getLanguage());\n const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0);\n\n /* Although we use the HtmlDataProcessor to obtain the attributes,\n we must create a new EmptyElement which is independent of the\n DataProcessor being used by this editor instance */\n if (imgElement) {\n return viewWriter.createEmptyElement(\"img\", imgElement.getAttributes(), {\n renderUnsafeAttributes: [\"src\"],\n });\n }\n\n return null;\n }\n\n // Model -> Editing view\n editor.conversion.for(\"editingDowncast\").elementToElement({\n model: \"mathml\",\n view: createViewWidget,\n });\n\n // Model -> Data view\n editor.conversion.for(\"dataDowncast\").elementToElement({\n model: \"mathml\",\n view: createDataString, // eslint-disable-line no-use-before-define\n });\n\n /**\n * Makes a copy of the given view node.\n * @param {module:engine/view/node~Node} sourceNode Node to copy.\n * @returns {module:engine/view/node~Node} Copy of the node.\n */\n function clone(viewWriter, sourceNode) {\n if (sourceNode.is(\"text\")) {\n return viewWriter.createText(sourceNode.data);\n }\n if (sourceNode.is(\"element\")) {\n if (sourceNode.is(\"emptyElement\")) {\n return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes());\n }\n const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes());\n for (const child of sourceNode.getChildren()) {\n viewWriter.insert(viewWriter.createPositionAt(element, \"end\"), clone(viewWriter, child));\n }\n return element;\n }\n\n throw new Exception(\"Given node has unsupported type.\"); // eslint-disable-line no-undef\n }\n\n function createDataString(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n let mathString = Parser.endParseSaveMode(modelItem.getAttribute(\"formula\"));\n\n const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0);\n\n return clone(viewWriter, sourceMathElement);\n }\n\n // This stops the view selection getting into the s and messing up caret movement\n editor.editing.mapper.on(\n \"viewToModelPosition\",\n viewToModelPositionOutsideModelElement(editor.model, (viewElement) => viewElement.hasClass(\"ck-math-widget\")),\n );\n\n // Keep a reference to the original get and set function.\n const { get, set } = editor.data;\n\n /**\n * Hack to transform $$latex$$ into in editor.getData()'s output.\n */\n editor.data.on(\n \"get\",\n (e) => {\n let output = e.return;\n // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any.\n // For text or latex formulas, it returns the original output.\n e.return = MathML.removeSemantics(output, \"application/json\");\n },\n { priority: \"low\" },\n );\n\n /**\n * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData().\n */\n editor.data.on(\n \"set\",\n (e, args) => {\n // Retrieve the data to be set on the CKEditor.\n let modifiedData = args[0];\n // Regex to find all mathml formulas.\n const regexp = //gm;\n\n // Get all MathML formulas and store them in an array.\n // Using the conditional operator on data.main because the data parameter has different types depending on:\n // editor.data.set can be used directly or by the source editing plugin.\n // With the source editor plugin, data is an object with the key `main` which contains the source code string.\n // When using the editor.data.set method, the data is a string with the content to be set to the editor.\n let formulas = Object.values(modifiedData)[0]\n ? [...Object.values(modifiedData)[0].matchAll(regexp)]\n : [...modifiedData.matchAll(regexp)];\n\n // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation.\n formulas.forEach((formula) => {\n let mathml = formula[0];\n if (mathml.includes('encoding=\"LaTeX\"')) {\n // LaTeX found.\n let latex = \"$$$\" + Latex.getLatexFromMathML(mathml) + \"$$$\"; // We add $$$ instead of $$ because the replace function ignores one $.\n modifiedData = modifiedData.replace(mathml, latex);\n }\n });\n\n args[0] = modifiedData;\n },\n { priority: \"high\" },\n );\n }\n\n /**\n * Expose the WirisPlugin variable to the window\n */\n // eslint-disable-next-line class-methods-use-this\n _exposeWiris() {\n window.WirisPlugin = {\n Core,\n Parser,\n Image,\n MathML,\n Util,\n Configuration,\n Listeners,\n IntegrationModel,\n currentInstance,\n Latex,\n };\n }\n}\n"],"names":["global","factory","module","exports","this","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","Object","freeze","seal","create","apply","construct","Reflect","x","fun","thisValue","args","Func","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","push","stringToLowerCase","String","toLowerCase","stringToString","toString","stringMatch","match","stringReplace","replace","stringIndexOf","indexOf","stringTrim","trim","objectHasOwnProperty","hasOwnProperty","regExpTest","RegExp","test","typeErrorCreate","unconstruct","TypeError","func","thisArg","_len","arguments","length","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","undefined","l","element","lcElement","cleanArray","index","isPropertyExist","clone","object","newObject","property","value","isArray","constructor","lookupGetter","prop","desc","get","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","__proto__","NODE_TYPE","attribute","cdataSection","entityReference","entityNode","progressingInstruction","comment","document","documentType","documentFragment","notation","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","_","console","warn","createDOMPurify","DOMPurify","root","version","removed","nodeType","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","parentNode","removeChild","remove","_removeAttribute","name","getAttributeNode","from","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","call","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","nodeName","textContent","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","childCount","i","childClone","__removalCount","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","purify","Constants","safeXmlCharactersEntities","tagOpener","tagCloser","doubleQuote","realDoubleQuote","safeBadBlackboardCharacters","ltElement","gtElement","ampElement","safeGoodBlackboardCharacters","xmlCharacters","id","ampersand","quote","safeXmlCharacters","MathML","isMathmlInAttribute","mathAtt","attContent","att","atts","regex","expression","actualContent","substring","reversed","split","reverse","join","exists","safeXmlDecode","input","_wrs_blackboard","returnValue","currentEntity","character","charAt","safeXmlEncode","mathMLEntities","mathml","toReturn","codePointAt","end","container","Util","fixedCharCodeAt","innerText","addCustomEditorClassAttribute","customEditor","start","substr","removeCustomEditorClassAttribute","addAnnotation","annotationEncoding","containsAnnotation","mathmlWithAnnotation","closeSemanticsIndex","isEmpty","endIndexInline","endIndexNonInline","endIndex","beginMathMLContent","endMathmlContent","lastIndexOf","mathmlContent","removeAnnotation","mathmlWithoutAnnotation","openAnnotationTag","closeAnnotationTag","startAnnotationIndex","differentAnnotationFound","differentAnnotationIndex","closeIndex","endAnnotationIndex","startIndex","removeSemantics","semanticsStartingTagRegex","semanticsEndingTagRegex","removeSemanticsOcurrences","characters","mathTagStart","mathTagEnd","mathTagEndline","semanticsTagStart","annotationTagStart","output","mathTagEndIndex","mathTagEndlineIndex","firstTagCloser","semanticsIndex","mmlTagStart","annotationIndex","mmlContent","containClass","mathML","className","classIndex","classTagEndIndex","classTag","closeTag","closeTagInline","firstCloseTagIndex","firstCloseTagInlineIndex","empty","mathTagEndRegex","mathTagEndArray","exec","encodeProperties","replacer","quoteIndex","propertyValue","propertyValueEncoded","htmlEntities","matchEncoded","mathmlEncoded","Configuration","addConfiguration","properties","assign","_properties","key","update","updateProperty","TextCache","cache","populate","Listeners","listeners","add","listener","fire","eventName","event","cancelled","callback","defaultPrevented","newListener","ServiceProvider","_listeners","addListener","fireEvent","parameters","_parameters","servicePaths","_servicePaths","setServicePath","service","path","getServicePath","serviceName","integrationPath","_integrationPath","getServerURL","url","location","href","arr","result","init","configurationURI","createServiceURI","createImageURI","showImageURI","getMathMLURI","serviceURI","URI","serverPath","getUrl","postVariables","currentPath","httpRequest","createHttpRequest","open","header","convertStringToObject","val","setRequestHeader","send","httpBuildQuery","responseText","getService","response","getVariables","serviceUrl","getServerLanguageFromService","extension","serverExtension","concatenateUrl","server","Latex","_cache","getLatexFromMathML","mathmlWithoutSemantics","mml","jsonResponse","JSON","parse","latex","status","latexHtmlEntitiesEncoded","mathmlWithSemantics","getMathMLFromLatex","includeLatexOnSemantics","latexCache","saveLatex","parseMathmlToLatex","mathTagBegin","openTarget","closeTarget","startAnnotation","closeAnnotation","getLatexFromTextNode","textNode","caretPosition","latexTags","defaultLatexTags","close","startNode","previousSibling","getNextLatexPosition","currentPosition","position","nodeValue","nextSibling","isPrevious","endNode","endPosition","tagLength","startPosition","StringManager","Error","lang","language","slice","strings","translations","eventTarget","createEvent","eventObject","initEvent","dispatchEvent","createEventObject","addEvent","callBackFunction","addEventListener","attachEvent","removeEvent","removeEventListener","detachEvent","addElementEvents","doubleClickHandler","mousedownHandler","mouseupHandler","callbackDblclick","realEvent","srcElement","target","callbackMousedown","callbackMouseup","removeElementEvents","addClass","containsClass","currentClasses","removeClass","newClassName","classes","convertOldXmlinitialtextAttribute","xitpos","valpos","startquote","endquote","newvalue","keyValueString","map","pair","reduce","resultObject","creator","keys","attributeName","e","createObject","objectCode","recursiveParamsFix","attributesParsed","param","NAME","VALUE","replaceChild","applet","createObjectCode","specified","path1","path2","separator","htmlSanitize","annotationRegex","annotation","htmlEntitiesDecode","textarea","XMLHttpRequest","ActiveXObject","oc","urlEncode","propertiesToString","hash","n","j","s1","s2","compareStrings","a","b","an","bn","c","string","idx","code","charCodeAt","hi","low","Number","isNaN","urlToAssArray","query","ss","h","s","kv","decodeURIComponent","clearString","encodeURIComponent","getWIRISImageOutput","imgCode","convertToXml","convertToSafeXml","imgObject","dataMathML","safeMathML","getNodeLength","staticNodeLengths","IMG","BR","toUpperCase","getSelectedItem","isIframe","forceGetSelection","windowTarget","contentWindow","focus","selection","range","createRange","parentElement","htmlText","execCommand","temporalObject","pasteHTML","getElementById","item","getSelection","getRangeAt","startContainer","startOffset","endContainer","endOffset","localName","classList","contains","emptySpan","getSelectedItemOnTextarea","textNodeValues","selectionStart","getElementsByNameFromString","autoClosed","elements","endString","decode64","PLUS","SLASH","NUMBER","LOWER","UPPER","PLUS_URL_SAFE","SLASH_URL_SAFE","b64ToByteArray","b64String","tmp","placeHolders","readInt32","bytes","int32","splice","readByte","shift","readBytes","pos","len","updateTextArea","selectionEnd","selectionEndSub","updateExistingTextOnTextarea","textareaStart","addArgument","parameter","sep","Image","removeImgDataAttributes","img","attributesToRemove","originImg","destImg","customEditorAttributeName","mathmlAttributeName","imgAttributes","iterator","originAttribute","isSvg","src","startsWith","isBase64","setImgSize","uri","ar","base64String","svgString","getMetricsFromSvgString","fromCharCode","getMetricsFromBytes","width","cw","height","ch","baseline","cb","dpi","style","verticalAlign","fixAfterResize","maxWidth","processImg","atob","encodedSvgString","base64","reader","FileReader","onload","fetch","then","r","blob","readAsDataURL","first","last","typ","Math","round","Accessibility","mathMLToAccessible","mode","ignoreStyles","accessibleText","accessibleJsonResponse","Parser","mathmlToImgObject","wirisProperties","align","wirisEditorProperties","metrics","centerbaseline","mathmlSubstring","createShowImageSrc","format","alt","createImageSrc","observer","observe","baseParts","initParse","initParseSaveMode","initParseEditMode","parseMathmlToImg","codeImgTransform","imgList","token","carry","mathmlStartToken","mathmlStart","mathmlEnd","latexStartPosition","latexEndPosition","replaceText","endParse","codeEndParsedEditMode","endParseEditMode","codeEndParseSaveMode","endParseSaveMode","decodedLatex","createShowImageSrcData","dataMd5","renderParams","dataObject","formula","com","wiris","js","JsPluginTools","md5encode","pattern","patternLength","source","lastIndex","characterNextPosition","xmlCode","imageMathmlAtrribute","MutationObserver","mutationObserver","mutations","mutation","oldValue","Config","attributeOldValue","EditorListener","isContentChanged","waitingForChanges","setIsContentChanged","getIsContentChanged","setWaitingForChanges","caretPositionChanged","_editor","clipboardChanged","contentChanged","styleChanged","transformationReceived","wasm","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","cachedUint8Memory0","getUint8Memory0","byteLength","Uint8Array","memory","buffer","getStringFromWasm0","ptr","subarray","heap","fill","heap_next","addHeapObject","obj","getObject","dropObject","takeObject","ret","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encode","encodeString","encodeInto","arg","view","buf","read","written","passStringToWasm0","malloc","realloc","mem","offset","isLikeNone","cachedInt32Memory0","getInt32Memory0","Int32Array","cachedFloat64Memory0","getFloat64Memory0","Float64Array","cachedBigInt64Memory0","getBigInt64Memory0","BigInt64Array","debugString","type","description","debug","builtInMatches","stringify","message","stack","makeClosure","arg0","arg1","dtor","f","state","cnt","real","__wbindgen_export_2","original","__wbg_adapter_46","arg2","__wbindgen_export_3","makeMutClosure","__wbg_adapter_49","__wbindgen_export_4","__wbg_adapter_52","__wbindgen_export_5","handleError","__wbindgen_export_6","__wbg_adapter_103","arg3","__wbindgen_export_7","getArrayU8FromWasm0","Telemeter","__destroy_into_raw","__wbg_ptr","free","__wbg_telemeter_free","solution","hosts","config","retptr","__wbindgen_add_to_stack_pointer","telemeter_new","r0","r1","r2","identify","sender_id","ptr0","__wbindgen_export_0","__wbindgen_export_1","len0","telemeter_identify","track","event_type","event_payload","telemeter_track","log","level","payload","telemeter_log","finish","telemeter_finish","new_debug_status","telemeter_debug","__wbg_load","imports","Response","WebAssembly","instantiateStreaming","headers","arrayBuffer","instantiate","instance","Instance","__wbg_get_imports","wbg","__wbindgen_string_new","__wbg_new_c728d68b8b34487e","__wbg_status_7841bb47be2a8f16","__wbg_headers_ea7ef583d1564b08","__wbg_new0_ad75dd38f92424e2","Date","__wbg_getTime_ed6ee333b702f8fc","getTime","__wbindgen_object_drop_ref","__wbindgen_is_object","__wbg_crypto_58f13aa23ffcb166","crypto","__wbg_process_5b786e71d465a513","process","__wbg_versions_c2ab80650590b6a2","versions","__wbg_node_523d7bd03ef69fba","__wbindgen_is_string","__wbg_msCrypto_abcb1295e768d1f2","msCrypto","__wbg_require_2784e593a4674877","require","__wbg_newwithlength_13b5319ab422dcf6","__wbg_get_4a9aa5157afeb382","__wbg_next_1989a20442400aaa","next","__wbg_done_bc26bf4ada718266","done","__wbg_value_0570714ff7d75f35","__wbg_iterator_7ee1a391d310f8e4","Symbol","__wbg_get_2aff440840bb6202","__wbg_next_15da6a3df9290720","__wbindgen_is_function","__wbg_call_669127b9d730c650","__wbindgen_object_clone_ref","__wbg_self_3fad056edded10bd","self","__wbg_window_a4f46c98a61d4089","__wbg_globalThis_17eff828815f7d84","globalThis","__wbg_global_46f939f6541643c5","__wbindgen_is_undefined","__wbg_newnoargs_ccdcae30fd002262","__wbg_isArray_38525be7442aa21e","__wbg_call_53fc3abd42e24ec8","__wbg_isSafeInteger_c38b0a16d0c7cef7","isSafeInteger","__wbg_new_feb65b865d980ae2","state0","cb0","Promise","__wbindgen_memory","__wbg_buffer_344d9b41efe96da7","__wbg_new_d8a000788389a31e","__wbg_set_dcfd613a3420f908","__wbg_length_a5587d6cd79ab197","__wbindgen_string_get","ptr1","len1","__wbg_stringify_4039297315a25b00","__wbg_set_40f7786a25a9cc7e","__wbg_has_cdf8b85f6e903c80","has","__wbg_fetch_701fcd2bde06379a","__wbg_fetch_b5d6bebed1e6c2d2","__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3","__wbg_new_e4960143e41697a4","AbortController","__wbg_signal_1ed842bebd6ae322","signal","__wbg_abort_8355f201f30300bb","abort","__wbindgen_error_new","__wbindgen_jsval_loose_eq","__wbindgen_boolean_get","v","__wbindgen_number_get","__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1","__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d","ArrayBuffer","__wbg_entries_6d727b73ee02b7ce","__wbg_String_917f38a1211cf44b","__wbg_warn_ade8d3b7ecee11ff","__wbg_readyState_13e55da5ad6d64e2","readyState","__wbg_warn_4affe1093892a4ef","__wbg_close_f4135085ec3fc8f0","__wbg_new_b9b318679315404f","WebSocket","__wbg_setbinaryType_dcb62e0f2b346301","binaryType","__wbg_log_7811587c4c6d2844","__wbg_error_f0a6627f4b23c19d","error","__wbg_info_3ca7870690403fee","info","__wbg_document_183cf1eecfdbffee","__wbg_visibilityState_9721703a5ef75faf","visibilityState","__wbg_getwithrefkey_3b3c46ba20582127","__wbg_length_cace2e0b3ddc0502","__wbg_addEventListener_0f2891b0794e07fa","__wbg_removeEventListener_104d11302bb212d1","__wbindgen_is_bigint","__wbindgen_bigint_from_i64","__wbindgen_in","__wbindgen_bigint_from_u64","BigInt","asUintN","__wbindgen_jsval_eq","__wbg_localStorage_e11f72e996a4f5d9","localStorage","__wbg_getItem_c81cd3ae30cd579a","getItem","__wbg_navigator_7078da62d92ff5ad","navigator","__wbg_mediaDevices_e00b1f64d2b9939f","mediaDevices","__wbg_enumerateDevices_619d52f5eef34c2f","enumerateDevices","__wbg_setItem_fe04f524052a3839","arg4","setItem","__wbindgen_cb_drop","__wbg_deviceId_58f7da2228a26c02","deviceId","__wbg_instanceof_Response_944e2745b5db71f5","__wbg_randomFillSync_a0d98aa11c81fe89","randomFillSync","__wbg_subarray_6ca5cfa7fbb9abbe","__wbg_getRandomValues_504510b5564925af","getRandomValues","__wbindgen_bigint_get_as_i64","__wbindgen_debug_string","__wbindgen_throw","__wbg_then_89e1c559530b85cf","__wbg_queueMicrotask_e5949c35d772a669","queueMicrotask","__wbg_then_1bbc9edafd859b06","__wbg_queueMicrotask_2be8b97a81fe4d00","__wbg_resolve_a3252b2860f0a09e","resolve","__wbg_url_1f609e63ff1a7983","__wbg_send_2860805104507701","__wbg_instanceof_Window_cde2416cf5126a72","Window","__wbg_new_19676474aa414d62","Headers","__wbg_append_feec4143bbf21904","append","__wbg_newwithstrandinit_29038da14d09e330","Request","__wbindgen_closure_wrapper1532","__wbindgen_closure_wrapper1602","__wbindgen_closure_wrapper1834","__wbg_finalize_init","__wbg_init","__wbindgen_wasm_module","__wbindgen_start","URL","telemeterAttributes","telemeter","waitingForInit","TelemeterWASM","catch","finally","local_telemeter","ContentManager","contentManagerAttributes","editorAttributes","customEditors","environment","editorListener","editor","ua","userAgent","deviceProperties","isAndroid","isIOS","toolbar","dbclick","modalDialogInstance","isNewElement","integrationModel","setIntegrationModel","setModalDialogInstance","insert","updateTitle","insertEditor","isEditorLoaded","jsEditor","JsEditor","newInstance","insertInto","contentContainer","rtl","action","getEditorModel","isRTL","direction","addEditorListener","setTimeout","hideKeyboard","formulaDisplayDiv","getElementsByClassName","handleOpenedIosSoftkeyboard","handleClosedIosSoftkeyboard","bind","addEditorAsExternalDependency","script","editorUrl","anchorElement","setHrefToAnchorElement","setProtocolToAnchorElement","getURLFromAnchorElement","stats","getEditorStats","protocol","removePort","port","hostname","pathname","includes","platform","isMobile","setInitialContent","setMathML","focusDisabled","setMathMLWithCallback","onFocus","submitAction","isFormulaEmpty","getMathMLWithSemantics","getActiveEditor","editors","mathmlEntitiesEncoded","updateFormula","disable","notifyWindowClosed","setEmptyMathML","forcedHandMode","onOpen","updateToolbar","zoom","clientWidth","innerWidth","setKeyboardMode","trigger","Core","globalListeners","hideHandModeButton","openHandOnKeyboardMathML","wrsEditor","forced","handSwitchHidden","handModeButtonSelector","mutationInstance","handModeButton","querySelector","hidden","disconnect","childList","characterData","subtree","waitForHand","handEditor","hand","handTemporalMathML","getMathML","handCoordinates","editorModel","getHandStrokes","setStrokes","fitStrokes","openHand","_wrs_int_wirisProperties","setToolbar","getToolbar","setTitle","title","setParams","setCustomHeaders","headersObj","customHeaders","hasChanges","onKeyDown","keyboardEvent","repeat","list","cancelAction","stopPropagation","preventDefault","shiftKey","activeElement","submitButton","closeDiv","minimizeDiv","cancelButton","CustomEditors","activeEditor","addEditor","editorName","editorParams","icon","confVariable","tooltip","enable","customEditorName","jsProperties","imageCustomEditorName","imageClassName","CASClassName","Event","cancel","PopUpMessage","popupMessageAttributes","overlayElement","callbacks","overlayWrapper","paragraph","overlay","buttonArea","buttonSubmitArguments","class","submitString","closeButton","createButton","closeAction","buttonCancelArguments","cancelString","show","display","blur","cancelCallback","closeCallback","IntegrationModel","setActionsOnCancelButtons","ModalDialog","modalDialogAttributes","iosSoftkeyboardOpened","iosMeasureUnit","iosDivHeight","deviceWidth","outerWidth","deviceHeight","outerHeight","landscape","portrait","instanceId","orientation","isDesktop","created","previousState","bottom","right","size","websiteBeforeLockParameters","getElementId","titleBar","generalStyle","btoa","closeIcon","hoverStyle","closeHoverIcon","stackDiv","minsIcon","minsHoverIcon","maximizeDiv","fullsIcon","fullsHoverIcon","minIcon","minHoverIcon","role","wrapper","controls","buttonContainer","createSubmitButton","contentManager","popupStrings","popupupProperties","popup","setContentManager","getContentManager","showPopUpMessage","SubmitButton","dataset","testid","getElement","recalculateScrollBar","createModalWindowDesktop","createResizeButtons","addListeners","maximize","createModalWindowAndroid","createModalWindowIos","scrollbarWidth","offsetWidth","resizerBR","resizerTL","activateResizeStateBR","activateResizeStateTL","mouseEvent","initializeResizeProperties","leftOption","resizeDataObject","eventClient","X","y","Y","initialWidth","parseInt","initialHeight","initialRight","initialBottom","leftScale","restoreWebsiteScale","lockWebsiteScroll","restoreState","setContainerHeight","saveModalProperties","unlockWebsiteScroll","destroy","removeListeners","viewportmeta","contentAttrsToUpdate","contentAttrsValuesToUpdate","setMetaAttrFunc","viewportelement","contentAttrs","contentAttr","attrArray","finalContentMeta","oldAttrs","isAttrToUpdate","bodyStylePosition","bodyStyleOverflow","overflow","htmlStyleOverflow","windowScrollX","scrollX","windowScrollY","scrollY","scrollTo","isIE11","search","orientationChangeAndroidSoftkeyboard","orientationChangeIosSoftkeyboard","minimize","restoreModalProperties","setResizeButtonsVisibility","recalculatePosition","recalculateScale","cursor","maxIcon","maxHoverIcon","left","top","setSize","innerHeight","clientHeight","offsetHeight","setPosition","recalculateSize","reExpand","visibility","keyCode","click","startDrag","stopDrag","drag","onWindowResize","clientX","changedTouches","client","clientY","dragDataObject","lastDrag","limitWindow","getLimitWindow","limitY","min","minPointer","max","maxPointer","limitX","dragX","dragY","transform","scaleMultiplier","maxHeight","contStyleBottom","contStyleRight","pageXOffset","offSetToolbarY","offSetToolbarX","minPointerY","maxPointerY","minPointerX","maxPointerX","getScrollBarWidth","inner","outer","widthOuter","widthInner","sizeModified","hasScrollBar","inputField","portraitMode","second","defineProperty","varArgs","to","nextSource","nextKey","searchElement","fromIndex","o","k","abs","sameValueZero","rawPos","coreProperties","editMode","modalDialog","chemEditorParams","editionProperties","temporalImage","latexRange","editionStartTime","browser","serviceProviderProperties","_globalListeners","initialized","_initialized","setEnvironment","integrationEnvironment","setHeaders","headerObject","getModalDialog","serviceProviderListener","jsConfiguration","jsonConfiguration","addGlobalListener","beforeUpdateFormula","beforeUpdateEvent","insertFormula","focusElement","returnObject","insertElementOnSelection","fillNonLatexNode","afterUpdateEvent","afterUpdateFormula","placeCaretAfterNode","nodeDocument","setStartAfter","collapse","removeAllRanges","addRange","mathmlOrigin","editorSelection","deleteContents","splitText","select","insertNode","mathml_origin","elapsed_time","now","editor_origin","openModalDialog","selectedItem","getMathmlFromTextNode","latexResult","leftOffset","previousNode","moveToElementText","move","moveEnd","setStart","setEnd","defaultEditorAttributesArray","defaultEditorAttributes","tempAttribute","serverEditorParameters","clientEditorParameters","editorParameters","getCustomEditors","integrationModelProperties","configurationService","scriptName","callbackMethodArguments","editorObject","managesLanguage","integrationParameters","temporalImageResizing","core","getLanguage","callbackFunction","configurationIndex","subsTring","serviceParametersURI","getPath","setCore","offlineModal","offlineModalContent","offlineModalClose","offlineModalWarn","warnIcon","offlineModalMessage","offlineModalMessage1","offlineModalMessage2","modal","solutionTelemeter","isMoodle","M","lms","nam","fam","ver","moodleVersion","category","moodleCourseCategory","course","moodleCourseName","OSData","getOS","broswerData","getBrowser","detectedBrowser","versionBrowser","editorVersion","detectedOS","versionOS","filter","dry_run","api_key","macosPlatforms","windowsPlatforms","iosPlatforms","col","getVersion","setLanguage","getCore","setTarget","setEditorObject","openNewFormulaEditor","onLine","openExistingFormulaEditor","util","EditorUtils","addEvents","stopImmediatePropagation","removeEvents","getBrowserLanguage","userLanguage","currentInstance","WirisPlugin","CKEditor5Integration","ckeditorIntegrationModelProperties","integrationFolderName","languageObject","ui","addEditorListeners","wirislistenersdisabled","checkElement","newElement","sourceElement","wirisActive","isReadOnly","customEditorAttr","getCorePath","editing","insertMathml","model","change","writer","modelElementNew","fromEntries","getAttributes","viewSelection","modelPosition","mapper","toModelPosition","getLastPosition","insertObject","isCollapsed","getRanges","toModelRange","createPositionAfter","setSelection","viewElement","domConverter","domToView","modelElementOld","toModelElement","createPositionBefore","findText","pivot","createRangeIn","descendants","getItems","viewElementData","replaceAll","is","createPositionAt","latexEdited","dataOffset","second$","insertText","viewToDom","toViewElement","MathTypeCommand","Command","execute","options","integration","setEditor","openEditor","image","_getSelectedImage","rangeCount","getFirstRange","span","getChild","mapViewToDom","ChemTypeCommand","MathType","Plugin","requires","Widget","pluginName","_addIntegration","_addCommands","_addViews","_addSchema","_addConverters","_exposeWiris","integrationProperties","packageInfo","listenTo","evt","domEvent","detail","domTarget","stop","priority","commands","componentFactory","locale","ButtonView","label","mathIcon","on","chemIcon","addObserver","ClickObserver","schema","register","inheritAllFrom","allowAttributes","conversion","for","elementToElement","modelWriter","upcastDispatcher","conversionApi","consumable","viewItem","isLatex","mathIsLatex","processor","XmlDataProcessor","upcastWriter","UpcastWriter","viewDocumentFragment","getChildren","mathAttributes","toData","modelNode","createText","splitResult","splitToAllowedParent","modelCursor","consume","parts","getSplitParts","modelRange","cursorParent","math","semantics","child","createViewWidget","modelItem","viewWriter","widgetElement","createContainerElement","mathUIElement","createViewImage","toWidget","htmlDataProcessor","HtmlDataProcessor","mathString","imgHtml","imgElement","toView","createEmptyElement","renderUnsafeAttributes","createDataString","sourceNode","Exception","sourceMathElement","viewToModelPositionOutsideModelElement","hasClass","return","modifiedData","regexp","formulas","values","matchAll"],"mappings":"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A,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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","x_google_ignoreList":[0]} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../../../../node_modules/dompurify/dist/purify.js","../../../devkit/src/constants.js","../../../devkit/src/mathml.js","../../../devkit/src/configuration.js","../../../devkit/src/textcache.js","../../../devkit/src/listeners.js","../../../devkit/src/serviceprovider.js","../../../devkit/src/latex.js","../../../devkit/src/stringmanager.js","../../../devkit/src/util.js","../../../devkit/src/image.js","../../../devkit/src/accessibility.js","../../../devkit/src/parser.js","../../../devkit/src/editorlistener.js","../../../devkit/telemeter-wasm/telemeter_wasm.js","../../../devkit/src/telemeter.js","../../../devkit/src/contentmanager.js","../../../devkit/src/customeditors.js","../../../devkit/src/jsvariables.js","../../../devkit/src/event.js","../../../devkit/src/popupmessage.js","../../../devkit/src/modal.js","../../../devkit/src/polyfills.js","../../../devkit/src/core.src.js","../../../devkit/src/integrationmodel.js","../../src/integration.js","../../src/commands.js","../../src/plugin.js"],"sourcesContent":["/*! @license DOMPurify 3.1.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.6/LICENSE */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.DOMPurify = factory());\n})(this, (function () { 'use strict';\n\n const {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n } = Object;\n let {\n freeze,\n seal,\n create\n } = Object; // eslint-disable-line import/no-mutable-exports\n let {\n apply,\n construct\n } = typeof Reflect !== 'undefined' && Reflect;\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n\n /**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\n function unapply(func) {\n return function (thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n\n /**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\n function unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n\n /**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\n function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n\n /**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\n function cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n\n /**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\n function clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n\n /**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\n function lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n }\n\n const html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n // SVG\n const svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\n const svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\n const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\n const text = freeze(['#text']);\n\n const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\n const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\n const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\n const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\n var EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n\n /**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\n const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n\n /**\n * Version label, exposed for easier checks\n * if DOMPurify is up to date or not\n */\n DOMPurify.version = '3.1.6';\n\n /**\n * Array of elements that DOMPurify removed during sanitation.\n * Empty if nothing was removed.\n */\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = {};\n\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n /*\n * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n\n /* Decide if document with ... should be returned */\n let WHOLE_DOCUMENT = false;\n\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n\n /**\n * _parseConfig\n *\n * @param {Object} cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS,\n // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n const HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'annotation-xml']);\n\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n /**\n * @param {Element} element a DOM element whose namespace is being checked\n * @returns {boolean} Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n\n /**\n * _forceRemove\n *\n * @param {Node} node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n\n /**\n * _removeAttribute\n *\n * @param {String} name an Attribute name\n * @param {Node} node a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n\n /**\n * _initDocument\n *\n * @param {String} dirty a string of dirty markup\n * @return {Document} a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param {Node} root The root element or node to start traversing on.\n * @return {NodeIterator} The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n\n /**\n * _isClobbered\n *\n * @param {Node} elm element to check for clobbering attacks\n * @return {Boolean} true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param {Node} object object to check whether it's a DOM node\n * @return {Boolean} true is object is a DOM node\n */\n const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n\n /**\n * _executeHook\n * Execute user configurable hooks\n *\n * @param {String} entryPoint Name of the hook's entry point\n * @param {Node} currentNode node to work on with the hook\n * @param {Object} data additional hook parameters\n */\n const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n *\n * @param {Node} currentNode to check for permission to exist\n * @return {Boolean} true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeElements', currentNode, null);\n\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n\n /* Execute a hook if present */\n _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n\n /* Detect mXSS attempts abusing namespace confusion */\n if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n\n /**\n * _isValidAttribute\n *\n * @param {string} lcTag Lowercase tag name of containing element.\n * @param {string} lcName Lowercase attribute name.\n * @param {string} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param {string} tagName name of the tag of the node to sanitize\n * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param {Node} currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHook('beforeSanitizeAttributes', currentNode, null);\n const {\n attributes\n } = currentNode;\n\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n\n /* Remove attribute */\n _removeAttribute(name, currentNode);\n\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n continue;\n }\n\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n\n /* Handle invalid data-* attribute set by try-catching it */\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n\n /**\n * _sanitizeShadowDOM\n *\n * @param {DocumentFragment} fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n\n /* Execute a hook if present */\n _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n /* Sanitize tags and elements */\n if (_sanitizeElements(shadowNode)) {\n continue;\n }\n\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(shadowNode);\n }\n\n /* Execute a hook if present */\n _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n\n /**\n * Sanitize\n * Public method providing core sanitation functionality\n *\n * @param {String|Node} dirty string or DOM node\n * @param {Object} cfg object\n */\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n\n /* Clean up removed elements */\n DOMPurify.removed = [];\n\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n if (_sanitizeElements(currentNode)) {\n continue;\n }\n\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n\n /* Check attributes, sanitize if necessary */\n _sanitizeAttributes(currentNode);\n }\n\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n\n /**\n * Public method to set the configuration once\n * setConfig\n *\n * @param {Object} cfg configuration object\n */\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n\n /**\n * Public method to remove the configuration\n * clearConfig\n *\n */\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n\n /**\n * Public method to check if an attribute value is valid.\n * Uses last set config, if any. Otherwise, uses config defaults.\n * isValidAttribute\n *\n * @param {String} tag Tag name of containing element.\n * @param {String} attr Attribute name.\n * @param {String} value Attribute value.\n * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n */\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n\n /**\n * AddHook\n * Public method to add DOMPurify hooks\n *\n * @param {String} entryPoint entry point for the hook to add\n * @param {Function} hookFunction function to execute\n */\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n\n /**\n * RemoveHook\n * Public method to remove a DOMPurify hook at a given entryPoint\n * (pops it from the stack of hooks if more are present)\n *\n * @param {String} entryPoint entry point for the hook to remove\n * @return {Function} removed(popped) hook\n */\n DOMPurify.removeHook = function (entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n\n /**\n * RemoveHooks\n * Public method to remove all DOMPurify hooks at a given entryPoint\n *\n * @param {String} entryPoint entry point for the hooks to remove\n */\n DOMPurify.removeHooks = function (entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n\n /**\n * RemoveAllHooks\n * Public method to remove all DOMPurify hooks\n */\n DOMPurify.removeAllHooks = function () {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n\n return purify;\n\n}));\n//# sourceMappingURL=purify.js.map\n","/**\n * This class represents all the constants needed in a MathType integration among different classes.\n * If a constant should be used across different classes should be defined using attribute\n * accessors.\n */\nexport default class Constants {\n /**\n * Safe XML entities.\n * @type {Object}\n */\n static get safeXmlCharactersEntities() {\n return {\n tagOpener: \"«\",\n tagCloser: \"»\",\n doubleQuote: \"¨\",\n realDoubleQuote: \""\",\n };\n }\n\n /**\n * Blackboard invalid safe characters.\n * @type {Object}\n */\n static get safeBadBlackboardCharacters() {\n return {\n ltElement: \"«mo»<«/mo»\",\n gtElement: \"«mo»>«/mo»\",\n ampElement: \"«mo»&«/mo»\",\n };\n }\n\n /**\n * Blackboard valid safe characters.\n * @type{Object}\n */\n static get safeGoodBlackboardCharacters() {\n return {\n ltElement: \"«mo»§lt;«/mo»\",\n gtElement: \"«mo»§gt;«/mo»\",\n ampElement: \"«mo»§amp;«/mo»\",\n };\n }\n\n /**\n * Standard XML special characters.\n * @type {Object}\n */\n static get xmlCharacters() {\n return {\n id: \"xmlCharacters\",\n tagOpener: \"<\", // Hex: \\x3C.\n tagCloser: \">\", // Hex: \\x3E.\n doubleQuote: '\"', // Hex: \\x22.\n ampersand: \"&\", // Hex: \\x26.\n quote: \"'\", // Hex: \\x27.\n };\n }\n\n /**\n * Safe XML special characters. This characters are used instead the standard\n * the standard to parse the MathML if safeXML save mode is enable. Each XML\n * special character have a UTF-8 representation.\n * @type {Object}\n */\n static get safeXmlCharacters() {\n return {\n id: \"safeXmlCharacters\",\n tagOpener: \"«\", // Hex: \\xAB.\n tagCloser: \"»\", // Hex: \\xBB.\n doubleQuote: \"¨\", // Hex: \\xA8.\n ampersand: \"§\", // Hex: \\xA7.\n quote: \"`\", // Hex: \\x60.\n realDoubleQuote: \"¨\",\n };\n }\n}\n","import Constants from \"./constants\";\nimport Util from \"./util\";\n\n/**\n * @classdesc\n * This class represents a class to manage MathML objects.\n */\nexport default class MathML {\n /**\n * Checks if the mathml at position i is inside an HTML attribute or not.\n * @param {string} content - a string containing MathML code.\n * @param {number} i - search index.\n * @return {boolean} true if is inside an HTML attribute. false otherwise.\n */\n static isMathmlInAttribute(content, i) {\n // Regex =\n // '^[\\'\"][\\\\s]*=[\\\\s]*[\\\\w-]+([\\\\s]*(\"[^\"]*\"|\\'[^\\']*\\')[\\\\s]*\n // =[\\\\s]*[\\\\w-]+[\\\\s]*)*[\\\\s]+gmi<';\n const mathAtt = \"['\\\"][\\\\s]*=[\\\\s]*[\\\\w-]+\"; // \"=att OR '=att\n const attContent = \"\\\"[^\\\"]*\\\"|'[^']*'\"; // \"blabla\" OR 'blabla'\n const att = `[\\\\s]*(${attContent})[\\\\s]*=[\\\\s]*[\\\\w-]+[\\\\s]*`; // \"blabla\"=att OR 'blabla'=att\n const atts = `('${att}')*`; // \"blabla\"=att1 \"blabla\"=att2\n const regex = `^${mathAtt}${atts}[\\\\s]+gmi<`; // \"=att \"blabla\"=att1 \"blabla\"=att2 gmi< .\n const expression = new RegExp(regex);\n\n const actualContent = content.substring(0, i);\n const reversed = actualContent.split(\"\").reverse().join(\"\");\n const exists = expression.test(reversed);\n\n return exists;\n }\n\n /**\n * Decodes an encoded MathML with standard XML tags.\n * We use these entities because IE doesn't support html entities\n * on its attributes sometimes. Yes, sometimes.\n * @param {string} input - string to be decoded.\n * @return {string} decoded string.\n */\n static safeXmlDecode(input) {\n let { tagOpener } = Constants.safeXmlCharactersEntities;\n let { tagCloser } = Constants.safeXmlCharactersEntities;\n let { doubleQuote } = Constants.safeXmlCharactersEntities;\n let { realDoubleQuote } = Constants.safeXmlCharactersEntities;\n // Decoding entities.\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n // Added to fix problem due to import from 1.9.x.\n input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote);\n\n // Blackboard.\n const { ltElement } = Constants.safeBadBlackboardCharacters;\n const { gtElement } = Constants.safeBadBlackboardCharacters;\n const { ampElement } = Constants.safeBadBlackboardCharacters;\n if (\"_wrs_blackboard\" in window && window._wrs_blackboard) {\n input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement);\n input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement);\n input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement);\n }\n\n ({ tagOpener } = Constants.safeXmlCharacters);\n ({ tagCloser } = Constants.safeXmlCharacters);\n ({ doubleQuote } = Constants.safeXmlCharacters);\n ({ realDoubleQuote } = Constants.safeXmlCharacters);\n const { ampersand } = Constants.safeXmlCharacters;\n const { quote } = Constants.safeXmlCharacters;\n\n // Decoding characters.\n input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.xmlCharacters.ampersand);\n input = input.split(quote).join(Constants.xmlCharacters.quote);\n\n // We are replacing $ by & when its part of an entity for retro-compatibility.\n // Now, the standard is replace § by &.\n let returnValue = \"\";\n let currentEntity = null;\n\n for (let i = 0; i < input.length; i += 1) {\n const character = input.charAt(i);\n if (currentEntity == null) {\n if (character === \"$\") {\n currentEntity = \"\";\n } else {\n returnValue += character;\n }\n } else if (character === \";\") {\n returnValue += `&${currentEntity}`;\n currentEntity = null;\n } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) {\n // Character is part of an entity.\n currentEntity += character;\n } else {\n returnValue += `$${currentEntity}`; // Is not an entity.\n currentEntity = null;\n i -= 1; // Parse again the current character.\n }\n }\n\n return returnValue;\n }\n\n /**\n * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags.\n * We use these entities because IE doesn't support html entities on its attributes sometimes.\n * @param {string} input - input string to be encoded\n * @returns {string} encoded string.\n */\n static safeXmlEncode(input) {\n const { tagOpener } = Constants.xmlCharacters;\n const { tagCloser } = Constants.xmlCharacters;\n const { doubleQuote } = Constants.xmlCharacters;\n const { ampersand } = Constants.xmlCharacters;\n const { quote } = Constants.xmlCharacters;\n\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand);\n input = input.split(quote).join(Constants.safeXmlCharacters.quote);\n\n return input;\n }\n\n /**\n * Converts special symbols (> 128) to entities and replaces all textual\n * entities by its number entities.\n * @param {string} mathml - MathML string containing - or not - special symbols\n * @returns {string} MathML with all textual entities replaced.\n */\n static mathMLEntities(mathml) {\n let toReturn = \"\";\n\n for (let i = 0; i < mathml.length; i += 1) {\n const character = mathml.charAt(i);\n\n // Parsing > 128 characters.\n if (mathml.codePointAt(i) > 128) {\n toReturn += `&#${mathml.codePointAt(i)};`;\n // For UTF-32 characters we need to move the index one position.\n if (mathml.codePointAt(i) > 0xffff) {\n i += 1;\n }\n } else if (character === \"&\") {\n const end = mathml.indexOf(\";\", i + 1);\n if (end >= 0) {\n const container = document.createElement(\"span\");\n container.innerHTML = mathml.substring(i, end + 1);\n toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`;\n i = end;\n } else {\n toReturn += character;\n }\n } else {\n toReturn += character;\n }\n }\n\n return toReturn;\n }\n\n /**\n * Add a custom editor name with the prefix wrs_ to a MathML class attribute.\n * @param {string} mathml - a MathML string created with a custom editor, like chemistry.\n * @param {string} customEditor - custom editor name.\n * @returns {string} MathML string with his class containing the editor toolbar string.\n */\n static addCustomEditorClassAttribute(mathml, customEditor) {\n let toReturn = \"\";\n\n const start = mathml.indexOf(\"\");\n if (mathml.indexOf(\"class\") === -1) {\n // Adding custom editor type.\n toReturn = `${mathml.substr(start, end)} class=\"wrs_${customEditor}\">`;\n toReturn += mathml.substr(end + 1, mathml.length);\n return toReturn;\n }\n }\n return mathml;\n }\n\n /**\n * Remove a custom editor name from the MathML class attribute.\n * @param {string} mathml - a MathML string.\n * @param {string} customEditor - custom editor name.\n * @returns {string} The input MathML without customEditor name in his class.\n */\n static removeCustomEditorClassAttribute(mathml, customEditor) {\n // Discard MathML without the specified class.\n if (mathml.indexOf(\"class\") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) {\n return mathml;\n }\n\n // Trivial case: class attribute value equal to editor name. Then\n // class attribute is removed.\n // First try to remove it with a space before if there is one\n // Otherwise without the space\n if (mathml.indexOf(` class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(` class=\"wrs_${customEditor}\"`, \"\");\n } else if (mathml.indexOf(`class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(`class=\"wrs_${customEditor}\"`, \"\");\n }\n\n // Non Trivial case: class attribute contains editor name.\n return mathml.replace(`wrs_${customEditor}`, \"\");\n }\n\n /**\n * Adds annotation tag in MathML element.\n * @param {String} mathml - valid MathML.\n * @param {String} content - value to put inside annotation tag.\n * @param {String} annotationEncoding - annotation encoding.\n * @returns {String} - 'mathml' with an annotation that contains\n * 'content' and encoding 'encoding'.\n */\n static addAnnotation(mathml, content, annotationEncoding) {\n // If contains annotation, also contains semantics tag.\n const containsAnnotation = mathml.indexOf(\"\");\n mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`;\n } else if (MathML.isEmpty(mathml)) {\n const endIndexInline = mathml.indexOf(\"/>\");\n const endIndexNonInline = mathml.indexOf(\">\");\n const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline;\n mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`;\n } else {\n const beginMathMLContent = mathml.indexOf(\">\") + 1;\n const endMathmlContent = mathml.lastIndexOf(\"\");\n const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent);\n mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len\n }\n\n return mathmlWithAnnotation;\n }\n\n /**\n * Removes specific annotation tag in MathML element.\n * In case of remove the unique annotation, also is removed semantics tag.\n * @param {String} mathml - valid MathML.\n * @param {String} annotationEncoding - annotation encoding to remove.\n * @returns {String} - 'mathml' without the annotation encoding specified.\n */\n static removeAnnotation(mathml, annotationEncoding) {\n let mathmlWithoutAnnotation = mathml;\n const openAnnotationTag = ``;\n const closeAnnotationTag = \"\";\n const startAnnotationIndex = mathml.indexOf(openAnnotationTag);\n if (startAnnotationIndex !== -1) {\n let differentAnnotationFound = false;\n let differentAnnotationIndex = mathml.indexOf(\"\\s*?()?/gm;\n\n // If `mrow` is found right after the `annotation` ending tag, it's removed as well\n // alongside `semantics` closing tag and the whole `annotation` tag and its contents.\n const semanticsEndingTagRegex = /(<\\/mrow>)?\\s*/gm;\n\n return mathml.replace(semanticsStartingTagRegex, \"\").replace(semanticsEndingTagRegex, \"\");\n }\n\n /**\n * Transforms all xml mathml occurrences that contain semantics to the same\n * xml mathml occurrences without semantics.\n * @param {string} text - string that can contain xml mathml occurrences.\n * @param {Constants} [characters] - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * xmlCharacters by default.\n * @returns {string} - 'text' with all xml mathml occurrences without annotation tag.\n */\n static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) {\n const mathTagStart = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const mathTagEndline = `/${characters.tagCloser}`;\n const { tagCloser } = characters;\n const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`;\n const annotationTagStart = `${characters.tagOpener}annotation encoding=`;\n\n let output = \"\";\n let start = text.indexOf(mathTagStart);\n let end = 0;\n while (start !== -1) {\n output += text.substring(end, start);\n\n // MathML can be written as '' or ''.\n const mathTagEndIndex = text.indexOf(mathTagEnd, start);\n const mathTagEndlineIndex = text.indexOf(mathTagEndline, start);\n const firstTagCloser = text.indexOf(tagCloser, start);\n if (mathTagEndIndex !== -1) {\n end = mathTagEndIndex;\n } else if (mathTagEndlineIndex === firstTagCloser - 1) {\n end = mathTagEndlineIndex;\n }\n\n const semanticsIndex = text.indexOf(semanticsTagStart, start);\n if (semanticsIndex !== -1) {\n const mmlTagStart = text.substring(start, semanticsIndex);\n const annotationIndex = text.indexOf(annotationTagStart, start);\n if (annotationIndex !== -1) {\n const startIndex = semanticsIndex + semanticsTagStart.length;\n const mmlContent = text.substring(startIndex, annotationIndex);\n output += mmlTagStart + mmlContent + mathTagEnd;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n end += mathTagEnd.length;\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n }\n\n output += text.substring(end, text.length);\n return output;\n }\n\n /**\n * Returns true if a MathML contains a certain class.\n * @param {string} mathML - input MathML.\n * @param {string} className - className.\n * @returns {boolean} true if the input MathML contains the input class.\n * false otherwise.\n * @static\n */\n static containClass(mathML, className) {\n const classIndex = mathML.indexOf(\"class\");\n if (classIndex === -1) {\n return false;\n }\n const classTagEndIndex = mathML.indexOf(\">\", classIndex);\n const classTag = mathML.substring(classIndex, classTagEndIndex);\n if (classTag.indexOf(className) !== -1) {\n return true;\n }\n return false;\n }\n\n /**\n * Returns true if mathml is empty. Otherwise, false.\n * @param {string} mathml - valid MathML with standard XML tags.\n * @returns {boolean} - true if mathml is empty. Otherwise, false.\n */\n static isEmpty(mathml) {\n // MathML can have the shape or ''.\n const closeTag = \">\";\n const closeTagInline = \"/>\";\n const firstCloseTagIndex = mathml.indexOf(closeTag);\n const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline);\n let empty = false;\n // MathML is always empty in the second shape.\n if (firstCloseTagInlineIndex !== -1) {\n if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) {\n empty = true;\n }\n }\n\n // MathML is always empty in the first shape when there aren't elements\n // between math tags.\n if (!empty) {\n const mathTagEndRegex = new RegExp(\"\");\n const mathTagEndArray = mathTagEndRegex.exec(mathml);\n if (mathTagEndArray) {\n empty = firstCloseTagIndex + 1 === mathTagEndArray.index;\n }\n }\n\n return empty;\n }\n\n /**\n * Encodes html entities inside properties.\n * @param {String} mathml - valid MathML with standard XML tags.\n * @returns {String} - 'mathml' with property entities encoded.\n */\n static encodeProperties(mathml) {\n // Search all the properties.\n const regex = /\\w+=\".*?\"/g;\n // Encode html entities.\n const replacer = (match) => {\n // It has the shape:\n // .\n const quoteIndex = match.indexOf('\"');\n const propertyValue = match.substring(quoteIndex + 1, match.length - 1);\n const propertyValueEncoded = Util.htmlEntities(propertyValue);\n const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}\"`;\n return matchEncoded;\n };\n\n const mathmlEncoded = mathml.replace(regex, replacer);\n return mathmlEncoded;\n }\n}\n","/**\n * This class represents the configuration class.\n * Usually used to retrieve configuration properties generated in the backend into the frontend.\n */\nexport default class Configuration {\n /**\n * Adds a properties object to {@link Configuration.properties}.\n * @param {Object} properties - properties to append to current properties.\n */\n static addConfiguration(properties) {\n Object.assign(Configuration.properties, properties);\n }\n\n /**\n * Static property.\n * The configuration properties object.\n * @private\n * @type {Object}\n */\n static get properties() {\n return Configuration._properties;\n }\n\n /**\n * Static property setter.\n * Set configuration properties.\n * @param {Object} value - The property value.\n * @ignore\n */\n static set properties(value) {\n Configuration._properties = value;\n }\n\n /**\n * Returns the value of a property key.\n * @param {String} key - Property key\n * @returns {String} Property value\n */\n static get(key) {\n if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) {\n // Backwards compatibility.\n if (Object.prototype.hasOwnProperty.call(Configuration.properties, \"_wrs_conf_\")) {\n return Configuration.properties[`_wrs_conf_${key}`];\n }\n return false;\n }\n return Configuration.properties[key];\n }\n\n /**\n * Adds a new property to Configuration class.\n * @param {String} key - Property key.\n * @param {Object} value - Property value.\n */\n static set(key, value) {\n Configuration.properties[key] = value;\n }\n\n /**\n * Updates a property object value with new values.\n * @param {String} key - The property key to be updated.\n * @param {Object} propertyValue - Object containing the new values.\n */\n static update(key, propertyValue) {\n if (!Configuration.get(key)) {\n Configuration.set(key, propertyValue);\n } else {\n const updateProperty = Object.assign(Configuration.get(key), propertyValue);\n Configuration.set(key, updateProperty);\n }\n }\n}\n\n/**\n * Static properties object. Stores all configuration properties.\n * Needed to attribute accessors.\n * @private\n * @type {Object}\n */\nConfiguration._properties = {};\n","export default class TextCache {\n /**\n * @classdesc\n * This class represent a client-side text cache class. Contains pairs of\n * strings (key/value) which can be retrieved in any moment. Usually used\n * to store AJAX responses for text services like mathml2latex\n * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class).\n * @constructs\n */\n constructor() {\n /**\n * Cache array property storing the cache entries.\n * @type {Array.}\n */\n this.cache = [];\n }\n\n /**\n * This method populates a key/value pair into the {@link this.cache} property.\n * @param {String} key - Cache key, usually the service string parameter.\n * @param {String} value - Cache value, usually the service response.\n */\n populate(key, value) {\n this.cache[key] = value;\n }\n\n /**\n * Returns the cache value associated to certain cache key.\n * @param {String} key - Cache key, usually the service string parameter.\n * @return {String} value - Cache value, if exists. False otherwise.\n */\n get(key) {\n if (Object.prototype.hasOwnProperty.call(this.cache, key)) {\n return this.cache[key];\n }\n return false;\n }\n}\n","/**\n * This object represents a custom listener.\n * @typedef {Object} Listener\n * @property {String} Listener.eventName - The listener name.\n * @property {Function} Listener.callback - The listener callback function.\n */\n\nexport default class Listeners {\n /**\n * @classdesc\n * This class represents a custom listeners manager.\n * @constructs\n */\n constructor() {\n /**\n * Array containing all custom listeners.\n * @type {Object[]}\n */\n this.listeners = [];\n }\n\n /**\n * Add a listener to Listener class.\n * @param {Object} listener - A listener object.\n */\n add(listener) {\n this.listeners.push(listener);\n }\n\n /**\n * Fires MathType event listeners\n * @param {String} eventName - event name\n * @param {Event} event - event object.\n * @return {boolean} false if event has been prevented. true otherwise.\n */\n fire(eventName, event) {\n for (let i = 0; i < this.listeners.length && !event.cancelled; i += 1) {\n if (this.listeners[i].eventName === eventName) {\n // Calling listener.\n this.listeners[i].callback(event);\n }\n }\n return event.defaultPrevented;\n }\n\n /**\n * Creates a new listener object.\n * @param {string} eventName - Event name.\n * @param {Object} callback - Callback function.\n * @returns {object} the listener object.\n */\n static newListener(eventName, callback) {\n const listener = {};\n listener.eventName = eventName;\n listener.callback = callback;\n return listener;\n }\n}\n","import Util from \"./util\";\nimport Listeners from \"./listeners\";\nimport Configuration from \"./configuration\";\n\n/**\n * @typedef {Object} ServiceProviderProperties\n * @property {String} URI - Service URI.\n * @property {String} server - Service server language.\n */\n\n/**\n * @classdesc\n * Class representing a serviceProvider. A serviceProvider is a class containing\n * an arbitrary number of services with the correspondent path.\n */\nexport default class ServiceProvider {\n /**\n * Returns Service Provider listeners.\n * @type {Listeners}\n */\n static get listeners() {\n return ServiceProvider._listeners;\n }\n\n /**\n * Adds a {@link Listener} instance to {@link ServiceProvider} class.\n * @param {Listener} listener - Instance of {@link Listener}.\n */\n static addListener(listener) {\n ServiceProvider.listeners.add(listener);\n }\n\n /**\n * Fires events in Service Provider.\n * @param {String} eventName - Event name.\n * @param {Event} event - Event object.\n */\n static fireEvent(eventName, event) {\n ServiceProvider.listeners.fire(eventName, event);\n }\n\n /**\n * Service parameters.\n * @type {ServiceProviderProperties}\n *\n */\n static get parameters() {\n return ServiceProvider._parameters;\n }\n\n /**\n * Service parameters.\n * @private\n * @type {ServiceProviderProperties}\n */\n static set parameters(parameters) {\n ServiceProvider._parameters = parameters;\n }\n\n /**\n * Static property.\n * Return service provider paths.\n * @private\n * @type {String}\n */\n static get servicePaths() {\n return ServiceProvider._servicePaths;\n }\n\n /**\n * Static property setter.\n * Set service paths.\n * @param {String} value - The property value.\n * @ignore\n */\n static set servicePaths(value) {\n ServiceProvider._servicePaths = value;\n }\n\n /**\n * Adds a new service to the ServiceProvider.\n * @param {String} service - Service name.\n * @param {String} path - Service path.\n * @static\n */\n static setServicePath(service, path) {\n ServiceProvider.servicePaths[service] = path;\n }\n\n /**\n * Returns the service path for a certain service.\n * @param {String} serviceName - Service name.\n * @returns {String} The service path.\n * @static\n */\n static getServicePath(serviceName) {\n return ServiceProvider.servicePaths[serviceName];\n }\n\n /**\n * Static property.\n * Service provider integration path.\n * @type {String}\n */\n static get integrationPath() {\n return ServiceProvider._integrationPath;\n }\n\n /**\n * Static property setter.\n * Set service provider integration path.\n * @param {String} value - The property value.\n * @ignore\n */\n static set integrationPath(value) {\n ServiceProvider._integrationPath = value;\n }\n\n /**\n * Returns the server URL in the form protocol://serverName:serverPort.\n * @return {String} The client side server path.\n */\n static getServerURL() {\n const url = window.location.href;\n const arr = url.split(\"/\");\n const result = `${arr[0]}//${arr[2]}`;\n return result;\n }\n\n /**\n * Inits {@link this} class. Uses {@link this.integrationPath} as\n * base path to generate all backend services paths.\n * @param {Object} parameters - Function parameters.\n * @param {String} parameters.integrationPath - Service path.\n */\n static init(parameters) {\n ServiceProvider.parameters = parameters;\n // Services path (tech dependant).\n let configurationURI = ServiceProvider.createServiceURI(\"configurationjs\");\n let createImageURI = ServiceProvider.createServiceURI(\"createimage\");\n let showImageURI = ServiceProvider.createServiceURI(\"showimage\");\n let getMathMLURI = ServiceProvider.createServiceURI(\"getmathml\");\n let serviceURI = ServiceProvider.createServiceURI(\"service\");\n\n // Some backend integrations (like Java o Ruby) have an absolute backend path,\n // for example: /app/service. For them we calculate the absolute URL path, i.e\n // protocol://domain:port/app/service\n if (ServiceProvider.parameters.URI.indexOf(\"/\") === 0) {\n const serverPath = ServiceProvider.getServerURL();\n configurationURI = serverPath + configurationURI;\n showImageURI = serverPath + showImageURI;\n createImageURI = serverPath + createImageURI;\n getMathMLURI = serverPath + getMathMLURI;\n serviceURI = serverPath + serviceURI;\n }\n\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n ServiceProvider.setServicePath(\"showimage\", showImageURI);\n ServiceProvider.setServicePath(\"createimage\", createImageURI);\n ServiceProvider.setServicePath(\"service\", serviceURI);\n ServiceProvider.setServicePath(\"getmathml\", getMathMLURI);\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n\n ServiceProvider.listeners.fire(\"onInit\", {});\n }\n\n /**\n * Gets the content from an URL.\n * @param {String} url - Target URL.\n * @param {Object} [postVariables] - Object containing post variables.\n * null if a GET query should be done.\n * @returns {String} Content of the target URL.\n * @private\n * @static\n */\n static getUrl(url, postVariables) {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n const httpRequest = Util.createHttpRequest();\n\n if (httpRequest) {\n if (typeof postVariables === \"undefined\" || typeof postVariables === \"undefined\") {\n httpRequest.open(\"GET\", url, false);\n } else if (url.substr(0, 1) === \"/\" || url.substr(0, 7) === \"http://\" || url.substr(0, 8) === \"https://\") {\n httpRequest.open(\"POST\", url, false);\n } else {\n httpRequest.open(\"POST\", currentPath + url, false);\n }\n\n let header = Configuration.get(\"customHeaders\");\n if (header) {\n if (typeof header === \"string\") {\n header = Util.convertStringToObject(header);\n }\n Object.entries(header).forEach(([key, val]) => httpRequest.setRequestHeader(key, val));\n }\n\n if (typeof postVariables !== \"undefined\" && postVariables) {\n httpRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n httpRequest.send(Util.httpBuildQuery(postVariables));\n } else {\n httpRequest.send(null);\n }\n\n return httpRequest.responseText;\n }\n return \"\";\n }\n\n /**\n * Returns the response text of a certain service.\n * @param {String} service - Service name.\n * @param {String} postVariables - Post variables.\n * @param {Boolean} get - True if the request is GET instead of POST. false otherwise.\n * @returns {String} Service response text.\n */\n static getService(service, postVariables, get) {\n let response;\n if (get === true) {\n const getVariables = postVariables ? `?${postVariables}` : \"\";\n const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`;\n response = ServiceProvider.getUrl(serviceUrl);\n } else {\n const serviceUrl = ServiceProvider.getServicePath(service);\n response = ServiceProvider.getUrl(serviceUrl, postVariables);\n }\n return response;\n }\n\n /**\n * Returns the server language of a certain service. The possible values\n * are: php, aspx, java and ruby.\n * This method has backward compatibility purposes.\n * @param {String} service - The configuration service.\n * @returns {String} - The server technology associated with the configuration service.\n */\n static getServerLanguageFromService(service) {\n if (service.indexOf(\".php\") !== -1) {\n return \"php\";\n }\n if (service.indexOf(\".aspx\") !== -1) {\n return \"aspx\";\n }\n if (service.indexOf(\"wirispluginengine\") !== -1) {\n return \"ruby\";\n }\n return \"java\";\n }\n\n /**\n * Returns the URI associated with a certain service.\n * @param {String} service - The service name.\n * @return {String} The service path.\n */\n static createServiceURI(service) {\n const extension = ServiceProvider.serverExtension();\n return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension;\n }\n\n static serverExtension() {\n if (ServiceProvider.parameters.server.indexOf(\"php\") !== -1) {\n return \".php\";\n }\n if (ServiceProvider.parameters.server.indexOf(\"aspx\") !== -1) {\n return \".aspx\";\n }\n return \"\";\n }\n}\n\n/**\n * @property {String} service - The service name.\n * @property {String} path - The service path.\n * @static\n */\nServiceProvider._servicePaths = {};\n\n/**\n * The integration path. Contains the path of the configuration service.\n * Used to define the path for all services.\n * @type {String}\n * @private\n */\nServiceProvider._integrationPath = \"\";\n\n/**\n * ServiceProvider static listeners.\n * @type {Listeners}\n * @private\n */\nServiceProvider._listeners = new Listeners();\n\n/**\n * Service provider parameters.\n * @type {ServiceProviderParameters}\n */\nServiceProvider._parameters = {};\n","import TextCache from \"./textcache\";\nimport MathML from \"./mathml\";\nimport ServiceProvider from \"./serviceprovider\";\nimport Constants from \"./constants\";\nimport Util from \"./util\";\n\n/**\n * @classdesc\n * This class represents a LaTeX parser. Manages the services which allows to convert\n * LaTeX into MathML and MathML into LaTeX.\n */\nexport default class Latex {\n /**\n * Static property.\n * Return latex cache.\n * @private\n * @type {Cache}\n */\n static get cache() {\n return Latex._cache;\n }\n\n /**\n * Static property setter.\n * Set latex cache.\n * @param {Cache} value - The property value.\n * @ignore\n */\n static set cache(value) {\n Latex._cache = value;\n }\n\n /**\n * Converts MathML to LaTeX by calling mathml2latex service. For text services\n * we call a text service with the param mathml2latex.\n * @param {String} mathml - MathML String.\n * @return {String} LaTeX string generated by the MathML argument.\n */\n static getLatexFromMathML(mathml) {\n const mathmlWithoutSemantics = MathML.removeSemantics(mathml);\n /**\n * @type {TextCache}\n */\n const { cache } = Latex;\n\n const data = {\n service: \"mathml2latex\",\n mml: mathmlWithoutSemantics,\n };\n\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n\n // TODO: Error handling.\n let latex = \"\";\n\n if (jsonResponse.status === \"ok\") {\n latex = jsonResponse.result.text;\n const latexHtmlEntitiesEncoded = Util.htmlEntities(latex);\n // Inserting LaTeX semantics.\n const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, \"LaTeX\");\n cache.populate(latex, mathmlWithSemantics);\n }\n\n return latex;\n }\n\n /**\n * Converts LaTeX to MathML by calling latex2mathml service. For text services\n * we call a text service with the param latex2mathml.\n * @param {String} latex - String containing a LaTeX formula.\n * @param {Boolean} includeLatexOnSemantics\n * - If true LaTeX would me included into MathML semantics.\n * @return {String} MathML string generated by the LaTeX argument.\n */\n static getMathMLFromLatex(latex, includeLatexOnSemantics) {\n /**\n * @type {TextCache}\n */\n const latexCache = Latex.cache;\n\n if (Latex.cache.get(latex)) {\n return Latex.cache.get(latex);\n }\n const data = {\n service: \"latex2mathml\",\n latex,\n };\n\n if (includeLatexOnSemantics) {\n data.saveLatex = \"\";\n }\n\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n\n let output;\n if (jsonResponse.status === \"ok\") {\n let mathml = jsonResponse.result.text;\n mathml = mathml.split(\"\\r\").join(\"\").split(\"\\n\").join(\" \");\n\n // Populate LatexCache.\n if (mathml.indexOf(\"semantics\") === -1 && mathml.indexOf(\"annotation\") === -1) {\n const content = Util.htmlEntities(latex);\n mathml = MathML.addAnnotation(mathml, content, \"LaTeX\");\n output = mathml;\n } else {\n output = mathml;\n }\n if (!latexCache.get(latex)) {\n latexCache.populate(latex, mathml);\n }\n } else {\n output = `$$${latex}$$`;\n }\n return output;\n }\n\n /**\n * Converts all occurrences of MathML code to LaTeX.\n * The MathML code should containing to be converted.\n * @param {String} content - A string containing MathML valid code.\n * @param {Object} characters - An object containing special characters.\n * @return {String} A string containing all MathML annotated occurrences\n * replaced by the corresponding LaTeX code.\n */\n static parseMathmlToLatex(content, characters) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`;\n const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n let mathml;\n let startAnnotation;\n let closeAnnotation;\n\n while (start !== -1) {\n output += content.substring(end, start);\n end = content.indexOf(mathTagEnd, start);\n\n if (end === -1) {\n end = content.length - 1;\n } else {\n end += mathTagEnd.length;\n }\n\n mathml = content.substring(start, end);\n\n startAnnotation = mathml.indexOf(openTarget);\n if (startAnnotation !== -1) {\n startAnnotation += openTarget.length;\n closeAnnotation = mathml.indexOf(closeTarget);\n let latex = mathml.substring(startAnnotation, closeAnnotation);\n if (characters === Constants.safeXmlCharacters) {\n latex = MathML.safeXmlDecode(latex);\n }\n output += `$$${latex}$$`;\n // Populate latex into cache.\n\n Latex.cache.populate(latex, mathml);\n } else {\n output += mathml;\n }\n start = content.indexOf(mathTagBegin, end);\n }\n\n output += content.substring(end, content.length);\n return output;\n }\n\n /**\n * Extracts the latex of a determined position in a text.\n * @param {Node} textNode - textNode to extract the LaTeX\n * @param {Number} caretPosition - Starting position to find LaTeX.\n * @param {Object} latexTags - Optional parameter representing tags between latex is inserted.\n * It has the 'open' attribute for the open tag and the 'close' attribute for the close tag.\n * \"$$\" by default.\n * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found.\n * @static\n */\n static getLatexFromTextNode(textNode, caretPosition, latexTags) {\n // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument).\n // Tags used for LaTeX formulas.\n const defaultLatexTags = {\n open: \"$$\",\n close: \"$$\",\n };\n // latexTags is an optional parameter. If is not set, use default latexTags.\n if (typeof latexTags === \"undefined\" || latexTags == null) {\n latexTags = defaultLatexTags;\n }\n // Looking for the first textNode.\n let startNode = textNode;\n\n while (startNode.previousSibling && startNode.previousSibling.nodeType === 3) {\n // TEXT_NODE.\n startNode = startNode.previousSibling;\n }\n\n /**\n * Returns the next latex position and node from a specific node and position.\n * @param {Node} currentNode - Node where searching latex.\n * @param {Number} currentPosition - Current position inside the currentNode.\n * @param {Object} latexTagsToUse - Tags used at latex beginning and latex final.\n * \"$$\" by default.\n * @param {Boolean} tag - Tag containing the current search.\n * @returns {Object} Object containing the current node and the position.\n */\n function getNextLatexPosition(currentNode, currentPosition, tag) {\n let position = currentNode.nodeValue.indexOf(tag, currentPosition);\n\n while (position === -1) {\n currentNode = currentNode.nextSibling;\n\n if (!currentNode) {\n // TEXT_NODE.\n return null; // Not found.\n }\n\n position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1;\n }\n\n return {\n node: currentNode,\n position,\n };\n }\n\n /**\n * Determines if a node is previous, or not, to a second one.\n * @param {Node} node - Start node.\n * @param {Number} position - Start node position.\n * @param {Node} endNode - End node.\n * @param {Number} endPosition - End node position.\n * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise.\n */\n function isPrevious(node, position, endNode, endPosition) {\n if (node === endNode) {\n return position <= endPosition;\n }\n while (node && node !== endNode) {\n node = node.nextSibling;\n }\n\n return node === endNode;\n }\n\n let start;\n let end = {\n node: startNode,\n position: 0,\n };\n // Is supposed that open and close tags has the same length.\n const tagLength = latexTags.open.length;\n do {\n start = getNextLatexPosition(end.node, end.position, latexTags.open);\n\n if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) {\n return null;\n }\n\n end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close);\n\n if (end == null) {\n return null;\n }\n\n end.position += tagLength;\n } while (isPrevious(end.node, end.position, textNode, caretPosition));\n\n // Isolating latex.\n let latex;\n\n if (start.node === end.node) {\n latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength);\n } else {\n const index = start.position + tagLength;\n latex = start.node.nodeValue.substring(index, start.node.nodeValue.length);\n let currentNode = start.node;\n\n do {\n currentNode = currentNode.nextSibling;\n if (currentNode === end.node) {\n latex += end.node.nodeValue.substring(0, end.position - tagLength);\n } else {\n latex += currentNode.nodeValue ? currentNode.nodeValue : \"\";\n }\n } while (currentNode !== end.node);\n }\n\n return {\n latex,\n startNode: start.node,\n startPosition: start.position,\n endNode: end.node,\n endPosition: end.position,\n };\n }\n}\n\n/**\n * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string.\n * @type {Cache}\n * @static\n */\nLatex._cache = new TextCache();\n","import translations from \"../lang/strings.json\";\n/**\n * This class represents a string manager. It's used to load localized strings.\n */\nexport default class StringManager {\n constructor() {\n throw new Error(\"Static class StringManager can not be instantiated.\");\n }\n\n /**\n * Returns the associated value of certain string key. If the associated value\n * doesn't exits returns the original key.\n * @param {string} key - string key\n * @param {string} lang - DEFAULT = null. Specify the language to translate the string\n * @returns {string} correspondent value. If doesn't exists original key.\n */\n static get(key, lang) {\n // Default language definition\n let { language } = this;\n\n // If parameter language, use it\n if (lang) {\n language = lang;\n }\n\n // Cut down on strings. e.g. en_US -> en\n if (language && language.length > 2) {\n language = language.slice(0, 2);\n }\n\n // Check if we support the language\n if (!this.strings.hasOwnProperty(language)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown language ${language} set in StringManager.`);\n language = \"en\";\n }\n\n // Check if the key is supported in the given language\n if (!this.strings[language].hasOwnProperty(key)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown key ${key} for language ${language} in StringManager.`);\n return key;\n }\n\n return this.strings[language][key];\n }\n}\n\n/**\n * Dictionary of dictionaries:\n * Key: language code\n * Value: Key: id of the string\n * Value: translation of the string\n */\nStringManager.strings = translations;\n\n/**\n * Language of the translations; English by default\n */\nStringManager.language = \"en\";\n","/* eslint-disable no-bitwise */\nimport DOMPurify from \"dompurify\";\nimport MathML from \"./mathml\";\nimport Configuration from \"./configuration\";\nimport Latex from \"./latex\";\nimport StringManager from \"./stringmanager\";\n\n/**\n * This class represents an utility class.\n */\nexport default class Util {\n /**\n * Fires an event in a target.\n * @param {EventTarget} eventTarget - target where event should be fired.\n * @param {string} eventName event to fire.\n * @static\n */\n static fireEvent(eventTarget, eventName) {\n if (document.createEvent) {\n const eventObject = document.createEvent(\"HTMLEvents\");\n eventObject.initEvent(eventName, true, true);\n return !eventTarget.dispatchEvent(eventObject);\n }\n\n const eventObject = document.createEventObject();\n return eventTarget.fireEvent(`on${eventName}`, eventObject);\n }\n\n /**\n * Cross-browser addEventListener/attachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - callback function.\n * @static\n */\n static addEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.addEventListener) {\n eventTarget.addEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.attachEvent) {\n // Backwards compatibility.\n eventTarget.attachEvent(`on${eventName}`, callBackFunction);\n }\n }\n\n /**\n * Cross-browser removeEventListener/detachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - function to remove from the event target.\n * @static\n */\n static removeEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.removeEventListener) {\n eventTarget.removeEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.detachEvent) {\n eventTarget.detachEvent(`on${eventName}`, callBackFunction);\n }\n }\n\n /**\n * Adds the a callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @param {Function} doubleClickHandler - function to run when on dblclick event.\n * @param {Function} mousedownHandler - function to run when on mousedown event.\n * @param {Function} mouseupHandler - function to run when on mouseup event.\n * @static\n */\n static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) {\n if (doubleClickHandler) {\n this.callbackDblclick = (event) => {\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n doubleClickHandler(element, realEvent);\n };\n\n Util.addEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n }\n\n if (mousedownHandler) {\n this.callbackMousedown = (event) => {\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mousedownHandler(element, realEvent);\n };\n\n Util.addEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n }\n\n if (mouseupHandler) {\n this.callbackMouseup = (event) => {\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mouseupHandler(element, realEvent);\n };\n // Chrome doesn't trigger this event for eventTarget if we release the mouse button\n // while the mouse is outside the editor text field.\n // This is a workaround: we trigger the event independently of where the mouse\n // is when we release its button.\n Util.addEvent(document, \"mouseup\", this.callbackMouseup);\n Util.addEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n }\n\n /**\n * Remove all callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @static\n */\n static removeElementEvents(eventTarget) {\n Util.removeEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n Util.removeEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n Util.removeEvent(document, \"mouseup\", this.callbackMouseup);\n Util.removeEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n\n /**\n * Adds a class name to a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */\n static addClass(element, className) {\n if (!Util.containsClass(element, className)) {\n element.className += ` ${className}`;\n }\n }\n\n /**\n * Checks if a HTMLElement contains a certain class.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the className.\n * @returns {boolean} true if the HTMLElement contains the class name. false otherwise.\n * @static\n */\n static containsClass(element, className) {\n if (element == null || !(\"className\" in element)) {\n return false;\n }\n\n const currentClasses = element.className.split(\" \");\n\n for (let i = currentClasses.length - 1; i >= 0; i -= 1) {\n if (currentClasses[i] === className) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Remove a certain class for a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */\n static removeClass(element, className) {\n let newClassName = \"\";\n const classes = element.className.split(\" \");\n\n for (let i = 0; i < classes.length; i += 1) {\n if (classes[i] !== className) {\n newClassName += `${classes[i]} `;\n }\n }\n element.className = newClassName.trim();\n }\n\n /**\n * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's\n * used to parse old applets.\n * @param {string} text - string containing safeXml characters\n * @returns {string} a string with safeXml characters parsed.\n * @static\n */\n static convertOldXmlinitialtextAttribute(text) {\n // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x.\n // This could be removed in future.\n const val = \"value=\";\n\n const xitpos = text.indexOf(\"xmlinitialtext\");\n const valpos = text.indexOf(val, xitpos);\n const quote = text.charAt(valpos + val.length);\n const startquote = valpos + val.length + 1;\n const endquote = text.indexOf(quote, startquote);\n\n const value = text.substring(startquote, endquote);\n\n let newvalue = value.split(\"«\").join(\"§lt;\");\n newvalue = newvalue.split(\"»\").join(\"§gt;\");\n newvalue = newvalue.split(\"&\").join(\"§\");\n newvalue = newvalue.split(\"¨\").join(\"§quot;\");\n\n text = text.split(value).join(newvalue);\n return text;\n }\n\n /**\n * Convert a string representation of key-value pairs to an object.\n * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2'\n * @returns {Object} - Object containing the key-value pairs\n */\n static convertStringToObject(keyValueString) {\n if (!keyValueString || typeof keyValueString !== \"string\") {\n return {};\n }\n\n return keyValueString\n .split(\",\")\n .map((pair) => pair.trim().split(\"=\"))\n .reduce((resultObject, [key, value]) => {\n if (key && value) {\n resultObject[key] = value;\n }\n return resultObject;\n }, {});\n }\n\n /**\n * Cross-browser solution for creating new elements.\n * @param {string} tagName - tag name of the wished element.\n * @param {Object} attributes - an object where each key is a wished\n * attribute name and each value is its value.\n * @param {Object} [creator] - if supplied, this function will use\n * the \"createElement\" method from this param. Otherwise\n * document will be used as creator.\n * @returns {Element} The DOM element with the specified attributes assigned.\n * @static\n */\n static createElement(tagName, attributes, creator) {\n if (attributes === undefined) {\n attributes = {};\n }\n\n if (creator === undefined) {\n creator = document;\n }\n\n let element;\n\n /*\n * Internet Explorer fix:\n * If you create a new object dynamically, you can't set a non-standard attribute.\n * For example, you can't set the \"src\" attribute on an \"applet\" object.\n * Other browsers will throw an exception and will run the standard code.\n */\n try {\n let html = `<${tagName}`;\n\n Object.keys(attributes).forEach((attributeName) => {\n html += ` ${attributeName}=\"${Util.htmlEntities(attributes[attributeName])}\"`;\n });\n html += \">\";\n element = creator.createElement(html);\n } catch (e) {\n element = creator.createElement(tagName);\n Object.keys(attributes).forEach((attributeName) => {\n element.setAttribute(attributeName, attributes[attributeName]);\n });\n }\n return element;\n }\n\n /**\n * Creates new HTML from it's HTML code as string.\n * @param {string} objectCode - html code\n * @returns {Element} the HTML element.\n * @static\n */\n static createObject(objectCode, creator) {\n if (creator === undefined) {\n creator = document;\n }\n\n // Internet Explorer can't include \"param\" tag when is setting an innerHTML property.\n objectCode = objectCode\n .split(\"\").join(\"\").split(\"\").join(\"\");\n\n objectCode = objectCode\n .split(\"\").join(\"
\").split(\"\").join(\"
\");\n\n const container = Util.createElement(\"div\", {}, creator);\n container.innerHTML = objectCode;\n\n function recursiveParamsFix(object) {\n if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisParam\") {\n const attributesParsed = {};\n\n for (let i = 0; i < object.attributes.length; i += 1) {\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n\n const param = Util.createElement(\"param\", attributesParsed, creator);\n\n // IE fix.\n if (param.NAME) {\n param.name = param.NAME;\n param.value = param.VALUE;\n }\n\n param.removeAttribute(\"wirisObject\");\n object.parentNode.replaceChild(param, object);\n } else if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisApplet\") {\n const attributesParsed = {};\n\n for (let i = 0; i < object.attributes.length; i += 1) {\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n\n const applet = Util.createElement(\"applet\", attributesParsed, creator);\n applet.removeAttribute(\"wirisObject\");\n\n for (let i = 0; i < object.childNodes.length; i += 1) {\n recursiveParamsFix(object.childNodes[i]);\n\n if (object.childNodes[i].nodeName.toLowerCase() === \"param\") {\n applet.appendChild(object.childNodes[i]);\n i -= 1; // When we insert the object child into the applet, object loses one child.\n }\n }\n\n object.parentNode.replaceChild(applet, object);\n } else {\n for (let i = 0; i < object.childNodes.length; i += 1) {\n recursiveParamsFix(object.childNodes[i]);\n }\n }\n }\n\n recursiveParamsFix(container);\n return container.firstChild;\n }\n\n /**\n * Converts an Element to its HTML code.\n * @param {Element} element - entry element.\n * @return {string} the HTML code of the input element.\n * @static\n */\n static createObjectCode(element) {\n // In case that the image was not created, the object can be null or undefined.\n if (typeof element === \"undefined\" || element === null) {\n return null;\n }\n\n if (element.nodeType === 1) {\n // ELEMENT_NODE.\n let output = `<${element.tagName}`;\n\n for (let i = 0; i < element.attributes.length; i += 1) {\n if (element.attributes[i].specified) {\n output += ` ${element.attributes[i].name}=\"${Util.htmlEntities(element.attributes[i].value)}\"`;\n }\n }\n\n if (element.childNodes.length > 0) {\n output += \">\";\n\n for (let i = 0; i < element.childNodes.length; i += 1) {\n output += Util.createObject(element.childNodes[i]);\n }\n\n output += ``;\n } else if (element.nodeName === \"DIV\" || element.nodeName === \"SCRIPT\") {\n output += `>`;\n } else {\n output += \"/>\";\n }\n\n return output;\n }\n\n if (element.nodeType === 3) {\n // TEXT_NODE.\n return Util.htmlEntities(element.nodeValue);\n }\n\n return \"\";\n }\n\n /**\n * Concatenates two URL paths.\n * @param {string} path1 - first URL path\n * @param {string} path2 - second URL path\n * @returns {string} new URL.\n */\n static concatenateUrl(path1, path2) {\n let separator = \"\";\n if (path1.indexOf(\"/\") !== path1.length && path2.indexOf(\"/\") !== 0) {\n separator = \"/\";\n }\n return (path1 + separator + path2).replace(/([^:]\\/)\\/+/g, \"$1\");\n }\n\n /**\n * Parses a text and replaces all HTML special characters by their correspondent entities.\n * @param {string} input - text to be parsed.\n * @returns {string} the input text with all their special characters replaced by their entities.\n * @static\n */\n static htmlEntities(input) {\n return input.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\");\n }\n\n /**\n * Sanitize HTML to prevent XSS injections.\n * @param {string} html - html to be sanitize.\n * @returns {string} html sanitized.\n * @static\n */\n static htmlSanitize(html) {\n let annotationRegex = /\\/;\n // Get all the annotation content including the tags.\n let annotation = html.match(annotationRegex);\n // Sanitize html code without removing our supported MathML tags and attributes.\n html = DOMPurify.sanitize(html, {\n ADD_TAGS: [\"semantics\", \"annotation\", \"mstack\", \"msline\", \"msrow\", \"none\"],\n ADD_ATTR: [\"linebreak\", \"charalign\", \"stackalign\"],\n });\n // Readd old annotation content.\n return html.replace(annotationRegex, annotation);\n }\n\n /**\n * Parses a text and replaces all the HTML entities by their characters.\n * @param {string} input - text to be parsed\n * @returns {string} the input text with all their entities replaced by characters.\n * @static\n */\n static htmlEntitiesDecode(input) {\n // Textarea element decodes when inner html is set.\n const textarea = document.createElement(\"textarea\");\n textarea.innerHTML = input;\n return textarea.value;\n }\n\n /**\n * Returns a cross-browser http request.\n * @return {object} httpRequest request object.\n * @returns {XMLHttpRequest|ActiveXObject} the proper request object.\n */\n static createHttpRequest() {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n if (currentPath.substr(0, 7) === \"file://\") {\n throw StringManager.get(\"exception_cross_site\");\n }\n\n if (typeof XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n }\n\n try {\n return new ActiveXObject(\"Msxml2.XMLHTTP\");\n } catch (e) {\n try {\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (oc) {\n return null;\n }\n }\n }\n\n /**\n * Converts a hash to a HTTP query.\n * @param {Object[]} properties - a key/value object.\n * @returns {string} a HTTP query containing all the key value pairs with\n * all the special characters replaced by their entities.\n * @static\n */\n static httpBuildQuery(properties) {\n let result = \"\";\n\n Object.keys(properties).forEach((i) => {\n if (properties[i] != null) {\n result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`;\n }\n });\n\n // Deleting last '&' empty character.\n if (result.substring(result.length - 1) === \"&\") {\n result = result.substring(0, result.length - 1);\n }\n\n return result;\n }\n\n /**\n * Convert a hash to string sorting keys to get a deterministic output\n * @param {Object[]} hash - a key/value object.\n * @returns {string} a string with the form key1=value1...keyn=valuen\n * @static\n */\n static propertiesToString(hash) {\n // 1. Sort keys. We sort the keys because we want a deterministic output.\n const keys = [];\n Object.keys(hash).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(hash, key)) {\n keys.push(key);\n }\n });\n\n const n = keys.length;\n for (let i = 0; i < n; i += 1) {\n for (let j = i + 1; j < n; j += 1) {\n const s1 = keys[i];\n const s2 = keys[j];\n if (Util.compareStrings(s1, s2) > 0) {\n // Swap.\n keys[i] = s2;\n keys[j] = s1;\n }\n }\n }\n\n // 2. Generate output.\n let output = \"\";\n for (let i = 0; i < n; i += 1) {\n const key = keys[i];\n output += key;\n output += \"=\";\n let value = hash[key];\n value = value.replace(\"\\\\\", \"\\\\\\\\\");\n value = value.replace(\"\\n\", \"\\\\n\");\n value = value.replace(\"\\r\", \"\\\\r\");\n value = value.replace(\"\\t\", \"\\\\t\");\n\n output += value;\n output += \"\\n\";\n }\n return output;\n }\n\n /**\n * Compare two strings using charCodeAt method\n * @param {string} a - first string to compare.\n * @param {string} b - second string to compare.\n * @returns {number} the difference between a and b\n * @static\n */\n static compareStrings(a, b) {\n let i;\n const an = a.length;\n const bn = b.length;\n const n = an > bn ? bn : an;\n for (i = 0; i < n; i += 1) {\n const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i);\n if (c !== 0) {\n return c;\n }\n }\n return a.length - b.length;\n }\n\n /**\n * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters.\n * @param {string} string - input string\n * @param {number} idx - an integer greater than or equal to 0\n * and less than the length of the string\n * @returns {number} an integer representing the UTF-16 code of the string at the given index.\n * @static\n */\n static fixedCharCodeAt(string, idx) {\n idx = idx || 0;\n const code = string.charCodeAt(idx);\n let hi;\n let low;\n\n /* High surrogate (could change last hex to 0xDB7F to treat high\n private surrogates as single characters) */\n\n if (code >= 0xd800 && code <= 0xdbff) {\n hi = code;\n low = string.charCodeAt(idx + 1);\n if (Number.isNaN(low)) {\n throw StringManager.get(\"exception_high_surrogate\");\n }\n return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000;\n }\n\n if (code >= 0xdc00 && code <= 0xdfff) {\n // Low surrogate.\n /* We return false to allow loops to skip this iteration since should have\n already handled high surrogate above in the previous iteration. */\n return false;\n }\n return code;\n }\n\n /**\n * Returns an URL with it's query params converted into array.\n * @param {string} url - input URL.\n * @returns {Object[]} an array containing all URL query params.\n * @static\n */\n static urlToAssArray(url) {\n let i;\n i = url.indexOf(\"?\");\n if (i > 0) {\n const query = url.substring(i + 1);\n const ss = query.split(\"&\");\n const h = {};\n for (i = 0; i < ss.length; i += 1) {\n const s = ss[i];\n const kv = s.split(\"=\");\n if (kv.length > 1) {\n h[kv[0]] = decodeURIComponent(kv[1].replace(/\\+/g, \" \"));\n }\n }\n return h;\n }\n return {};\n }\n\n /**\n * Returns an encoded URL by replacing each instance of certain characters by\n * one, two, three or four escape sequences using encodeURIComponent method.\n * !'()* . will not be encoded.\n *\n * @param {string} clearString - URL string to be encoded\n * @returns {string} URL with it's special characters replaced.\n * @static\n */\n static urlEncode(clearString) {\n let output = \"\";\n // Method encodeURIComponent doesn't encode !'()*~ .\n output = encodeURIComponent(clearString);\n return output;\n }\n\n // TODO: To parser?\n /**\n * Converts the HTML of a image into the output code that WIRIS must return.\n * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula)\n * or the Wiriscas attribute of a WIRIS applet.\n * @param {string} imgCode - the html code from a formula or a CAS image.\n * @param {boolean} convertToXml - true if the image should be converted to XML.\n * @param {boolean} convertToSafeXml - true if the image should be converted to safeXML.\n * @returns {string} the XML or safeXML of a WIRIS image.\n * @static\n */\n static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) {\n const imgObject = Util.createObject(imgCode);\n if (imgObject) {\n if (\n imgObject.className === Configuration.get(\"imageClassName\") ||\n imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"))\n ) {\n if (!convertToXml) {\n return imgCode;\n }\n\n const dataMathML = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n // To handle annotations, first we need the MathML in XML.\n let mathML = MathML.safeXmlDecode(dataMathML);\n\n if (!Configuration.get(\"saveHandTraces\")) {\n mathML = MathML.removeAnnotation(mathML, \"application/json\");\n }\n\n if (mathML == null) {\n mathML = imgObject.getAttribute(\"alt\");\n }\n\n if (convertToSafeXml) {\n const safeMathML = MathML.safeXmlEncode(mathML);\n return safeMathML;\n }\n\n return mathML;\n }\n }\n return imgCode;\n }\n\n /**\n * Gets the node length in characters.\n * @param {Node} node - HTML node.\n * @returns {number} node length.\n * @static\n */\n static getNodeLength(node) {\n const staticNodeLengths = {\n IMG: 1,\n BR: 1,\n };\n\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return node.nodeValue.length;\n }\n\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n let length = staticNodeLengths[node.nodeName.toUpperCase()];\n\n if (length === undefined) {\n length = 0;\n }\n\n for (let i = 0; i < node.childNodes.length; i += 1) {\n length += Util.getNodeLength(node.childNodes[i]);\n }\n return length;\n }\n return 0;\n }\n\n /**\n * Gets a selected node or text from an editable HTMLElement.\n * If the caret is on a text node, concatenates it with all the previous and next text nodes.\n * @param {HTMLElement} target - the editable HTMLElement.\n * @param {boolean} isIframe - specifies if the target is an iframe or not\n * @param {boolean} forceGetSelection - if true, ignores IE system to get\n * the current selection and uses window.getSelection()\n * @returns {object} an object with the 'node' key set if the item is an\n * element or the keys 'node' and 'caretPosition' if the element is text.\n * @static\n */\n static getSelectedItem(target, isIframe, forceGetSelection) {\n let windowTarget;\n\n if (isIframe) {\n windowTarget = target.contentWindow;\n windowTarget.focus();\n } else {\n windowTarget = window;\n target.focus();\n }\n\n if (document.selection && !forceGetSelection) {\n const range = windowTarget.document.selection.createRange();\n\n if (range.parentElement) {\n if (range.htmlText.length > 0) {\n if (range.text.length === 0) {\n return Util.getSelectedItem(target, isIframe, true);\n }\n\n return null;\n }\n\n windowTarget.document.execCommand(\"InsertImage\", false, \"#\");\n let temporalObject = range.parentElement();\n\n if (temporalObject.nodeName.toUpperCase() !== \"IMG\") {\n // IE9 fix: parentElement() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML('');\n temporalObject = windowTarget.document.getElementById(\"wrs_openEditorWindow_temporalObject\");\n }\n\n let node;\n let caretPosition;\n\n if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) {\n // TEXT_NODE.\n node = temporalObject.nextSibling;\n caretPosition = 0;\n } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) {\n node = temporalObject.previousSibling;\n caretPosition = node.nodeValue.length;\n } else {\n node = windowTarget.document.createTextNode(\"\");\n temporalObject.parentNode.insertBefore(node, temporalObject);\n caretPosition = 0;\n }\n\n temporalObject.parentNode.removeChild(temporalObject);\n\n return {\n node,\n caretPosition,\n };\n }\n\n if (range.length > 1) {\n return null;\n }\n\n return {\n node: range.item(0),\n };\n }\n\n if (windowTarget.getSelection) {\n let range;\n const selection = windowTarget.getSelection();\n\n try {\n range = selection.getRangeAt(0);\n } catch (e) {\n range = windowTarget.document.createRange();\n }\n\n const node = range.startContainer;\n\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return {\n node,\n caretPosition: range.startOffset,\n };\n }\n\n if (node !== range.endContainer) {\n return null;\n }\n\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n const position = range.startOffset;\n\n if (node.childNodes[position]) {\n // In case that a formula is detected but not selected,\n // we create an empty span where we could insert the new formula.\n if (range.startOffset === range.endOffset) {\n if (\n position !== 0 &&\n node.childNodes[position - 1].localName === \"span\" &&\n node.childNodes[position].classList?.contains(\"Wirisformula\")\n ) {\n node.childNodes[position - 1].remove();\n return Util.getSelectedItem(target, isIframe, forceGetSelection);\n } else if (node.childNodes[position].classList?.contains(\"Wirisformula\")) {\n if (\n (position > 0 && node.childNodes[position - 1].classList?.contains(\"Wirisformula\")) ||\n position === 0\n ) {\n var emptySpan = document.createElement(\"span\");\n node.insertBefore(emptySpan, node.childNodes[position]);\n return {\n node: node.childNodes[position],\n };\n }\n }\n }\n return {\n node: node.childNodes[position],\n };\n }\n }\n }\n\n return null;\n }\n\n /**\n * Returns null if there isn't any item or if it is malformed.\n * Otherwise returns an object containing the node with the MathML image\n * and the cursor position inside the textarea.\n * @param {HTMLTextAreaElement} textarea - textarea element.\n * @returns {Object} An object containing the node, the index of the\n * beginning of the selected text, caret position and the start and end position of the\n * text node.\n * @static\n */\n static getSelectedItemOnTextarea(textarea) {\n const textNode = document.createTextNode(textarea.value);\n const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart);\n if (textNodeValues === null) {\n return null;\n }\n\n return {\n node: textNode,\n caretPosition: textarea.selectionStart,\n startPosition: textNodeValues.startPosition,\n endPosition: textNodeValues.endPosition,\n };\n }\n\n /**\n * Looks for elements that match the given name in a HTML code string.\n * Important: this function is very concrete for WIRIS code.\n * It takes as preconditions lots of behaviors that are not the general case.\n * @param {string} code - HTML code.\n * @param {string} name - element name.\n * @param {boolean} autoClosed - true if the elements are autoClosed.\n * @return {Object[]} an object containing all HTML elements of code matching the name argument.\n * @static\n */\n static getElementsByNameFromString(code, name, autoClosed) {\n const elements = [];\n code = code.toLowerCase();\n name = name.toLowerCase();\n let start = code.indexOf(`<${name} `);\n\n while (start !== -1) {\n // Look for nodes.\n let endString;\n\n if (autoClosed) {\n endString = \">\";\n } else {\n endString = ``;\n }\n\n let end = code.indexOf(endString, start);\n\n if (end !== -1) {\n end += endString.length;\n elements.push({\n start,\n end,\n });\n } else {\n end = start + 1;\n }\n\n start = code.indexOf(`<${name} `, end);\n }\n\n return elements;\n }\n\n /**\n * Returns the numeric value of a base64 character.\n * @param {string} character - base64 character.\n * @returns {number} base64 character numeric value.\n * @static\n */\n static decode64(character) {\n const PLUS = \"+\".charCodeAt(0);\n const SLASH = \"/\".charCodeAt(0);\n const NUMBER = \"0\".charCodeAt(0);\n const LOWER = \"a\".charCodeAt(0);\n const UPPER = \"A\".charCodeAt(0);\n const PLUS_URL_SAFE = \"-\".charCodeAt(0);\n const SLASH_URL_SAFE = \"_\".charCodeAt(0);\n const code = character.charCodeAt(0);\n\n if (code === PLUS || code === PLUS_URL_SAFE) {\n return 62; // Char '+'.\n }\n if (code === SLASH || code === SLASH_URL_SAFE) {\n return 63; // Char '/'.\n }\n if (code < NUMBER) {\n return -1; // No match.\n }\n if (code < NUMBER + 10) {\n return code - NUMBER + 26 + 26;\n }\n if (code < UPPER + 26) {\n return code - UPPER;\n }\n if (code < LOWER + 26) {\n return code - LOWER + 26;\n }\n\n return null;\n }\n\n /**\n * Converts a base64 string to a array of bytes.\n * @param {string} b64String - base64 string.\n * @param {number} length - dimension of byte array (by default whole string).\n * @return {Object[]} the resultant byte array.\n * @static\n */\n static b64ToByteArray(b64String, length) {\n let tmp;\n\n if (b64String.length % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\"); // Tipped base64. Length is fixed.\n }\n\n const arr = [];\n\n let l;\n let placeHolders;\n if (!length) {\n // All b64String string.\n if (b64String.charAt(b64String.length - 2) === \"=\") {\n placeHolders = 2;\n } else if (b64String.charAt(b64String.length - 1) === \"=\") {\n placeHolders = 1;\n } else {\n placeHolders = 0;\n }\n l = placeHolders > 0 ? b64String.length - 4 : b64String.length;\n } else {\n l = length;\n }\n\n let i;\n for (i = 0; i < l; i += 4) {\n // Ignoring code checker standards (bitewise operators).\n // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information.\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp =\n (Util.decode64(b64String.charAt(i)) << 18) |\n (Util.decode64(b64String.charAt(i + 1)) << 12) |\n (Util.decode64(b64String.charAt(i + 2)) << 6) |\n Util.decode64(b64String.charAt(i + 3));\n\n arr.push((tmp >> 16) & 0xff);\n arr.push((tmp >> 8) & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n\n if (placeHolders) {\n if (placeHolders === 2) {\n // Ignoring code checker standards (bitewise operators).\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp = (Util.decode64(b64String.charAt(i)) << 2) | (Util.decode64(b64String.charAt(i + 1)) >> 4);\n arr.push(tmp & 0xff);\n } else if (placeHolders === 1) {\n // eslint-disable-next-line max-len\n tmp =\n (Util.decode64(b64String.charAt(i)) << 10) |\n (Util.decode64(b64String.charAt(i + 1)) << 4) |\n (Util.decode64(b64String.charAt(i + 2)) >> 2);\n arr.push((tmp >> 8) & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n }\n return arr;\n }\n\n /**\n * Returns the first 32-bit signed integer from a byte array.\n * @param {Object[]} bytes - array of bytes.\n * @returns {number} the 32-bit signed integer.\n * @static\n */\n static readInt32(bytes) {\n if (bytes.length < 4) {\n return false;\n }\n const int32 = bytes.splice(0, 4);\n // @codingStandardsIgnoreStart¡\n return (int32[0] << 24) | (int32[1] << 16) | (int32[2] << 8) | (int32[3] << 0);\n // @codingStandardsIgnoreEnd\n }\n\n /**\n * Read the first byte from a byte array.\n * @param {Object} bytes - input byte array.\n * @returns {number} first byte of the byte array.\n * @static\n */\n static readByte(bytes) {\n // @codingStandardsIgnoreStart\n return bytes.shift() << 0;\n // @codingStandardsIgnoreEnd\n }\n\n /**\n * Read an arbitrary number of bytes, from a fixed position on a byte array.\n * @param {Object[]} bytes - byte array.\n * @param {number} pos - start position.\n * @param {number} len - number of bytes to read.\n * @returns {Object[]} the byte array.\n * @static\n */\n static readBytes(bytes, pos, len) {\n return bytes.splice(pos, len);\n }\n\n /**\n * Inserts or modifies formulas or CAS on a textarea.\n * @param {HTMLTextAreaElement} textarea - textarea target.\n * @param {string} text - text to add in the textarea. For example, to add the link to the image,\n * call this function as (textarea, Parser.createImageSrc(mathml));\n * @static\n */\n static updateTextArea(textarea, text) {\n if (textarea && text) {\n textarea.focus();\n\n if (textarea.selectionStart != null) {\n const { selectionEnd } = textarea;\n const selectionStart = textarea.value.substring(0, textarea.selectionStart);\n const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length);\n textarea.value = selectionStart + text + selectionEndSub;\n textarea.selectionEnd = selectionEnd + text.length;\n } else {\n const selection = document.selection.createRange();\n selection.text = text;\n }\n }\n }\n\n /**\n * Modifies existing formula on a textarea.\n * @param {HTMLTextAreaElement} textarea - text area target.\n * @param {string} text - text to add in the textarea. For example, if you want to add the link\n * to the image,you can call this function as\n * Util.updateTextarea(textarea, Parser.createImageSrc(mathml));\n * @param {number} start - beginning index from textarea where it needs to be replaced by text.\n * @param {number} end - ending index from textarea where it needs to be replaced by text\n * @static\n */\n static updateExistingTextOnTextarea(textarea, text, start, end) {\n textarea.focus();\n const textareaStart = textarea.value.substring(0, start);\n textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length);\n textarea.selectionEnd = start + text.length;\n }\n\n /**\n * Add a parameter with it's correspondent value to an URL (GET).\n * @param {string} path - URL path\n * @param {string} parameter - parameter\n * @param {string} value - value\n * @static\n */\n static addArgument(path, parameter, value) {\n let sep;\n if (path.indexOf(\"?\") > 0) {\n sep = \"&\";\n } else {\n sep = \"?\";\n }\n return `${path + sep + parameter}=${value}`;\n }\n}\n","import Configuration from \"./configuration\";\nimport Util from \"./util\";\n\n/**\n * @classdesc\n * This class represents MathType Image class. Contains all the logic related\n * to MathType images manipulation.\n * All MathType images are generated using the appropriate MathType\n * integration service: showimage or createimage.\n *\n * There are two available image formats:\n * - svg (default)\n * - png\n *\n * There are two formats for the image src attribute:\n * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64.\n * - A link to the showimage service.\n */\nexport default class Image {\n /**\n * Removes data attributes from an image.\n * @param {HTMLImageElement} img - Image where remove data attributes.\n */\n static removeImgDataAttributes(img) {\n const attributesToRemove = [];\n const { attributes } = img;\n\n Object.keys(attributes).forEach((key) => {\n const attribute = attributes[key];\n if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf(\"data-\") === 0) {\n // Is preferred keep an array and remove after the search\n // because when attribute is removed the array of attributes\n // is modified.\n attributesToRemove.push(attribute.name);\n }\n });\n\n attributesToRemove.forEach((attribute) => {\n img.removeAttribute(attribute);\n });\n }\n\n /**\n * @static\n * Clones all MathType image attributes from a HTMLImageElement to another.\n * @param {HTMLImageElement} originImg - The original image.\n * @param {HTMLImageElement} destImg - The destination image.\n */\n static clone(originImg, destImg) {\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (!originImg.hasAttribute(customEditorAttributeName)) {\n destImg.removeAttribute(customEditorAttributeName);\n }\n\n const mathmlAttributeName = Configuration.get(\"imageMathmlAttribute\");\n const imgAttributes = [\n mathmlAttributeName,\n customEditorAttributeName,\n \"alt\",\n \"height\",\n \"width\",\n \"style\",\n \"src\",\n \"role\",\n ];\n\n imgAttributes.forEach((iterator) => {\n const originAttribute = originImg.getAttribute(iterator);\n if (originAttribute) {\n destImg.setAttribute(iterator, originAttribute);\n }\n });\n }\n\n /**\n * Determines whether an img src contains an SVG.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src contains an SVG, false otherwise\n */\n static isSvg(img) {\n return img.src.startsWith(\"data:image/svg+xml;\");\n }\n\n /**\n * Determines whether an img src is encoded in base64 or not.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src is encoded in base64, false otherwise\n */\n static isBase64(img) {\n return img.src.startsWith(\"data:image/svg+xml;base64,\") || img.src.startsWith(\"data:image/png;base64,\");\n }\n\n /**\n * Calculates the metrics of a MathType image given the the service response and the image format.\n * @param {HTMLImageElement} img - The HTMLImageElement.\n * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL.\n * @param {Boolean} jsonResponse - True the response of the image service is a\n * JSON object. False otherwise.\n */\n static setImgSize(img, uri, jsonResponse) {\n let ar;\n let base64String;\n let bytes;\n let svgString;\n if (jsonResponse) {\n // Cleaning data:image/png;base64.\n if (Image.isSvg(img)) {\n // SVG format.\n // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string.\n if (!Image.isBase64(img)) {\n ar = Image.getMetricsFromSvgString(uri);\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n svgString = \"\";\n bytes = Util.b64ToByteArray(base64String, base64String.length);\n for (let i = 0; i < bytes.length; i += 1) {\n svgString += String.fromCharCode(bytes[i]);\n }\n ar = Image.getMetricsFromSvgString(svgString);\n }\n // PNG format: we store all metrics information in the first 88 bytes.\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n bytes = Util.b64ToByteArray(base64String, 88);\n ar = Image.getMetricsFromBytes(bytes);\n }\n // Backwards compatibility: we store the metrics into createimage response.\n } else {\n ar = Util.urlToAssArray(uri);\n }\n let width = ar.cw;\n if (!width) {\n return;\n }\n let height = ar.ch;\n let baseline = ar.cb;\n const { dpi } = ar;\n if (dpi) {\n width = (width * 96) / dpi;\n height = (height * 96) / dpi;\n baseline = (baseline * 96) / dpi;\n }\n img.width = width;\n img.height = height;\n img.style.verticalAlign = `-${height - baseline}px`;\n }\n\n /**\n * Calculates the metrics of an image which has been resized. Is used to restore the original\n * metrics of a resized image.\n * @param {HTMLImageElement } img - The resized HTMLImageElement.\n */\n static fixAfterResize(img) {\n img.removeAttribute(\"style\");\n img.removeAttribute(\"width\");\n img.removeAttribute(\"height\");\n // In order to avoid resize with max-width css property.\n img.style.maxWidth = \"none\";\n\n const processImg = (img) => {\n if (img.src.indexOf(\"data:image\") !== -1) {\n if (img.src.indexOf(\"data:image/svg+xml\") !== -1) {\n // Image is in base64: decode it in order to calculate the size, and then bring it back to base64\n // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it\n // (which would actually make more sense for readibility and efficiency).\n if (img.src.indexOf(\"data:image/svg+xml;base64,\") !== -1) {\n // 'data:image/svg+xml;base64,'.length === 26\n const base64String = img.getAttribute(\"src\").substring(26);\n const svgString = window.atob(base64String);\n const encodedSvgString = encodeURIComponent(svgString);\n img.setAttribute(\"src\", `data:image/svg+xml;charset=utf8,${encodedSvgString}`);\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n // Return src to base64!\n img.setAttribute(\"src\", `data:image/svg+xml;base64,${base64String}`);\n } else {\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n }\n } else {\n // 'data:image/png;base64,' === 22.\n const base64 = img.src.substring(22, img.src.length);\n Image.setImgSize(img, base64, true);\n }\n } else {\n Image.setImgSize(img, img.src);\n }\n };\n\n // If the image doesn't contain a blob, just process it normally\n if (img.src.indexOf(\"blob:\") === -1) {\n processImg(img);\n // if it does contain a blob, then read that, replace the src with the decoded content, and process it\n } else {\n let reader = new FileReader();\n reader.onload = function () {\n img.setAttribute(\"src\", reader.result);\n processImg(img);\n };\n fetch(img.src)\n .then((r) => r.blob())\n .then((blob) => {\n reader.readAsDataURL(blob);\n });\n }\n }\n\n /**\n * Returns the metrics (height, width and baseline) contained in a SVG image generated\n * by the MathType image service. This image contains as an extra custom attribute:\n * the baseline (wrs:baseline).\n * @param {String} svgString - The SVG image.\n * @return {Array} - The image metrics.\n */\n static getMetricsFromSvgString(svgString) {\n let first = svgString.indexOf('height=\"');\n let last = svgString.indexOf('\"', first + 8, svgString.length);\n const height = svgString.substring(first + 8, last);\n\n first = svgString.indexOf('width=\"');\n last = svgString.indexOf('\"', first + 7, svgString.length);\n const width = svgString.substring(first + 7, last);\n\n first = svgString.indexOf('wrs:baseline=\"');\n last = svgString.indexOf('\"', first + 14, svgString.length);\n const baseline = svgString.substring(first + 14, last);\n\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n if (typeof baseline !== \"undefined\") {\n arr.cb = baseline;\n }\n return arr;\n }\n return [];\n }\n\n /**\n * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array.\n * @param {Array.} bytes - png byte array.\n * @return {Array} The png metrics.\n */\n static getMetricsFromBytes(bytes) {\n Util.readBytes(bytes, 0, 8);\n let width;\n let height;\n let typ;\n let baseline;\n let dpi;\n while (bytes.length >= 4) {\n typ = Util.readInt32(bytes);\n if (typ === 0x49484452) {\n width = Util.readInt32(bytes);\n height = Util.readInt32(bytes);\n // Read 5 bytes.\n Util.readInt32(bytes);\n Util.readByte(bytes);\n } else if (typ === 0x62615345) {\n // Baseline: 'baSE'.\n baseline = Util.readInt32(bytes);\n } else if (typ === 0x70485973) {\n // Dpis: 'pHYs'.\n dpi = Util.readInt32(bytes);\n dpi = Math.round(dpi / 39.37);\n Util.readInt32(bytes);\n Util.readByte(bytes);\n }\n Util.readInt32(bytes);\n }\n\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n arr.dpi = dpi;\n if (baseline) {\n arr.cb = baseline;\n }\n\n return arr;\n }\n return [];\n }\n}\n","import TextCache from \"./textcache\";\nimport ServiceProvider from \"./serviceprovider\";\nimport MathML from \"./mathml\";\nimport StringManager from \"./stringmanager\";\n\n/**\n * @classdesc\n * This class represents MathType accessible class. Converts MathML to accessible text and manages\n * the associated client-side cache.\n */\nexport default class Accessibility {\n /**\n * Static property.\n * Accessibility cache, each entry contains a MathML and its correspondent accessibility text.\n * @type {TextCache}\n */\n static get cache() {\n return Accessibility._cache;\n }\n\n /**\n * Static property setter.\n * Set accessibility cache.\n * @param {TextCahe} value - The property value.\n * @ignore\n */\n static set cache(value) {\n Accessibility._cache = value;\n }\n\n /**\n * Converts MathML strings to its accessible text representation.\n * @param {String} mathML - MathML to be converted to accessible text.\n * @param {String} [language] - Language of the accessible text. 'en' by default.\n * @param {Array.} [data] - Parameters to send to mathml2accessible service.\n * @return {String} Accessibility text.\n */\n static mathMLToAccessible(mathML, language, data) {\n if (typeof language === \"undefined\") {\n language = \"en\";\n }\n // Check MathML class. If the class is chemistry,\n // we add chemistry to data to force accessibility service\n // to load chemistry grammar.\n if (MathML.containClass(mathML, \"wrs_chemistry\")) {\n data.mode = \"chemistry\";\n }\n // Ignore accesibility styles\n data.ignoreStyles = true;\n let accessibleText = \"\";\n\n if (Accessibility.cache.get(mathML)) {\n accessibleText = Accessibility.cache.get(mathML);\n } else {\n data.service = \"mathml2accessible\";\n data.lang = language;\n const accessibleJsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n if (accessibleJsonResponse.status !== \"error\") {\n accessibleText = accessibleJsonResponse.result.text;\n Accessibility.cache.populate(mathML, accessibleText);\n } else {\n accessibleText = StringManager.get(\"error_convert_accessibility\");\n }\n }\n\n return accessibleText;\n }\n}\n\n/**\n * Contains an instance of TextCache class to manage the JavaScript accessible cache.\n * Each entry of the cache object contains the MathML and it's correspondent accessibility text.\n * @private\n * @type {TextCache}\n */\nAccessibility._cache = new TextCache();\n","import Util from \"./util\";\nimport Latex from \"./latex\";\nimport MathML from \"./mathml\";\nimport Image from \"./image\";\nimport Accessibility from \"./accessibility\";\nimport ServiceProvider from \"./serviceprovider\";\nimport Configuration from \"./configuration\";\nimport Constants from \"./constants\";\n// eslint-disable-next-line no-unused-vars\nimport md5 from \"./md5\";\n\n/**\n * @classdesc\n * This class represent a MahML parser. Converts MathML into formulas depending on the\n * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured\n * in the backend.\n */\nexport default class Parser {\n /**\n * Converts a MathML string to an img element.\n * @param {Document} creator - Document object to call createElement method.\n * @param {string} mathml - MathML code\n * @param {Object[]} wirisProperties - object containing WIRIS custom properties\n * @param {language} language - custom language for accessibility.\n * @returns {HTMLImageElement} the formula image corresponding to initial MathML string.\n * @static\n */\n static mathmlToImgObject(creator, mathml, wirisProperties, language) {\n const imgObject = creator.createElement(\"img\");\n imgObject.align = \"middle\";\n imgObject.style.maxWidth = \"none\";\n let data = wirisProperties || {};\n\n // Take into account the backend config\n const wirisEditorProperties = Configuration.get(\"editorParameters\");\n data = { ...wirisEditorProperties, ...data };\n\n data.mml = mathml;\n data.lang = language;\n // Request metrics of the generated image.\n data.metrics = \"true\";\n data.centerbaseline = \"false\";\n\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n\n // Render js params: _wrs_int_wirisProperties contains some js render params.\n // Since MathML can support render params, js params should be send only to editor.\n\n imgObject.className = Configuration.get(\"imageClassName\");\n\n if (mathml.indexOf('class=\"') !== -1) {\n // We check here if the MathML has been created from a customEditor (such chemistry)\n // to add custom editor name attribute to img object (if necessary).\n let mathmlSubstring = mathml.substring(mathml.indexOf('class=\"') + 'class=\"'.length, mathml.length);\n mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('\"'));\n mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length);\n imgObject.setAttribute(Configuration.get(\"imageCustomEditorName\"), mathmlSubstring);\n }\n\n // Performance enabled.\n if (\n Configuration.get(\"wirisPluginPerformance\") &&\n (Configuration.get(\"saveMode\") === \"xml\" || Configuration.get(\"saveMode\") === \"safeXml\")\n ) {\n let result = JSON.parse(Parser.createShowImageSrc(data, language));\n if (result.status === \"warning\") {\n // POST call.\n // if the mathml is malformed, this function will throw an exception.\n try {\n result = JSON.parse(ServiceProvider.getService(\"showimage\", data));\n } catch (e) {\n return null;\n }\n }\n ({ result } = result);\n if (result.format === \"png\") {\n imgObject.src = `data:image/png;base64,${result.content}`;\n } else {\n imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`;\n }\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n Image.setImgSize(imgObject, result.content, true);\n\n if (Configuration.get(\"enableAccessibility\")) {\n if (typeof result.alt === \"undefined\") {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n } else {\n imgObject.alt = result.alt;\n }\n }\n } else {\n const result = Parser.createImageSrc(mathml, data);\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n imgObject.src = result;\n Image.setImgSize(\n imgObject,\n result,\n Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\",\n );\n if (Configuration.get(\"enableAccessibility\")) {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n }\n }\n\n if (typeof Parser.observer !== \"undefined\") {\n Parser.observer.observe(imgObject);\n }\n\n // Role math https://www.w3.org/TR/wai-aria/roles#math.\n imgObject.setAttribute(\"role\", \"math\");\n return imgObject;\n }\n\n /**\n * Returns the source to showimage service by calling createimage service. The\n * output of the createimage service is a URL path pointing to showimage service.\n * This method is called when performance is disabled.\n * @param {string} mathml - MathML code.\n * @param {Object[]} data - data object containing service parameters.\n * @returns {string} the showimage path.\n */\n static createImageSrc(mathml, data) {\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n\n let result = ServiceProvider.getService(\"createimage\", data);\n\n if (result.indexOf(\"@BASE@\") !== -1) {\n // Replacing '@BASE@' with the base URL of createimage.\n const baseParts = ServiceProvider.getServicePath(\"createimage\").split(\"/\");\n baseParts.pop();\n result = result.split(\"@BASE@\").join(baseParts.join(\"/\"));\n }\n\n return result;\n }\n\n /**\n * Parses initial HTML code. If the HTML contains data generated by WIRIS,\n * this data would be converted as following:\n *
\n   * MathML code: Image containing the corresponding MathML formulas.\n   * MathML code with LaTeX annotation : LaTeX string.\n   * 
\n * @param {string} code - HTML code containing MathML data.\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code with the original MathML converted into LaTeX and images.\n */\n static initParse(code, language) {\n /* Note: The code inside this function has been inverted.\n If you invert again the code then you cannot use correctly LaTeX\n in Moodle.\n */\n code = Parser.initParseSaveMode(code, language);\n return Parser.initParseEditMode(code);\n }\n\n /**\n * Parses initial HTML code depending on the save mode. Transforms all MathML\n * occurrences for it's correspondent image or LaTeX.\n * @param {string} code - HTML code to be parsed\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code parsed.\n */\n static initParseSaveMode(code, language) {\n if (Configuration.get(\"saveMode\")) {\n // Converting XML to tags.\n code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters);\n code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters);\n code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language);\n code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language);\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"base642showimage\");\n }\n }\n return code;\n }\n\n /**\n * Parses initial HTML code depending on the edit mode.\n * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will\n * be converted into a LaTeX string instead of an image.\n * @param {string} code - HTML code containing MathML.\n * @returns {string} parsed HTML code.\n */\n static initParseEditMode(code) {\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n const imgList = Util.getElementsByNameFromString(code, \"img\", true);\n const token = 'encoding=\"LaTeX\">';\n // While replacing images with latex, the indexes of the found images changes\n // respecting the original code, so this carry is needed.\n let carry = 0;\n\n for (let i = 0; i < imgList.length; i += 1) {\n const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry);\n\n if (imgCode.indexOf(` class=\"${Configuration.get(\"imageClassName\")}\"`) !== -1) {\n let mathmlStartToken = ` ${Configuration.get(\"imageMathmlAttribute\")}=\"`;\n let mathmlStart = imgCode.indexOf(mathmlStartToken);\n\n if (mathmlStart === -1) {\n mathmlStartToken = ' alt=\"';\n mathmlStart = imgCode.indexOf(mathmlStartToken);\n }\n\n if (mathmlStart !== -1) {\n mathmlStart += mathmlStartToken.length;\n const mathmlEnd = imgCode.indexOf('\"', mathmlStart);\n const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd)));\n let latexStartPosition = mathml.indexOf(token);\n\n if (latexStartPosition !== -1) {\n latexStartPosition += token.length;\n const latexEndPosition = mathml.indexOf(\"\", latexStartPosition);\n const latex = mathml.substring(latexStartPosition, latexEndPosition);\n\n const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`;\n const start = code.substring(0, imgList[i].start + carry);\n const end = code.substring(imgList[i].end + carry);\n code = start + replaceText + end;\n carry += replaceText.length - (imgList[i].end - imgList[i].start);\n }\n }\n }\n }\n }\n\n return code;\n }\n\n /**\n * Parses end HTML code. The end HTML code is HTML code with embedded images\n * or LaTeX formulas created with MathType.
\n * By default this method converts the formula images and LaTeX strings in MathML.
\n * If image mode is enabled the images will not be converted into MathML. For further information see {@link https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-web-interface-features/full-mathml-mode---wirisplugins-js.html}.\n * @param {string} code - HTML to be parsed\n * @returns {string} the HTML code parsed.\n */\n static endParse(code) {\n // Transform LaTeX ocurrences to MathML elements.\n const codeEndParsedEditMode = Parser.endParseEditMode(code);\n // Transform img elements to MathML elements.\n const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode);\n return codeEndParseSaveMode;\n }\n\n /**\n * Parses end HTML code depending on the edit mode.\n * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML.\n * @param {string} code - HTML code to be parsed.\n * @returns {string} HTML code parsed.\n */\n static endParseEditMode(code) {\n // Converting LaTeX to images.\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n let output = \"\";\n let endPosition = 0;\n let startPosition = code.indexOf(\"$$\");\n while (startPosition !== -1) {\n output += code.substring(endPosition, startPosition);\n endPosition = code.indexOf(\"$$\", startPosition + 2);\n\n if (endPosition !== -1) {\n // Before, it was a condition here to execute the next codelines\n // 'latex.indexOf('<') == -1'.\n // We don't know why it was used, but seems to have a conflict with\n // latex formulas that contains '<'.\n const latex = code.substring(startPosition + 2, endPosition);\n const decodedLatex = Util.htmlEntitiesDecode(latex);\n let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true));\n if (!Configuration.get(\"saveHandTraces\")) {\n // Remove hand traces.\n mathml = MathML.removeAnnotation(mathml, \"application/json\");\n }\n output += mathml;\n endPosition += 2;\n } else {\n output += \"$$\";\n endPosition = startPosition + 2;\n }\n\n startPosition = code.indexOf(\"$$\", endPosition);\n }\n\n output += code.substring(endPosition, code.length);\n code = output;\n }\n\n return code;\n }\n\n /**\n * Parses end HTML code depending on the save mode. Converts all\n * images into the element determined by the save mode:\n * - xml: Parses images formulas into MathML.\n * - safeXml: Parses images formulas into safeMAthML\n * - base64: Parses images into base64 images.\n * - image: Parse images into images (no parsing)\n * @param {string} code - HTML code to be parsed\n * @returns {string} HTML code parsed.\n */\n static endParseSaveMode(code) {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"img264\");\n }\n }\n\n return code;\n }\n\n /**\n * Auxiliar function that builds the data object to send to the showimage endpoint\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object with the data to send to showimage.\n */\n static createShowImageSrcData(data, language) {\n const dataMd5 = {};\n const renderParams = [\n \"mml\",\n \"color\",\n \"centerbaseline\",\n \"zoom\",\n \"dpi\",\n \"fontSize\",\n \"fontFamily\",\n \"defaultStretchy\",\n \"backgroundColor\",\n \"format\",\n ];\n renderParams.forEach((param) => {\n if (typeof data[param] !== \"undefined\") {\n dataMd5[param] = data[param];\n }\n });\n // Data variables to get.\n const dataObject = {};\n Object.keys(data).forEach((key) => {\n // We don't need mathml in this request we try to get cached.\n // Only need the formula md5 calculated before.\n if (key !== \"mml\") {\n dataObject[key] = data[key];\n }\n });\n\n dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5));\n dataObject.lang = typeof language === \"undefined\" ? \"en\" : language;\n dataObject.version = Configuration.get(\"version\");\n\n return dataObject;\n }\n\n /**\n * Returns the result to call showimage service with the formula md5 as parameter.\n * The result could be:\n * - {'status' : warning'} : The image associated to the MathML md5 is not in cache.\n * - {'status' : 'ok' ...} : The image associated to the MathML md5 is in cache.\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object containing showimage response.\n */\n static createShowImageSrc(data, language) {\n const dataObject = this.createShowImageSrcData(data, language);\n const result = ServiceProvider.getService(\"showimage\", Util.httpBuildQuery(dataObject), true);\n return result;\n }\n\n /**\n * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src)\n * or showimage img tags (i.e with showimage.php on src)\n * @param {string} code - HTML code\n * @param {string} mode - base642showimage or img2mathml or img264 transform.\n * @returns {string} html - code transformed.\n */\n static codeImgTransform(code, mode) {\n let output = \"\";\n let endPosition = 0;\n const pattern = /\") {\n endPosition = i + 1;\n }\n\n i += 1;\n }\n\n if (endPosition < startPosition) {\n // The img tag is stripped.\n output += code.substring(startPosition, code.length);\n return output;\n }\n let imgCode = code.substring(startPosition, endPosition);\n const imgObject = Util.createObject(imgCode);\n let xmlCode = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n let convertToXml;\n let convertToSafeXml;\n\n if (mode === \"base642showimage\") {\n if (xmlCode == null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null);\n output += Util.createObjectCode(imgCode);\n } else if (mode === \"img2mathml\") {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n convertToXml = true;\n convertToSafeXml = true;\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n convertToXml = true;\n convertToSafeXml = false;\n }\n }\n output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml);\n } else if (mode === \"img264\") {\n if (xmlCode === null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n\n const properties = {};\n properties.base64 = \"true\";\n imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null);\n // Metrics.\n Image.setImgSize(imgCode, imgCode.src, true);\n output += Util.createObjectCode(imgCode);\n }\n }\n output += code.substring(endPosition, code.length);\n return output;\n }\n\n /**\n * Converts all occurrences of MathML to the corresponding image.\n * @param {string} content - string with valid MathML code.\n * The MathML code doesn't contain semantics.\n * @param {Constants} characters - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * @param {string} language - a valid language code\n * in order to generate formula accessibility.\n * @returns {string} The input string with all the MathML\n * occurrences replaced by the corresponding image.\n */\n static parseMathmlToImg(content, characters, language) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n\n while (start !== -1) {\n output += content.substring(end, start);\n // Avoid WIRIS images to be parsed.\n const imageMathmlAtrribute = content.indexOf(Configuration.get(\"imageMathmlAttribute\"));\n end = content.indexOf(mathTagEnd, start);\n\n if (end === -1) {\n end = content.length - 1;\n } else if (imageMathmlAtrribute !== -1) {\n // First close tag of img attribute\n // If a mathmlAttribute exists should be inside a img tag.\n end += content.indexOf(\"/>\", start);\n } else {\n end += mathTagEnd.length;\n }\n\n if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) {\n let mathml = content.substring(start, end);\n mathml =\n characters.id === Constants.safeXmlCharacters.id\n ? MathML.safeXmlDecode(mathml)\n : MathML.mathMLEntities(mathml);\n output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language));\n } else {\n output += content.substring(start, end);\n }\n\n start = content.indexOf(mathTagBegin, end);\n }\n\n output += content.substring(end, content.length);\n return output;\n }\n}\n\n// Mutation observers to avoid wiris image formulas class be removed.\nif (typeof MutationObserver !== \"undefined\") {\n const mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.oldValue === Configuration.get(\"imageClassName\") &&\n mutation.attributeName === \"class\" &&\n mutation.target.className.indexOf(Configuration.get(\"imageClassName\")) === -1\n ) {\n mutation.target.className = Configuration.get(\"imageClassName\");\n }\n });\n });\n\n Parser.observer = Object.create(mutationObserver);\n Parser.observer.Config = { attributes: true, attributeOldValue: true };\n // We use own default config.\n Parser.observer.observe = function (target) {\n Object.getPrototypeOf(this).observe(target, this.Config);\n };\n}\n","/* eslint-disable class-methods-use-this */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-extra-semi */\n\n// The rules above are disabled because we are implementing\n// an external interface.\n\nexport default class EditorListener {\n /**\n * @classdesc\n * Determines if the content of the\n * MathType Editor has changes.\n * @implements {EditorListeners}\n * @constructs\n */\n constructor() {\n /**\n * Indicates if the content of the editor has changed.\n * @type {Boolean}\n */\n this.isContentChanged = false;\n\n /**\n * Indicates if the listener should be waiting for changes in the editor.\n * @type {Boolean}\n */\n this.waitingForChanges = false;\n }\n\n /**\n * Sets {@link EditorListener.isContentChanged} property.\n * @param {Boolean} value - The new vlue.\n */\n setIsContentChanged(value) {\n this.isContentChanged = value;\n }\n\n /**\n * Returns true if the content of the editor has been changed, false otherwise.\n * @return {Boolean}\n */\n getIsContentChanged() {\n return this.isContentChanged;\n }\n\n /**\n * Determines if the EditorListener should wait for any changes.\n * @param {Boolean} value - True if the editor should wait for changes, false otherwise.\n */\n setWaitingForChanges(value) {\n this.waitingForChanges = value;\n }\n\n /**\n * EditorListener method to overwrite.\n * @type {JsEditor}\n * @ignore\n */\n caretPositionChanged(_editor) {}\n\n /**\n * EditorListener method to overwrite\n * @type {JsEditor}\n * @ignore\n */\n clipboardChanged(_editor) {}\n\n /**\n * Determines if the content of an editor has been changed.\n * @param {JsEditor} editor - editor object.\n */\n contentChanged(_editor) {\n if (this.waitingForChanges === true && this.isContentChanged === false) {\n this.isContentChanged = true;\n }\n }\n\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} editor - The editor instance.\n */\n styleChanged(_editor) {}\n\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} - The editor instance.\n */\n transformationReceived(_editor) {}\n}\n","let wasm;\n\nconst cachedTextDecoder =\n typeof TextDecoder !== \"undefined\"\n ? new TextDecoder(\"utf-8\", { ignoreBOM: true, fatal: true })\n : {\n decode: () => {\n throw Error(\"TextDecoder not available\");\n },\n };\n\nif (typeof TextDecoder !== \"undefined\") {\n cachedTextDecoder.decode();\n}\n\nlet cachedUint8Memory0 = null;\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nconst heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) {\n return heap[idx];\n}\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder =\n typeof TextEncoder !== \"undefined\"\n ? new TextEncoder(\"utf-8\")\n : {\n encode: () => {\n throw Error(\"TextEncoder not available\");\n },\n };\n\nconst encodeString =\n typeof cachedTextEncoder.encodeInto === \"function\"\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n }\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length,\n };\n };\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8Memory0()\n .subarray(ptr, ptr + buf.length)\n .set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7f) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0;\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedInt32Memory0 = null;\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nlet cachedFloat64Memory0 = null;\n\nfunction getFloat64Memory0() {\n if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) {\n cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64Memory0;\n}\n\nlet cachedBigInt64Memory0 = null;\n\nfunction getBigInt64Memory0() {\n if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) {\n cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer);\n }\n return cachedBigInt64Memory0;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == \"number\" || type == \"boolean\" || val == null) {\n return `${val}`;\n }\n if (type == \"string\") {\n return `\"${val}\"`;\n }\n if (type == \"symbol\") {\n const description = val.description;\n if (description == null) {\n return \"Symbol\";\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == \"function\") {\n const name = val.name;\n if (typeof name == \"string\" && name.length > 0) {\n return `Function(${name})`;\n } else {\n return \"Function\";\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = \"[\";\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for (let i = 1; i < length; i++) {\n debug += \", \" + debugString(val[i]);\n }\n debug += \"]\";\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == \"Object\") {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return \"Object(\" + JSON.stringify(val) + \")\";\n } catch (_) {\n return \"Object\";\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction makeClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n try {\n return f(state.a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b);\n state.a = 0;\n }\n }\n };\n real.original = state;\n\n return real;\n}\nfunction __wbg_adapter_46(arg0, arg1, arg2) {\n wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n\n return real;\n}\nfunction __wbg_adapter_49(arg0, arg1) {\n wasm.__wbindgen_export_4(arg0, arg1);\n}\n\nfunction __wbg_adapter_52(arg0, arg1, arg2) {\n wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export_6(addHeapObject(e));\n }\n}\nfunction __wbg_adapter_103(arg0, arg1, arg2, arg3) {\n wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\n/**\n */\nexport function main_js() {\n wasm.main_js();\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n */\nexport const Level = Object.freeze({\n Err: 0,\n 0: \"Err\",\n Warn: 1,\n 1: \"Warn\",\n Info: 2,\n 2: \"Info\",\n Debug: 3,\n 3: \"Debug\",\n});\n/**\n */\nexport class Telemeter {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_telemeter_free(ptr);\n }\n /**\n * @param {any} solution\n * @param {any} hosts\n * @param {any} config\n */\n constructor(solution, hosts, config) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n this.__wbg_ptr = r0 >>> 0;\n return this;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} sender_id\n * @returns {Promise}\n */\n identify(sender_id) {\n const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {string} event_type\n * @param {any} event_payload\n * @returns {Promise}\n */\n track(event_type, event_payload) {\n const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload));\n return takeObject(ret);\n }\n /**\n * @param {any} level\n * @param {string} message\n * @param {any} payload\n * @returns {Promise}\n */\n log(level, message, payload) {\n const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload));\n return takeObject(ret);\n }\n /**\n * @returns {Promise}\n */\n finish() {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.telemeter_finish(ptr);\n return takeObject(ret);\n }\n /**\n * @param {boolean | undefined} [new_debug_status]\n */\n debug(new_debug_status) {\n wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0);\n }\n}\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === \"function\" && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === \"function\") {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n } catch (e) {\n if (module.headers.get(\"Content-Type\") != \"application/wasm\") {\n console.warn(\n \"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\",\n e,\n );\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_string_new = function (arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_c728d68b8b34487e = function () {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_status_7841bb47be2a8f16 = function (arg0) {\n const ret = getObject(arg0).status;\n return ret;\n };\n imports.wbg.__wbg_headers_ea7ef583d1564b08 = function (arg0) {\n const ret = getObject(arg0).headers;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new0_ad75dd38f92424e2 = function () {\n const ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function (arg0) {\n const ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbindgen_object_drop_ref = function (arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbindgen_is_object = function (arg0) {\n const val = getObject(arg0);\n const ret = typeof val === \"object\" && val !== null;\n return ret;\n };\n imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function (arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_process_5b786e71d465a513 = function (arg0) {\n const ret = getObject(arg0).process;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_versions_c2ab80650590b6a2 = function (arg0) {\n const ret = getObject(arg0).versions;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_node_523d7bd03ef69fba = function (arg0) {\n const ret = getObject(arg0).node;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_string = function (arg0) {\n const ret = typeof getObject(arg0) === \"string\";\n return ret;\n };\n imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function (arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_require_2784e593a4674877 = function () {\n return handleError(function () {\n const ret = module.require;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function (arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_4a9aa5157afeb382 = function (arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_1989a20442400aaa = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_done_bc26bf4ada718266 = function (arg0) {\n const ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_value_0570714ff7d75f35 = function (arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function () {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_2aff440840bb6202 = function () {\n return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_next_15da6a3df9290720 = function (arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_function = function (arg0) {\n const ret = typeof getObject(arg0) === \"function\";\n return ret;\n };\n imports.wbg.__wbg_call_669127b9d730c650 = function () {\n return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_object_clone_ref = function (arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_3fad056edded10bd = function () {\n return handleError(function () {\n const ret = self.self;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_window_a4f46c98a61d4089 = function () {\n return handleError(function () {\n const ret = window.window;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_globalThis_17eff828815f7d84 = function () {\n return handleError(function () {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_global_46f939f6541643c5 = function () {\n return handleError(function () {\n const ret = global.global;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_is_undefined = function (arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function (arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isArray_38525be7442aa21e = function (arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_call_53fc3abd42e24ec8 = function () {\n return handleError(function (arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function (arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_new_feb65b865d980ae2 = function (arg0, arg1) {\n try {\n var state0 = { a: arg0, b: arg1 };\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_103(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n };\n imports.wbg.__wbindgen_memory = function () {\n const ret = wasm.memory;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_buffer_344d9b41efe96da7 = function (arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_d8a000788389a31e = function (arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_dcfd613a3420f908 = function (arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n };\n imports.wbg.__wbg_length_a5587d6cd79ab197 = function (arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function (arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"string\" ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_stringify_4039297315a25b00 = function () {\n return handleError(function (arg0) {\n const ret = JSON.stringify(getObject(arg0));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_set_40f7786a25a9cc7e = function () {\n return handleError(function (arg0, arg1, arg2) {\n const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_has_cdf8b85f6e903c80 = function () {\n return handleError(function (arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_fetch_701fcd2bde06379a = function (arg0, arg1) {\n const ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function (arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function (arg0, arg1, arg2) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_e4960143e41697a4 = function () {\n return handleError(function () {\n const ret = new AbortController();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_signal_1ed842bebd6ae322 = function (arg0) {\n const ret = getObject(arg0).signal;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_abort_8355f201f30300bb = function (arg0) {\n getObject(arg0).abort();\n };\n imports.wbg.__wbindgen_error_new = function (arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function (arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function (arg0) {\n const v = getObject(arg0);\n const ret = typeof v === \"boolean\" ? (v ? 1 : 0) : 2;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function (arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"number\" ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_entries_6d727b73ee02b7ce = function (arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_String_917f38a1211cf44b = function (arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function (arg0, arg1) {\n console.warn(getObject(arg0), getObject(arg1));\n };\n imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function (arg0) {\n const ret = getObject(arg0).readyState;\n return ret;\n };\n imports.wbg.__wbg_warn_4affe1093892a4ef = function (arg0) {\n console.warn(getObject(arg0));\n };\n imports.wbg.__wbg_close_f4135085ec3fc8f0 = function () {\n return handleError(function (arg0) {\n getObject(arg0).close();\n }, arguments);\n };\n imports.wbg.__wbg_new_b9b318679315404f = function () {\n return handleError(function (arg0, arg1) {\n const ret = new WebSocket(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function (arg0, arg1) {\n getObject(arg0).binaryType = takeObject(arg1);\n };\n imports.wbg.__wbg_log_7811587c4c6d2844 = function (arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_error_f0a6627f4b23c19d = function (arg0) {\n console.error(getObject(arg0));\n };\n imports.wbg.__wbg_info_3ca7870690403fee = function (arg0) {\n console.info(getObject(arg0));\n };\n imports.wbg.__wbg_document_183cf1eecfdbffee = function (arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function (arg0) {\n const ret = getObject(arg0).visibilityState;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function (arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_cace2e0b3ddc0502 = function (arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function () {\n return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function () {\n return handleError(function (arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbindgen_is_bigint = function (arg0) {\n const ret = typeof getObject(arg0) === \"bigint\";\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function (arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_in = function (arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function (arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_eq = function (arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).localStorage;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function () {\n return handleError(function (arg0, arg1, arg2, arg3) {\n const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n }, arguments);\n };\n imports.wbg.__wbg_navigator_7078da62d92ff5ad = function (arg0) {\n const ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).mediaDevices;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function () {\n return handleError(function (arg0) {\n const ret = getObject(arg0).enumerateDevices();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setItem_fe04f524052a3839 = function () {\n return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbindgen_cb_drop = function (arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n return ret;\n };\n imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function (arg0, arg1) {\n const ret = getObject(arg1).deviceId;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Response;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function () {\n return handleError(function (arg0, arg1) {\n getObject(arg0).randomFillSync(takeObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function (arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getRandomValues_504510b5564925af = function () {\n return handleError(function (arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbindgen_bigint_get_as_i64 = function (arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof v === \"bigint\" ? v : undefined;\n getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbindgen_debug_string = function (arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbindgen_throw = function (arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_then_89e1c559530b85cf = function (arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function (arg0) {\n queueMicrotask(getObject(arg0));\n };\n imports.wbg.__wbg_then_1bbc9edafd859b06 = function (arg0, arg1, arg2) {\n const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function (arg0) {\n const ret = getObject(arg0).queueMicrotask;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_resolve_a3252b2860f0a09e = function (arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_url_1f609e63ff1a7983 = function (arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_send_2860805104507701 = function () {\n return handleError(function (arg0, arg1, arg2) {\n getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));\n }, arguments);\n };\n imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function (arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_new_19676474aa414d62 = function () {\n return handleError(function () {\n const ret = new Headers();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_append_feec4143bbf21904 = function () {\n return handleError(function (arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function () {\n return handleError(function (arg0, arg1, arg2) {\n const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_closure_wrapper1532 = function (arg0, arg1, arg2) {\n const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1602 = function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1834 = function (arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52);\n return addHeapObject(ret);\n };\n\n return imports;\n}\n\nfunction __wbg_init_memory(imports, maybe_memory) {}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedBigInt64Memory0 = null;\n cachedFloat64Memory0 = null;\n cachedInt32Memory0 = null;\n cachedUint8Memory0 = null;\n\n wasm.__wbindgen_start();\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n const imports = __wbg_get_imports();\n\n __wbg_init_memory(imports);\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(input) {\n if (wasm !== undefined) return wasm;\n\n if (typeof input === \"undefined\") {\n input = new URL(\"telemeter_wasm_bg.wasm\", import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (\n typeof input === \"string\" ||\n (typeof Request === \"function\" && input instanceof Request) ||\n (typeof URL === \"function\" && input instanceof URL)\n ) {\n input = fetch(input);\n }\n\n __wbg_init_memory(imports);\n\n const { instance, module } = await __wbg_load(await input, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","import init, { Telemeter as TelemeterWASM } from \"../telemeter-wasm\";\n\n/**\n * @classdesc\n * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data\n * to Telemetry in a more comfortable and homogeneous way.\n */\nexport default class Telemeter {\n /**\n * Inits Telemeter class.\n * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)}\n * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry.\n * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated.\n * @param {Object} telemeterAttributes.config - Configuration parameters.\n */\n static init(telemeterAttributes) {\n if (!this.telemeter && !this.waitingForInit) {\n this.waitingForInit = true;\n init(telemeterAttributes.url)\n .then(() => {\n this.telemeter = new TelemeterWASM(\n telemeterAttributes.solution,\n telemeterAttributes.hosts,\n telemeterAttributes.config,\n );\n })\n .catch((error) => {\n console.log(error);\n })\n .finally(() => (this.waitingForInit = false));\n }\n }\n\n /**\n * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session.\n */\n static async finish() {\n if (!this.telemeter) return;\n\n try {\n let local_telemeter = this.telemeter;\n this.telemeter = undefined;\n await local_telemeter.finish();\n } catch (e) {\n console.error(e);\n }\n }\n}\n","import Configuration from \"./configuration\";\nimport Core from \"./core.src\";\nimport EditorListener from \"./editorlistener\";\nimport Listeners from \"./listeners\";\nimport MathML from \"./mathml\";\nimport Util from \"./util\";\nimport Telemeter from \"./telemeter\";\n\nexport default class ContentManager {\n /**\n * @classdesc\n * This class represents a modal dialog, managing the following:\n * - The insertion of content into the current instance of the {@link ModalDialog} class.\n * - The actions to be done once the modal object has been submitted\n * (submitAction} method).\n * - The update of the content when the {@link ModalDialog} class is also updated,\n * for example when ModalDialog is re-opened.\n * - The communication between the {@link ModalDialog} class and itself, if the content\n * has been changed (hasChanges} method).\n * @constructs\n * @param {Object} contentManagerAttributes - Object containing all attributes needed to\n * create a new instance.\n */\n constructor(contentManagerAttributes) {\n /**\n * An object containing MathType editor parameters. See\n * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information.\n * @type {Object}\n */\n this.editorAttributes = {};\n if (\"editorAttributes\" in contentManagerAttributes) {\n this.editorAttributes = contentManagerAttributes.editorAttributes;\n } else {\n throw new Error(\"ContentManager constructor error: editorAttributes property missed.\");\n }\n\n /**\n * CustomEditors instance. Contains the custom editors.\n * @type {CustomEditors}\n */\n this.customEditors = null;\n if (\"customEditors\" in contentManagerAttributes) {\n this.customEditors = contentManagerAttributes.customEditors;\n }\n\n /**\n * Environment properties. This object contains data about the integration platform.\n * @type {Object}\n * @property {String} editor - Editor name. Usually the HTML editor.\n * @property {String} mode - Save mode. Xml by default.\n * @property {String} version - Plugin version.\n */\n this.environment = {};\n if (\"environment\" in contentManagerAttributes) {\n this.environment = contentManagerAttributes.environment;\n } else {\n throw new Error(\"ContentManager constructor error: environment property missed\");\n }\n\n /**\n * ContentManager language.\n * @type {String}\n */\n this.language = \"\";\n if (\"language\" in contentManagerAttributes) {\n this.language = contentManagerAttributes.language;\n } else {\n throw new Error(\"ContentManager constructor error: language property missed\");\n }\n\n /**\n * {@link EditorListener} instance. Manages the changes inside the editor.\n * @type {EditorListener}\n */\n this.editorListener = new EditorListener();\n\n /**\n * MathType editor instance.\n * @type {JsEditor}\n */\n this.editor = null;\n\n /**\n * Navigator user agent.\n * @type {String}\n */\n this.ua = navigator.userAgent.toLowerCase();\n\n /**\n * Mobile device properties object\n * @type {DeviceProperties}\n */\n this.deviceProperties = {};\n this.deviceProperties.isAndroid = this.ua.indexOf(\"android\") > -1;\n this.deviceProperties.isIOS = ContentManager.isIOS();\n\n /**\n * Custom editor toolbar.\n * @type {String}\n */\n this.toolbar = null;\n\n /**\n * Custom editor toolbar.\n * @type {String}\n */\n this.dbclick = null;\n\n /**\n * Instance of the {@link ModalDialog} class associated with the current\n * {@link ContentManager} instance.\n * @type {ModalDialog}\n */\n this.modalDialogInstance = null;\n\n /**\n * ContentManager listeners.\n * @type {Listeners}\n */\n this.listeners = new Listeners();\n\n /**\n * MathML associated to the ContentManager instance.\n * @type {String}\n */\n this.mathML = null;\n\n /**\n * Indicates if the edited element is a new one or not.\n * @type {Boolean}\n */\n this.isNewElement = true;\n\n /**\n * {@link IntegrationModel} instance. Needed to call wrapper methods.\n * @type {IntegrationModel}\n */\n this.integrationModel = null;\n }\n\n /**\n * Adds a new listener to the current {@link ContentManager} instance.\n * @param {Object} listener - The listener to be added.\n */\n addListener(listener) {\n this.listeners.add(listener);\n }\n\n /**\n * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager}\n * instance.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance.\n */\n setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n\n /**\n * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance.\n * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance\n */\n setModalDialogInstance(modalDialogInstance) {\n this.modalDialogInstance = modalDialogInstance;\n }\n\n /**\n * Inserts the content into the current {@link ModalDialog} instance updating\n * the title and inserting the JavaScript editor.\n */\n insert() {\n // Before insert the editor we update the modal object title to avoid weird render display.\n this.updateTitle(this.modalDialogInstance);\n this.insertEditor(this.modalDialogInstance);\n }\n\n /**\n * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until\n * editor's JavaScript is loaded.\n */\n insertEditor() {\n if (ContentManager.isEditorLoaded()) {\n this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes);\n this.editor.insertInto(this.modalDialogInstance.contentContainer);\n this.editor.focus();\n if (this.modalDialogInstance.rtl) {\n this.editor.action(\"rtl\");\n }\n // Setting div in rtl in case of it's activated.\n if (this.editor.getEditorModel().isRTL()) {\n this.editor.element.style.direction = \"rtl\";\n }\n\n // Editor listener: this object manages the changes logic of editor.\n this.editor.getEditorModel().addEditorListener(this.editorListener);\n\n // iOS events.\n if (this.modalDialogInstance.deviceProperties.isIOS) {\n setTimeout(function () {\n // Make sure the modalDialogInstance is available when the timeout is over\n // to avoid throw errors and stop execution.\n if (this.hasOwnProperty(\"modalDialogInstance\")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins\n }, 400);\n\n const formulaDisplayDiv = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n Util.addEvent(formulaDisplayDiv, \"focus\", this.modalDialogInstance.handleOpenedIosSoftkeyboard);\n Util.addEvent(formulaDisplayDiv, \"blur\", this.modalDialogInstance.handleClosedIosSoftkeyboard);\n }\n // Fire onLoad event. Necessary to set the MathML into the editor\n // after is loaded.\n this.listeners.fire(\"onLoad\", {});\n } else {\n setTimeout(ContentManager.prototype.insertEditor.bind(this), 100);\n }\n }\n\n /**\n * Initializes the current class by loading MathType script.\n */\n init() {\n if (!ContentManager.isEditorLoaded()) {\n this.addEditorAsExternalDependency();\n }\n }\n\n /**\n * Adds script element to the DOM to include editor externally.\n */\n addEditorAsExternalDependency() {\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n let editorUrl = Configuration.get(\"editorUrl\");\n\n // We create an object url for parse url string and work more efficiently.\n const anchorElement = document.createElement(\"a\");\n\n ContentManager.setHrefToAnchorElement(anchorElement, editorUrl);\n ContentManager.setProtocolToAnchorElement(anchorElement);\n\n editorUrl = ContentManager.getURLFromAnchorElement(anchorElement);\n\n // Load editor URL. We add stats as GET params.\n const stats = this.getEditorStats();\n script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`;\n\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n }\n\n /**\n * Sets the specified url to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set 'url'.\n * @param {String} url - URL to set.\n */\n static setHrefToAnchorElement(anchorElement, url) {\n anchorElement.href = url;\n }\n\n /**\n * Sets the current protocol to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set its protocol.\n */\n static setProtocolToAnchorElement(anchorElement) {\n // Change to https if necessary.\n if (window.location.href.indexOf(\"https://\") === 0) {\n // It check if browser is https and configuration is http.\n // If this is so, we will replace protocol.\n if (anchorElement.protocol === \"http:\") {\n anchorElement.protocol = \"https:\";\n }\n }\n }\n\n /**\n * Returns the url of the anchor element adding the current port\n * if it is needed.\n * @param {HTMLAnchorElement} anchorElement - Element where extract the url.\n * @returns {String}\n */\n static getURLFromAnchorElement(anchorElement) {\n // Check protocol and remove port if it's standard.\n const removePort = anchorElement.port === \"80\" || anchorElement.port === \"443\" || anchorElement.port === \"\";\n return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? \"\" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith(\"/\") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len\n }\n\n /**\n * Returns object with editor stats.\n *\n * @typedef {Object} EditorStatsObject\n * @property {string} editor - Editor name.\n * @property {string} mode - Current configuration for formula save mode.\n * @property {string} version - Current plugins version.\n * @returns {EditorStatsObject}\n */\n getEditorStats() {\n // Editor stats. Use environment property to set it.\n const stats = {};\n if (\"editor\" in this.environment) {\n stats.editor = this.environment.editor;\n } else {\n stats.editor = \"unknown\";\n }\n\n if (\"mode\" in this.environment) {\n stats.mode = this.environment.mode;\n } else {\n stats.mode = Configuration.get(\"saveMode\");\n }\n\n if (\"version\" in this.environment) {\n stats.version = this.environment.version;\n } else {\n stats.version = Configuration.get(\"version\");\n }\n\n return stats;\n }\n\n /**\n * Returns true if device is iOS. Otherwise, false.\n * @returns {Boolean}\n */\n static isIOS() {\n return (\n [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document)\n );\n }\n\n /**\n * Returns true if device is Mobile. Otherwise, false.\n * @returns {Boolean}\n */\n static isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n /**\n * Returns true if editor is loaded. Otherwise, false.\n * @returns {Boolean}\n */\n static isEditorLoaded() {\n // To know if editor JavaScript is loaded we need to wait until\n // window.com.wiris.jsEditor.JsEditor.newInstance is ready.\n return (\n window.com &&\n window.com.wiris &&\n window.com.wiris.jsEditor &&\n window.com.wiris.jsEditor.JsEditor &&\n window.com.wiris.jsEditor.JsEditor.newInstance\n );\n }\n\n /**\n * Sets the {@link ContentManager.editor} initial content.\n */\n setInitialContent() {\n if (!this.isNewElement) {\n this.setMathML(this.mathML);\n }\n }\n\n /**\n * Sets a MathML into {@link ContentManager.editor} instance.\n * @param {String} mathml - MathML string.\n * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set.\n * False by default.\n */\n setMathML(mathml, focusDisabled) {\n // By default focus is enabled.\n if (typeof focusDisabled === \"undefined\") {\n focusDisabled = false;\n }\n // Using setMathML method is not a change produced by the user but for the API\n // so we set to false the contentChange property of editorListener.\n this.editor.setMathMLWithCallback(mathml, () => {\n this.editorListener.setWaitingForChanges(true);\n });\n\n // We need to wait a little until the callback finish.\n setTimeout(() => {\n this.editorListener.setIsContentChanged(false);\n }, 500);\n\n // In some scenarios - like closing modal object - editor mustn't be focused.\n if (!focusDisabled) {\n this.onFocus();\n }\n }\n\n /**\n * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by\n * {@link ModalDialog.focus}.\n */\n onFocus() {\n if (typeof this.editor !== \"undefined\" && this.editor != null) {\n this.editor.focus();\n\n // On WordPress integration, the focus gets lost right after setting it.\n // To fix this, we enforce another focus some milliseconds after this behaviour.\n setTimeout(() => {\n this.editor.focus();\n }, 100);\n }\n }\n\n /**\n * Updates the edition area by calling {@link IntegrationModel.updateFormula}.\n * Triggered by {@link ModalDialog.submitAction}.\n */\n submitAction() {\n if (!this.editor.isFormulaEmpty()) {\n let mathML = this.editor.getMathMLWithSemantics();\n // Add class for custom editors.\n if (this.customEditors.getActiveEditor() !== null) {\n const { toolbar } = this.customEditors.getActiveEditor();\n mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar);\n } else {\n // We need - if exists - the editor name from MathML\n // class attribute.\n Object.keys(this.customEditors.editors).forEach((key) => {\n mathML = MathML.removeCustomEditorClassAttribute(mathML, key);\n });\n }\n const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML);\n this.integrationModel.updateFormula(mathmlEntitiesEncoded);\n } else {\n this.integrationModel.updateFormula(null);\n }\n\n this.customEditors.disable();\n this.integrationModel.notifyWindowClosed();\n\n // Set disabled focus to prevent lost focus.\n this.setEmptyMathML();\n this.customEditors.disable();\n }\n\n /**\n * Sets an empty MathML as {@link ContentManager.editor} content.\n * This will open the MT/CT editor with the hand mode.\n * It adds dir rtl in case of it's activated.\n */\n setEmptyMathML() {\n const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS;\n const isRTL = this.editor.getEditorModel().isRTL();\n\n if (isMobile || this.integrationModel.forcedHandMode) {\n // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode.\n const mathML = `[]`;\n this.setMathML(mathML, true);\n } else {\n // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation.\n const mathML = ``;\n this.setMathML(mathML, true);\n }\n }\n\n /**\n * Open event. Triggered by {@link ModalDialog.open}. Does the following:\n * - Updates the {@link ContentManager.editor} content\n * (with an empty MathML or an existing formula),\n * - Updates the {@link ContentManager.editor} toolbar.\n * - Recovers the the focus.\n */\n onOpen() {\n if (this.isNewElement) {\n this.setEmptyMathML();\n } else {\n this.setMathML(this.mathML);\n }\n let toolbar = this.updateToolbar();\n this.onFocus();\n\n if (this.deviceProperties.isIOS) {\n const zoom = document.documentElement.clientWidth / window.innerWidth;\n\n if (zoom !== 1) {\n // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed.\n this.setKeyboardMode();\n }\n }\n\n let trigger = this.dbclick ? \"formula\" : \"button\";\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"OPENED_MTCT_EDITOR\", {\n toolbar: toolbar,\n trigger: trigger,\n });\n } catch (error) {\n console.error(\"Error tracking OPENED_MTCT_EDITOR\", error);\n }\n\n Core.globalListeners.fire(\"onModalOpen\", {});\n\n if (this.integrationModel.forcedHandMode) {\n this.hideHandModeButton();\n\n // In case we have a keyboard written formula, we still want it to be opened with handMode.\n if (this.mathML && !this.mathML.includes('') && !this.isNewElement) {\n this.openHandOnKeyboardMathML(this.mathML, this.editor);\n }\n }\n }\n\n /**\n * Change Editor in keyboard mode when is loaded\n */\n setKeyboardMode() {\n const wrsEditor = document.getElementsByClassName(\"wrs_handOpen wrs_disablePalette\")[0];\n if (wrsEditor) {\n wrsEditor.classList.remove(\"wrs_handOpen\");\n wrsEditor.classList.remove(\"wrs_disablePalette\");\n } else {\n setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100);\n }\n }\n\n /**\n * Hides the hand <-> keyboard mode switch.\n *\n * This method relies completely on the classes used on different HTML elements within the editor itself, meaning\n * any change on those classes will make this code stop working properly.\n *\n * On top of that, some of those classes are changed on runtime (for example, the one that makes some buttons change).\n * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it.\n * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button.\n */\n hideHandModeButton(forced = true) {\n if (this.handSwitchHidden) {\n return; // hand <-> keyboard button already hidden.\n }\n\n // \"Open hand mode\" button takes a little bit to be available.\n // This selector gets the hand <-> keyboard mode switch\n const handModeButtonSelector =\n \"div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]\";\n\n // If in \"forced mode\", we hide the \"keyboard button\" so the user can't can't change between hand and keyboard modes.\n // We use an observer to ensure that the button it hidden as soon as it appears.\n if (forced) {\n const mutationInstance = new MutationObserver((mutations) => {\n const handModeButton = document.querySelector(handModeButtonSelector);\n if (handModeButton) {\n handModeButton.hidden = true;\n this.handSwitchHidden = true;\n mutationInstance.disconnect();\n }\n });\n mutationInstance.observe(document.body, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n });\n }\n }\n\n /**\n * It will open any formula written in Keyboard mode with the hand mode with the default hand trace.\n *\n * @param {String} mathml The original KeyBoard MathML\n * @param {Object} editor The editor object.\n */\n async openHandOnKeyboardMathML(mathml, editor) {\n // First, as an editor requirement, we need to update the editor object with the current MathML formula.\n // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed.\n await new Promise((resolve) => {\n editor.setMathMLWithCallback(mathml, resolve);\n });\n\n // We wait until the hand editor object exists.\n await this.waitForHand(editor);\n\n // Logic to get the hand traces and open the formula in hand mode.\n // This logic comes from the editor.\n const handEditor = editor.hand;\n editor.handTemporalMathML = editor.getMathML();\n const handCoordinates = editor.editorModel.getHandStrokes();\n handEditor.setStrokes(handCoordinates);\n handEditor.fitStrokes(true);\n editor.openHand();\n }\n\n /**\n * Waits until the hand editor object exists.\n * @param {Obect} editor The editor object.\n */\n async waitForHand(editor) {\n while (!editor.hand) {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n\n /**\n * Sets the correct toolbar depending if exist other custom toolbars\n * at the same time (e.g: Chemistry).\n */\n updateToolbar() {\n this.updateTitle(this.modalDialogInstance);\n const customEditor = this.customEditors.getActiveEditor();\n\n let toolbar;\n if (customEditor) {\n toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar;\n\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n }\n } else {\n toolbar = this.getToolbar();\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n this.customEditors.disable();\n }\n }\n\n return toolbar;\n }\n\n /**\n * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled\n * sets the custom editor title. Otherwise sets the default title.\n */\n updateTitle() {\n const customEditor = this.customEditors.getActiveEditor();\n if (customEditor) {\n this.modalDialogInstance.setTitle(customEditor.title);\n } else {\n this.modalDialogInstance.setTitle(\"MathType\");\n }\n }\n\n /**\n * Returns the editor toolbar, depending on the configuration local or server side.\n * @returns {String} - Toolbar identifier.\n */\n getToolbar() {\n let toolbar = \"general\";\n if (\"toolbar\" in this.editorAttributes) {\n ({ toolbar } = this.editorAttributes);\n }\n // TODO: Change global integration variable for integration custom toolbar.\n if (toolbar === \"general\") {\n // eslint-disable-next-line camelcase\n toolbar =\n typeof _wrs_int_wirisProperties === \"undefined\" || typeof _wrs_int_wirisProperties.toolbar === \"undefined\"\n ? \"general\"\n : _wrs_int_wirisProperties.toolbar;\n }\n\n return toolbar;\n }\n\n /**\n * Sets the current {@link ContentManager.editor} instance toolbar.\n * @param {String} toolbar - The toolbar name.\n */\n setToolbar(toolbar) {\n this.toolbar = toolbar;\n this.editor.setParams({ toolbar: this.toolbar });\n }\n\n /**\n * Sets the custom headers added on editor requests.\n * @returns {Object} headers - key value headers.\n */\n setCustomHeaders(headers) {\n let headersObj = {};\n\n // We control that we only get String or Object as the input.\n if (typeof headers === \"object\") {\n headersObj = headers;\n } else if (typeof headers === \"string\") {\n headersObj = Util.convertStringToObject(headers);\n }\n\n this.editor.setParams({ customHeaders: headersObj });\n return headersObj;\n }\n\n /**\n * Returns true if the content of the editor has been changed. The logic of the changes\n * is delegated to {@link EditorListener} class.\n * @returns {Boolean} True if the editor content has been changed. False otherwise.\n */\n hasChanges() {\n return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged();\n }\n\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */\n onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) {\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n // Code to detect Esc event.\n // There should be only one element with class name 'wrs_pressed' at the same time.\n let list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_select wrs_pressed\");\n if (list.length === 0) {\n this.modalDialogInstance.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.modalDialogInstance.submitButton) {\n // Focus is on OK button.\n this.editor.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.querySelector('[title=\"Manual\"]') === document.activeElement) {\n // Focus is on minimize button (_).\n this.modalDialogInstance.closeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n if (document.activeElement === this.modalDialogInstance.minimizeDiv) {\n // Focus on cancel button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n this.modalDialogInstance.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.modalDialogInstance.cancelButton) {\n // Focus is on X button.\n this.modalDialogInstance.minimizeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.activeElement === this.modalDialogInstance.closeDiv) {\n // Focus on help button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n const element = document.querySelector('[title=\"Manual\"]');\n element.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n } else {\n // There should be only one element with class name 'wrs_formulaDisplay'.\n const element = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n if (element.getAttribute(\"class\") === \"wrs_formulaDisplay wrs_focused\") {\n // Focus is on formuladisplay.\n this.modalDialogInstance.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n }\n }\n}\n","/**\n * A custom editor is MathType editor with a different\n * @typedef {Object} CustomEditor\n * @property {String} CustomEditor.name - Custom editor name.\n * @property {String} CustomEditor.toolbar - Custom editor toolbar.\n * @property {String} CustomEditor.icon - Custom editor icon.\n * @property {String} CustomEditor.confVariable - Configuration property to manage\n * the availability of the custom editor.\n * @property {String} CustomEditor.title - Custom editor modal dialog title.\n * @property {String} CustomEditor.tooltip - Custom editor icon tooltip.\n */\n\nexport default class CustomEditors {\n /**\n * @classdesc\n * This class represents the MathType custom editors manager.\n * A custom editor is MathType editor with a custom toolbar.\n * This class associates a {@link CustomEditor} to:\n * - It's own formulas\n * - A custom toolbar\n * - An icon to open it from a HTML editor.\n * - A tooltip for the icon.\n * - A global variable to enable or disable it globally.\n * @constructs\n */\n constructor() {\n /**\n * The custom editors.\n * @type {Array.}\n */\n\n this.editors = [];\n /**\n * The active editor name.\n * @type {String}\n */\n this.activeEditor = \"default\";\n }\n\n /**\n * Adds a {@link CustomEditor} to editors array.\n * @param {String} editorName - The editor name.\n * @param {CustomEditor} editorParams - The custom editor parameters.\n */\n addEditor(editorName, editorParams) {\n const customEditor = {};\n customEditor.name = editorParams.name;\n customEditor.toolbar = editorParams.toolbar;\n customEditor.icon = editorParams.icon;\n customEditor.confVariable = editorParams.confVariable;\n customEditor.title = editorParams.title;\n customEditor.tooltip = editorParams.tooltip;\n this.editors[editorName] = customEditor;\n }\n\n /**\n * Enables a {@link CustomEditor}.\n * @param {String} customEditorName - The custom editor name.\n */\n enable(customEditorName) {\n this.activeEditor = customEditorName;\n }\n\n /**\n * Disables a {@link CustomEditor}.\n */\n disable() {\n this.activeEditor = \"default\";\n }\n\n /**\n * Returns the active editor.\n * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise.\n */\n getActiveEditor() {\n if (this.activeEditor !== \"default\") {\n return this.editors[this.activeEditor];\n }\n return null;\n }\n}\n","/**\n * Represents the configuration properties generated from the frontend (JavaScript variables).\n * @type {Object}\n * @property {string} imageClassName - Default MathType formula image class.\n * @property {string} imageClassName - Default MathType CAS image class.\n * @ignore\n */\nconst jsProperties = {\n imageCustomEditorName: \"data-custom-editor\",\n imageClassName: \"Wirisformula\",\n CASClassName: \"Wiriscas\",\n};\nexport default jsProperties;\n","export default class Event {\n /**\n * @classdesc\n * This class represents a custom event. Events should be fired by the {@link Listener} class.\n *\n * ```js\n * let customEvent = new Event();\n * customEvent.properties = {};\n *\n * let listeners = new Listeners();\n * listeners.newListener(eventName, callback);\n *\n * listeners.fire(eventName, customEvent) *\n * ```\n * @constructs\n */\n constructor() {\n /**\n * Indicates if the event should be cancelled.\n * @type {Boolean}\n */\n\n this.cancelled = false;\n /**\n * Indicates if the event should be prevented.\n * @type {Boolean}\n */\n this.defaultPrevented = false;\n }\n\n /**\n * Cancels the event.\n */\n cancel() {\n this.cancelled = true;\n }\n\n /**\n * Prevents the default action.\n */\n preventDefault() {\n this.defaultPrevented = true;\n }\n}\n","import IntegrationModel from \"./integrationmodel\";\n\n/**\n\n */\nexport default class PopUpMessage {\n /**\n * @classdesc\n * This class represents a dialog message overlaying a DOM element in order to\n * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears\n * o canceled. In this last case a callback function should be called.\n * @constructs\n * @param {Object} popupMessageAttributes - Object containing popup properties.\n * @param {HTMLElement} popupMessageAttributes.overlayElement - Element to overlay.\n * @param {Object} popupMessageAttributes.callbacks - Contains callback\n * methods for close and cancel actions.\n * @param {Object} popupMessageAttributes.strings - Contains all the strings needed.\n */\n constructor(popupMessageAttributes) {\n /**\n * Element to be overlaid when the popup appears.\n */\n this.overlayElement = popupMessageAttributes.overlayElement;\n\n this.callbacks = popupMessageAttributes.callbacks;\n\n /**\n * HTMLElement element to wrap all HTML elements inside the popupMessage.\n */\n this.overlayWrapper = this.overlayElement.appendChild(document.createElement(\"div\"));\n this.overlayWrapper.setAttribute(\"class\", \"wrs_popupmessage_overlay_envolture\");\n\n /**\n * HTMLElement to display the popup message, close button and cancel button.\n */\n this.message = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n this.message.id = \"wrs_popupmessage\";\n this.message.setAttribute(\"class\", \"wrs_popupmessage_panel\");\n this.message.setAttribute(\"role\", \"dialog\");\n this.message.setAttribute(\"aria-describedby\", \"description_txt\");\n const paragraph = document.createElement(\"p\");\n const text = document.createTextNode(popupMessageAttributes.strings.message);\n paragraph.appendChild(text);\n paragraph.id = \"description_txt\";\n this.message.appendChild(paragraph);\n\n /**\n * HTML element overlaying the overlayElement.\n */\n const overlay = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n overlay.setAttribute(\"class\", \"wrs_popupmessage_overlay\");\n // We create a overlay that close popup message on click in there\n overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n\n /**\n * HTML element containing cancel and close buttons.\n */\n this.buttonArea = this.message.appendChild(document.createElement(\"div\"));\n this.buttonArea.setAttribute(\"class\", \"wrs_popupmessage_button_area\");\n this.buttonArea.id = \"wrs_popup_button_area\";\n\n // Close button arguments.\n const buttonSubmitArguments = {\n class: \"wrs_button_accept\",\n innerHTML: popupMessageAttributes.strings.submitString,\n id: \"wrs_popup_accept_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-close-button\",\n };\n\n /**\n * Close button arguments.\n */\n this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this));\n this.buttonArea.appendChild(this.closeButton);\n\n // Cancel button arguments.\n const buttonCancelArguments = {\n class: \"wrs_button_cancel\",\n innerHTML: popupMessageAttributes.strings.cancelString,\n id: \"wrs_popup_cancel_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-cancel-button\",\n };\n\n /**\n * Cancel button.\n */\n this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this));\n this.buttonArea.appendChild(this.cancelButton);\n }\n\n /**\n * This method create a button with arguments and return button dom object\n * @param {Object} parameters - An object containing id, class and innerHTML button text.\n * @param {String} parameters.id - Button id.\n * @param {String} parameters.class - Button class name.\n * @param {String} parameters.innerHTML - Button innerHTML text.\n * @param {Object} callback- Callback method to call on click event.\n * @returns {HTMLElement} HTML button.\n */\n // eslint-disable-next-line class-methods-use-this\n createButton(parameters, callback) {\n let element = {};\n element = document.createElement(\"button\");\n element.setAttribute(\"id\", parameters.id);\n element.setAttribute(\"class\", parameters.class);\n element.innerHTML = parameters.innerHTML;\n element.addEventListener(\"click\", callback);\n if (parameters[\"data-testid\"]) {\n element.setAttribute(\"data-testid\", parameters[\"data-testid\"]);\n }\n\n return element;\n }\n\n /**\n * Shows the popupmessage containing a message, and two buttons\n * to cancel the action or close the modal dialog.\n */\n show() {\n if (this.overlayWrapper.style.display !== \"block\") {\n // Clear focus with blur for prevent press any key.\n document.activeElement.blur();\n this.overlayWrapper.style.display = \"block\";\n this.closeButton.focus();\n } else {\n this.overlayWrapper.style.display = \"none\";\n // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow\n }\n }\n\n /**\n * This method cancels the popupMessage: the dialog disappears revealing the overlaid element.\n * A callback method is called (if defined). For example a method to focus the overlaid element.\n */\n cancelAction() {\n this.overlayWrapper.style.display = \"none\";\n if (typeof this.callbacks.cancelCallback !== \"undefined\") {\n this.callbacks.cancelCallback();\n // Set temporal image to null to prevent loading\n // an existent formula when starting one from scratch. Make focus come back too.\n // IntegrationModel.setActionsOnCancelButtons();\n }\n }\n\n /**\n * This method closes the popupMessage: the dialog disappears and the close callback is called.\n * For example to close the overlaid element.\n */\n closeAction() {\n this.cancelAction();\n if (typeof this.callbacks.closeCallback !== \"undefined\") {\n this.callbacks.closeCallback();\n }\n IntegrationModel.setActionsOnCancelButtons();\n }\n\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */\n onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Code to detect Esc event.\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n this.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.closeButton) {\n this.cancelButton.focus();\n } else {\n this.closeButton.focus();\n }\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n}\n","// eslint-disable-next-line max-classes-per-file\nimport PopUpMessage from \"./popupmessage\";\nimport Util from \"./util\";\nimport Configuration from \"./configuration\";\nimport Listeners from \"./listeners\";\nimport StringManager from \"./stringmanager\";\nimport ContentManager from \"./contentmanager\";\nimport Telemeter from \"./telemeter\";\nimport IntegrationModel from \"./integrationmodel\";\nimport Core from \"./core.src\";\n\nimport closeIcon from \"../styles/icons/general/close_icon.svg\"; //eslint-disable-line\nimport closeHoverIcon from \"../styles/icons/hover/close_icon_h.svg\"; //eslint-disable-line\nimport fullsIcon from \"../styles/icons/general/fulls_icon.svg\"; //eslint-disable-line\nimport fullsHoverIcon from \"../styles/icons/hover/fulls_icon_h.svg\"; //eslint-disable-line\nimport minIcon from \"../styles/icons/general/min_icon.svg\"; //eslint-disable-line\nimport minHoverIcon from \"../styles/icons/hover/min_icon_h.svg\"; //eslint-disable-line\nimport minsIcon from \"../styles/icons/general/mins_icon.svg\"; //eslint-disable-line\nimport minsHoverIcon from \"../styles/icons/hover/mins_icon_h.svg\"; //eslint-disable-line\nimport maxIcon from \"../styles/icons/general/max_icon.svg\"; //eslint-disable-line\nimport maxHoverIcon from \"../styles/icons/hover/max_icon_h.svg\"; //eslint-disable-line\n\n/**\n * @typedef {Object} DeviceProperties\n * @property {String} DeviceProperties.orientation - Indicates of the orientation of the device.\n * @property {Boolean} DeviceProperties.isAndroid - True if the device is Android. False otherwise.\n * @property {Boolean} DeviceProperties.isIOS - True if the device is iOS. False otherwise.\n * @property {Boolean} DeviceProperties.isMobile - True if the device is a mobile one.\n * False otherwise.\n * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one.\n * False otherwise.\n */\n\nexport default class ModalDialog {\n /**\n * @classdesc\n * This class represents a modal dialog. The modal dialog admits\n * a {@link ContentManager} instance to manage the content of the dialog.\n * @constructs\n * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes.\n */\n constructor(modalDialogAttributes) {\n this.attributes = modalDialogAttributes;\n\n // Metrics.\n const ua = navigator.userAgent.toLowerCase();\n const isAndroid = ua.indexOf(\"android\") > -1;\n const isIOS = ContentManager.isIOS();\n this.iosSoftkeyboardOpened = false;\n this.iosMeasureUnit = ua.indexOf(\"crios\") === -1 ? \"%\" : \"vh\";\n this.iosDivHeight = `100%${this.iosMeasureUnit}`;\n\n const deviceWidth = window.outerWidth;\n const deviceHeight = window.outerHeight;\n\n const landscape = deviceWidth > deviceHeight;\n const portrait = deviceWidth < deviceHeight;\n\n // TODO: Detect isMobile without using editor metrics.\n const isLandscape = landscape && this.attributes.height > deviceHeight;\n const isPortrait = portrait && this.attributes.width > deviceWidth;\n const isMobile = ContentManager.isMobile();\n\n // Obtain number of current instance.\n this.instanceId = document.getElementsByClassName(\"wrs_modal_dialogContainer\").length;\n\n // Device object properties.\n\n /**\n * @type {DeviceProperties}\n */\n this.deviceProperties = {\n orientation: landscape ? \"landscape\" : \"portrait\",\n isAndroid,\n isIOS,\n isMobile,\n isDesktop: !isMobile && !isIOS && !isAndroid,\n };\n\n this.properties = {\n created: false,\n state: \"\",\n previousState: \"\",\n position: { bottom: 0, right: 10 },\n size: { height: 338, width: 580 },\n };\n\n /**\n * Object to keep website's style before change it on lock scroll for mobile devices.\n * @type {Object}\n * @property {String} bodyStylePosition - Previous body style position.\n * @property {String} bodyStyleOverflow - Previous body style overflow.\n * @property {String} htmlStyleOverflow - Previous body style overflow.\n * @property {String} windowScrollX - Previous window's scroll Y.\n * @property {String} windowScrollY - Previous window's scroll X.\n */\n this.websiteBeforeLockParameters = null;\n\n let attributes = {};\n attributes.class = \"wrs_modal_overlay\";\n attributes.id = this.getElementId(attributes.class);\n this.overlay = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_title_bar\";\n attributes.id = this.getElementId(attributes.class);\n this.titleBar = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_title\";\n attributes.id = this.getElementId(attributes.class);\n this.title = Util.createElement(\"div\", attributes);\n this.title.innerHTML = \"offline\";\n\n attributes = {};\n attributes.class = \"wrs_modal_close_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"close\");\n attributes.style = {};\n this.closeDiv = Util.createElement(\"a\", attributes);\n this.closeDiv.setAttribute(\"role\", \"button\");\n this.closeDiv.setAttribute(\"tabindex\", 3);\n // Apply styles and events after the creation as createElement doesn't process them correctly\n let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`;\n let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`;\n this.closeDiv.setAttribute(\"style\", generalStyle);\n this.closeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.closeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.closeDiv.setAttribute(\"data-testid\", \"mtcteditor-close-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_stack_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"exit_fullscreen\");\n this.stackDiv = Util.createElement(\"a\", attributes);\n this.stackDiv.setAttribute(\"role\", \"button\");\n this.stackDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`;\n hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`;\n this.stackDiv.setAttribute(\"style\", generalStyle);\n this.stackDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.stackDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.stackDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-disable-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_maximize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"fullscreen\");\n this.maximizeDiv = Util.createElement(\"a\", attributes);\n this.maximizeDiv.setAttribute(\"role\", \"button\");\n this.maximizeDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`;\n this.maximizeDiv.setAttribute(\"style\", generalStyle);\n this.maximizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.maximizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.maximizeDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-enable-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_minimize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"minimize\");\n this.minimizeDiv = Util.createElement(\"a\", attributes);\n this.minimizeDiv.setAttribute(\"role\", \"button\");\n this.minimizeDiv.setAttribute(\"tabindex\", 1);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identify the element in automated testing\n this.minimizeDiv.setAttribute(\"data-testid\", \"mtcteditor-minimize-button\");\n\n attributes = {};\n attributes.class = \"wrs_modal_dialogContainer\";\n attributes.id = this.getElementId(attributes.class);\n attributes.role = \"dialog\";\n this.container = Util.createElement(\"div\", attributes);\n this.container.setAttribute(\"aria-labeledby\", \"wrs_modal_title[0]\");\n\n attributes = {};\n attributes.class = \"wrs_modal_wrapper\";\n attributes.id = this.getElementId(attributes.class);\n this.wrapper = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_content_container\";\n attributes.id = this.getElementId(attributes.class);\n this.contentContainer = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_controls\";\n attributes.id = this.getElementId(attributes.class);\n this.controls = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_buttons_container\";\n attributes.id = this.getElementId(attributes.class);\n this.buttonContainer = Util.createElement(\"div\", attributes);\n\n // Buttons: all button must be created using createSubmitButton method.\n this.submitButton = this.createSubmitButton(\n {\n id: this.getElementId(\"wrs_modal_button_accept\"),\n class: \"wrs_modal_button_accept\",\n innerHTML: StringManager.get(\"accept\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-insert-button\",\n },\n this.submitAction.bind(this),\n );\n\n this.cancelButton = this.createSubmitButton(\n {\n id: this.getElementId(\"wrs_modal_button_cancel\"),\n class: \"wrs_modal_button_cancel\",\n innerHTML: StringManager.get(\"cancel\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cancel-button\",\n },\n this.cancelAction.bind(this),\n );\n\n this.contentManager = null;\n\n // Overlay popup.\n const popupStrings = {\n cancelString: StringManager.get(\"cancel\"),\n submitString: StringManager.get(\"close\"),\n message: StringManager.get(\"close_modal_warning\"),\n };\n\n const callbacks = {\n closeCallback: () => {\n this.close(\"mtc_close\");\n },\n cancelCallback: () => {\n this.focus();\n },\n };\n\n const popupupProperties = {\n overlayElement: this.container,\n callbacks,\n strings: popupStrings,\n };\n\n this.popup = new PopUpMessage(popupupProperties);\n\n /**\n * Indicates if directionality of the modal dialog is RTL. false by default.\n * @type {Boolean}\n */\n this.rtl = false;\n if (\"rtl\" in this.attributes) {\n this.rtl = this.attributes.rtl;\n }\n\n // Event handlers need modal instance context.\n this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this);\n this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this);\n }\n\n /**\n * This method sets an ContentManager instance to ModalDialog. ContentManager\n * manages the logic of ModalDialog content: submit, update, close and changes.\n * @param {ContentManager} contentManager - ContentManager instance.\n */\n setContentManager(contentManager) {\n this.contentManager = contentManager;\n }\n\n /**\n * Returns the modal contentElement object.\n * @returns {ContentManager} the instance of the ContentManager class.\n */\n getContentManager() {\n return this.contentManager;\n }\n\n /**\n * This method is called when the modal object has been submitted. Calls\n * contentElement submitAction method - if exists - and closes the modal\n * object. No logic about the content should be placed here,\n * contentElement.submitAction is the responsible of the content logic.\n */\n async submitAction() {\n if (typeof this.contentManager.submitAction !== \"undefined\") {\n this.contentManager.submitAction();\n }\n\n await this.close(\"mtc_insert\");\n }\n\n /**\n * Performs the cancel action.\n * If there are no changes in the content, it closes the modal.\n * Otherwise, it shows a pop-up message to confirm the cancel action.\n * @returns {Promise} - A promise that resolves when the modal is closed.\n */\n async cancelAction() {\n if (typeof this.contentManager.hasChanges === \"undefined\" || !this.contentManager.hasChanges()) {\n IntegrationModel.setActionsOnCancelButtons();\n await this.close(\"mtc_close\");\n } else {\n this.showPopUpMessage();\n }\n }\n\n /**\n * Returns a button element.\n * @param {Object} properties - Input button properties.\n * @param {String} properties.class - Input button class.\n * @param {String} properties.innerHTML - Input button innerHTML.\n * @param {Object} callback - Callback function associated to click event.\n * @returns {HTMLButtonElement} The button element.\n *\n */\n // eslint-disable-next-line class-methods-use-this\n createSubmitButton(properties, callback) {\n class SubmitButton {\n constructor() {\n this.element = document.createElement(\"button\");\n this.element.id = properties.id;\n this.element.className = properties.class;\n this.element.innerHTML = properties.innerHTML;\n this.element.dataset.testid = properties[\"data-testid\"];\n Util.addEvent(this.element, \"click\", callback);\n }\n\n getElement() {\n return this.element;\n }\n }\n return new SubmitButton(properties, callback).getElement();\n }\n\n /**\n * Creates the modal window object inserting a contentElement object.\n */\n create() {\n /* Modal Window Structure\n _____________________________________________________________________________________\n |wrs_modal_dialog_Container |\n | _________________________________________________________________________________ |\n | |title_bar minimize_button stack_button close_button | |\n | |_______________________________________________________________________________| |\n | |wrapper | |\n | | _____________________________________________________________________________ | |\n | | |content | | |\n | | | | | |\n | | | | | |\n | | |___________________________________________________________________________| | |\n | | _____________________________________________________________________________ | |\n | | |controls | | |\n | | | ___________________________________ | | |\n | | | |buttonContainer | | | |\n | | | | _______________________________ | | | |\n | | | | |button_accept | button_cancel| | | | |\n | | | |_|_____________ |______________|_| | | |\n | | |___________________________________________________________________________| | |\n | |_______________________________________________________________________________| |\n |___________________________________________________________________________________| */\n\n this.titleBar.appendChild(this.closeDiv);\n this.titleBar.appendChild(this.stackDiv);\n this.titleBar.appendChild(this.maximizeDiv);\n this.titleBar.appendChild(this.minimizeDiv);\n this.titleBar.appendChild(this.title);\n\n if (this.deviceProperties.isDesktop) {\n this.container.appendChild(this.titleBar);\n }\n\n this.wrapper.appendChild(this.contentContainer);\n this.wrapper.appendChild(this.controls);\n\n this.controls.appendChild(this.buttonContainer);\n\n this.buttonContainer.appendChild(this.submitButton);\n this.buttonContainer.appendChild(this.cancelButton);\n\n this.container.appendChild(this.wrapper);\n\n // Check if browser has scrollBar before modal has modified.\n this.recalculateScrollBar();\n\n document.body.appendChild(this.container);\n document.body.appendChild(this.overlay);\n\n if (this.deviceProperties.isDesktop) {\n // Desktop.\n this.createModalWindowDesktop();\n this.createResizeButtons();\n\n this.addListeners();\n // Maximize window only when the configuration is set and the device is not iOS or Android.\n if (Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n } else if (this.deviceProperties.isAndroid) {\n this.createModalWindowAndroid();\n } else if (this.deviceProperties.isIOS) {\n this.createModalWindowIos();\n }\n\n if (this.contentManager != null) {\n this.contentManager.insert(this);\n }\n\n this.properties.open = true;\n this.properties.created = true;\n\n // Checks language directionality.\n if (this.isRTL()) {\n this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`;\n this.container.className += \" wrs_modal_rtl\";\n }\n }\n\n /**\n * Creates a button in the modal object to resize it.\n */\n createResizeButtons() {\n // This is a definition of Resize Button Bottom-Right.\n this.resizerBR = document.createElement(\"div\");\n this.resizerBR.className = \"wrs_bottom_right_resizer\";\n this.resizerBR.innerHTML = \"◢\";\n // To identifiy the element in automated testing\n this.resizerBR.dataset.testid = \"mtcteditor-resize-button-right\";\n // This is a definition of Resize Button Top-Left.\n this.resizerTL = document.createElement(\"div\");\n this.resizerTL.className = \"wrs_bottom_left_resizer\";\n // To identifiy the element in automated testing\n this.resizerTL.dataset.testid = \"mtcteditor-resize-button-left\";\n // Append resize buttons to modal.\n this.container.appendChild(this.resizerBR);\n this.titleBar.appendChild(this.resizerTL);\n // Add events to resize on click and drag.\n Util.addEvent(this.resizerBR, \"mousedown\", this.activateResizeStateBR.bind(this));\n Util.addEvent(this.resizerTL, \"mousedown\", this.activateResizeStateTL.bind(this));\n }\n\n /**\n * Initialize variables for Bottom-Right resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */\n activateResizeStateBR(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, false);\n }\n\n /**\n * Initialize variables for Top-Left resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */\n activateResizeStateTL(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, true);\n }\n\n /**\n * Common method to initialize variables at resize.\n * @param {MouseEvent} mouseEvent - Mouse event.\n */\n initializeResizeProperties(mouseEvent, leftOption) {\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n this.resizeDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y,\n };\n // Save Initial state of modal to compare on drag and obtain the difference.\n this.initialWidth = parseInt(this.container.style.width, 10);\n this.initialHeight = parseInt(this.container.style.height, 10);\n if (!leftOption) {\n this.initialRight = parseInt(this.container.style.right, 10);\n this.initialBottom = parseInt(this.container.style.bottom, 10);\n } else {\n this.leftScale = true;\n }\n if (!this.initialRight) {\n this.initialRight = 0;\n }\n if (!this.initialBottom) {\n this.initialBottom = 0;\n }\n // Disable mouse events on editor when we start to drag modal.\n document.body.style[\"user-select\"] = \"none\";\n }\n\n /**\n * This method opens the modal window, restoring the previous state, position and metrics,\n * if exists. By default the modal object opens in stack mode.\n */\n open() {\n // Removing close class.\n this.removeClass(\"wrs_closed\");\n // Hiding keyboard for mobile devices.\n const { isIOS } = this.deviceProperties;\n const { isAndroid } = this.deviceProperties;\n const { isMobile } = this.deviceProperties;\n if (isIOS || isAndroid || isMobile) {\n // Restore scale to 1.\n this.restoreWebsiteScale();\n this.lockWebsiteScroll();\n // Due to editor wait we need to wait until editor focus.\n setTimeout(() => {\n this.hideKeyboard();\n }, 400);\n }\n\n // New modal window. He need to create the whole object.\n if (!this.properties.created) {\n this.create();\n } else {\n // Previous state closed. Open method can be called even the previous state is open,\n // for example updating the content of the modal object.\n if (!this.properties.open) {\n this.properties.open = true;\n\n // Restoring the previous open state: if the modal object has been closed\n // re-open it should preserve the state and the metrics.\n if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) {\n this.restoreState();\n }\n }\n\n // Maximize window only when the configuration is set and the device is not iOs or Android.\n if (this.deviceProperties.isDesktop && Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n\n // In iOS we need to recalculate the size of the modal object because\n // iOS keyboard is a float div which can overlay the modal object.\n if (this.deviceProperties.isIOS) {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`${100 + this.iosMeasureUnit}`);\n }\n }\n\n if (!ContentManager.isEditorLoaded()) {\n const listener = Listeners.newListener(\"onLoad\", () => {\n this.contentManager.onOpen(this);\n });\n this.contentManager.addListener(listener);\n } else {\n this.contentManager.onOpen(this);\n }\n }\n\n /**\n * Closes the modal.\n * Removes specific CSS classes, saves modal properties, unlocks website scroll,\n * sets the 'open' property to false, and triggers the 'onModalClose' event.\n * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger.\n * @returns {Promise} A promise that resolves when the modal is closed.\n */\n async close(trigger) {\n this.removeClass(\"wrs_maximized\");\n this.removeClass(\"wrs_minimized\");\n this.removeClass(\"wrs_stack\");\n this.addClass(\"wrs_closed\");\n this.saveModalProperties();\n this.unlockWebsiteScroll();\n this.properties.open = false;\n\n if (trigger) {\n try {\n await Telemeter.telemeter.track(\"CLOSED_MTCT_EDITOR\", {\n toolbar: this.contentManager.toolbar,\n trigger: trigger,\n });\n } catch (error) {\n console.error(\"Error tracking CLOSED_MTCT_EDITOR\", error);\n }\n }\n\n Core.globalListeners.fire(\"onModalClose\", {});\n }\n /**\n * Closes modal window and destroys the object.\n */\n destroy() {\n // Close modal window.\n this.close();\n // Remove listeners and destroy the object.\n this.removeListeners();\n this.overlay.remove();\n this.container.remove();\n // Reset properties to allow open again.\n this.properties.created = false;\n }\n\n /**\n * Sets the website scale to one.\n */\n // eslint-disable-next-line class-methods-use-this\n restoreWebsiteScale() {\n let viewportmeta = document.querySelector(\"meta[name=viewport]\");\n // Let the equal symbols in order to search and make meta's final content.\n const contentAttrsToUpdate = [\"initial-scale=\", \"minimum-scale=\", \"maximum-scale=\"];\n const contentAttrsValuesToUpdate = [\"1.0\", \"1.0\", \"1.0\"];\n const setMetaAttrFunc = (viewportelement, contentAttrs) => {\n const contentAttr = viewportelement.getAttribute(\"content\");\n // If it exists, we need to maintain old values and put our values.\n if (contentAttr) {\n const attrArray = contentAttr.split(\",\");\n let finalContentMeta = \"\";\n const oldAttrs = [];\n for (let i = 0; i < attrArray.length; i += 1) {\n let isAttrToUpdate = false;\n let j = 0;\n while (!isAttrToUpdate && j < contentAttrs.length) {\n if (attrArray[i].indexOf(contentAttrs[j])) {\n isAttrToUpdate = true;\n }\n j += 1;\n }\n\n if (!isAttrToUpdate) {\n oldAttrs.push(attrArray[i]);\n }\n }\n\n for (let i = 0; i < contentAttrs.length; i += 1) {\n const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i];\n finalContentMeta += i === 0 ? attr : `,${attr}`;\n }\n\n for (let i = 0; i < oldAttrs.length; i += 1) {\n finalContentMeta += `,${oldAttrs[i]}`;\n }\n viewportelement.setAttribute(\"content\", finalContentMeta);\n // It needs to set to empty because setAttribute refresh only when attribute is different.\n viewportelement.setAttribute(\"content\", \"\");\n viewportelement.setAttribute(\"content\", contentAttr);\n } else {\n viewportelement.setAttribute(\"content\", \"initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\");\n viewportelement.removeAttribute(\"content\");\n }\n };\n\n if (!viewportmeta) {\n viewportmeta = document.createElement(\"meta\");\n document.getElementsByTagName(\"head\")[0].appendChild(viewportmeta);\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate, contentAttrsValuesToUpdate);\n viewportmeta.remove();\n } else {\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate, contentAttrsValuesToUpdate);\n }\n }\n\n /**\n * Locks website scroll for mobile devices.\n */\n lockWebsiteScroll() {\n this.websiteBeforeLockParameters = {\n bodyStylePosition: document.body.style.position ? document.body.style.position : \"\",\n bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : \"\",\n htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : \"\",\n windowScrollX: window.scrollX,\n windowScrollY: window.scrollY,\n };\n }\n\n /**\n * Unlocks website scroll for mobile devices.\n */\n unlockWebsiteScroll() {\n if (this.websiteBeforeLockParameters) {\n document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition;\n document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow;\n document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow;\n const { windowScrollX } = this.websiteBeforeLockParameters;\n const { windowScrollY } = this.websiteBeforeLockParameters;\n window.scrollTo(windowScrollX, windowScrollY);\n this.websiteBeforeLockParameters = null;\n }\n }\n\n /**\n * Util function to known if browser is IE11.\n * @returns {Boolean} true if the browser is IE11. false otherwise.\n */\n // eslint-disable-next-line class-methods-use-this\n isIE11() {\n if (\n navigator.userAgent.search(\"Msie/\") >= 0 ||\n navigator.userAgent.search(\"Trident/\") >= 0 ||\n navigator.userAgent.search(\"Edge/\") >= 0\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Returns if the current language type is RTL.\n * @return {Boolean} true if current language is RTL. false otherwise.\n */\n isRTL() {\n if (this.attributes.language === \"ar\" || this.attributes.language === \"he\") {\n return true;\n }\n return this.rtl;\n }\n\n /**\n * Adds a class to all modal ModalDialog DOM elements.\n * @param {String} className - Class name.\n */\n addClass(className) {\n Util.addClass(this.overlay, className);\n Util.addClass(this.titleBar, className);\n Util.addClass(this.overlay, className);\n Util.addClass(this.container, className);\n Util.addClass(this.contentContainer, className);\n Util.addClass(this.stackDiv, className);\n Util.addClass(this.minimizeDiv, className);\n Util.addClass(this.maximizeDiv, className);\n Util.addClass(this.wrapper, className);\n }\n\n /**\n * Remove a class from all modal DOM elements.\n * @param {String} className - Class name.\n */\n removeClass(className) {\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.titleBar, className);\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.container, className);\n Util.removeClass(this.contentContainer, className);\n Util.removeClass(this.stackDiv, className);\n Util.removeClass(this.minimizeDiv, className);\n Util.removeClass(this.maximizeDiv, className);\n Util.removeClass(this.wrapper, className);\n }\n\n /**\n * Create modal dialog for desktop.\n */\n createModalWindowDesktop() {\n this.addClass(\"wrs_modal_desktop\");\n this.stack();\n }\n\n /**\n * Create modal dialog for non android devices.\n */\n createModalWindowAndroid() {\n this.addClass(\"wrs_modal_android\");\n window.addEventListener(\"resize\", this.orientationChangeAndroidSoftkeyboard.bind(this));\n }\n\n /**\n * Create modal dialog for iOS devices.\n */\n createModalWindowIos() {\n this.addClass(\"wrs_modal_ios\");\n // Refresh the size when the orientation is changed.\n window.addEventListener(\"resize\", this.orientationChangeIosSoftkeyboard.bind(this));\n }\n\n /**\n * Restore previous state, position and size of previous stacked modal dialog.\n */\n restoreState() {\n if (this.properties.state === \"maximized\") {\n // Reset states for prevent return to stack state.\n this.maximize();\n } else if (this.properties.state === \"minimized\") {\n // Reset states for prevent return to stack state.\n this.properties.state = this.properties.previousState;\n this.properties.previousState = \"\";\n this.minimize();\n } else {\n this.stack();\n }\n }\n\n /**\n * Stacks the modal object.\n */\n stack() {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"stack\";\n this.removeClass(\"wrs_maximized\");\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n this.addClass(\"wrs_stack\");\n\n // Change maximize/minimize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n\n this.restoreModalProperties();\n\n if (typeof this.resizerBR !== \"undefined\" && typeof this.resizerTL !== \"undefined\") {\n this.setResizeButtonsVisibility();\n }\n\n // Need recalculate position of actual modal because window can was changed in fullscreenmode.\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n this.focus();\n }\n\n /**\n * Minimizes the modal object.\n */\n minimize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n this.title.style.cursor = \"pointer\";\n if (this.properties.state === \"minimized\" && this.properties.previousState === \"stack\") {\n this.stack();\n } else if (this.properties.state === \"minimized\" && this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n // Setting css to prevent important tag into css style.\n this.container.style.height = \"30px\";\n this.container.style.width = \"250px\";\n this.container.style.bottom = \"0px\";\n this.container.style.right = \"10px\";\n\n this.removeListeners();\n this.properties.previousState = this.properties.state;\n this.properties.state = \"minimized\";\n this.setResizeButtonsVisibility();\n this.minimizeDiv.title = StringManager.get(\"maximize\");\n\n if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.removeClass(\"wrs_stack\");\n } else {\n this.removeClass(\"wrs_maximized\");\n }\n this.addClass(\"wrs_minimized\");\n\n // Change minimize icon to maximize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n }\n }\n\n /**\n * Maximizes the modal object.\n */\n maximize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n if (this.properties.state !== \"maximized\") {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"maximized\";\n }\n // Don't permit resize on maximize mode.\n this.setResizeButtonsVisibility();\n\n if (Util.containsClass(this.overlay, \"wrs_minimized\")) {\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n } else if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.container.style.left = null;\n this.container.style.top = null;\n this.removeClass(\"wrs_stack\");\n }\n\n this.addClass(\"wrs_maximized\");\n\n // Change maximize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n\n // Set size to 80% screen with a max size.\n this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10));\n if (this.container.clientHeight > 700) {\n this.container.style.height = \"700px\";\n }\n if (this.container.clientWidth > 1200) {\n this.container.style.width = \"1200px\";\n }\n\n // Setting modal position in center on screen.\n const { innerHeight } = window;\n const { innerWidth } = window;\n const { offsetHeight } = this.container;\n const { offsetWidth } = this.container;\n const bottom = innerHeight / 2 - offsetHeight / 2;\n const right = innerWidth / 2 - offsetWidth / 2;\n\n this.setPosition(bottom, right);\n this.recalculateScale();\n this.recalculatePosition();\n this.recalculateSize();\n this.focus();\n }\n\n /**\n * Expand again the modal object from a minimized state.\n */\n reExpand() {\n if (this.properties.state === \"minimized\") {\n if (this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n this.stack();\n }\n this.title.style.cursor = \"\";\n }\n }\n\n /**\n * Sets modal size.\n * @param {Number} height - Height of the ModalDialog\n * @param {Number} width - Width of the ModalDialog.\n */\n setSize(height, width) {\n this.container.style.height = `${height}px`;\n this.container.style.width = `${width}px`;\n this.recalculateSize();\n }\n\n /**\n * Sets modal position using bottom and right style attributes.\n * @param {number} bottom - bottom attribute.\n * @param {number} right - right attribute.\n */\n setPosition(bottom, right) {\n this.container.style.bottom = `${bottom}px`;\n this.container.style.right = `${right}px`;\n }\n\n /**\n * Saves position and size parameters of and open ModalDialog. This attributes\n * are needed to restore it on re-open.\n */\n saveModalProperties() {\n // Saving values of modal only when modal is in stack state.\n if (this.properties.state === \"stack\") {\n this.properties.position.bottom = parseInt(this.container.style.bottom, 10);\n this.properties.position.right = parseInt(this.container.style.right, 10);\n this.properties.size.width = parseInt(this.container.style.width, 10);\n this.properties.size.height = parseInt(this.container.style.height, 10);\n }\n }\n\n /**\n * Restore ModalDialog position and size parameters.\n */\n restoreModalProperties() {\n if (this.properties.state === \"stack\") {\n // Restoring Bottom and Right values from last modal.\n this.setPosition(this.properties.position.bottom, this.properties.position.right);\n // Restoring Height and Left values from last modal.\n this.setSize(this.properties.size.height, this.properties.size.width);\n }\n }\n\n /**\n * Sets the modal dialog initial size.\n */\n recalculateSize() {\n this.wrapper.style.width = `${this.container.clientWidth - 12}px`;\n this.wrapper.style.height = `${this.container.clientHeight - 38}px`;\n this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`;\n }\n\n /**\n * Enable or disable visibility of resize buttons in modal window depend on state.\n */\n setResizeButtonsVisibility() {\n if (this.properties.state === \"stack\") {\n this.resizerTL.style.visibility = \"visible\";\n this.resizerBR.style.visibility = \"visible\";\n } else {\n this.resizerTL.style.visibility = \"hidden\";\n this.resizerBR.style.visibility = \"hidden\";\n }\n }\n\n /**\n * Makes an object draggable adding mouse and touch events.\n */\n addListeners() {\n // Button events (maximize, minimize, stack and close).\n this.maximizeDiv.addEventListener(\"click\", this.maximize.bind(this), true);\n this.stackDiv.addEventListener(\"click\", this.stack.bind(this), true);\n this.minimizeDiv.addEventListener(\"click\", this.minimize.bind(this), true);\n this.closeDiv.addEventListener(\"click\", this.cancelAction.bind(this));\n this.maximizeDiv.addEventListener(\n \"keypress\",\n function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n }\n },\n true,\n );\n this.stackDiv.addEventListener(\n \"keypress\",\n function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n },\n true,\n );\n this.minimizeDiv.addEventListener(\n \"keypress\",\n function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n },\n true,\n );\n this.closeDiv.addEventListener(\"keypress\", function (e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n });\n this.title.addEventListener(\"click\", this.reExpand.bind(this));\n\n // Overlay events (close).\n this.overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n\n // Mouse events.\n Util.addEvent(window, \"mousedown\", this.startDrag.bind(this));\n Util.addEvent(window, \"mouseup\", this.stopDrag.bind(this));\n Util.addEvent(window, \"mousemove\", this.drag.bind(this));\n Util.addEvent(window, \"resize\", this.onWindowResize.bind(this));\n // Key events.\n Util.addEvent(window, \"keydown\", this.onKeyDown.bind(this));\n }\n\n /**\n * Removes draggable events from an object.\n */\n removeListeners() {\n // Mouse events.\n Util.removeEvent(window, \"mousedown\", this.startDrag);\n Util.removeEvent(window, \"mouseup\", this.stopDrag);\n Util.removeEvent(window, \"mousemove\", this.drag);\n Util.removeEvent(window, \"resize\", this.onWindowResize);\n // Key events.\n Util.removeEvent(window, \"keydown\", this.onKeyDown);\n }\n\n /**\n * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists)\n * @param {MouseEvent} mouseEvent - Mouse event.\n * @return {Object} With the X and Y coordinates.\n */\n // eslint-disable-next-line class-methods-use-this\n eventClient(mouseEvent) {\n if (typeof mouseEvent.clientX === \"undefined\" && mouseEvent.changedTouches) {\n const client = {\n X: mouseEvent.changedTouches[0].clientX,\n Y: mouseEvent.changedTouches[0].clientY,\n };\n return client;\n }\n const client = {\n X: mouseEvent.clientX,\n Y: mouseEvent.clientY,\n };\n return client;\n }\n\n /**\n * Start drag function: set the object dragDataObject with the draggable\n * object offsets coordinates.\n * when drag starts (on touchstart or mousedown events).\n * @param {MouseEvent} mouseEvent - Touchstart or mousedown event.\n */\n startDrag(mouseEvent) {\n if (this.properties.state === \"minimized\") {\n return;\n }\n if (mouseEvent.target === this.title) {\n if (typeof this.dragDataObject === \"undefined\" || this.dragDataObject === null) {\n // Save first click mouse point on screen.\n this.dragDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y,\n };\n // Reset last drag position when start drag.\n this.lastDrag = {\n x: \"0px\",\n y: \"0px\",\n };\n // Init right and bottom values for window modal if it isn't exist.\n if (this.container.style.right === \"\") {\n this.container.style.right = \"0px\";\n }\n if (this.container.style.bottom === \"\") {\n this.container.style.bottom = \"0px\";\n }\n\n // Needed for IE11 for apply disabled mouse events on editor because\n // internet explorer needs a dynamic object to apply this property.\n if (this.isIE11()) {\n // this.iframe.style['position'] = 'relative';\n }\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n // Obtain screen limits for prevent overflow.\n this.limitWindow = this.getLimitWindow();\n }\n }\n }\n\n /**\n * Updates dragDataObject with the draggable object coordinates when\n * the draggable object is being moved.\n * @param {MouseEvent} mouseEvent - The mouse event.\n */\n drag(mouseEvent) {\n if (this.dragDataObject) {\n mouseEvent.preventDefault();\n // Calculate max and min between actual mouse position and limit of screeen.\n // It restric the movement of modal into window.\n let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y);\n limitY = Math.max(this.limitWindow.maxPointer.y, limitY);\n let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x);\n limitX = Math.max(this.limitWindow.maxPointer.x, limitX);\n // Subtract limit with first position to obtain relative pixels increment\n // to the anchor point.\n const dragX = `${limitX - this.dragDataObject.x}px`;\n const dragY = `${limitY - this.dragDataObject.y}px`;\n // Save last valid position of modal before window overflow.\n this.lastDrag = {\n x: dragX,\n y: dragY,\n };\n // This move modal with hardware acceleration.\n this.container.style.transform = `translate3d(${dragX},${dragY},0)`;\n }\n if (this.resizeDataObject) {\n const { innerWidth } = window;\n const { innerHeight } = window;\n let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7);\n let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7);\n if (limitX < 0) {\n limitX = 0;\n }\n\n if (limitY < 0) {\n limitY = 0;\n }\n\n let scaleMultiplier;\n if (this.leftScale) {\n scaleMultiplier = -1;\n } else {\n scaleMultiplier = 1;\n }\n\n this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`;\n this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`;\n if (!this.leftScale) {\n if (this.resizeDataObject.x - limitX - this.initialWidth < -580) {\n this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`;\n } else {\n this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`;\n this.container.style.width = \"580px\";\n }\n if (this.resizeDataObject.y - limitY < this.initialHeight - 338) {\n this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`;\n } else {\n this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`;\n this.container.style.height = \"338px\";\n }\n }\n this.recalculateScale();\n this.recalculatePosition();\n }\n }\n\n /**\n * Returns the boundaries of actual window to limit modal movement.\n * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen.\n */\n getLimitWindow() {\n // Obtain dimensions of window page.\n const maxWidth = window.innerWidth;\n const maxHeight = window.innerHeight;\n\n // Calculate relative position of mouse point into window.\n const { offsetHeight } = this.container;\n const contStyleBottom = parseInt(this.container.style.bottom, 10);\n const contStyleRight = parseInt(this.container.style.right, 10);\n\n const { pageXOffset } = window;\n const dragY = this.dragDataObject.y;\n const dragX = this.dragDataObject.x;\n\n const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset));\n const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight;\n\n // Calculate limits with sizes of window, modal and mouse position.\n const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY;\n const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY);\n const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth;\n const maxPointerX = this.container.offsetWidth - offSetToolbarX;\n const minPointer = { x: minPointerX, y: minPointerY };\n const maxPointer = { x: maxPointerX, y: maxPointerY };\n return { minPointer, maxPointer };\n }\n\n /**\n * Returns the scrollbar width size of browser\n * @returns {Number} The scrollbar width.\n */\n // eslint-disable-next-line class-methods-use-this\n getScrollBarWidth() {\n // Create a paragraph with full width of page.\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n\n // Create a hidden div to compare sizes.\n const outer = document.createElement(\"div\");\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.appendChild(inner);\n\n document.body.appendChild(outer);\n const widthOuter = inner.offsetWidth;\n\n // Change type overflow of paragraph for measure scrollbar.\n outer.style.overflow = \"scroll\";\n let widthInner = inner.offsetWidth;\n\n // If measure is the same, we compare with internal div.\n if (widthOuter === widthInner) {\n widthInner = outer.clientWidth;\n }\n document.body.removeChild(outer);\n\n return widthOuter - widthInner;\n }\n\n /**\n * Set the dragDataObject to null.\n */\n stopDrag() {\n // Due to we have multiple events that call this function, we need only to execute\n // the next modifiers one time,\n // when the user stops to drag and dragDataObject is not null (the object to drag is attached).\n if (this.dragDataObject || this.resizeDataObject) {\n // If modal doesn't change, it's not necessary to set position with interpolation.\n this.container.style.transform = \"\";\n if (this.dragDataObject) {\n this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`;\n this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`;\n }\n // We make focus on editor after drag modal windows to prevent lose focus.\n this.focus();\n // Restore mouse events on iframe.\n // this.iframe.style['pointer-events'] = 'auto';\n document.body.style[\"user-select\"] = \"\";\n // Restore static state of iframe if we use Internet Explorer.\n if (this.isIE11()) {\n // this.iframe.style['position'] = null;\n }\n // Active text select event.\n Util.removeClass(document.body, \"wrs_noselect\");\n Util.removeClass(this.overlay, \"wrs_overlay_active\");\n }\n this.dragDataObject = null;\n this.resizeDataObject = null;\n this.initialWidth = null;\n this.leftScale = null;\n }\n\n /**\n * Recalculates scale for modal when resize browser window.\n */\n onWindowResize() {\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n }\n\n /**\n * Triggers keyboard events:\n * - Tab key tab to go to submit button.\n * - Esc key to close the modal dialog.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */\n onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Popupmessage is not oppened.\n if (this.popup.overlayWrapper.style.display !== \"block\") {\n // Code to detect Esc event\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n if (this.properties.open) {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.cancelButton) {\n this.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.submitButton) {\n this.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n }\n } else {\n // Popupmessage oppened.\n this.popup.onKeyDown(keyboardEvent);\n }\n }\n }\n\n /**\n * Recalculating position for modal dialog when the browser is resized.\n */\n recalculatePosition() {\n this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`;\n if (parseInt(this.container.style.right, 10) < 0) {\n this.container.style.right = \"0px\";\n }\n this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`;\n if (parseInt(this.container.style.bottom, 10) < 0) {\n this.container.style.bottom = \"0px\";\n }\n }\n\n /**\n * Recalculating scale for modal when the browser is resized.\n */\n recalculateScale() {\n let sizeModified = false;\n\n if (parseInt(this.container.style.width, 10) > 580) {\n this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`;\n sizeModified = true;\n } else {\n this.container.style.width = \"580px\";\n sizeModified = true;\n }\n\n if (parseInt(this.container.style.height, 10) > 338) {\n this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`;\n sizeModified = true;\n } else {\n this.container.style.height = \"338px\";\n sizeModified = true;\n }\n\n if (sizeModified) {\n this.recalculateSize();\n }\n }\n\n /**\n * Recalculating width of browser scroll bar.\n */\n recalculateScrollBar() {\n this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth;\n if (this.hasScrollBar) {\n this.scrollbarWidth = this.getScrollBarWidth();\n } else {\n this.scrollbarWidth = 0;\n }\n }\n\n /**\n * Hide soft keyboards on iOS devices.\n */\n // eslint-disable-next-line class-methods-use-this\n hideKeyboard() {\n // iOS keyboard can't be detected or hide directly from JavaScript.\n // So, this method simulates that user focus a text input and blur\n // the selection.\n const inputField = document.createElement(\"input\");\n this.container.appendChild(inputField);\n inputField.focus();\n inputField.blur();\n // Is removed to not see it.\n inputField.remove();\n }\n\n /**\n * Focus to contentManager object.\n */\n focus() {\n if (this.contentManager != null && typeof this.contentManager.onFocus !== \"undefined\") {\n this.contentManager.onFocus();\n }\n }\n\n /**\n * Returns true when the device is on portrait mode.\n */\n // eslint-disable-next-line class-methods-use-this\n portraitMode() {\n return window.innerHeight > window.innerWidth;\n }\n\n /**\n * Event handler that change container size when IOS soft keyboard is opened.\n */\n handleOpenedIosSoftkeyboard() {\n if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n }\n this.iosSoftkeyboardOpened = true;\n }\n\n /**\n * Event handler that change container size when IOS soft keyboard is closed.\n */\n handleClosedIosSoftkeyboard() {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n\n /**\n * Change container sizes when orientation is changed on iOS.\n */\n orientationChangeIosSoftkeyboard() {\n if (this.iosSoftkeyboardOpened) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n } else {\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n }\n\n /**\n * Change container sizes when orientation is changed on Android.\n */\n orientationChangeAndroidSoftkeyboard() {\n this.setContainerHeight(\"100%\");\n }\n\n /**\n * Set iframe container height.\n * @param {Number} height - New height.\n */\n setContainerHeight(height) {\n this.iosDivHeight = height;\n this.wrapper.style.height = height;\n }\n\n /**\n * Check content of editor before close action.\n */\n showPopUpMessage() {\n if (this.properties.state === \"minimized\") {\n this.stack();\n }\n this.popup.show();\n }\n\n /**\n * Sets the title of the modal dialog.\n * @param {String} title - Modal dialog title.\n */\n setTitle(title) {\n this.title.innerHTML = title;\n }\n\n /**\n * Returns the id of an element, adding the instance number to\n * the element class name:\n * className --> className[idNumber]\n * @param {String} className - The element class name.\n * @returns {String} A string appending the instance id to the className.\n */\n getElementId(className) {\n return `${className}[${this.instanceId}]`;\n }\n}\n","/* eslint-disable */\nvar polyfills;\nexport default polyfills;\n\n// Polyfills.\n/*! http://mths.be/codepointat v0.1.0 by @mathias */\nif (!String.prototype.codePointAt) {\n (function () {\n \"use strict\"; // needed to support `apply`/`call` with `undefined`/`null`\n var codePointAt = function (position) {\n if (this == null) {\n throw TypeError();\n }\n var string = String(this);\n var size = string.length;\n // `ToInteger`\n var index = position ? Number(position) : 0;\n if (index != index) {\n // better `isNaN`\n index = 0;\n }\n // Account for out-of-bounds indices:\n if (index < 0 || index >= size) {\n return undefined;\n }\n // Get the first code unit\n var first = string.charCodeAt(index);\n var second;\n if (\n // check if it’s the start of a surrogate pair\n first >= 0xd800 &&\n first <= 0xdbff && // high surrogate\n size > index + 1 // there is a next code unit\n ) {\n second = string.charCodeAt(index + 1);\n if (second >= 0xdc00 && second <= 0xdfff) {\n // low surrogate\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;\n }\n }\n return first;\n };\n if (Object.defineProperty) {\n Object.defineProperty(String.prototype, \"codePointAt\", {\n value: codePointAt,\n configurable: true,\n writable: true,\n });\n } else {\n String.prototype.codePointAt = codePointAt;\n }\n })();\n}\n\n// Object.assign polyfill.\nif (typeof Object.assign != \"function\") {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) {\n // .length of function is 2\n \"use strict\";\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) {\n // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true,\n });\n}\n\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nif (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, \"includes\", {\n value: function (searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" s null or is not defined');\n }\n\n // 1. Let O be ? ToObject(this value).\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. if len is 0, return false.\n if (len === 0) {\n return false;\n }\n\n // 4. Let n be ? ToInteger(fromIndex).\n // (if fromIndex is undefinedo, this step generates the value 0.)\n var n = fromIndex | 0;\n\n // 5. if n ≥ 0, then\n // a. Let k be n.\n // 6. Else n < 0,\n // a. Let k be len + n.\n // b. if k < 0, let k be 0.\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n function sameValueZero(x, y) {\n return x === y || (typeof x === \"number\" && typeof y === \"number\" && isNaN(x) && isNaN(y));\n }\n\n // 7. Repeat while k < len\n while (k < len) {\n // a. let element k be the result of ? Get(O, ! ToString(k)).\n // b. if SameValueZero(searchElement, elementK) is true, return true.\n if (sameValueZero(o[k], searchElement)) {\n return true;\n }\n // c. Increase k by 1.\n k++;\n }\n\n // 8. Return false\n return false;\n },\n });\n}\n\nif (!String.prototype.includes) {\n String.prototype.includes = function (search, start) {\n \"use strict\";\n\n if (search instanceof RegExp) {\n throw TypeError(\"first argument must not be a RegExp\");\n }\n if (start === undefined) {\n start = 0;\n }\n return this.indexOf(search, start) !== -1;\n };\n}\n\nif (!String.prototype.startsWith) {\n Object.defineProperty(String.prototype, \"startsWith\", {\n value: function (search, rawPos) {\n var pos = rawPos > 0 ? rawPos | 0 : 0;\n return this.substring(pos, pos + search.length) === search;\n },\n });\n}\n","import Parser from \"./parser\";\nimport Util from \"./util\";\nimport StringManager from \"./stringmanager\";\nimport ContentManager from \"./contentmanager\";\nimport Latex from \"./latex\";\nimport MathML from \"./mathml\";\nimport CustomEditors from \"./customeditors\";\nimport Configuration from \"./configuration\";\nimport jsProperties from \"./jsvariables\";\nimport Event from \"./event\";\nimport Listeners from \"./listeners\";\nimport Image from \"./image\";\nimport ServiceProvider from \"./serviceprovider\";\nimport ModalDialog from \"./modal\";\nimport Telemeter from \"./telemeter\";\nimport \"./polyfills\";\nimport \"../styles/styles.css\";\n\n/**\n * @typedef {Object} CoreProperties\n * @property {ServiceProviderProperties} serviceProviderProperties\n * - The ServiceProvider class properties. *\n */\nexport default class Core {\n /**\n * @classdesc\n * This class represents MathType integration Core, managing the following:\n * - Integration initialization.\n * - Event managing.\n * - Insertion of formulas into the edit area.\n * ```js\n * let core = new Core();\n * core.addListener(listener);\n * core.language = 'en';\n *\n * // Initializing Core class.\n * core.init(configurationService);\n * ```\n * @constructs\n * Core constructor.\n * @param {CoreProperties}\n */\n constructor(coreProperties) {\n /**\n * Language. Needed for accessibility and locales. 'en' by default.\n * @type {String}\n */\n this.language = \"en\";\n\n /**\n * Edit mode, 'images' by default. Admits the following values:\n * - images\n * - latex\n * @type {String}\n */\n this.editMode = \"images\";\n\n /**\n * Modal dialog instance.\n * @type {ModalDialog}\n */\n this.modalDialog = null;\n\n /**\n * The instance of {@link CustomEditors}. By default\n * the only custom editor is the Chemistry editor.\n * @type {CustomEditors}\n */\n this.customEditors = new CustomEditors();\n\n /**\n * Chemistry editor.\n * @type {CustomEditor}\n */\n const chemEditorParams = {\n name: \"Chemistry\",\n toolbar: \"chemistry\",\n icon: \"chem.png\",\n confVariable: \"chemEnabled\",\n title: \"ChemType\",\n tooltip: \"Insert a chemistry formula - ChemType\", // TODO: Localize tooltip.\n };\n\n this.customEditors.addEditor(\"chemistry\", chemEditorParams);\n\n /**\n * Environment properties. This object contains data about the integration platform.\n * @typedef IntegrationEnvironment\n * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor.\n * @property {String} IntegrationEnvironment.mode - Integration save mode.\n * @property {String} IntegrationEnvironment.version - Integration version.\n *\n */\n\n /**\n * The environment properties object.\n * @type {IntegrationEnvironment}\n */\n this.environment = {};\n\n /**\n * @typedef EditionProperties\n * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one.\n * False otherwise.\n * @property {HTMLImageElement} editionProperties.temporalImage- The image element.\n * Null if the formula is new.\n * @property {Range} editionProperties.latexRange - Tha range that contains the LaTeX formula.\n * @property {Range} editionProperties.range - The range that contains the image element.\n * @property {String} editionProperties.editMode - The edition mode. 'images' by default.\n */\n\n /**\n * The properties of the current edition process.\n * @type {EditionProperties}\n */\n this.editionProperties = {};\n\n this.editionProperties.isNewElement = true;\n this.editionProperties.temporalImage = null;\n this.editionProperties.latexRange = null;\n this.editionProperties.range = null;\n this.editionProperties.editionStartTime = null;\n\n /**\n * The {@link IntegrationModel} instance.\n * @type {IntegrationModel}\n */\n this.integrationModel = null;\n\n /**\n * The {@link ContentManager} instance.\n * @type {ContentManager}\n */\n this.contentManager = null;\n\n /**\n * The current browser.\n * @type {String}\n */\n this.browser = (() => {\n const ua = navigator.userAgent;\n let browser = \"none\";\n if (ua.search(\"Edge/\") >= 0) {\n browser = \"EDGE\";\n } else if (ua.search(\"Chrome/\") >= 0) {\n browser = \"CHROME\";\n } else if (ua.search(\"Trident/\") >= 0) {\n browser = \"IE\";\n } else if (ua.search(\"Firefox/\") >= 0) {\n browser = \"FIREFOX\";\n } else if (ua.search(\"Safari/\") >= 0) {\n browser = \"SAFARI\";\n }\n return browser;\n })();\n\n /**\n * Plugin listeners.\n * @type {Array.}\n */\n this.listeners = new Listeners();\n\n /**\n * Service provider properties.\n * @type {ServiceProviderProperties}\n */\n this.serviceProviderProperties = {};\n if (\"serviceProviderProperties\" in coreProperties) {\n this.serviceProviderProperties = coreProperties.serviceProviderProperties;\n } else {\n throw new Error(\"serviceProviderProperties property missing.\");\n }\n }\n\n /**\n * Static property.\n * Core listeners.\n * @private\n * @type {Listeners}\n */\n static get globalListeners() {\n return Core._globalListeners;\n }\n\n /**\n * Static property setter.\n * Set core listeners.\n * @param {Listeners} value - The property value.\n * @ignore\n */\n static set globalListeners(value) {\n Core._globalListeners = value;\n }\n\n /**\n * Core state. Says if it was loaded previously.\n * True when Core.init was called. Otherwise, false.\n * @private\n * @type {Boolean}\n */\n static get initialized() {\n return Core._initialized;\n }\n\n /**\n * Core state. Says if it was loaded previously.\n * @param {Boolean} value - True to say that Core.init was called. Otherwise, false.\n * @ignore\n */\n static set initialized(value) {\n Core._initialized = value;\n }\n\n /**\n * Sets the {@link Core.integrationModel} property.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property.\n */\n setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n\n /**\n * Sets the {@link Core.environment} property.\n * @param {IntegrationEnvironment} integrationEnvironment -\n * The {@link IntegrationEnvironment} object.\n */\n setEnvironment(integrationEnvironment) {\n if (\"editor\" in integrationEnvironment) {\n this.environment.editor = integrationEnvironment.editor;\n }\n if (\"mode\" in integrationEnvironment) {\n this.environment.mode = integrationEnvironment.mode;\n }\n if (\"version\" in integrationEnvironment) {\n this.environment.version = integrationEnvironment.version;\n }\n }\n\n /**\n * Sets the custom headers added on editor requests if contentManager isn't undefined.\n * @returns {Object} headers - key value headers.\n */\n setHeaders(headers) {\n const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers;\n Configuration.set(\"customHeaders\", headerObject);\n }\n\n /**\n * Returns the current {@link ModalDialog} instance.\n * @returns {ModalDialog} The current {@link ModalDialog} instance.\n */\n getModalDialog() {\n return this.modalDialog;\n }\n\n /**\n * Inits the {@link Core} class, doing the following:\n * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON.\n * - Updates {@link Configuration} class with the previous configuration properties.\n * - Updates the {@link ServiceProvider} class using the configuration service path as reference.\n * - Loads language strings.\n * - Fires onLoad event.\n * @param {Object} serviceParameters - Service parameters.\n */\n init() {\n if (!Core.initialized) {\n const serviceProviderListener = Listeners.newListener(\"onInit\", () => {\n const jsConfiguration = ServiceProvider.getService(\"configurationjs\", \"\", \"get\");\n const jsonConfiguration = JSON.parse(jsConfiguration);\n Configuration.addConfiguration(jsonConfiguration);\n // Adding JavaScript (not backend) configuration variables.\n Configuration.addConfiguration(jsProperties);\n // Fire 'onLoad' event:\n // All integration must listen this event in order to know if the plugin\n // has been properly loaded.\n StringManager.language = this.language;\n this.listeners.fire(\"onLoad\", {});\n });\n\n ServiceProvider.addListener(serviceProviderListener);\n ServiceProvider.init(this.serviceProviderProperties);\n\n Core.initialized = true;\n } else {\n // Case when there are more than two editor instances.\n // After the first editor all the other editors don't need to load any file or service.\n this.listeners.fire(\"onLoad\", {});\n }\n }\n\n /**\n * Adds a {@link Listener} to the current instance of the {@link Core} class.\n * @param {Listener} listener - The listener object.\n */\n addListener(listener) {\n this.listeners.add(listener);\n }\n\n /**\n * Adds the global {@link Listener} instance to {@link Core} class.\n * @param {Listener} listener - The event listener to be added.\n * @static\n */\n static addGlobalListener(listener) {\n Core.globalListeners.add(listener);\n }\n\n beforeUpdateFormula(mathml, wirisProperties) {\n /**\n * This event is fired before updating the formula.\n * @type {Object}\n * @property {String} mathml - MathML to be transformed.\n * @property {String} editMode - Edit mode.\n * @property {Object} wirisProperties - Extra attributes for the formula.\n * @property {String} language - Formula language.\n */\n const beforeUpdateEvent = new Event();\n\n beforeUpdateEvent.mathml = mathml;\n\n // Cloning wirisProperties object\n // We don't want wirisProperties object modified.\n beforeUpdateEvent.wirisProperties = {};\n\n if (wirisProperties != null) {\n Object.keys(wirisProperties).forEach((attr) => {\n beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr];\n });\n }\n\n // Read only.\n beforeUpdateEvent.language = this.language;\n beforeUpdateEvent.editMode = this.editMode;\n\n if (this.listeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n\n if (Core.globalListeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n\n return {\n mathml: beforeUpdateEvent.mathml,\n wirisProperties: beforeUpdateEvent.wirisProperties,\n };\n }\n\n /**\n * Converts a MathML into it's correspondent image and inserts the image is\n * inserted in a HTMLElement target by creating\n * a new image or updating an existing one.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the insertion.\n * @param {Window} windowTarget - The window element where the editable content is.\n * @param {String} mathml - The MathML.\n * @param {Array.} wirisProperties - The extra attributes for the formula.\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n /**\n * It is the object with the information of the node or latex to insert.\n * @typedef ReturnObject\n * @property {Node} [node] - The DOM node to insert.\n * @property {String} [latex] - The latex to insert.\n */\n const returnObject = {};\n\n if (!mathml) {\n this.insertElementOnSelection(null, focusElement, windowTarget);\n } else if (this.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n // this.integrationModel.getNonLatexNode is an integration wrapper\n // to have special behaviours for nonLatex.\n // Not all the integrations have special behaviours for nonLatex.\n if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) {\n const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.latex = returnObject.latex;\n this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml);\n } else {\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n }\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n } else {\n returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language);\n\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n }\n\n return returnObject;\n }\n\n afterUpdateFormula(focusElement, windowTarget, node, latex) {\n /**\n * This event is fired after update the formula.\n * @type {Event}\n * @param {String} editMode - edit mode.\n * @param {Object} windowTarget - target window.\n * @param {Object} focusElement - target element to be focused after update.\n * @param {String} latex - LaTeX generated by the formula (editMode=latex).\n * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise).\n */\n const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.node = node;\n afterUpdateEvent.latex = latex;\n\n if (this.listeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n\n if (Core.globalListeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n\n return {};\n }\n\n /**\n * Sets the caret after a given Node and set the focus to the owner document.\n * @param {Node} node - The Node element.\n */\n placeCaretAfterNode(node) {\n if (node === null) return;\n\n this.integrationModel.getSelection();\n const nodeDocument = node.ownerDocument;\n if (typeof nodeDocument.getSelection !== \"undefined\" && !!node.parentElement) {\n const range = nodeDocument.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const selection = nodeDocument.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n nodeDocument.body.focus();\n }\n }\n\n /**\n * Replaces a Selection object with an HTMLElement.\n * @param {HTMLElement} element - The HTMLElement to replace the selection.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace.\n * @param {Window} windowTarget - The window target.\n */\n insertElementOnSelection(element, focusElement, windowTarget) {\n let mathmlOrigin = null;\n if (this.editionProperties.isNewElement) {\n if (element) {\n if (focusElement.type === \"textarea\") {\n Util.updateTextArea(focusElement, element.textContent);\n } else if (document.selection && document.getSelection === 0) {\n let range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n\n if (!(\"parentElement\" in range)) {\n windowTarget.document.execCommand(\"delete\", false);\n range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n }\n\n if (\"parentElement\" in range) {\n const temporalObject = range.parentElement();\n\n if (temporalObject.nodeName.toUpperCase() === \"IMG\") {\n temporalObject.parentNode.replaceChild(element, temporalObject);\n } else {\n // IE9 fix: parentNode() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML(Util.createObjectCode(element));\n }\n }\n } else {\n let range = null;\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n if (this.editionProperties.range) {\n ({ range } = this.editionProperties);\n this.editionProperties.range = null;\n } else {\n const editorSelection = this.integrationModel.getSelection();\n range = editorSelection.getRangeAt(0);\n }\n\n // Delete if something was surrounded.\n range.deleteContents();\n\n let node = range.startContainer;\n const position = range.startOffset;\n\n if (node.nodeType === 3) {\n // TEXT_NODE.\n node = node.splitText(position);\n node.parentNode.insertBefore(element, node);\n } else if (node.nodeType === 1) {\n // ELEMENT_NODE.\n node.insertBefore(element, node.childNodes[position]);\n }\n\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n focusElement.focus();\n } else {\n const editorSelection = this.integrationModel.getSelection();\n editorSelection.removeAllRanges();\n\n if (this.editionProperties.range) {\n const { range } = this.editionProperties;\n this.editionProperties.range = null;\n editorSelection.addRange(range);\n }\n }\n } else if (this.editionProperties.latexRange) {\n if (document.selection && document.getSelection === 0) {\n this.editionProperties.isNewElement = true;\n this.editionProperties.latexRange.select();\n this.insertElementOnSelection(element, focusElement, windowTarget);\n } else {\n this.editionProperties.latexRange.deleteContents();\n this.editionProperties.latexRange.insertNode(element);\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n let item;\n // Wrapper for some integrations that can have special behaviours to show latex.\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n item = this.integrationModel.getSelectedItem(focusElement, false);\n } else {\n item = Util.getSelectedItemOnTextarea(focusElement);\n }\n Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition);\n } else {\n mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml;\n if (element && element.nodeName.toLowerCase() === \"img\") {\n // Editor empty, formula has been erased on edit.\n // There are editors (e.g: CKEditor) that put attributes in images.\n // We don't allow that behaviour in our images.\n Image.removeImgDataAttributes(this.editionProperties.temporalImage);\n // Clone is needed to maintain event references to temporalImage.\n Image.clone(element, this.editionProperties.temporalImage);\n } else {\n this.editionProperties.temporalImage.remove();\n }\n this.placeCaretAfterNode(this.editionProperties.temporalImage);\n }\n\n // Build the telemeter payload separated to delete null/undefined entries.\n const mathml = element?.dataset?.mathml;\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.editionProperties.editionStartTime,\n editor_origin: null, // TODO read formula to find out whether it comes from Oxygen Desktop\n toolbar: this.modalDialog.contentManager.toolbar,\n size: mathml?.length,\n };\n\n // Remove the desired null keys.\n Object.keys(payload).forEach((key) => {\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload,\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n }\n\n /**\n * Opens a modal dialog containing MathType editor..\n * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted.\n * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise.\n */\n openModalDialog(target, isIframe) {\n // Count the time since the editor is open\n this.editionProperties.editionStartTime = Date.now();\n\n // Textarea elements don't have normal document ranges. It only accepts latex edit.\n this.editMode = \"images\";\n\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n try {\n if (isIframe) {\n // Is needed focus the target first.\n target.contentWindow.focus();\n const selection = target.contentWindow.getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n } else {\n // Is needed focus the target first.\n target.focus();\n const selection = getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n }\n } catch (e) {\n this.editionProperties.range = null;\n }\n\n if (isIframe === undefined) {\n isIframe = true;\n }\n\n this.editionProperties.latexRange = null;\n\n if (target) {\n let selectedItem;\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n selectedItem = this.integrationModel.getSelectedItem(target, isIframe);\n } else {\n selectedItem = Util.getSelectedItem(target, isIframe);\n }\n\n // Check LaTeX if and only if the node is a text node (nodeType==3).\n if (selectedItem) {\n // Case when image was selected and button pressed.\n if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get(\"imageClassName\"))) {\n this.editionProperties.temporalImage = selectedItem.node;\n this.editionProperties.isNewElement = false;\n } else if (selectedItem.node.nodeType === 3) {\n // If it's a text node means that editor is working with LaTeX.\n if (this.integrationModel.getMathmlFromTextNode) {\n // If integration has this function it isn't set range due to we don't\n // know if it will be put into a textarea as a text or image.\n const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (mathml) {\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(\n Configuration.get(\"imageMathmlAttribute\"),\n MathML.safeXmlEncode(mathml),\n );\n }\n } else {\n const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (latexResult) {\n const mathml = Latex.getMathMLFromLatex(latexResult.latex);\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(\n Configuration.get(\"imageMathmlAttribute\"),\n MathML.safeXmlEncode(mathml),\n );\n const windowTarget = isIframe ? target.contentWindow : window;\n\n if (target.tagName.toLowerCase() !== \"textarea\") {\n if (document.selection) {\n let leftOffset = 0;\n let previousNode = latexResult.startNode.previousSibling;\n\n while (previousNode) {\n leftOffset += Util.getNodeLength(previousNode);\n previousNode = previousNode.previousSibling;\n }\n\n this.editionProperties.latexRange = windowTarget.document.selection.createRange();\n this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode);\n this.editionProperties.latexRange.move(\"character\", leftOffset + latexResult.startPosition);\n this.editionProperties.latexRange.moveEnd(\"character\", latexResult.latex.length + 4); // Plus 4 for the '$$' characters.\n } else {\n this.editionProperties.latexRange = windowTarget.document.createRange();\n this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition);\n this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition);\n }\n }\n }\n }\n }\n } else if (target.tagName.toLowerCase() === \"textarea\") {\n // By default editMode is 'images', but when target is a textarea it needs to be 'latex'.\n this.editMode = \"latex\";\n }\n }\n\n // Setting an object with the editor parameters.\n // Editor parameters can be customized in several ways:\n // 1 - editorAttributes: Contains the default editor attributes,\n // usually the metrics in a comma separated string. Always exists.\n // 2 - editorParameters: Object containing custom editor parameters.\n // These parameters are defined in the backend. So they affects all integration instances.\n\n // The backend send the default editor attributes in a coma separated\n // with the following structure: key1=value1,key2=value2...\n const defaultEditorAttributesArray = Configuration.get(\"editorAttributes\").split(\", \");\n const defaultEditorAttributes = {};\n for (let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1) {\n const tempAttribute = defaultEditorAttributesArray[i].split(\"=\");\n const key = tempAttribute[0];\n const value = tempAttribute[1];\n defaultEditorAttributes[key] = value;\n }\n // Custom editor parameters.\n const editorAttributes = {\n language: this.language, // Default language value\n };\n // Editor parameters in backend, usually configuration.ini.\n const serverEditorParameters = Configuration.get(\"editorParameters\");\n // Editor parameters through JavaScript configuration.\n const clientEditorParameters = this.integrationModel.editorParameters;\n Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters);\n Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters);\n\n // Now, update backwards: if user has set a custom language, pass that back to core properties\n this.language = editorAttributes.language;\n StringManager.language = this.language;\n\n editorAttributes.rtl = this.integrationModel.rtl;\n\n const customHeaders = Configuration.get(\"customHeaders\");\n // This is not being used in the code, we are keeping it just in case it's needed.\n // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend.\n editorAttributes.customHeaders =\n typeof customHeaders === \"string\" ? Util.convertStringToObject(customHeaders) : customHeaders;\n\n const contentManagerAttributes = {};\n contentManagerAttributes.editorAttributes = editorAttributes;\n contentManagerAttributes.language = this.language;\n contentManagerAttributes.customEditors = this.customEditors;\n contentManagerAttributes.environment = this.environment;\n\n if (this.modalDialog == null) {\n this.modalDialog = new ModalDialog(editorAttributes);\n this.contentManager = new ContentManager(contentManagerAttributes);\n // When an instance of ContentManager is created we need to wait until\n // the ContentManager is ready by listening 'onLoad' event.\n const listener = Listeners.newListener(\"onLoad\", () => {\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(\n this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")),\n );\n this.contentManager.mathML = mathML;\n }\n });\n this.contentManager.addListener(listener);\n this.contentManager.init();\n this.modalDialog.setContentManager(this.contentManager);\n this.contentManager.setModalDialogInstance(this.modalDialog);\n } else {\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(\n this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")),\n );\n this.contentManager.mathML = mathML;\n }\n }\n this.contentManager.setIntegrationModel(this.integrationModel);\n this.modalDialog.open();\n }\n\n /**\n * Returns the {@link CustomEditors} instance.\n * @return {CustomEditors} The current {@link CustomEditors} instance.\n */\n getCustomEditors() {\n return this.customEditors;\n }\n}\n\n/**\n * Core static listeners.\n * @type {Listeners}\n * @private\n */\nCore._globalListeners = new Listeners();\n\n/**\n * Resources state. Says if they were loaded or not.\n * @type {Boolean}\n * @private\n */\nCore._initialized = false;\n","// eslint-disable-next-line no-unused-vars, import/named\nimport Core from \"./core.src\";\nimport Image from \"./image\";\nimport Listeners from \"./listeners\";\nimport Util from \"./util\";\nimport Configuration from \"./configuration\";\nimport ServiceProvider from \"./serviceprovider\";\nimport Telemeter from \"./telemeter\";\nimport warnIcon from \"../styles/icons/general/warn_icon.svg\"; //eslint-disable-line\n\n/**\n * @typedef {Object} IntegrationModelProperties\n * @property {string} configurationService - Configuration service path.\n * This parameter is needed to determine all services paths.\n * @property {HTMLElement} integrationModelProperties.target - HTML target.\n * @property {string} integrationModelProperties.scriptName - Integration script name.\n * Usually the name of the integration script.\n * @property {Object} integrationModelProperties.environment - integration environment properties.\n * @property {Object} [integrationModelProperties.callbackMethodArguments] - object containing\n * callback method arguments.\n * @property {string} [integrationModelProperties.version] - integration version number.\n * @property {Object} [integrationModelProperties.editorObject] - object containing\n * the integration editor instance.\n * @property {boolean} [integrationModelProperties.rtl] - true if the editor is in RTL mode.\n * false otherwise.\n * @property {ServiceProviderProperties} [integrationModelProperties.serviceProviderProperties]\n * - The service parameters.\n * @property {Object} [integrationModelProperties.integrationParameters]\n * - Overwritten integration parameters.\n */\n\nexport default class IntegrationModel {\n /**\n * @classdesc\n * This class represents an integration model, allowing the integration script to\n * communicate with Core class. Each integration must extend this class.\n * @constructs\n * @param {IntegrationModelProperties} integrationModelProperties\n */\n constructor(integrationModelProperties) {\n /**\n * Language. Needed for accessibility and locales. English by default.\n */\n this.language = \"en\";\n\n /**\n * Service parameters\n * @type {ServiceProviderProperties}\n */\n this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {};\n\n /**\n * Configuration service path. The integration service is needed by Core class to\n * load all the backend configuration into the frontend and also to create the paths\n * of all services (all services lives in the same route). Mandatory property.\n */\n this.configurationService = \"\";\n if (\"configurationService\" in integrationModelProperties) {\n this.serviceProviderProperties.URI = integrationModelProperties.configurationService;\n console.warn(\"Deprecated property configurationService. Use serviceParameters on instead.\", [\n integrationModelProperties.configurationService,\n ]);\n }\n\n /**\n * Plugin version. Needed to stats and caching.\n * @type {string}\n */\n this.version = \"version\" in integrationModelProperties ? integrationModelProperties.version : \"\";\n\n /**\n * DOM target in which the plugin works. Needed to associate events, insert formulas, etc.\n * Mandatory property.\n */\n this.target = null;\n if (\"target\" in integrationModelProperties) {\n this.target = integrationModelProperties.target;\n } else {\n throw new Error(\"IntegrationModel constructor error: target property missed.\");\n }\n\n /**\n * Integration script name. Needed to know the plugin path.\n */\n if (\"scriptName\" in integrationModelProperties) {\n this.scriptName = integrationModelProperties.scriptName;\n }\n\n /**\n * Object containing the arguments needed by the callback function.\n */\n this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {};\n\n /**\n * Contains information about the integration environment:\n * like the name of the editor, the version, etc.\n */\n this.environment = integrationModelProperties.environment ?? {};\n\n /**\n * Indicates if the DOM target is - or not - and iframe.\n */\n this.isIframe = false;\n if (this.target != null) {\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n\n /**\n * Instance of the integration editor object. Usually the entry point to access the API\n * of a HTML editor.\n */\n this.editorObject = integrationModelProperties.editorObject ?? null;\n\n /**\n * Specifies if the direction of the text is RTL. false by default.\n */\n this.rtl = integrationModelProperties.rtl ?? false;\n\n /**\n * Specifies if the integration model exposes the locale strings. false by default.\n */\n this.managesLanguage = integrationModelProperties.managesLanguage ?? false;\n\n /**\n * Specify if editor will open in hand mode only\n */\n this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false;\n\n /**\n * Indicates if an image is selected. Needed to resize the image to the original size in case\n * the image is resized.\n * @type {boolean}\n */\n this.temporalImageResizing = false;\n\n /**\n * The Core class instance associated to the integration model.\n * @type {Core}\n */\n this.core = null;\n\n /**\n * Integration model listeners.\n * @type {Listeners}\n */\n this.listeners = new Listeners();\n\n // Parameters overwrite.\n if (\"integrationParameters\" in integrationModelProperties) {\n IntegrationModel.integrationParameters.forEach((parameter) => {\n if (parameter in integrationModelProperties.integrationParameters) {\n // Don't add empty parameters.\n const value = integrationModelProperties.integrationParameters[parameter];\n if (Object.keys(value).length !== 0) {\n this[parameter] = value;\n }\n }\n });\n }\n }\n\n /**\n * Init function. Usually called from the integration side once the core.js file is loaded.\n */\n init() {\n // Check if language is an object and select the property necessary\n this.language = this.getLanguage();\n\n // We need to wait until Core class is loaded ('onLoad' event) before\n // call the callback method.\n const listener = Listeners.newListener(\"onLoad\", () => {\n this.callbackFunction(this.callbackMethodArguments);\n });\n\n // Backwards compatibility.\n if (this.serviceProviderProperties.URI.indexOf(\"configuration\") !== -1) {\n const uri = this.serviceProviderProperties.URI;\n const server = ServiceProvider.getServerLanguageFromService(uri);\n this.serviceProviderProperties.server = server;\n const configurationIndex = this.serviceProviderProperties.URI.indexOf(\"configuration\");\n const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex);\n this.serviceProviderProperties.URI = subsTring;\n }\n\n let serviceParametersURI = this.serviceProviderProperties.URI;\n serviceParametersURI =\n serviceParametersURI.indexOf(\"/\") === 0 || serviceParametersURI.indexOf(\"http\") === 0\n ? serviceParametersURI\n : Util.concatenateUrl(this.getPath(), serviceParametersURI);\n\n this.serviceProviderProperties.URI = serviceParametersURI;\n\n const coreProperties = {};\n coreProperties.serviceProviderProperties = this.serviceProviderProperties;\n\n this.setCore(new Core(coreProperties));\n this.core.addListener(listener);\n this.core.language = this.language;\n\n // Initializing Core class.\n this.core.init();\n // TODO: Move to Core constructor.\n this.core.setEnvironment(this.environment);\n\n // No internet connection modal.\n let attributes = {};\n attributes.class = attributes.id = \"wrs_modal_offline\";\n this.offlineModal = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_content_offline\";\n this.offlineModalContent = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_close\";\n this.offlineModalClose = Util.createElement(\"span\", attributes);\n this.offlineModalClose.innerHTML = \"×\";\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_warn\";\n this.offlineModalWarn = Util.createElement(\"span\", attributes);\n let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`;\n this.offlineModalWarn.setAttribute(\"style\", generalStyle);\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_container\";\n this.offlineModalMessage = Util.createElement(\"div\", attributes);\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_warn\";\n this.offlineModalMessage1 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage1.innerHTML = \"You are not online!\";\n\n attributes = {};\n attributes.class = \"wrs_modal_offline_text\";\n this.offlineModalMessage2 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`;\n\n //Append offline modal elements\n this.offlineModalContent.appendChild(this.offlineModalClose);\n this.offlineModalMessage.appendChild(this.offlineModalMessage1);\n this.offlineModalMessage.appendChild(this.offlineModalMessage2);\n this.offlineModalContent.appendChild(this.offlineModalMessage);\n this.offlineModalContent.appendChild(this.offlineModalWarn);\n this.offlineModal.appendChild(this.offlineModalContent);\n document.body.appendChild(this.offlineModal);\n\n let modal = document.getElementById(\"wrs_modal_offline\");\n this.offlineModalClose.addEventListener(\"click\", function () {\n modal.style.display = \"none\";\n });\n\n // Store editor name for telemetry purposes.\n let editorName = this.environment.editor;\n editorName = editorName.slice(0, -1); // Remove version number from editors\n if (editorName.includes(\"TinyMCE\")) editorName = \"TinyMCE\"; // Remove version from Tinymce editor.\n if (editorName.includes(\"Generic\")) editorName = \"Generic\"; // Remove version from Generic editor.\n let solutionTelemeter = editorName;\n\n // If moodle, add information to hosts and solution.\n let isMoodle = !!(typeof M === \"object\" && M !== null),\n lms;\n\n if (isMoodle) {\n solutionTelemeter = \"Moodle\";\n lms = {\n nam: \"moodle\",\n fam: \"lms\",\n ver: this.environment.moodleVersion,\n category: this.environment.moodleCourseCategory,\n course: this.environment.moodleCourseName,\n };\n if (!editorName.includes(\"TinyMCE\")) {\n editorName = \"Atto\";\n }\n }\n\n // Get the OS and its version.\n let OSData = this.getOS();\n\n // Get the broswer and its version.\n let broswerData = this.getBrowser();\n\n // Create list of hosts to send to telemetry.\n let hosts = [\n {\n nam: broswerData.detectedBrowser,\n fam: \"browser\",\n ver: broswerData.versionBrowser,\n },\n {\n nam: editorName.toLowerCase(),\n fam: \"html-editor\",\n ver: this.environment.editorVersion,\n },\n {\n nam: OSData.detectedOS,\n fam: \"os\",\n ver: OSData.versionOS,\n },\n {\n nam: window.location.hostname,\n fam: \"domain\",\n },\n lms,\n ];\n\n // Filter hosts to remove empty objects and empty keys.\n hosts = hosts.filter(function (element) {\n if (element) Object.keys(element).forEach((key) => (element[key] === \"unknown\" ? delete element[key] : {}));\n return element !== undefined;\n });\n\n // Initialize telemeter\n Telemeter.init({\n solution: {\n name: \"MathType for \" + solutionTelemeter,\n version: this.version,\n },\n hosts: hosts,\n config: {\n test: false, // True to use the staging Telemetry endpoint instead of the production one.\n debug: false, // True to show more information about Telemeter's execution and use dev-tools.\n dry_run: false, // True to skip sending data to the Telemetry endpoint (for example for unit tests).\n api_key: \"eda2ce9b-0e8a-46f2-acdd-c228a615314e\", // to auth against Telemetry. Data team is the responsible of providing it.\n },\n url: undefined,\n });\n }\n\n /**\n * Returns the Browser name and its version.\n * @return {array} - detectedBrowser = Operating System name.\n * versionBrowser = Operating System version.\n */\n getBrowser() {\n // default value for OS just in case nothing is detected\n let detectedBrowser = \"unknown\",\n versionBrowser = \"unknown\";\n\n let userAgent = window.navigator.userAgent;\n\n if (/Brave/.test(userAgent)) {\n detectedBrowser = \"brave\";\n if (userAgent.indexOf(\"Brave/\")) {\n let start = userAgent.indexOf(\"Brave\") + 6;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n }\n } else if (userAgent.indexOf(\"Edg/\") !== -1) {\n detectedBrowser = \"edge_chromium\";\n let start = userAgent.indexOf(\"Edg/\") + 4;\n versionBrowser = userAgent\n .substring(start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Edg/.test(userAgent)) {\n detectedBrowser = \"edge\";\n let start = userAgent.indexOf(\"Edg\") + 3;\n start = start + userAgent.substring(start).indexOf(\"/\");\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) {\n detectedBrowser = \"firefox\";\n let start = userAgent.indexOf(\"Firefox\");\n start = start === -1 ? userAgent.indexOf(\"FxiOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/OPR/.test(userAgent)) {\n detectedBrowser = \"opera\";\n let start = userAgent.indexOf(\"OPR/\") + 4;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) {\n detectedBrowser = \"chrome\";\n let start = userAgent.indexOf(\"Chrome\");\n start = start === -1 ? userAgent.indexOf(\"CriOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/Safari/.test(userAgent)) {\n detectedBrowser = \"safari\";\n let start = userAgent.indexOf(\"Version/\");\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n }\n\n return { detectedBrowser, versionBrowser };\n }\n\n /**\n * Returns the operating system and its version.\n * @return {array} - detectedOS = Operating System name.\n * versionOS = Operating System version.\n */\n getOS() {\n // default value for OS just in case nothing is detected\n let detectedOS = \"unknown\",\n versionOS = \"unknown\";\n\n // Retrieve properties to easily detect the OS\n let userAgent = window.navigator.userAgent,\n platform = window.navigator.platform,\n macosPlatforms = [\"Macintosh\", \"MacIntel\", \"MacPPC\", \"Mac68K\"],\n windowsPlatforms = [\"Win32\", \"Win64\", \"Windows\", \"WinCE\"],\n iosPlatforms = [\"iPhone\", \"iPad\", \"iPod\"];\n\n // Find OS and their respective versions\n if (macosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"macos\";\n if (userAgent.indexOf(\"OS X\") !== -1) {\n let start = userAgent.indexOf(\"OS X\") + 5;\n let end = userAgent.substring(start).indexOf(\" \");\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n }\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"ios\";\n if (userAgent.indexOf(\"OS \") !== -1) {\n let start = userAgent.indexOf(\"OS \") + 3;\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n }\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"windows\";\n let start = userAgent.indexOf(\"Windows\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/Android/.test(userAgent)) {\n detectedOS = \"android\";\n let start = userAgent.indexOf(\"Android\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (/CrOS/.test(userAgent)) {\n detectedOS = \"chromeos\";\n let start = userAgent.indexOf(\"CrOS \") + 5;\n start = start + userAgent.substring(start).indexOf(\" \");\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent\n .substring(start, end + start)\n .replace(\"_\", \".\")\n .replace(/[^\\d.-]/g, \"\");\n } else if (detectedOS === \"unknown\" && /Linux/.test(platform)) {\n detectedOS = \"linux\";\n }\n\n return { detectedOS, versionOS };\n }\n\n /**\n * Returns the absolute path of the integration script.\n * @return {string} - Absolute path for the integration script.\n */\n getPath() {\n if (typeof this.scriptName === \"undefined\") {\n throw new Error(\"scriptName property needed for getPath.\");\n }\n const col = document.getElementsByTagName(\"script\");\n let path = \"\";\n for (let i = 0; i < col.length; i += 1) {\n const j = col[i].src.lastIndexOf(this.scriptName);\n if (j >= 0) {\n path = col[i].src.substr(0, j - 1);\n }\n }\n return path;\n }\n\n /**\n * Returns integration model plugin version\n * @param {string} - Plugin version\n */\n getVersion() {\n return this.version;\n }\n\n /**\n * Sets the language property.\n * @param {string} language - language code.\n */\n setLanguage(language) {\n this.language = language;\n }\n\n /**\n * Sets a Core instance.\n * @param {Core} core - instance of Core class.\n */\n setCore(core) {\n this.core = core;\n core.setIntegrationModel(this);\n }\n\n /**\n * Returns the Core instance.\n * @returns {Core} instance of Core class.\n */\n getCore() {\n return this.core;\n }\n\n /**\n * Sets the object target and updates the iframe property.\n * @param {HTMLElement} target - target object.\n */\n setTarget(target) {\n this.target = target;\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n\n /**\n * Sets the editor object.\n * @param {Object} editorObject - The editor object.\n */\n setEditorObject(editorObject) {\n this.editorObject = editorObject;\n }\n\n /**\n * Opens formula editor to editing a new formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */\n openNewFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.dbclick = false;\n this.core.editionProperties.isNewElement = true;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n\n /**\n * Opens formula editor to editing an existing formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */\n openExistingFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.isNewElement = false;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n\n /**\n * Wrapper to Core.updateFormula method.\n * Transform a MathML into a image formula.\n * Then the image formula is inserted in the specified target, creating a new image (new formula)\n * or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n */\n updateFormula(mathml) {\n if (this.editorParameters) {\n mathml = com.wiris.editor.util.EditorUtils.addAnnotation(\n mathml,\n \"application/vnd.wiris.mtweb-params+json\",\n JSON.stringify(this.editorParameters),\n );\n }\n let focusElement;\n let windowTarget;\n const wirisProperties = null;\n\n if (this.isIframe) {\n focusElement = this.target.contentWindow;\n windowTarget = this.target.contentWindow;\n } else {\n focusElement = this.target;\n windowTarget = window;\n }\n\n let obj = this.core.beforeUpdateFormula(mathml, wirisProperties);\n\n if (!obj) {\n return \"\";\n }\n\n obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties);\n\n if (!obj) {\n return \"\";\n }\n\n return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex);\n }\n\n /**\n * Wrapper to Core.insertFormula method.\n * Inserts the formula in the specified target, creating\n * a new image (new formula) or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties);\n\n // Delete temporal image when inserted\n this.core.editionProperties.temporalImage = null;\n\n return obj;\n }\n\n /**\n * Returns the target selection.\n * @returns {Selection} target selection.\n */\n getSelection() {\n if (this.isIframe) {\n this.target.contentWindow.focus();\n return this.target.contentWindow.getSelection();\n }\n this.target.focus();\n return window.getSelection();\n }\n\n /**\n * Add events to formulas in the DOM target. The events added are the following:\n * - doubleClickHandler: handles Double-click event on formulas by opening an editor\n * to edit them.\n * - mouseDownHandler: handles mouse down event on formulas by saving the size of the formula\n * in case the the formula is resized.\n * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size\n * in case the formula is resized.\n */\n addEvents() {\n const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target;\n Util.addElementEvents(\n eventTarget,\n (element, event) => {\n this.doubleClickHandler(element, event);\n // Avoid creating the double click listener more than once for each element.\n event.stopImmediatePropagation();\n },\n (element, event) => {\n this.mousedownHandler(element, event);\n },\n (element, event) => {\n this.mouseupHandler(element, event);\n },\n );\n }\n\n /**\n * Remove events to formulas in the DOM target.\n */\n removeEvents() {\n const eventTarget =\n this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target;\n\n if (!eventTarget) {\n return;\n }\n\n Util.removeElementEvents(eventTarget);\n }\n\n /**\n * Remove events, modals and set this.editorObject to null in order to prevent memory leaks.\n */\n destroy() {\n this.removeEvents();\n // Destroy modal dialog if exists.\n if (this.core.modalDialog) {\n this.core.modalDialog.destroy();\n }\n\n // Remove offline modal dialog if exists.\n if (this.offlineModal) {\n this.offlineModal.remove();\n }\n\n this.editorObject = null;\n }\n\n /**\n * Handles a Double-click on the target element. Opens an editor\n * to re-edit the double-clicked formula.\n * @param {HTMLElement} element - DOM object target.\n */\n doubleClickHandler(element) {\n this.core.editionProperties.dbclick = true;\n if (element.nodeName.toLowerCase() === \"img\") {\n this.core.getCustomEditors().disable();\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (element.hasAttribute(customEditorAttributeName)) {\n const customEditor = element.getAttribute(customEditorAttributeName);\n this.core.getCustomEditors().enable(customEditor);\n }\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.core.editionProperties.temporalImage = element;\n this.core.editionProperties.isNewElement = true;\n this.openExistingFormulaEditor();\n }\n }\n }\n\n /**\n * Handles a mouse up event on the target element. Restores the image size to avoid\n * resizing formulas.\n */\n mouseupHandler() {\n if (this.temporalImageResizing) {\n setTimeout(() => {\n Image.fixAfterResize(this.temporalImageResizing);\n }, 10);\n }\n }\n\n /**\n * Handles a mouse down event on the target element. Saves the formula size to avoid\n * resizing formulas.\n * @param {HTMLElement} element - target element.\n */\n mousedownHandler(element) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.temporalImageResizing = element;\n }\n }\n }\n\n /**\n * Returns the integration language. By default the browser agent. This method\n * should be overwritten to obtain the integration language, for example using the\n * plugin API of an HTML editor.\n * @returns {string} integration language.\n */\n getLanguage() {\n return this.getBrowserLanguage();\n }\n\n /**\n * Returns the browser language.\n * @returns {string} the browser language.\n */\n // eslint-disable-next-line class-methods-use-this\n getBrowserLanguage() {\n let language = \"en\";\n if (navigator.userLanguage) {\n language = navigator.userLanguage.substring(0, 2);\n } else if (navigator.language) {\n language = navigator.language.substring(0, 2);\n } else {\n language = \"en\";\n }\n return language;\n }\n\n /**\n * This function is called once the {@link Core} is loaded. IntegrationModel class\n * will fire this method when {@link Core} 'onLoad' event is fired.\n * This method should content all the logic to init\n * the integration.\n */\n callbackFunction() {\n // It's needed to wait until the integration target is ready. The event is fired\n // from the integration side.\n const listener = Listeners.newListener(\"onTargetReady\", () => {\n this.addEvents(this.target);\n });\n this.listeners.add(listener);\n }\n\n /**\n * Function called when the content submits an action.\n */\n // eslint-disable-next-line class-methods-use-this\n notifyWindowClosed() {\n // Nothing.\n }\n\n /**\n * Wrapper.\n * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js\n * in order to get mathml from a text node that can contain normal LaTeX or other chosen text.\n * @param {string} textNode - text node to extract the MathML.\n * @param {int} caretPosition - caret position inside the text node.\n * @returns {string} MathML inside the text node.\n */\n\n // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getMathmlFromTextNode(textNode, caretPosition) {}\n\n /**\n * Wrapper\n * It fills wrs event object of nonLatex with the desired data.\n * @param {Object} event - event object.\n * @param {Object} window dom window object.\n * @param {string} mathml valid mathml.\n */\n // eslint-disable-next-line class-methods-use-this, no-unused-vars\n fillNonLatexNode(event, window, mathml) {}\n\n /**\n Wrapper.\n * Returns selected item from the target.\n * @param {HTMLElement} target - target element\n * @param {boolean} iframe\n */\n // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getSelectedItem(target, isIframe) {}\n\n // Set temporal image to null and make focus come back.\n static setActionsOnCancelButtons() {\n // Make focus come back on the previous place it was when click cancel button\n const currentInstance = WirisPlugin.currentInstance;\n const editorSelection = currentInstance.getSelection();\n editorSelection.removeAllRanges();\n\n if (currentInstance.core.editionProperties.range) {\n const { range } = currentInstance.core.editionProperties;\n currentInstance.core.editionProperties.range = null;\n editorSelection.addRange(range);\n if (range.startOffset !== range.endOffset) {\n currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage);\n }\n }\n\n // eslint-disable-next-line no-undef\n if (WirisPlugin.currentInstance) {\n WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line\n }\n }\n}\n\n// To know if the integration that extends this class implements\n// wrapper methods, they are set as undefined.\nIntegrationModel.prototype.getMathmlFromTextNode = undefined;\nIntegrationModel.prototype.fillNonLatexNode = undefined;\nIntegrationModel.prototype.getSelectedItem = undefined;\n\n/**\n * An object containing a list with the overwritable class constructor properties.\n * @type {Object}\n */\nIntegrationModel.integrationParameters = [\"serviceProviderProperties\", \"editorParameters\"];\n","import IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Telemeter from \"@wiris/mathtype-html-integration-devkit/src/telemeter.js\";\n\n/**\n * This class represents the MathType integration for CKEditor5.\n * @extends {IntegrationModel}\n */\nexport default class CKEditor5Integration extends IntegrationModel {\n constructor(ckeditorIntegrationModelProperties) {\n const editor = ckeditorIntegrationModelProperties.editorObject;\n\n if (typeof editor.config !== \"undefined\" && typeof editor.config.get(\"mathTypeParameters\") !== \"undefined\") {\n ckeditorIntegrationModelProperties.integrationParameters = editor.config.get(\"mathTypeParameters\");\n }\n /**\n * CKEditor5 Integration.\n *\n * @param {integrationModelProperties} integrationModelAttributes\n */\n super(ckeditorIntegrationModelProperties);\n\n /**\n * Folder name used for the integration inside CKEditor plugins folder.\n */\n this.integrationFolderName = \"ckeditor_wiris\";\n }\n\n /**\n * @inheritdoc\n * @returns {string} - The CKEditor instance language.\n * @override\n */\n getLanguage() {\n // Returns the CKEDitor instance language taking into account that the language can be an object.\n // Try to get editorParameters.language, fail silently otherwise\n try {\n return this.editorParameters.language;\n } catch (e) {}\n const languageObject = this.editorObject.config.get(\"language\");\n if (languageObject != null) {\n if (typeof languageObject === \"object\") {\n // eslint-disable-next-line no-prototype-builtins\n if (languageObject.hasOwnProperty(\"ui\")) {\n return languageObject.ui;\n }\n return languageObject;\n }\n return languageObject;\n }\n return super.getLanguage();\n }\n\n /**\n * Adds callbacks to the following CKEditor listeners:\n * - 'focus' - updates the current instance.\n * - 'contentDom' - adds 'doubleclick' callback.\n * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas.\n * - 'setData' - parses the data converting MathML into images.\n * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications.\n * - 'getData' - parses the data converting images into selected save mode (MathML by default).\n * - 'mode' - recalculates the active element.\n */\n addEditorListeners() {\n const editor = this.editorObject;\n\n if (typeof editor.config.wirislistenersdisabled === \"undefined\" || !editor.config.wirislistenersdisabled) {\n this.checkElement();\n }\n }\n\n /**\n * Checks the current container and assign events in case that it doesn't have them.\n * CKEditor replaces several times the element element during its execution,\n * so we must assign the events again to editor element.\n */\n checkElement() {\n const editor = this.editorObject;\n const newElement = editor.sourceElement;\n\n // If the element wasn't treated, add the events.\n if (!newElement.wirisActive) {\n this.setTarget(newElement);\n this.addEvents();\n // Set the element as treated\n newElement.wirisActive = true;\n }\n }\n\n /**\n * @inheritdoc\n * @param {HTMLElement} element - HTMLElement target.\n * @param {MouseEvent} event - event which trigger the handler.\n */\n doubleClickHandler(element, event) {\n this.core.editionProperties.dbclick = true;\n if (this.editorObject.isReadOnly === false) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n // Some plugins (image2, image) open a dialog on Double-click. On formulas\n // doubleclick event ends here.\n if (typeof event.stopPropagation !== \"undefined\") {\n // old I.E compatibility.\n event.stopPropagation();\n } else {\n event.returnValue = false;\n }\n this.core.getCustomEditors().disable();\n const customEditorAttr = element.getAttribute(Configuration.get(\"imageCustomEditorName\"));\n if (customEditorAttr) {\n this.core.getCustomEditors().enable(customEditorAttr);\n }\n this.core.editionProperties.temporalImage = element;\n this.openExistingFormulaEditor();\n }\n }\n }\n }\n\n /** @inheritdoc */\n static getCorePath() {\n return null; // TODO\n }\n\n /** @inheritdoc */\n callbackFunction() {\n super.callbackFunction();\n this.addEditorListeners();\n }\n\n openNewFormulaEditor() {\n // Store the editor selection as it will be lost upon opening the modal\n this.core.editionProperties.selection = this.editorObject.editing.view.document.selection;\n\n // Focus on the selected editor when multiple editor instances are present\n WirisPlugin.currentInstance = this;\n\n return super.openNewFormulaEditor();\n }\n\n /**\n * Replaces old formula with new MathML or inserts it in caret position if new\n * @param {String} mathml MathML to update old one or insert\n * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image\n */\n insertMathml(mathml) {\n // This returns the value returned by the callback function (writer => {...})\n return this.editorObject.model.change((writer) => {\n const core = this.getCore();\n const selection = this.editorObject.model.document.selection;\n\n const modelElementNew = writer.createElement(\"mathml\", {\n formula: mathml,\n ...Object.fromEntries(selection.getAttributes()), // To keep the format, such as style and font\n });\n\n // Obtain the DOM object corresponding to the formula\n if (core.editionProperties.isNewElement) {\n // Don't bother inserting anything at all if the MathML is empty.\n if (!mathml) return;\n\n const viewSelection =\n this.core.editionProperties.selection || this.editorObject.editing.view.document.selection;\n const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition());\n\n this.editorObject.model.insertObject(modelElementNew, modelPosition);\n\n // Remove selection\n if (!viewSelection.isCollapsed) {\n for (const range of viewSelection.getRanges()) {\n writer.remove(this.editorObject.editing.mapper.toModelRange(range));\n }\n }\n\n // Set carret after the formula\n const position = this.editorObject.model.createPositionAfter(modelElementNew);\n writer.setSelection(position);\n } else {\n const img = core.editionProperties.temporalImage;\n const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent;\n const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement);\n\n // Insert the new and remove the old one\n const position = this.editorObject.model.createPositionBefore(modelElementOld);\n\n // If the given MathML is empty, don't insert a new formula.\n if (mathml) {\n this.editorObject.model.insertObject(modelElementNew, position);\n }\n writer.remove(modelElementOld);\n }\n\n // eslint-disable-next-line consistent-return\n return modelElementNew;\n });\n }\n\n /**\n * Finds the text node corresponding to given DOM text element.\n * @param {element} viewElement Element to find corresponding text node of.\n * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist.\n */\n findText(viewElement) {\n // eslint-disable-line consistent-return\n // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down\n let pivot = viewElement;\n let element;\n while (!element) {\n element = this.editorObject.editing.mapper.toModelElement(\n this.editorObject.editing.view.domConverter.domToView(pivot),\n );\n pivot = pivot.parentElement;\n }\n\n // Navigate through all the subtree under `pivot` in order to find the correct text node\n const range = this.editorObject.model.createRangeIn(element);\n const descendants = Array.from(range.getItems());\n for (const node of descendants) {\n let viewElementData = viewElement.data;\n if (viewElement.nodeType === 3) {\n // Remove invisible white spaces\n viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), \"\");\n }\n if (node.is(\"textProxy\") && node.data === viewElementData.replace(String.fromCharCode(160), \" \")) {\n return node.textNode;\n }\n }\n }\n\n /** @inheritdoc */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n // eslint-disable-line no-unused-vars\n const returnObject = {};\n\n let mathmlOrigin;\n if (!mathml) {\n this.insertMathml(\"\");\n } else if (this.core.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n\n this.editorObject.model.change((writer) => {\n const { latexRange } = this.core.editionProperties;\n\n const startNode = this.findText(latexRange.startContainer);\n const endNode = this.findText(latexRange.endContainer);\n\n let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset);\n let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset);\n\n let range = writer.createRange(startPosition, endPosition);\n\n // When Latex is next to image/formula.\n if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) {\n // Get the position of the latex to be replaced.\n let latexEdited =\n \"$$\" +\n Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) +\n \"$$\";\n let data = latexRange.startContainer.data;\n\n // Remove invisible characters.\n data = data.replaceAll(String.fromCharCode(8288), \"\");\n\n // Get to the start of the latex we are editing.\n let offset = data.indexOf(latexEdited);\n let dataOffset = data.substring(offset);\n let second$ = dataOffset.substring(2).indexOf(\"$$\") + 4;\n let substring = dataOffset.substr(0, second$);\n data = data.replace(substring, \"\");\n\n if (!data) {\n startPosition = writer.createPositionBefore(startNode);\n range = startNode;\n } else {\n startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset);\n endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset);\n range = writer.createRange(startPosition, endPosition);\n }\n }\n\n writer.remove(range);\n writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition);\n });\n } else {\n mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml;\n try {\n returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(\n this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)),\n windowTarget.document,\n );\n } catch (e) {\n const x = e.toString();\n if (x.includes(\"CKEditorError: Cannot read property 'parent' of undefined\")) {\n this.core.modalDialog.cancelAction();\n }\n }\n }\n\n // Build the telemeter payload separated to delete null/undefined entries.\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.core.editionProperties.editionStartTime,\n editor_origin: null, // TODO read formula to find out whether it comes from Oxygen Desktop\n toolbar: this.core.modalDialog.contentManager.toolbar,\n size: mathml?.length,\n };\n\n // Remove desired null keys.\n Object.keys(payload).forEach((key) => {\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload,\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n\n /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula.\n We probably should add it here as well, but we should look further into how */\n // this.editorObject.fire('change');\n\n // Remove temporal image of inserted formula\n this.core.editionProperties.temporalImage = null;\n\n return returnObject;\n }\n\n /**\n * Function called when the content submits an action.\n */\n notifyWindowClosed() {\n this.editorObject.editing.view.focus();\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { Command } from \"ckeditor5/src/core.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\n/**\n * Command for opening the MathType editor\n */\nexport class MathTypeCommand extends Command {\n execute(options = {}) {\n // Check we get a valid integration\n // eslint-disable-next-line no-prototype-builtins\n if (!options.hasOwnProperty(\"integration\") || !(options.integration instanceof CKEditor5Integration)) {\n throw 'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options';\n }\n\n // Save the integration instance as a property of the command.\n this.integration = options.integration;\n\n // Set custom editor or disable it\n this.setEditor();\n\n // Open the editor\n this.openEditor();\n }\n\n /**\n * Sets the appropriate custom editor, if any, or disables them.\n */\n setEditor() {\n // It's possible that a custom editor was last used.\n // We need to disable it to avoid wrong behaviors.\n this.integration.core.getCustomEditors().disable();\n }\n\n /**\n * Checks whether we are editing an existing formula or a new one and opens the editor.\n */\n openEditor() {\n this.integration.core.editionProperties.dbclick = false;\n const image = this._getSelectedImage();\n if (\n typeof image !== \"undefined\" &&\n image !== null &&\n image.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))\n ) {\n this.integration.core.editionProperties.temporalImage = image;\n this.integration.openExistingFormulaEditor();\n } else {\n this.integration.openNewFormulaEditor();\n }\n }\n\n /**\n * Gets the currently selected formula image\n * @returns {Element} selected image, if any, undefined otherwise\n */\n _getSelectedImage() {\n const { selection } = this.editor.editing.view.document;\n\n // If we can not extract the formula, fall back to default behavior.\n if (selection.isCollapsed || selection.rangeCount !== 1) {\n return;\n }\n\n // Look for the wrapping the formula and then for the inside\n\n const range = selection.getFirstRange();\n\n let image;\n\n for (const span of range) {\n if (span.item.name !== \"span\") {\n return;\n }\n image = span.item.getChild(0);\n break;\n }\n\n if (!image) {\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return this.editor.editing.view.domConverter.mapViewToDom(image);\n }\n}\n\n/**\n * Command for opening the ChemType editor\n */\nexport class ChemTypeCommand extends MathTypeCommand {\n setEditor() {\n this.integration.core.getCustomEditors().enable(\"chemistry\");\n }\n}\n","// CKEditor imports\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView } from 'ckeditor5/src/ui.js';\nimport { ClickObserver, HtmlDataProcessor, XmlDataProcessor, UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { Widget, toWidget, viewToModelPositionOutsideModelElement } from 'ckeditor5/src/widget.js';\n\n// MathType API imports\nimport IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Core from \"@wiris/mathtype-html-integration-devkit/src/core.src.js\";\nimport Parser from \"@wiris/mathtype-html-integration-devkit/src/parser.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Image from \"@wiris/mathtype-html-integration-devkit/src/image.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Listeners from \"@wiris/mathtype-html-integration-devkit/src/listeners.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport StringManager from \"@wiris/mathtype-html-integration-devkit/src/stringmanager.js\";\n\n// Local imports\nimport { MathTypeCommand, ChemTypeCommand } from \"./commands.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\nimport mathIcon from \"../theme/icons/ckeditor5-formula.svg\";\nimport chemIcon from \"../theme/icons/ckeditor5-chem.svg\";\n\nimport packageInfo from \"../package.json\";\n\nexport let currentInstance = null; // eslint-disable-line import/no-mutable-exports\n\nexport default class MathType extends Plugin {\n static get requires() {\n return [Widget];\n }\n\n static get pluginName() {\n return \"MathType\";\n }\n\n init() {\n // Create the MathType API Integration object\n const integration = this._addIntegration();\n currentInstance = integration;\n\n // Add the MathType and ChemType commands to the editor\n this._addCommands();\n\n // Add the buttons for MathType and ChemType\n this._addViews(integration);\n\n // Registers the element in the schema\n this._addSchema();\n\n // Add the downcast and upcast converters\n this._addConverters(integration);\n\n // Expose the WirisPlugin variable to the window\n this._exposeWiris();\n }\n\n /**\n * Inherited from Plugin class: Executed when CKEditor5 is destroyed\n */\n destroy() {\n // eslint-disable-line class-methods-use-this\n currentInstance.destroy();\n }\n\n /**\n * Create the MathType API Integration object\n * @returns {CKEditor5Integration} the integration object\n */\n _addIntegration() {\n const { editor } = this;\n\n /**\n * Integration model constructor attributes.\n * @type {integrationModelProperties}\n */\n const integrationProperties = {};\n integrationProperties.environment = {};\n integrationProperties.environment.editor = \"CKEditor5\";\n integrationProperties.environment.editorVersion = \"5.x\";\n integrationProperties.version = packageInfo.version;\n integrationProperties.editorObject = editor;\n integrationProperties.serviceProviderProperties = {};\n integrationProperties.serviceProviderProperties.URI = \"https://www.wiris.net/demo/plugins/app\";\n integrationProperties.serviceProviderProperties.server = \"java\";\n integrationProperties.target = editor.sourceElement;\n integrationProperties.scriptName = \"bundle.js\";\n integrationProperties.managesLanguage = true;\n // etc\n\n // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element.\n // To avoid a wrong behaviour, this integration only starts if the workspace container exists.\n let integration;\n if (integrationProperties.target) {\n // Instance of the integration associated to this editor instance\n integration = new CKEditor5Integration(integrationProperties);\n integration.init();\n integration.listeners.fire(\"onTargetReady\", {});\n\n integration.checkElement();\n\n this.listenTo(\n editor.editing.view.document,\n \"click\",\n (evt, data) => {\n // Is Double-click\n if (data.domEvent.detail === 2) {\n integration.doubleClickHandler(data.domTarget, data.domEvent);\n evt.stop();\n }\n },\n { priority: \"highest\" },\n );\n }\n\n return integration;\n }\n\n /**\n * Add the MathType and ChemType commands to the editor\n */\n _addCommands() {\n const { editor } = this;\n\n // Add command to open the formula editor\n editor.commands.add(\"MathType\", new MathTypeCommand(editor));\n\n // Add command to open the chemistry formula editor\n editor.commands.add(\"ChemType\", new ChemTypeCommand(editor));\n }\n\n /**\n * Add the buttons for MathType and ChemType\n * @param {CKEditor5Integration} integration the integration object\n */\n _addViews(integration) {\n const { editor } = this;\n\n // Check if MathType editor is enabled\n if (Configuration.get(\"editorEnabled\")) {\n // Add button for the formula editor\n editor.ui.componentFactory.add(\"MathType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"MathType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_math\", integration.getLanguage()),\n icon: mathIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"MathType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Check if ChemType editor is enabled\n if (Configuration.get(\"chemEnabled\")) {\n // Add button for the chemistry formula editor\n editor.ui.componentFactory.add(\"ChemType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"ChemType\"), \"isEnabled\");\n\n view.set({\n label: StringManager.get(\"insert_chem\", integration.getLanguage()),\n icon: chemIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"ChemType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Observer for the Double-click event\n editor.editing.view.addObserver(ClickObserver);\n }\n\n /**\n * Registers the element in the schema\n */\n _addSchema() {\n const { schema } = this.editor.model;\n\n schema.register(\"mathml\", {\n inheritAllFrom: \"$inlineObject\",\n allowAttributes: [\"formula\"],\n });\n }\n\n /**\n * Add the downcast and upcast converters\n */\n _addConverters(integration) {\n const { editor } = this;\n\n // Editing view -> Model\n editor.conversion.for(\"upcast\").elementToElement({\n view: {\n name: \"span\",\n classes: \"ck-math-widget\",\n },\n model: (viewElement, { writer: modelWriter }) => {\n const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute(\"data-mathml\"));\n return modelWriter.createElement(\"mathml\", {\n formula,\n });\n },\n });\n\n // Data view -> Model\n editor.data.upcastDispatcher.on(\"element:math\", (evt, data, conversionApi) => {\n const { consumable, writer } = conversionApi;\n const { viewItem } = data;\n\n // When element was already consumed then skip it.\n if (!consumable.test(viewItem, { name: true })) {\n return;\n }\n\n // If we encounter any with a LaTeX annotation inside,\n // convert it into a \"$$...$$\" string.\n const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define\n\n // Get the formula of the (which is all its children).\n const processor = new XmlDataProcessor(editor.editing.view.document);\n\n // Only god knows why the following line makes viewItem lose all of its children,\n // so we obtain isLatex before doing this because we need viewItem's children for that.\n const upcastWriter = new UpcastWriter(editor.editing.view.document);\n const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren());\n\n // and obtain the attributes of too!\n const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}=\"${value}\"`).join(\"\");\n\n // We process the document fragment\n let formula = processor.toData(viewDocumentFragment) || \"\";\n\n // And obtain the complete formula\n formula = Util.htmlSanitize(`${formula}`);\n\n // Replaces the < & > characters to its HTMLEntity to avoid render issues.\n formula = formula.replaceAll('\"<\"', '\"<\"').replaceAll('\">\"', '\">\"').replaceAll(\"><<\", \"><<\");\n\n /* Model node that contains what's going to actually be inserted. This can be either:\n - A element with a formula attribute set to the given formula, or\n - If the original had a LaTeX annotation, then the annotation surrounded by \"$$...$$\" */\n const modelNode = isLatex\n ? writer.createText(Parser.initParse(formula, integration.getLanguage()))\n : writer.createElement(\"mathml\", { formula });\n\n // Find allowed parent for element that we are going to insert.\n // If current parent does not allow to insert element but one of the ancestors does\n // then split nodes to allowed parent.\n const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor);\n\n // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n if (!splitResult) {\n return;\n }\n\n // Insert element on allowed position.\n conversionApi.writer.insert(modelNode, splitResult.position);\n\n // Consume appropriate value from consumable values list.\n consumable.consume(viewItem, { name: true });\n\n const parts = conversionApi.getSplitParts(modelNode);\n\n // Set conversion result range.\n data.modelRange = writer.createRange(\n conversionApi.writer.createPositionBefore(modelNode),\n conversionApi.writer.createPositionAfter(parts[parts.length - 1]),\n );\n\n // Now we need to check where the `modelCursor` should be.\n if (splitResult.cursorParent) {\n // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n //\n // before: foo[]\n // after: foo[]\n\n data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n } else {\n // Otherwise just continue after inserted element.\n data.modelCursor = data.modelRange.end;\n }\n });\n\n /**\n * Whether the given view element has a LaTeX annotation element.\n * @param {*} math\n * @returns {bool}\n */\n function mathIsLatex(math) {\n const semantics = math.getChild(0);\n if (!semantics || semantics.name !== \"semantics\") return false;\n for (const child of semantics.getChildren()) {\n if (child.name === \"annotation\" && child.getAttribute(\"encoding\") === \"LaTeX\") {\n return true;\n }\n }\n return false;\n }\n\n function createViewWidget(modelItem, { writer: viewWriter }) {\n const widgetElement = viewWriter.createContainerElement(\"span\", {\n class: \"ck-math-widget\",\n });\n\n const mathUIElement = createViewImage(modelItem, { writer: viewWriter }); // eslint-disable-line no-use-before-define\n\n if (mathUIElement) {\n viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement);\n }\n\n return toWidget(widgetElement, viewWriter);\n }\n\n function createViewImage(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n const mathString = modelItem.getAttribute(\"formula\").replaceAll('ref=\"<\"', 'ref=\"<\"');\n const imgHtml = Parser.initParse(mathString, integration.getLanguage());\n const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0);\n\n /* Although we use the HtmlDataProcessor to obtain the attributes,\n we must create a new EmptyElement which is independent of the\n DataProcessor being used by this editor instance */\n if (imgElement) {\n return viewWriter.createEmptyElement(\"img\", imgElement.getAttributes(), {\n renderUnsafeAttributes: [\"src\"],\n });\n }\n\n return null;\n }\n\n // Model -> Editing view\n editor.conversion.for(\"editingDowncast\").elementToElement({\n model: \"mathml\",\n view: createViewWidget,\n });\n\n // Model -> Data view\n editor.conversion.for(\"dataDowncast\").elementToElement({\n model: \"mathml\",\n view: createDataString, // eslint-disable-line no-use-before-define\n });\n\n /**\n * Makes a copy of the given view node.\n * @param {module:engine/view/node~Node} sourceNode Node to copy.\n * @returns {module:engine/view/node~Node} Copy of the node.\n */\n function clone(viewWriter, sourceNode) {\n if (sourceNode.is(\"text\")) {\n return viewWriter.createText(sourceNode.data);\n }\n if (sourceNode.is(\"element\")) {\n if (sourceNode.is(\"emptyElement\")) {\n return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes());\n }\n const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes());\n for (const child of sourceNode.getChildren()) {\n viewWriter.insert(viewWriter.createPositionAt(element, \"end\"), clone(viewWriter, child));\n }\n return element;\n }\n\n throw new Exception(\"Given node has unsupported type.\"); // eslint-disable-line no-undef\n }\n\n function createDataString(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n let mathString = Parser.endParseSaveMode(modelItem.getAttribute(\"formula\"));\n\n const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0);\n\n return clone(viewWriter, sourceMathElement);\n }\n\n // This stops the view selection getting into the s and messing up caret movement\n editor.editing.mapper.on(\n \"viewToModelPosition\",\n viewToModelPositionOutsideModelElement(editor.model, (viewElement) => viewElement.hasClass(\"ck-math-widget\")),\n );\n\n // Keep a reference to the original get and set function.\n const { get, set } = editor.data;\n\n /**\n * Hack to transform $$latex$$ into in editor.getData()'s output.\n */\n editor.data.on(\n \"get\",\n (e) => {\n let output = e.return;\n // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any.\n // For text or latex formulas, it returns the original output.\n e.return = MathML.removeSemantics(output, \"application/json\");\n },\n { priority: \"low\" },\n );\n\n /**\n * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData().\n */\n editor.data.on(\n \"set\",\n (e, args) => {\n // Retrieve the data to be set on the CKEditor.\n let modifiedData = args[0];\n // Regex to find all mathml formulas.\n const regexp = //gm;\n\n // Get all MathML formulas and store them in an array.\n // Using the conditional operator on data.main because the data parameter has different types depending on:\n // editor.data.set can be used directly or by the source editing plugin.\n // With the source editor plugin, data is an object with the key `main` which contains the source code string.\n // When using the editor.data.set method, the data is a string with the content to be set to the editor.\n let formulas = Object.values(modifiedData)[0]\n ? [...Object.values(modifiedData)[0].matchAll(regexp)]\n : [...modifiedData.matchAll(regexp)];\n\n // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation.\n formulas.forEach((formula) => {\n let mathml = formula[0];\n if (mathml.includes('encoding=\"LaTeX\"')) {\n // LaTeX found.\n let latex = \"$$$\" + Latex.getLatexFromMathML(mathml) + \"$$$\"; // We add $$$ instead of $$ because the replace function ignores one $.\n modifiedData = modifiedData.replace(mathml, latex);\n }\n });\n\n args[0] = modifiedData;\n },\n { priority: \"high\" },\n );\n }\n\n /**\n * Expose the WirisPlugin variable to the window\n */\n // eslint-disable-next-line class-methods-use-this\n _exposeWiris() {\n window.WirisPlugin = {\n Core,\n Parser,\n Image,\n MathML,\n Util,\n Configuration,\n Listeners,\n IntegrationModel,\n currentInstance,\n Latex,\n };\n }\n}\n"],"names":["global","factory","module","exports","this","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","Object","freeze","seal","create","apply","construct","Reflect","x","fun","thisValue","args","Func","arrayForEach","unapply","Array","prototype","forEach","arrayPop","pop","arrayPush","push","stringToLowerCase","String","toLowerCase","stringToString","toString","stringMatch","match","stringReplace","replace","stringIndexOf","indexOf","stringTrim","trim","objectHasOwnProperty","hasOwnProperty","regExpTest","RegExp","test","typeErrorCreate","unconstruct","TypeError","func","thisArg","_len","arguments","length","_key","_len2","_key2","addToSet","set","array","transformCaseFunc","undefined","l","element","lcElement","cleanArray","index","isPropertyExist","clone","object","newObject","property","value","isArray","constructor","lookupGetter","prop","desc","get","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","__proto__","NODE_TYPE","attribute","cdataSection","entityReference","entityNode","progressingInstruction","comment","document","documentType","documentFragment","notation","getGlobal","window","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","createPolicy","suffix","ATTR_NAME","hasAttribute","getAttribute","policyName","createHTML","createScriptURL","scriptUrl","_","console","warn","createDOMPurify","DOMPurify","root","version","removed","nodeType","isSupported","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","MozNamedAttrMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","createElement","content","ownerDocument","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","createHTMLDocument","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","tagNameCheck","writable","configurable","enumerable","attributeNameCheck","allowCustomizedBuiltInElements","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","Function","_parseConfig","cfg","ADD_URI_SAFE_ATTR","ADD_DATA_URI_TAGS","ALLOWED_URI_REGEXP","ADD_TAGS","ADD_ATTR","table","tbody","TRUSTED_TYPES_POLICY","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","parent","tagName","namespaceURI","parentTagName","Boolean","_forceRemove","node","removeChild","_removeAttribute","name","getAttributeNode","from","removeAttribute","setAttribute","_initDocument","dirty","doc","leadingWhitespace","matches","dirtyPayload","parseFromString","documentElement","createDocument","innerHTML","body","insertBefore","createTextNode","childNodes","call","_createNodeIterator","SHOW_ELEMENT","SHOW_COMMENT","SHOW_TEXT","SHOW_PROCESSING_INSTRUCTION","SHOW_CDATA_SECTION","_isClobbered","elm","nodeName","textContent","attributes","hasChildNodes","_isNode","_executeHook","entryPoint","currentNode","data","hook","_sanitizeElements","allowedTags","firstElementChild","_isBasicCustomElement","parentNode","childCount","i","childClone","__removalCount","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","attrName","attrValue","keepAttr","allowedAttributes","attr","forceKeepAttr","getAttributeType","setAttributeNS","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","nextNode","sanitize","importedNode","returnNode","appendChild","firstChild","nodeIterator","shadowroot","shadowrootmode","serializedHTML","outerHTML","doctype","setConfig","clearConfig","isValidAttribute","tag","addHook","hookFunction","removeHook","removeHooks","removeAllHooks","purify","Constants","safeXmlCharactersEntities","tagOpener","tagCloser","doubleQuote","realDoubleQuote","safeBadBlackboardCharacters","ltElement","gtElement","ampElement","safeGoodBlackboardCharacters","xmlCharacters","id","ampersand","quote","safeXmlCharacters","MathML","isMathmlInAttribute","mathAtt","attContent","att","atts","regex","expression","actualContent","substring","reversed","split","reverse","join","exists","safeXmlDecode","input","_wrs_blackboard","returnValue","currentEntity","character","charAt","safeXmlEncode","mathMLEntities","mathml","toReturn","codePointAt","end","container","Util","fixedCharCodeAt","innerText","addCustomEditorClassAttribute","customEditor","start","substr","removeCustomEditorClassAttribute","addAnnotation","annotationEncoding","containsAnnotation","mathmlWithAnnotation","closeSemanticsIndex","isEmpty","endIndexInline","endIndexNonInline","endIndex","beginMathMLContent","endMathmlContent","lastIndexOf","mathmlContent","removeAnnotation","mathmlWithoutAnnotation","openAnnotationTag","closeAnnotationTag","startAnnotationIndex","differentAnnotationFound","differentAnnotationIndex","closeIndex","endAnnotationIndex","startIndex","removeSemantics","semanticsStartingTagRegex","semanticsEndingTagRegex","removeSemanticsOcurrences","characters","mathTagStart","mathTagEnd","mathTagEndline","semanticsTagStart","annotationTagStart","output","mathTagEndIndex","mathTagEndlineIndex","firstTagCloser","semanticsIndex","mmlTagStart","annotationIndex","mmlContent","containClass","mathML","className","classIndex","classTagEndIndex","classTag","closeTag","closeTagInline","firstCloseTagIndex","firstCloseTagInlineIndex","empty","mathTagEndRegex","mathTagEndArray","exec","encodeProperties","replacer","quoteIndex","propertyValue","propertyValueEncoded","htmlEntities","matchEncoded","mathmlEncoded","Configuration","addConfiguration","properties","assign","_properties","key","update","updateProperty","TextCache","cache","populate","Listeners","listeners","add","listener","fire","eventName","event","cancelled","callback","defaultPrevented","newListener","ServiceProvider","_listeners","addListener","fireEvent","parameters","_parameters","servicePaths","_servicePaths","setServicePath","service","path","getServicePath","serviceName","integrationPath","_integrationPath","getServerURL","url","location","href","arr","result","init","configurationURI","createServiceURI","createImageURI","showImageURI","getMathMLURI","serviceURI","URI","serverPath","getUrl","postVariables","currentPath","httpRequest","createHttpRequest","open","header","convertStringToObject","val","setRequestHeader","send","httpBuildQuery","responseText","getService","response","getVariables","serviceUrl","getServerLanguageFromService","extension","serverExtension","concatenateUrl","server","Latex","_cache","getLatexFromMathML","mathmlWithoutSemantics","mml","jsonResponse","JSON","parse","latex","status","latexHtmlEntitiesEncoded","mathmlWithSemantics","getMathMLFromLatex","includeLatexOnSemantics","latexCache","saveLatex","parseMathmlToLatex","mathTagBegin","openTarget","closeTarget","startAnnotation","closeAnnotation","getLatexFromTextNode","textNode","caretPosition","latexTags","defaultLatexTags","close","startNode","previousSibling","getNextLatexPosition","currentPosition","position","nodeValue","nextSibling","isPrevious","endNode","endPosition","tagLength","startPosition","StringManager","Error","lang","language","slice","strings","translations","eventTarget","createEvent","eventObject","initEvent","dispatchEvent","createEventObject","addEvent","callBackFunction","addEventListener","attachEvent","removeEvent","removeEventListener","detachEvent","addElementEvents","doubleClickHandler","mousedownHandler","mouseupHandler","callbackDblclick","realEvent","srcElement","target","callbackMousedown","callbackMouseup","removeElementEvents","addClass","containsClass","currentClasses","removeClass","newClassName","classes","convertOldXmlinitialtextAttribute","xitpos","valpos","startquote","endquote","newvalue","keyValueString","map","pair","reduce","resultObject","creator","keys","attributeName","e","createObject","objectCode","recursiveParamsFix","attributesParsed","param","NAME","VALUE","replaceChild","applet","createObjectCode","specified","path1","path2","separator","htmlSanitize","annotationRegex","annotation","htmlEntitiesDecode","textarea","XMLHttpRequest","ActiveXObject","oc","urlEncode","propertiesToString","hash","n","j","s1","s2","compareStrings","a","b","an","bn","c","string","idx","code","charCodeAt","hi","low","Number","isNaN","urlToAssArray","query","ss","h","s","kv","decodeURIComponent","clearString","encodeURIComponent","getWIRISImageOutput","imgCode","convertToXml","convertToSafeXml","imgObject","dataMathML","safeMathML","getNodeLength","staticNodeLengths","IMG","BR","toUpperCase","getSelectedItem","isIframe","forceGetSelection","windowTarget","contentWindow","focus","selection","range","createRange","parentElement","htmlText","execCommand","temporalObject","pasteHTML","getElementById","item","getSelection","getRangeAt","startContainer","startOffset","endContainer","endOffset","localName","classList","contains","emptySpan","getSelectedItemOnTextarea","textNodeValues","selectionStart","getElementsByNameFromString","autoClosed","elements","endString","decode64","PLUS","SLASH","NUMBER","LOWER","UPPER","PLUS_URL_SAFE","SLASH_URL_SAFE","b64ToByteArray","b64String","tmp","placeHolders","readInt32","bytes","int32","splice","readByte","shift","readBytes","pos","len","updateTextArea","selectionEnd","selectionEndSub","updateExistingTextOnTextarea","textareaStart","addArgument","parameter","sep","Image","removeImgDataAttributes","img","attributesToRemove","originImg","destImg","customEditorAttributeName","mathmlAttributeName","imgAttributes","iterator","originAttribute","isSvg","src","startsWith","isBase64","setImgSize","uri","ar","base64String","svgString","getMetricsFromSvgString","fromCharCode","getMetricsFromBytes","width","cw","height","ch","baseline","cb","dpi","style","verticalAlign","fixAfterResize","maxWidth","processImg","atob","encodedSvgString","base64","reader","FileReader","onload","fetch","then","r","blob","readAsDataURL","first","last","typ","Math","round","Accessibility","mathMLToAccessible","mode","ignoreStyles","accessibleText","accessibleJsonResponse","Parser","mathmlToImgObject","wirisProperties","align","wirisEditorProperties","metrics","centerbaseline","mathmlSubstring","createShowImageSrc","format","alt","createImageSrc","observer","observe","baseParts","initParse","initParseSaveMode","initParseEditMode","parseMathmlToImg","codeImgTransform","imgList","token","carry","mathmlStartToken","mathmlStart","mathmlEnd","latexStartPosition","latexEndPosition","replaceText","endParse","codeEndParsedEditMode","endParseEditMode","codeEndParseSaveMode","endParseSaveMode","decodedLatex","createShowImageSrcData","dataMd5","renderParams","dataObject","formula","com","wiris","js","JsPluginTools","md5encode","pattern","patternLength","source","lastIndex","characterNextPosition","xmlCode","imageMathmlAtrribute","MutationObserver","mutationObserver","mutations","mutation","oldValue","Config","attributeOldValue","EditorListener","isContentChanged","waitingForChanges","setIsContentChanged","getIsContentChanged","setWaitingForChanges","caretPositionChanged","_editor","clipboardChanged","contentChanged","styleChanged","transformationReceived","wasm","cachedTextDecoder","TextDecoder","ignoreBOM","fatal","decode","cachedUint8Memory0","getUint8Memory0","byteLength","Uint8Array","memory","buffer","getStringFromWasm0","ptr","subarray","heap","fill","heap_next","addHeapObject","obj","getObject","dropObject","takeObject","ret","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encode","encodeString","encodeInto","arg","view","buf","read","written","passStringToWasm0","malloc","realloc","mem","offset","isLikeNone","cachedInt32Memory0","getInt32Memory0","Int32Array","cachedFloat64Memory0","getFloat64Memory0","Float64Array","cachedBigInt64Memory0","getBigInt64Memory0","BigInt64Array","debugString","type","description","debug","builtInMatches","stringify","message","stack","makeClosure","arg0","arg1","dtor","f","state","cnt","real","__wbindgen_export_2","original","__wbg_adapter_46","arg2","__wbindgen_export_3","makeMutClosure","__wbg_adapter_49","__wbindgen_export_4","__wbg_adapter_52","__wbindgen_export_5","handleError","__wbindgen_export_6","__wbg_adapter_103","arg3","__wbindgen_export_7","getArrayU8FromWasm0","Telemeter","__destroy_into_raw","__wbg_ptr","free","__wbg_telemeter_free","solution","hosts","config","retptr","__wbindgen_add_to_stack_pointer","telemeter_new","r0","r1","r2","identify","sender_id","ptr0","__wbindgen_export_0","__wbindgen_export_1","len0","telemeter_identify","track","event_type","event_payload","telemeter_track","log","level","payload","telemeter_log","finish","telemeter_finish","new_debug_status","telemeter_debug","__wbg_load","imports","Response","WebAssembly","instantiateStreaming","headers","arrayBuffer","instantiate","instance","Instance","__wbg_get_imports","wbg","__wbindgen_string_new","__wbg_new_c728d68b8b34487e","__wbg_status_7841bb47be2a8f16","__wbg_headers_ea7ef583d1564b08","__wbg_new0_ad75dd38f92424e2","Date","__wbg_getTime_ed6ee333b702f8fc","getTime","__wbindgen_object_drop_ref","__wbindgen_is_object","__wbg_crypto_58f13aa23ffcb166","crypto","__wbg_process_5b786e71d465a513","process","__wbg_versions_c2ab80650590b6a2","versions","__wbg_node_523d7bd03ef69fba","__wbindgen_is_string","__wbg_msCrypto_abcb1295e768d1f2","msCrypto","__wbg_require_2784e593a4674877","require","__wbg_newwithlength_13b5319ab422dcf6","__wbg_get_4a9aa5157afeb382","__wbg_next_1989a20442400aaa","next","__wbg_done_bc26bf4ada718266","done","__wbg_value_0570714ff7d75f35","__wbg_iterator_7ee1a391d310f8e4","Symbol","__wbg_get_2aff440840bb6202","__wbg_next_15da6a3df9290720","__wbindgen_is_function","__wbg_call_669127b9d730c650","__wbindgen_object_clone_ref","__wbg_self_3fad056edded10bd","self","__wbg_window_a4f46c98a61d4089","__wbg_globalThis_17eff828815f7d84","globalThis","__wbg_global_46f939f6541643c5","__wbindgen_is_undefined","__wbg_newnoargs_ccdcae30fd002262","__wbg_isArray_38525be7442aa21e","__wbg_call_53fc3abd42e24ec8","__wbg_isSafeInteger_c38b0a16d0c7cef7","isSafeInteger","__wbg_new_feb65b865d980ae2","state0","cb0","Promise","__wbindgen_memory","__wbg_buffer_344d9b41efe96da7","__wbg_new_d8a000788389a31e","__wbg_set_dcfd613a3420f908","__wbg_length_a5587d6cd79ab197","__wbindgen_string_get","ptr1","len1","__wbg_stringify_4039297315a25b00","__wbg_set_40f7786a25a9cc7e","__wbg_has_cdf8b85f6e903c80","has","__wbg_fetch_701fcd2bde06379a","__wbg_fetch_b5d6bebed1e6c2d2","__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3","__wbg_new_e4960143e41697a4","AbortController","__wbg_signal_1ed842bebd6ae322","signal","__wbg_abort_8355f201f30300bb","abort","__wbindgen_error_new","__wbindgen_jsval_loose_eq","__wbindgen_boolean_get","v","__wbindgen_number_get","__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1","__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d","ArrayBuffer","__wbg_entries_6d727b73ee02b7ce","__wbg_String_917f38a1211cf44b","__wbg_warn_ade8d3b7ecee11ff","__wbg_readyState_13e55da5ad6d64e2","readyState","__wbg_warn_4affe1093892a4ef","__wbg_close_f4135085ec3fc8f0","__wbg_new_b9b318679315404f","WebSocket","__wbg_setbinaryType_dcb62e0f2b346301","binaryType","__wbg_log_7811587c4c6d2844","__wbg_error_f0a6627f4b23c19d","error","__wbg_info_3ca7870690403fee","info","__wbg_document_183cf1eecfdbffee","__wbg_visibilityState_9721703a5ef75faf","visibilityState","__wbg_getwithrefkey_3b3c46ba20582127","__wbg_length_cace2e0b3ddc0502","__wbg_addEventListener_0f2891b0794e07fa","__wbg_removeEventListener_104d11302bb212d1","__wbindgen_is_bigint","__wbindgen_bigint_from_i64","__wbindgen_in","__wbindgen_bigint_from_u64","BigInt","asUintN","__wbindgen_jsval_eq","__wbg_localStorage_e11f72e996a4f5d9","localStorage","__wbg_getItem_c81cd3ae30cd579a","getItem","__wbg_navigator_7078da62d92ff5ad","navigator","__wbg_mediaDevices_e00b1f64d2b9939f","mediaDevices","__wbg_enumerateDevices_619d52f5eef34c2f","enumerateDevices","__wbg_setItem_fe04f524052a3839","arg4","setItem","__wbindgen_cb_drop","__wbg_deviceId_58f7da2228a26c02","deviceId","__wbg_instanceof_Response_944e2745b5db71f5","__wbg_randomFillSync_a0d98aa11c81fe89","randomFillSync","__wbg_subarray_6ca5cfa7fbb9abbe","__wbg_getRandomValues_504510b5564925af","getRandomValues","__wbindgen_bigint_get_as_i64","__wbindgen_debug_string","__wbindgen_throw","__wbg_then_89e1c559530b85cf","__wbg_queueMicrotask_e5949c35d772a669","queueMicrotask","__wbg_then_1bbc9edafd859b06","__wbg_queueMicrotask_2be8b97a81fe4d00","__wbg_resolve_a3252b2860f0a09e","resolve","__wbg_url_1f609e63ff1a7983","__wbg_send_2860805104507701","__wbg_instanceof_Window_cde2416cf5126a72","Window","__wbg_new_19676474aa414d62","Headers","__wbg_append_feec4143bbf21904","append","__wbg_newwithstrandinit_29038da14d09e330","Request","__wbindgen_closure_wrapper1532","__wbindgen_closure_wrapper1602","__wbindgen_closure_wrapper1834","__wbg_finalize_init","__wbg_init","__wbindgen_wasm_module","__wbindgen_start","URL","telemeterAttributes","telemeter","waitingForInit","TelemeterWASM","catch","finally","local_telemeter","ContentManager","contentManagerAttributes","editorAttributes","customEditors","environment","editorListener","editor","ua","userAgent","deviceProperties","isAndroid","isIOS","toolbar","dbclick","modalDialogInstance","isNewElement","integrationModel","setIntegrationModel","setModalDialogInstance","insert","updateTitle","insertEditor","isEditorLoaded","jsEditor","JsEditor","newInstance","insertInto","contentContainer","rtl","action","getEditorModel","isRTL","direction","addEditorListener","setTimeout","hideKeyboard","formulaDisplayDiv","getElementsByClassName","handleOpenedIosSoftkeyboard","handleClosedIosSoftkeyboard","bind","addEditorAsExternalDependency","script","editorUrl","anchorElement","setHrefToAnchorElement","setProtocolToAnchorElement","getURLFromAnchorElement","stats","getEditorStats","protocol","removePort","port","hostname","pathname","includes","platform","isMobile","setInitialContent","setMathML","focusDisabled","setMathMLWithCallback","onFocus","submitAction","isFormulaEmpty","getMathMLWithSemantics","getActiveEditor","editors","mathmlEntitiesEncoded","updateFormula","disable","notifyWindowClosed","setEmptyMathML","forcedHandMode","onOpen","updateToolbar","zoom","clientWidth","innerWidth","setKeyboardMode","trigger","Core","globalListeners","hideHandModeButton","openHandOnKeyboardMathML","wrsEditor","forced","handSwitchHidden","handModeButtonSelector","mutationInstance","handModeButton","querySelector","hidden","disconnect","childList","characterData","subtree","waitForHand","handEditor","hand","handTemporalMathML","getMathML","handCoordinates","editorModel","getHandStrokes","setStrokes","fitStrokes","openHand","_wrs_int_wirisProperties","setToolbar","getToolbar","setTitle","title","setParams","setCustomHeaders","headersObj","customHeaders","hasChanges","onKeyDown","keyboardEvent","repeat","list","cancelAction","stopPropagation","preventDefault","shiftKey","activeElement","submitButton","closeDiv","minimizeDiv","cancelButton","CustomEditors","activeEditor","addEditor","editorName","editorParams","icon","confVariable","tooltip","enable","customEditorName","jsProperties","imageCustomEditorName","imageClassName","CASClassName","Event","cancel","PopUpMessage","popupMessageAttributes","overlayElement","callbacks","overlayWrapper","paragraph","overlay","buttonArea","buttonSubmitArguments","class","submitString","closeButton","createButton","closeAction","buttonCancelArguments","cancelString","show","display","blur","cancelCallback","closeCallback","IntegrationModel","setActionsOnCancelButtons","ModalDialog","modalDialogAttributes","iosSoftkeyboardOpened","iosMeasureUnit","iosDivHeight","deviceWidth","outerWidth","deviceHeight","outerHeight","landscape","portrait","instanceId","orientation","isDesktop","created","previousState","bottom","right","size","websiteBeforeLockParameters","getElementId","titleBar","generalStyle","btoa","closeIcon","hoverStyle","closeHoverIcon","stackDiv","minsIcon","minsHoverIcon","maximizeDiv","fullsIcon","fullsHoverIcon","minIcon","minHoverIcon","role","wrapper","controls","buttonContainer","createSubmitButton","contentManager","popupStrings","popupupProperties","popup","setContentManager","getContentManager","showPopUpMessage","SubmitButton","dataset","testid","getElement","recalculateScrollBar","createModalWindowDesktop","createResizeButtons","addListeners","maximize","createModalWindowAndroid","createModalWindowIos","scrollbarWidth","offsetWidth","resizerBR","resizerTL","activateResizeStateBR","activateResizeStateTL","mouseEvent","initializeResizeProperties","leftOption","resizeDataObject","eventClient","X","y","Y","initialWidth","parseInt","initialHeight","initialRight","initialBottom","leftScale","restoreWebsiteScale","lockWebsiteScroll","restoreState","setContainerHeight","saveModalProperties","unlockWebsiteScroll","destroy","removeListeners","viewportmeta","contentAttrsToUpdate","contentAttrsValuesToUpdate","setMetaAttrFunc","viewportelement","contentAttrs","contentAttr","attrArray","finalContentMeta","oldAttrs","isAttrToUpdate","bodyStylePosition","bodyStyleOverflow","overflow","htmlStyleOverflow","windowScrollX","scrollX","windowScrollY","scrollY","scrollTo","isIE11","search","orientationChangeAndroidSoftkeyboard","orientationChangeIosSoftkeyboard","minimize","restoreModalProperties","setResizeButtonsVisibility","recalculatePosition","recalculateScale","cursor","maxIcon","maxHoverIcon","left","top","setSize","innerHeight","clientHeight","offsetHeight","setPosition","recalculateSize","reExpand","visibility","keyCode","click","startDrag","stopDrag","drag","onWindowResize","clientX","changedTouches","client","clientY","dragDataObject","lastDrag","limitWindow","getLimitWindow","limitY","min","minPointer","max","maxPointer","limitX","dragX","dragY","transform","scaleMultiplier","maxHeight","contStyleBottom","contStyleRight","pageXOffset","offSetToolbarY","offSetToolbarX","minPointerY","maxPointerY","minPointerX","maxPointerX","getScrollBarWidth","inner","outer","widthOuter","widthInner","sizeModified","hasScrollBar","inputField","portraitMode","second","defineProperty","varArgs","to","nextSource","nextKey","searchElement","fromIndex","o","k","abs","sameValueZero","rawPos","coreProperties","editMode","modalDialog","chemEditorParams","editionProperties","temporalImage","latexRange","editionStartTime","browser","serviceProviderProperties","_globalListeners","initialized","_initialized","setEnvironment","integrationEnvironment","setHeaders","headerObject","getModalDialog","serviceProviderListener","jsConfiguration","jsonConfiguration","addGlobalListener","beforeUpdateFormula","beforeUpdateEvent","insertFormula","focusElement","returnObject","insertElementOnSelection","fillNonLatexNode","afterUpdateEvent","afterUpdateFormula","placeCaretAfterNode","nodeDocument","setStartAfter","collapse","removeAllRanges","addRange","mathmlOrigin","editorSelection","deleteContents","splitText","select","insertNode","mathml_origin","elapsed_time","now","editor_origin","openModalDialog","selectedItem","getMathmlFromTextNode","latexResult","leftOffset","previousNode","moveToElementText","move","moveEnd","setStart","setEnd","defaultEditorAttributesArray","defaultEditorAttributes","tempAttribute","serverEditorParameters","clientEditorParameters","editorParameters","getCustomEditors","integrationModelProperties","configurationService","scriptName","callbackMethodArguments","editorObject","managesLanguage","integrationParameters","temporalImageResizing","core","getLanguage","callbackFunction","configurationIndex","subsTring","serviceParametersURI","getPath","setCore","offlineModal","offlineModalContent","offlineModalClose","offlineModalWarn","warnIcon","offlineModalMessage","offlineModalMessage1","offlineModalMessage2","modal","solutionTelemeter","isMoodle","M","lms","nam","fam","ver","moodleVersion","category","moodleCourseCategory","course","moodleCourseName","OSData","getOS","broswerData","getBrowser","detectedBrowser","versionBrowser","editorVersion","detectedOS","versionOS","filter","dry_run","api_key","macosPlatforms","windowsPlatforms","iosPlatforms","col","getVersion","setLanguage","getCore","setTarget","setEditorObject","openNewFormulaEditor","onLine","openExistingFormulaEditor","util","EditorUtils","addEvents","stopImmediatePropagation","removeEvents","getBrowserLanguage","userLanguage","currentInstance","WirisPlugin","CKEditor5Integration","ckeditorIntegrationModelProperties","integrationFolderName","languageObject","ui","addEditorListeners","wirislistenersdisabled","checkElement","newElement","sourceElement","wirisActive","isReadOnly","customEditorAttr","getCorePath","editing","insertMathml","model","change","writer","modelElementNew","fromEntries","getAttributes","viewSelection","modelPosition","mapper","toModelPosition","getLastPosition","insertObject","isCollapsed","getRanges","toModelRange","createPositionAfter","setSelection","viewElement","domConverter","domToView","modelElementOld","toModelElement","createPositionBefore","findText","pivot","createRangeIn","descendants","getItems","viewElementData","replaceAll","is","createPositionAt","latexEdited","dataOffset","second$","insertText","viewToDom","toViewElement","MathTypeCommand","Command","execute","options","integration","setEditor","openEditor","image","_getSelectedImage","rangeCount","getFirstRange","span","getChild","mapViewToDom","ChemTypeCommand","MathType","Plugin","requires","Widget","pluginName","_addIntegration","_addCommands","_addViews","_addSchema","_addConverters","_exposeWiris","integrationProperties","packageInfo","listenTo","evt","domEvent","detail","domTarget","stop","priority","commands","componentFactory","locale","ButtonView","label","mathIcon","on","chemIcon","addObserver","ClickObserver","schema","register","inheritAllFrom","allowAttributes","conversion","for","elementToElement","modelWriter","upcastDispatcher","conversionApi","consumable","viewItem","isLatex","mathIsLatex","processor","XmlDataProcessor","upcastWriter","UpcastWriter","viewDocumentFragment","getChildren","mathAttributes","toData","modelNode","createText","splitResult","splitToAllowedParent","modelCursor","consume","parts","getSplitParts","modelRange","cursorParent","math","semantics","child","createViewWidget","modelItem","viewWriter","widgetElement","createContainerElement","mathUIElement","createViewImage","toWidget","htmlDataProcessor","HtmlDataProcessor","mathString","imgHtml","imgElement","toView","createEmptyElement","renderUnsafeAttributes","createDataString","sourceNode","Exception","sourceMathElement","viewToModelPositionOutsideModelElement","hasClass","return","modifiedData","regexp","formulas","values","matchAll"],"mappings":"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A,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA,CAAA;AAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA;AAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA;AAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA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","x_google_ignoreList":[0]} \ No newline at end of file diff --git a/packages/ckeditor5/dist/browser/index.umd.js b/packages/ckeditor5/dist/browser/index.umd.js index 22cd04b6a..105e74659 100644 --- a/packages/ckeditor5/dist/browser/index.umd.js +++ b/packages/ckeditor5/dist/browser/index.umd.js @@ -1,8153 +1,7935 @@ (function (global, factory) { - typeof exports === "object" && typeof module !== "undefined" - ? (module.exports = factory(require("ckeditor5"))) - : typeof define === "function" && define.amd - ? define(["ckeditor5"], factory) - : ((global = typeof globalThis !== "undefined" ? globalThis : global || self), - (global["@wiris/mathtype-ckeditor5"] = factory(global.ckeditor5))); -})(this, function (ckeditor5) { - "use strict"; + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('ckeditor5')) : + typeof define === 'function' && define.amd ? define(['ckeditor5'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global["@wiris/mathtype-ckeditor5"] = factory(global.CKEDITOR)); +})(this, (function (ckeditor5) { 'use strict'; - var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null; - var commonjsGlobal = - typeof globalThis !== "undefined" - ? globalThis - : typeof window !== "undefined" - ? window - : typeof global !== "undefined" - ? global - : typeof self !== "undefined" - ? self - : {}; + var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null; + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - var purify = { exports: {} }; + var purify = {exports: {}}; - (function (module, exports) { - (function (global, factory) { - module.exports = factory(); - })(commonjsGlobal, function () { - const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object; - let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports - let { apply, construct } = typeof Reflect !== "undefined" && Reflect; - if (!freeze) { - freeze = function freeze(x) { - return x; - }; - } - if (!seal) { - seal = function seal(x) { - return x; - }; - } - if (!apply) { - apply = function apply(fun, thisValue, args) { - return fun.apply(thisValue, args); - }; - } - if (!construct) { - construct = function construct(Func, args) { - return new Func(...args); - }; - } - const arrayForEach = unapply(Array.prototype.forEach); - const arrayPop = unapply(Array.prototype.pop); - const arrayPush = unapply(Array.prototype.push); - const stringToLowerCase = unapply(String.prototype.toLowerCase); - const stringToString = unapply(String.prototype.toString); - const stringMatch = unapply(String.prototype.match); - const stringReplace = unapply(String.prototype.replace); - const stringIndexOf = unapply(String.prototype.indexOf); - const stringTrim = unapply(String.prototype.trim); - const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty); - const regExpTest = unapply(RegExp.prototype.test); - const typeErrorCreate = unconstruct(TypeError); - /** - * Creates a new function that calls the given function with a specified thisArg and arguments. - * - * @param {Function} func - The function to be wrapped and called. - * @returns {Function} A new function that calls the given function with a specified thisArg and arguments. - */ function unapply(func) { - return function (thisArg) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - return apply(func, thisArg, args); - }; - } - /** - * Creates a new function that constructs an instance of the given constructor function with the provided arguments. - * - * @param {Function} func - The constructor function to be wrapped and called. - * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments. - */ function unconstruct(func) { - return function () { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - return construct(func, args); - }; - } - /** - * Add properties to a lookup table - * - * @param {Object} set - The set to which elements will be added. - * @param {Array} array - The array containing elements to be added to the set. - * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set. - * @returns {Object} The modified set with added elements. - */ function addToSet(set, array) { - let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase; - if (setPrototypeOf) { - // Make 'in' and truthy checks like Boolean(set.constructor) - // independent of any properties defined on Object.prototype. - // Prevent prototype setters from intercepting set as a this value. - setPrototypeOf(set, null); - } - let l = array.length; - while (l--) { - let element = array[l]; - if (typeof element === "string") { - const lcElement = transformCaseFunc(element); - if (lcElement !== element) { - // Config presets (e.g. tags.js, attrs.js) are immutable. - if (!isFrozen(array)) { - array[l] = lcElement; - } - element = lcElement; - } - } - set[element] = true; - } - return set; - } - /** - * Clean up an array to harden against CSPP - * - * @param {Array} array - The array to be cleaned. - * @returns {Array} The cleaned version of the array - */ function cleanArray(array) { - for (let index = 0; index < array.length; index++) { - const isPropertyExist = objectHasOwnProperty(array, index); - if (!isPropertyExist) { - array[index] = null; - } - } - return array; - } - /** - * Shallow clone an object - * - * @param {Object} object - The object to be cloned. - * @returns {Object} A new object that copies the original. - */ function clone(object) { - const newObject = create(null); - for (const [property, value] of entries(object)) { - const isPropertyExist = objectHasOwnProperty(object, property); - if (isPropertyExist) { - if (Array.isArray(value)) { - newObject[property] = cleanArray(value); - } else if (value && typeof value === "object" && value.constructor === Object) { - newObject[property] = clone(value); - } else { - newObject[property] = value; - } - } - } - return newObject; - } - /** - * This method automatically checks if the prop is function or getter and behaves accordingly. - * - * @param {Object} object - The object to look up the getter function in its prototype chain. - * @param {String} prop - The property name for which to find the getter function. - * @returns {Function} The getter function found in the prototype chain or a fallback function. - */ function lookupGetter(object, prop) { - while (object !== null) { - const desc = getOwnPropertyDescriptor(object, prop); - if (desc) { - if (desc.get) { - return unapply(desc.get); - } - if (typeof desc.value === "function") { - return unapply(desc.value); - } - } - object = getPrototypeOf(object); - } - function fallbackValue() { - return null; - } - return fallbackValue; - } - const html$1 = freeze([ - "a", - "abbr", - "acronym", - "address", - "area", - "article", - "aside", - "audio", - "b", - "bdi", - "bdo", - "big", - "blink", - "blockquote", - "body", - "br", - "button", - "canvas", - "caption", - "center", - "cite", - "code", - "col", - "colgroup", - "content", - "data", - "datalist", - "dd", - "decorator", - "del", - "details", - "dfn", - "dialog", - "dir", - "div", - "dl", - "dt", - "element", - "em", - "fieldset", - "figcaption", - "figure", - "font", - "footer", - "form", - "h1", - "h2", - "h3", - "h4", - "h5", - "h6", - "head", - "header", - "hgroup", - "hr", - "html", - "i", - "img", - "input", - "ins", - "kbd", - "label", - "legend", - "li", - "main", - "map", - "mark", - "marquee", - "menu", - "menuitem", - "meter", - "nav", - "nobr", - "ol", - "optgroup", - "option", - "output", - "p", - "picture", - "pre", - "progress", - "q", - "rp", - "rt", - "ruby", - "s", - "samp", - "section", - "select", - "shadow", - "small", - "source", - "spacer", - "span", - "strike", - "strong", - "style", - "sub", - "summary", - "sup", - "table", - "tbody", - "td", - "template", - "textarea", - "tfoot", - "th", - "thead", - "time", - "tr", - "track", - "tt", - "u", - "ul", - "var", - "video", - "wbr", - ]); - // SVG - const svg$1 = freeze([ - "svg", - "a", - "altglyph", - "altglyphdef", - "altglyphitem", - "animatecolor", - "animatemotion", - "animatetransform", - "circle", - "clippath", - "defs", - "desc", - "ellipse", - "filter", - "font", - "g", - "glyph", - "glyphref", - "hkern", - "image", - "line", - "lineargradient", - "marker", - "mask", - "metadata", - "mpath", - "path", - "pattern", - "polygon", - "polyline", - "radialgradient", - "rect", - "stop", - "style", - "switch", - "symbol", - "text", - "textpath", - "title", - "tref", - "tspan", - "view", - "vkern", - ]); - const svgFilters = freeze([ - "feBlend", - "feColorMatrix", - "feComponentTransfer", - "feComposite", - "feConvolveMatrix", - "feDiffuseLighting", - "feDisplacementMap", - "feDistantLight", - "feDropShadow", - "feFlood", - "feFuncA", - "feFuncB", - "feFuncG", - "feFuncR", - "feGaussianBlur", - "feImage", - "feMerge", - "feMergeNode", - "feMorphology", - "feOffset", - "fePointLight", - "feSpecularLighting", - "feSpotLight", - "feTile", - "feTurbulence", - ]); - // List of SVG elements that are disallowed by default. - // We still need to know them so that we can do namespace - // checks properly in case one wants to add them to - // allow-list. - const svgDisallowed = freeze([ - "animate", - "color-profile", - "cursor", - "discard", - "font-face", - "font-face-format", - "font-face-name", - "font-face-src", - "font-face-uri", - "foreignobject", - "hatch", - "hatchpath", - "mesh", - "meshgradient", - "meshpatch", - "meshrow", - "missing-glyph", - "script", - "set", - "solidcolor", - "unknown", - "use", - ]); - const mathMl$1 = freeze([ - "math", - "menclose", - "merror", - "mfenced", - "mfrac", - "mglyph", - "mi", - "mlabeledtr", - "mmultiscripts", - "mn", - "mo", - "mover", - "mpadded", - "mphantom", - "mroot", - "mrow", - "ms", - "mspace", - "msqrt", - "mstyle", - "msub", - "msup", - "msubsup", - "mtable", - "mtd", - "mtext", - "mtr", - "munder", - "munderover", - "mprescripts", - ]); - // Similarly to SVG, we want to know all MathML elements, - // even those that we disallow by default. - const mathMlDisallowed = freeze([ - "maction", - "maligngroup", - "malignmark", - "mlongdiv", - "mscarries", - "mscarry", - "msgroup", - "mstack", - "msline", - "msrow", - "semantics", - "annotation", - "annotation-xml", - "mprescripts", - "none", - ]); - const text = freeze(["#text"]); - const html = freeze([ - "accept", - "action", - "align", - "alt", - "autocapitalize", - "autocomplete", - "autopictureinpicture", - "autoplay", - "background", - "bgcolor", - "border", - "capture", - "cellpadding", - "cellspacing", - "checked", - "cite", - "class", - "clear", - "color", - "cols", - "colspan", - "controls", - "controlslist", - "coords", - "crossorigin", - "datetime", - "decoding", - "default", - "dir", - "disabled", - "disablepictureinpicture", - "disableremoteplayback", - "download", - "draggable", - "enctype", - "enterkeyhint", - "face", - "for", - "headers", - "height", - "hidden", - "high", - "href", - "hreflang", - "id", - "inputmode", - "integrity", - "ismap", - "kind", - "label", - "lang", - "list", - "loading", - "loop", - "low", - "max", - "maxlength", - "media", - "method", - "min", - "minlength", - "multiple", - "muted", - "name", - "nonce", - "noshade", - "novalidate", - "nowrap", - "open", - "optimum", - "pattern", - "placeholder", - "playsinline", - "popover", - "popovertarget", - "popovertargetaction", - "poster", - "preload", - "pubdate", - "radiogroup", - "readonly", - "rel", - "required", - "rev", - "reversed", - "role", - "rows", - "rowspan", - "spellcheck", - "scope", - "selected", - "shape", - "size", - "sizes", - "span", - "srclang", - "start", - "src", - "srcset", - "step", - "style", - "summary", - "tabindex", - "title", - "translate", - "type", - "usemap", - "valign", - "value", - "width", - "wrap", - "xmlns", - "slot", - ]); - const svg = freeze([ - "accent-height", - "accumulate", - "additive", - "alignment-baseline", - "ascent", - "attributename", - "attributetype", - "azimuth", - "basefrequency", - "baseline-shift", - "begin", - "bias", - "by", - "class", - "clip", - "clippathunits", - "clip-path", - "clip-rule", - "color", - "color-interpolation", - "color-interpolation-filters", - "color-profile", - "color-rendering", - "cx", - "cy", - "d", - "dx", - "dy", - "diffuseconstant", - "direction", - "display", - "divisor", - "dur", - "edgemode", - "elevation", - "end", - "fill", - "fill-opacity", - "fill-rule", - "filter", - "filterunits", - "flood-color", - "flood-opacity", - "font-family", - "font-size", - "font-size-adjust", - "font-stretch", - "font-style", - "font-variant", - "font-weight", - "fx", - "fy", - "g1", - "g2", - "glyph-name", - "glyphref", - "gradientunits", - "gradienttransform", - "height", - "href", - "id", - "image-rendering", - "in", - "in2", - "k", - "k1", - "k2", - "k3", - "k4", - "kerning", - "keypoints", - "keysplines", - "keytimes", - "lang", - "lengthadjust", - "letter-spacing", - "kernelmatrix", - "kernelunitlength", - "lighting-color", - "local", - "marker-end", - "marker-mid", - "marker-start", - "markerheight", - "markerunits", - "markerwidth", - "maskcontentunits", - "maskunits", - "max", - "mask", - "media", - "method", - "mode", - "min", - "name", - "numoctaves", - "offset", - "operator", - "opacity", - "order", - "orient", - "orientation", - "origin", - "overflow", - "paint-order", - "path", - "pathlength", - "patterncontentunits", - "patterntransform", - "patternunits", - "points", - "preservealpha", - "preserveaspectratio", - "primitiveunits", - "r", - "rx", - "ry", - "radius", - "refx", - "refy", - "repeatcount", - "repeatdur", - "restart", - "result", - "rotate", - "scale", - "seed", - "shape-rendering", - "specularconstant", - "specularexponent", - "spreadmethod", - "startoffset", - "stddeviation", - "stitchtiles", - "stop-color", - "stop-opacity", - "stroke-dasharray", - "stroke-dashoffset", - "stroke-linecap", - "stroke-linejoin", - "stroke-miterlimit", - "stroke-opacity", - "stroke", - "stroke-width", - "style", - "surfacescale", - "systemlanguage", - "tabindex", - "targetx", - "targety", - "transform", - "transform-origin", - "text-anchor", - "text-decoration", - "text-rendering", - "textlength", - "type", - "u1", - "u2", - "unicode", - "values", - "viewbox", - "visibility", - "version", - "vert-adv-y", - "vert-origin-x", - "vert-origin-y", - "width", - "word-spacing", - "wrap", - "writing-mode", - "xchannelselector", - "ychannelselector", - "x", - "x1", - "x2", - "xmlns", - "y", - "y1", - "y2", - "z", - "zoomandpan", - ]); - const mathMl = freeze([ - "accent", - "accentunder", - "align", - "bevelled", - "close", - "columnsalign", - "columnlines", - "columnspan", - "denomalign", - "depth", - "dir", - "display", - "displaystyle", - "encoding", - "fence", - "frame", - "height", - "href", - "id", - "largeop", - "length", - "linethickness", - "lspace", - "lquote", - "mathbackground", - "mathcolor", - "mathsize", - "mathvariant", - "maxsize", - "minsize", - "movablelimits", - "notation", - "numalign", - "open", - "rowalign", - "rowlines", - "rowspacing", - "rowspan", - "rspace", - "rquote", - "scriptlevel", - "scriptminsize", - "scriptsizemultiplier", - "selection", - "separator", - "separators", - "stretchy", - "subscriptshift", - "supscriptshift", - "symmetric", - "voffset", - "width", - "xmlns", - ]); - const xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]); - // eslint-disable-next-line unicorn/better-regex - const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode - const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); - const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm); - const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape - const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape - const IS_ALLOWED_URI = seal( - /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i, // eslint-disable-line no-useless-escape - ); - const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); - const ATTR_WHITESPACE = seal( - /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g, // eslint-disable-line no-control-regex - ); - const DOCTYPE_NAME = seal(/^html$/i); - const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i); - var EXPRESSIONS = /*#__PURE__*/ Object.freeze({ - __proto__: null, - MUSTACHE_EXPR: MUSTACHE_EXPR, - ERB_EXPR: ERB_EXPR, - TMPLIT_EXPR: TMPLIT_EXPR, - DATA_ATTR: DATA_ATTR, - ARIA_ATTR: ARIA_ATTR, - IS_ALLOWED_URI: IS_ALLOWED_URI, - IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA, - ATTR_WHITESPACE: ATTR_WHITESPACE, - DOCTYPE_NAME: DOCTYPE_NAME, - CUSTOM_ELEMENT: CUSTOM_ELEMENT, - }); - // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType - const NODE_TYPE = { - element: 1, - attribute: 2, - text: 3, - cdataSection: 4, - entityReference: 5, - // Deprecated - entityNode: 6, - // Deprecated - progressingInstruction: 7, - comment: 8, - document: 9, - documentType: 10, - documentFragment: 11, - notation: 12, // Deprecated - }; - const getGlobal = function getGlobal() { - return typeof window === "undefined" ? null : window; - }; - /** - * Creates a no-op policy for internal use only. - * Don't export this function outside this module! - * @param {TrustedTypePolicyFactory} trustedTypes The policy factory. - * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix). - * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types - * are not supported or creating the policy failed). - */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) { - if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") { - return null; - } - // Allow the callers to control the unique policy name - // by adding a data-tt-policy-suffix to the script element with the DOMPurify. - // Policy creation with duplicate names throws in Trusted Types. - let suffix = null; - const ATTR_NAME = "data-tt-policy-suffix"; - if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) { - suffix = purifyHostElement.getAttribute(ATTR_NAME); - } - const policyName = "dompurify" + (suffix ? "#" + suffix : ""); - try { - return trustedTypes.createPolicy(policyName, { - createHTML(html) { - return html; - }, - createScriptURL(scriptUrl) { - return scriptUrl; - }, - }); - } catch (_) { - // Policy creation failed (most likely another DOMPurify script has - // already run). Skip creating the policy, as this will only cause errors - // if TT are enforced. - console.warn("TrustedTypes policy " + policyName + " could not be created."); - return null; - } - }; - function createDOMPurify() { - let window1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); - const DOMPurify = (root) => createDOMPurify(root); - /** - * Version label, exposed for easier checks - * if DOMPurify is up to date or not - */ DOMPurify.version = "3.1.5"; - /** - * Array of elements that DOMPurify removed during sanitation. - * Empty if nothing was removed. - */ DOMPurify.removed = []; - if (!window1 || !window1.document || window1.document.nodeType !== NODE_TYPE.document) { - // Not running in a browser, provide a factory function - // so that you can pass your own Window - DOMPurify.isSupported = false; - return DOMPurify; - } - let { document } = window1; - const originalDocument = document; - const currentScript = originalDocument.currentScript; - const { - DocumentFragment, - HTMLTemplateElement, - Node, - Element, - NodeFilter, - NamedNodeMap = window1.NamedNodeMap || window1.MozNamedAttrMap, - HTMLFormElement, - DOMParser, - trustedTypes, - } = window1; - const ElementPrototype = Element.prototype; - const cloneNode = lookupGetter(ElementPrototype, "cloneNode"); - const getNextSibling = lookupGetter(ElementPrototype, "nextSibling"); - const getChildNodes = lookupGetter(ElementPrototype, "childNodes"); - const getParentNode = lookupGetter(ElementPrototype, "parentNode"); - // As per issue #47, the web-components registry is inherited by a - // new document created via createHTMLDocument. As per the spec - // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) - // a new empty registry is used when creating a template contents owner - // document, so we use that as our parent document to ensure nothing - // is inherited. - if (typeof HTMLTemplateElement === "function") { - const template = document.createElement("template"); - if (template.content && template.content.ownerDocument) { - document = template.content.ownerDocument; - } - } - let trustedTypesPolicy; - let emptyHTML = ""; - const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document; - const { importNode } = originalDocument; - let hooks = {}; - /** - * Expose whether this browser supports running the full DOMPurify. - */ DOMPurify.isSupported = - typeof entries === "function" && - typeof getParentNode === "function" && - implementation && - implementation.createHTMLDocument !== undefined; - const { - MUSTACHE_EXPR, - ERB_EXPR, - TMPLIT_EXPR, - DATA_ATTR, - ARIA_ATTR, - IS_SCRIPT_OR_DATA, - ATTR_WHITESPACE, - CUSTOM_ELEMENT, - } = EXPRESSIONS; - let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS; - /** - * We consider the elements and attributes below to be safe. Ideally - * don't add any new ones but feel free to remove unwanted ones. - */ /* allowed element names */ let ALLOWED_TAGS = null; - const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]); - /* Allowed attribute names */ let ALLOWED_ATTR = null; - const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]); - /* - * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements. - * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements) - * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list) - * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`. - */ let CUSTOM_ELEMENT_HANDLING = Object.seal( - create(null, { - tagNameCheck: { - writable: true, - configurable: false, - enumerable: true, - value: null, - }, - attributeNameCheck: { - writable: true, - configurable: false, - enumerable: true, - value: null, - }, - allowCustomizedBuiltInElements: { - writable: true, - configurable: false, - enumerable: true, - value: false, - }, - }), - ); - /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null; - /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null; - /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true; - /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true; - /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false; - /* Decide if self-closing tags in attributes are allowed. - * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true; - /* Output should be safe for common template engines. - * This means, DOMPurify removes data attributes, mustaches and ERB - */ let SAFE_FOR_TEMPLATES = false; - /* Output should be safe even for XML used within HTML and alike. - * This means, DOMPurify removes comments when containing risky content. - */ let SAFE_FOR_XML = true; - /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false; - /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false; - /* Decide if all elements (e.g. style, script) must be children of - * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false; - /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html - * string (or a TrustedHTML object if Trusted Types are supported). - * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead - */ let RETURN_DOM = false; - /* Decide if a DOM `DocumentFragment` should be returned, instead of a html - * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false; - /* Try to return a Trusted Type object instead of a string, return a string in - * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false; - /* Output should be free from DOM clobbering attacks? - * This sanitizes markups named with colliding, clobberable built-in DOM APIs. - */ let SANITIZE_DOM = true; - /* Achieve full DOM Clobbering protection by isolating the namespace of named - * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules. - * - * HTML/DOM spec rules that enable DOM Clobbering: - * - Named Access on Window (§7.3.3) - * - DOM Tree Accessors (§3.1.5) - * - Form Element Parent-Child Relations (§4.10.3) - * - Iframe srcdoc / Nested WindowProxies (§4.8.5) - * - HTMLCollection (§4.2.10.2) - * - * Namespace isolation is implemented by prefixing `id` and `name` attributes - * with a constant string, i.e., `user-content-` - */ let SANITIZE_NAMED_PROPS = false; - const SANITIZE_NAMED_PROPS_PREFIX = "user-content-"; - /* Keep element content when removing element? */ let KEEP_CONTENT = true; - /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead - * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false; - /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {}; - /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null; - const DEFAULT_FORBID_CONTENTS = addToSet({}, [ - "annotation-xml", - "audio", - "colgroup", - "desc", - "foreignobject", - "head", - "iframe", - "math", - "mi", - "mn", - "mo", - "ms", - "mtext", - "noembed", - "noframes", - "noscript", - "plaintext", - "script", - "style", - "svg", - "template", - "thead", - "title", - "video", - "xmp", - ]); - /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null; - const DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]); - /* Attributes safe for values like "javascript:" */ let URI_SAFE_ATTRIBUTES = null; - const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [ - "alt", - "class", - "for", - "id", - "label", - "name", - "pattern", - "placeholder", - "role", - "summary", - "title", - "value", - "style", - "xmlns", - ]); - const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML"; - const SVG_NAMESPACE = "http://www.w3.org/2000/svg"; - const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; - /* Document namespace */ let NAMESPACE = HTML_NAMESPACE; - let IS_EMPTY_INPUT = false; - /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null; - const DEFAULT_ALLOWED_NAMESPACES = addToSet( - {}, - [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], - stringToString, - ); - /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null; - const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"]; - const DEFAULT_PARSER_MEDIA_TYPE = "text/html"; - let transformCaseFunc = null; - /* Keep a reference to config to pass to hooks */ let CONFIG = null; - /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = - document.createElement("form"); - const isRegexOrFunction = function isRegexOrFunction(testValue) { - return testValue instanceof RegExp || testValue instanceof Function; - }; - /** - * _parseConfig - * - * @param {Object} cfg optional config literal - */ // eslint-disable-next-line complexity - const _parseConfig = function _parseConfig() { - let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - if (CONFIG && CONFIG === cfg) { - return; - } - /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== "object") { - cfg = {}; - } - /* Shield configuration object from prototype pollution */ cfg = clone(cfg); - PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes - SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 - ? DEFAULT_PARSER_MEDIA_TYPE - : cfg.PARSER_MEDIA_TYPE; - // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is. - transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase; - /* Set configuration parameters */ ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") - ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) - : DEFAULT_ALLOWED_TAGS; - ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") - ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) - : DEFAULT_ALLOWED_ATTR; - ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") - ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) - : DEFAULT_ALLOWED_NAMESPACES; - URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") - ? addToSet( - clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent - cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent - transformCaseFunc, // eslint-disable-line indent - ) // eslint-disable-line indent - : DEFAULT_URI_SAFE_ATTRIBUTES; - DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") - ? addToSet( - clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent - cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent - transformCaseFunc, // eslint-disable-line indent - ) // eslint-disable-line indent - : DEFAULT_DATA_URI_TAGS; - FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") - ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) - : DEFAULT_FORBID_CONTENTS; - FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") - ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) - : {}; - FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") - ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) - : {}; - USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false; - ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true - ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true - ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false - ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true - SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false - SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true - WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false - RETURN_DOM = cfg.RETURN_DOM || false; // Default false - RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false - RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false - FORCE_BODY = cfg.FORCE_BODY || false; // Default false - SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true - SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false - KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true - IN_PLACE = cfg.IN_PLACE || false; // Default false - IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI; - NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; - CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { - CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; - } - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { - CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; - } - if ( - cfg.CUSTOM_ELEMENT_HANDLING && - typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean" - ) { - CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = - cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; - } - if (SAFE_FOR_TEMPLATES) { - ALLOW_DATA_ATTR = false; - } - if (RETURN_DOM_FRAGMENT) { - RETURN_DOM = true; - } - /* Parse profile info */ if (USE_PROFILES) { - ALLOWED_TAGS = addToSet({}, text); - ALLOWED_ATTR = []; - if (USE_PROFILES.html === true) { - addToSet(ALLOWED_TAGS, html$1); - addToSet(ALLOWED_ATTR, html); - } - if (USE_PROFILES.svg === true) { - addToSet(ALLOWED_TAGS, svg$1); - addToSet(ALLOWED_ATTR, svg); - addToSet(ALLOWED_ATTR, xml); - } - if (USE_PROFILES.svgFilters === true) { - addToSet(ALLOWED_TAGS, svgFilters); - addToSet(ALLOWED_ATTR, svg); - addToSet(ALLOWED_ATTR, xml); - } - if (USE_PROFILES.mathMl === true) { - addToSet(ALLOWED_TAGS, mathMl$1); - addToSet(ALLOWED_ATTR, mathMl); - addToSet(ALLOWED_ATTR, xml); - } - } - /* Merge configuration parameters */ if (cfg.ADD_TAGS) { - if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { - ALLOWED_TAGS = clone(ALLOWED_TAGS); - } - addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); - } - if (cfg.ADD_ATTR) { - if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { - ALLOWED_ATTR = clone(ALLOWED_ATTR); - } - addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); - } - if (cfg.ADD_URI_SAFE_ATTR) { - addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); - } - if (cfg.FORBID_CONTENTS) { - if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { - FORBID_CONTENTS = clone(FORBID_CONTENTS); - } - addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); - } - /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) { - ALLOWED_TAGS["#text"] = true; - } - /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) { - addToSet(ALLOWED_TAGS, ["html", "head", "body"]); - } - /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) { - addToSet(ALLOWED_TAGS, ["tbody"]); - delete FORBID_TAGS.tbody; - } - if (cfg.TRUSTED_TYPES_POLICY) { - if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") { - throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); - } - if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") { - throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); - } - // Overwrite existing TrustedTypes policy. - trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; - // Sign local variables required by `sanitize`. - emptyHTML = trustedTypesPolicy.createHTML(""); - } else { - // Uninitialized policy, attempt to initialize the internal dompurify policy. - if (trustedTypesPolicy === undefined) { - trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript); - } - // If creating the internal policy succeeded sign internal variables. - if (trustedTypesPolicy !== null && typeof emptyHTML === "string") { - emptyHTML = trustedTypesPolicy.createHTML(""); - } - } - // Prevent further manipulation of configuration. - // Not available in IE8, Safari 5, etc. - if (freeze) { - freeze(cfg); - } - CONFIG = cfg; - }; - const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]); - const HTML_INTEGRATION_POINTS = addToSet({}, ["foreignobject", "annotation-xml"]); - // Certain elements are allowed in both SVG and HTML - // namespace. We need to specify them explicitly - // so that they don't get erroneously deleted from - // HTML namespace. - const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]); - /* Keep track of all possible SVG and MathML tags - * so that we can perform the namespace checks - * correctly. */ const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]); - const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]); - /** - * @param {Element} element a DOM element whose namespace is being checked - * @returns {boolean} Return false if the element has a - * namespace that a spec-compliant parser would never - * return. Return true otherwise. - */ const _checkValidNamespace = function _checkValidNamespace(element) { - let parent = getParentNode(element); - // In JSDOM, if we're inside shadow DOM, then parentNode - // can be null. We just simulate parent in this case. - if (!parent || !parent.tagName) { - parent = { - namespaceURI: NAMESPACE, - tagName: "template", - }; - } - const tagName = stringToLowerCase(element.tagName); - const parentTagName = stringToLowerCase(parent.tagName); - if (!ALLOWED_NAMESPACES[element.namespaceURI]) { - return false; - } - if (element.namespaceURI === SVG_NAMESPACE) { - // The only way to switch from HTML namespace to SVG - // is via . If it happens via any other tag, then - // it should be killed. - if (parent.namespaceURI === HTML_NAMESPACE) { - return tagName === "svg"; - } - // The only way to switch from MathML to SVG is via` - // svg if parent is either or MathML - // text integration points. - if (parent.namespaceURI === MATHML_NAMESPACE) { - return ( - tagName === "svg" && - (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) - ); - } - // We only allow elements that are defined in SVG - // spec. All others are disallowed in SVG namespace. - return Boolean(ALL_SVG_TAGS[tagName]); - } - if (element.namespaceURI === MATHML_NAMESPACE) { - // The only way to switch from HTML namespace to MathML - // is via . If it happens via any other tag, then - // it should be killed. - if (parent.namespaceURI === HTML_NAMESPACE) { - return tagName === "math"; - } - // The only way to switch from SVG to MathML is via - // and HTML integration points - if (parent.namespaceURI === SVG_NAMESPACE) { - return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName]; - } - // We only allow elements that are defined in MathML - // spec. All others are disallowed in MathML namespace. - return Boolean(ALL_MATHML_TAGS[tagName]); - } - if (element.namespaceURI === HTML_NAMESPACE) { - // The only way to switch from SVG to HTML is via - // HTML integration points, and from MathML to HTML - // is via MathML text integration points - if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { - return false; - } - if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { - return false; - } - // We disallow tags that are specific for MathML - // or SVG and should never appear in HTML namespace - return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); - } - // For XHTML and XML documents that support custom namespaces - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) { - return true; - } - // The code should never reach this place (this means - // that the element somehow got namespace that is not - // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES). - // Return false just in case. - return false; - }; - /** - * _forceRemove - * - * @param {Node} node a DOM node - */ const _forceRemove = function _forceRemove(node) { - arrayPush(DOMPurify.removed, { - element: node, - }); - try { - // eslint-disable-next-line unicorn/prefer-dom-node-remove - node.parentNode.removeChild(node); - } catch (_) { - node.remove(); - } - }; - /** - * _removeAttribute - * - * @param {String} name an Attribute name - * @param {Node} node a DOM node - */ const _removeAttribute = function _removeAttribute(name, node) { - try { - arrayPush(DOMPurify.removed, { - attribute: node.getAttributeNode(name), - from: node, - }); - } catch (_) { - arrayPush(DOMPurify.removed, { - attribute: null, - from: node, - }); - } - node.removeAttribute(name); - // We void attribute values for unremovable "is"" attributes - if (name === "is" && !ALLOWED_ATTR[name]) { - if (RETURN_DOM || RETURN_DOM_FRAGMENT) { - try { - _forceRemove(node); - } catch (_) {} - } else { - try { - node.setAttribute(name, ""); - } catch (_) {} - } - } - }; - /** - * _initDocument - * - * @param {String} dirty a string of dirty markup - * @return {Document} a DOM, filled with the dirty markup - */ const _initDocument = function _initDocument(dirty) { - /* Create a HTML document */ let doc = null; - let leadingWhitespace = null; - if (FORCE_BODY) { - dirty = "" + dirty; - } else { - /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = - stringMatch(dirty, /^[\r\n\t ]+/); - leadingWhitespace = matches && matches[0]; - } - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) { - // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict) - dirty = '' + dirty + ""; - } - const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; - /* - * Use the DOMParser API by default, fallback later if needs be - * DOMParser not work for svg when has multiple root element. - */ if (NAMESPACE === HTML_NAMESPACE) { - try { - doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); - } catch (_) {} - } - /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) { - doc = implementation.createDocument(NAMESPACE, "template", null); - try { - doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; - } catch (_) { - // Syntax error if dirtyPayload is invalid xml - } - } - const body = doc.body || doc.documentElement; - if (dirty && leadingWhitespace) { - body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); - } - /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) { - return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0]; - } - return WHOLE_DOCUMENT ? doc.documentElement : body; - }; - /** - * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. - * - * @param {Node} root The root element or node to start traversing on. - * @return {NodeIterator} The created NodeIterator - */ const _createNodeIterator = function _createNodeIterator(root) { - return createNodeIterator.call( - root.ownerDocument || root, - root, // eslint-disable-next-line no-bitwise - NodeFilter.SHOW_ELEMENT | - NodeFilter.SHOW_COMMENT | - NodeFilter.SHOW_TEXT | - NodeFilter.SHOW_PROCESSING_INSTRUCTION | - NodeFilter.SHOW_CDATA_SECTION, - null, - ); - }; - /** - * _isClobbered - * - * @param {Node} elm element to check for clobbering attacks - * @return {Boolean} true if clobbered, false if safe - */ const _isClobbered = function _isClobbered(elm) { - return ( - elm instanceof HTMLFormElement && - (typeof elm.nodeName !== "string" || - typeof elm.textContent !== "string" || - typeof elm.removeChild !== "function" || - !(elm.attributes instanceof NamedNodeMap) || - typeof elm.removeAttribute !== "function" || - typeof elm.setAttribute !== "function" || - typeof elm.namespaceURI !== "string" || - typeof elm.insertBefore !== "function" || - typeof elm.hasChildNodes !== "function") - ); - }; - /** - * Checks whether the given object is a DOM node. - * - * @param {Node} object object to check whether it's a DOM node - * @return {Boolean} true is object is a DOM node - */ const _isNode = function _isNode(object) { - return typeof Node === "function" && object instanceof Node; - }; - /** - * _executeHook - * Execute user configurable hooks - * - * @param {String} entryPoint Name of the hook's entry point - * @param {Node} currentNode node to work on with the hook - * @param {Object} data additional hook parameters - */ const _executeHook = function _executeHook(entryPoint, currentNode, data) { - if (!hooks[entryPoint]) { - return; - } - arrayForEach(hooks[entryPoint], (hook) => { - hook.call(DOMPurify, currentNode, data, CONFIG); - }); - }; - /** - * _sanitizeElements - * - * @protect nodeName - * @protect textContent - * @protect removeChild - * - * @param {Node} currentNode to check for permission to exist - * @return {Boolean} true if node was killed, false if left alive - */ const _sanitizeElements = function _sanitizeElements(currentNode) { - let content = null; - /* Execute a hook if present */ _executeHook("beforeSanitizeElements", currentNode, null); - /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) { - _forceRemove(currentNode); - return true; - } - /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName); - /* Execute a hook if present */ _executeHook("uponSanitizeElement", currentNode, { - tagName, - allowedTags: ALLOWED_TAGS, - }); - /* Detect mXSS attempts abusing namespace confusion */ if ( - currentNode.hasChildNodes() && - !_isNode(currentNode.firstElementChild) && - regExpTest(/<[/\w]/g, currentNode.innerHTML) && - regExpTest(/<[/\w]/g, currentNode.textContent) - ) { - _forceRemove(currentNode); - return true; - } - /* Remove any ocurrence of processing instructions */ if ( - currentNode.nodeType === NODE_TYPE.progressingInstruction - ) { - _forceRemove(currentNode); - return true; - } - /* Remove any kind of possibly harmful comments */ if ( - SAFE_FOR_XML && - currentNode.nodeType === NODE_TYPE.comment && - regExpTest(/<[/\w]/g, currentNode.data) - ) { - _forceRemove(currentNode); - return true; - } - /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { - /* Check if we have a custom element to handle */ if ( - !FORBID_TAGS[tagName] && - _isBasicCustomElement(tagName) - ) { - if ( - CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName) - ) { - return false; - } - if ( - CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName) - ) { - return false; - } - } - /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) { - const parentNode = getParentNode(currentNode) || currentNode.parentNode; - const childNodes = getChildNodes(currentNode) || currentNode.childNodes; - if (childNodes && parentNode) { - const childCount = childNodes.length; - for (let i = childCount - 1; i >= 0; --i) { - const childClone = cloneNode(childNodes[i], true); - childClone.__removalCount = (currentNode.__removalCount || 0) + 1; - parentNode.insertBefore(childClone, getNextSibling(currentNode)); - } - } - } - _forceRemove(currentNode); - return true; - } - /* Check whether element has a valid namespace */ if ( - currentNode instanceof Element && - !_checkValidNamespace(currentNode) - ) { - _forceRemove(currentNode); - return true; - } - /* Make sure that older browsers don't get fallback-tag mXSS */ if ( - (tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && - regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML) - ) { - _forceRemove(currentNode); - return true; - } - /* Sanitize element content to be template-safe */ if ( - SAFE_FOR_TEMPLATES && - currentNode.nodeType === NODE_TYPE.text - ) { - /* Get the element's text content */ content = currentNode.textContent; - arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => { - content = stringReplace(content, expr, " "); - }); - if (currentNode.textContent !== content) { - arrayPush(DOMPurify.removed, { - element: currentNode.cloneNode(), - }); - currentNode.textContent = content; - } - } - /* Execute a hook if present */ _executeHook("afterSanitizeElements", currentNode, null); - return false; - }; - /** - * _isValidAttribute - * - * @param {string} lcTag Lowercase tag name of containing element. - * @param {string} lcName Lowercase attribute name. - * @param {string} value Attribute value. - * @return {Boolean} Returns true if `value` is valid, otherwise false. - */ // eslint-disable-next-line complexity - const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { - /* Make sure attribute cannot clobber */ if ( - SANITIZE_DOM && - (lcName === "id" || lcName === "name") && - (value in document || value in formElement) - ) { - return false; - } - /* Allow valid data-* attributes: At least one character after "-" + (function(module, exports) { + (function(global, factory) { + module.exports = factory() ; + })(commonjsGlobal, function() { + const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object; + let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports + let { apply, construct } = typeof Reflect !== 'undefined' && Reflect; + if (!freeze) { + freeze = function freeze(x) { + return x; + }; + } + if (!seal) { + seal = function seal(x) { + return x; + }; + } + if (!apply) { + apply = function apply(fun, thisValue, args) { + return fun.apply(thisValue, args); + }; + } + if (!construct) { + construct = function construct(Func, args) { + return new Func(...args); + }; + } + const arrayForEach = unapply(Array.prototype.forEach); + const arrayPop = unapply(Array.prototype.pop); + const arrayPush = unapply(Array.prototype.push); + const stringToLowerCase = unapply(String.prototype.toLowerCase); + const stringToString = unapply(String.prototype.toString); + const stringMatch = unapply(String.prototype.match); + const stringReplace = unapply(String.prototype.replace); + const stringIndexOf = unapply(String.prototype.indexOf); + const stringTrim = unapply(String.prototype.trim); + const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty); + const regExpTest = unapply(RegExp.prototype.test); + const typeErrorCreate = unconstruct(TypeError); + /** + * Creates a new function that calls the given function with a specified thisArg and arguments. + * + * @param {Function} func - The function to be wrapped and called. + * @returns {Function} A new function that calls the given function with a specified thisArg and arguments. + */ function unapply(func) { + return function(thisArg) { + for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){ + args[_key - 1] = arguments[_key]; + } + return apply(func, thisArg, args); + }; + } + /** + * Creates a new function that constructs an instance of the given constructor function with the provided arguments. + * + * @param {Function} func - The constructor function to be wrapped and called. + * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments. + */ function unconstruct(func) { + return function() { + for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){ + args[_key2] = arguments[_key2]; + } + return construct(func, args); + }; + } + /** + * Add properties to a lookup table + * + * @param {Object} set - The set to which elements will be added. + * @param {Array} array - The array containing elements to be added to the set. + * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set. + * @returns {Object} The modified set with added elements. + */ function addToSet(set, array) { + let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase; + if (setPrototypeOf) { + // Make 'in' and truthy checks like Boolean(set.constructor) + // independent of any properties defined on Object.prototype. + // Prevent prototype setters from intercepting set as a this value. + setPrototypeOf(set, null); + } + let l = array.length; + while(l--){ + let element = array[l]; + if (typeof element === 'string') { + const lcElement = transformCaseFunc(element); + if (lcElement !== element) { + // Config presets (e.g. tags.js, attrs.js) are immutable. + if (!isFrozen(array)) { + array[l] = lcElement; + } + element = lcElement; + } + } + set[element] = true; + } + return set; + } + /** + * Clean up an array to harden against CSPP + * + * @param {Array} array - The array to be cleaned. + * @returns {Array} The cleaned version of the array + */ function cleanArray(array) { + for(let index = 0; index < array.length; index++){ + const isPropertyExist = objectHasOwnProperty(array, index); + if (!isPropertyExist) { + array[index] = null; + } + } + return array; + } + /** + * Shallow clone an object + * + * @param {Object} object - The object to be cloned. + * @returns {Object} A new object that copies the original. + */ function clone(object) { + const newObject = create(null); + for (const [property, value] of entries(object)){ + const isPropertyExist = objectHasOwnProperty(object, property); + if (isPropertyExist) { + if (Array.isArray(value)) { + newObject[property] = cleanArray(value); + } else if (value && typeof value === 'object' && value.constructor === Object) { + newObject[property] = clone(value); + } else { + newObject[property] = value; + } + } + } + return newObject; + } + /** + * This method automatically checks if the prop is function or getter and behaves accordingly. + * + * @param {Object} object - The object to look up the getter function in its prototype chain. + * @param {String} prop - The property name for which to find the getter function. + * @returns {Function} The getter function found in the prototype chain or a fallback function. + */ function lookupGetter(object, prop) { + while(object !== null){ + const desc = getOwnPropertyDescriptor(object, prop); + if (desc) { + if (desc.get) { + return unapply(desc.get); + } + if (typeof desc.value === 'function') { + return unapply(desc.value); + } + } + object = getPrototypeOf(object); + } + function fallbackValue() { + return null; + } + return fallbackValue; + } + const html$1 = freeze([ + 'a', + 'abbr', + 'acronym', + 'address', + 'area', + 'article', + 'aside', + 'audio', + 'b', + 'bdi', + 'bdo', + 'big', + 'blink', + 'blockquote', + 'body', + 'br', + 'button', + 'canvas', + 'caption', + 'center', + 'cite', + 'code', + 'col', + 'colgroup', + 'content', + 'data', + 'datalist', + 'dd', + 'decorator', + 'del', + 'details', + 'dfn', + 'dialog', + 'dir', + 'div', + 'dl', + 'dt', + 'element', + 'em', + 'fieldset', + 'figcaption', + 'figure', + 'font', + 'footer', + 'form', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'head', + 'header', + 'hgroup', + 'hr', + 'html', + 'i', + 'img', + 'input', + 'ins', + 'kbd', + 'label', + 'legend', + 'li', + 'main', + 'map', + 'mark', + 'marquee', + 'menu', + 'menuitem', + 'meter', + 'nav', + 'nobr', + 'ol', + 'optgroup', + 'option', + 'output', + 'p', + 'picture', + 'pre', + 'progress', + 'q', + 'rp', + 'rt', + 'ruby', + 's', + 'samp', + 'section', + 'select', + 'shadow', + 'small', + 'source', + 'spacer', + 'span', + 'strike', + 'strong', + 'style', + 'sub', + 'summary', + 'sup', + 'table', + 'tbody', + 'td', + 'template', + 'textarea', + 'tfoot', + 'th', + 'thead', + 'time', + 'tr', + 'track', + 'tt', + 'u', + 'ul', + 'var', + 'video', + 'wbr' + ]); + // SVG + const svg$1 = freeze([ + 'svg', + 'a', + 'altglyph', + 'altglyphdef', + 'altglyphitem', + 'animatecolor', + 'animatemotion', + 'animatetransform', + 'circle', + 'clippath', + 'defs', + 'desc', + 'ellipse', + 'filter', + 'font', + 'g', + 'glyph', + 'glyphref', + 'hkern', + 'image', + 'line', + 'lineargradient', + 'marker', + 'mask', + 'metadata', + 'mpath', + 'path', + 'pattern', + 'polygon', + 'polyline', + 'radialgradient', + 'rect', + 'stop', + 'style', + 'switch', + 'symbol', + 'text', + 'textpath', + 'title', + 'tref', + 'tspan', + 'view', + 'vkern' + ]); + const svgFilters = freeze([ + 'feBlend', + 'feColorMatrix', + 'feComponentTransfer', + 'feComposite', + 'feConvolveMatrix', + 'feDiffuseLighting', + 'feDisplacementMap', + 'feDistantLight', + 'feDropShadow', + 'feFlood', + 'feFuncA', + 'feFuncB', + 'feFuncG', + 'feFuncR', + 'feGaussianBlur', + 'feImage', + 'feMerge', + 'feMergeNode', + 'feMorphology', + 'feOffset', + 'fePointLight', + 'feSpecularLighting', + 'feSpotLight', + 'feTile', + 'feTurbulence' + ]); + // List of SVG elements that are disallowed by default. + // We still need to know them so that we can do namespace + // checks properly in case one wants to add them to + // allow-list. + const svgDisallowed = freeze([ + 'animate', + 'color-profile', + 'cursor', + 'discard', + 'font-face', + 'font-face-format', + 'font-face-name', + 'font-face-src', + 'font-face-uri', + 'foreignobject', + 'hatch', + 'hatchpath', + 'mesh', + 'meshgradient', + 'meshpatch', + 'meshrow', + 'missing-glyph', + 'script', + 'set', + 'solidcolor', + 'unknown', + 'use' + ]); + const mathMl$1 = freeze([ + 'math', + 'menclose', + 'merror', + 'mfenced', + 'mfrac', + 'mglyph', + 'mi', + 'mlabeledtr', + 'mmultiscripts', + 'mn', + 'mo', + 'mover', + 'mpadded', + 'mphantom', + 'mroot', + 'mrow', + 'ms', + 'mspace', + 'msqrt', + 'mstyle', + 'msub', + 'msup', + 'msubsup', + 'mtable', + 'mtd', + 'mtext', + 'mtr', + 'munder', + 'munderover', + 'mprescripts' + ]); + // Similarly to SVG, we want to know all MathML elements, + // even those that we disallow by default. + const mathMlDisallowed = freeze([ + 'maction', + 'maligngroup', + 'malignmark', + 'mlongdiv', + 'mscarries', + 'mscarry', + 'msgroup', + 'mstack', + 'msline', + 'msrow', + 'semantics', + 'annotation', + 'annotation-xml', + 'mprescripts', + 'none' + ]); + const text = freeze([ + '#text' + ]); + const html = freeze([ + 'accept', + 'action', + 'align', + 'alt', + 'autocapitalize', + 'autocomplete', + 'autopictureinpicture', + 'autoplay', + 'background', + 'bgcolor', + 'border', + 'capture', + 'cellpadding', + 'cellspacing', + 'checked', + 'cite', + 'class', + 'clear', + 'color', + 'cols', + 'colspan', + 'controls', + 'controlslist', + 'coords', + 'crossorigin', + 'datetime', + 'decoding', + 'default', + 'dir', + 'disabled', + 'disablepictureinpicture', + 'disableremoteplayback', + 'download', + 'draggable', + 'enctype', + 'enterkeyhint', + 'face', + 'for', + 'headers', + 'height', + 'hidden', + 'high', + 'href', + 'hreflang', + 'id', + 'inputmode', + 'integrity', + 'ismap', + 'kind', + 'label', + 'lang', + 'list', + 'loading', + 'loop', + 'low', + 'max', + 'maxlength', + 'media', + 'method', + 'min', + 'minlength', + 'multiple', + 'muted', + 'name', + 'nonce', + 'noshade', + 'novalidate', + 'nowrap', + 'open', + 'optimum', + 'pattern', + 'placeholder', + 'playsinline', + 'popover', + 'popovertarget', + 'popovertargetaction', + 'poster', + 'preload', + 'pubdate', + 'radiogroup', + 'readonly', + 'rel', + 'required', + 'rev', + 'reversed', + 'role', + 'rows', + 'rowspan', + 'spellcheck', + 'scope', + 'selected', + 'shape', + 'size', + 'sizes', + 'span', + 'srclang', + 'start', + 'src', + 'srcset', + 'step', + 'style', + 'summary', + 'tabindex', + 'title', + 'translate', + 'type', + 'usemap', + 'valign', + 'value', + 'width', + 'wrap', + 'xmlns', + 'slot' + ]); + const svg = freeze([ + 'accent-height', + 'accumulate', + 'additive', + 'alignment-baseline', + 'ascent', + 'attributename', + 'attributetype', + 'azimuth', + 'basefrequency', + 'baseline-shift', + 'begin', + 'bias', + 'by', + 'class', + 'clip', + 'clippathunits', + 'clip-path', + 'clip-rule', + 'color', + 'color-interpolation', + 'color-interpolation-filters', + 'color-profile', + 'color-rendering', + 'cx', + 'cy', + 'd', + 'dx', + 'dy', + 'diffuseconstant', + 'direction', + 'display', + 'divisor', + 'dur', + 'edgemode', + 'elevation', + 'end', + 'fill', + 'fill-opacity', + 'fill-rule', + 'filter', + 'filterunits', + 'flood-color', + 'flood-opacity', + 'font-family', + 'font-size', + 'font-size-adjust', + 'font-stretch', + 'font-style', + 'font-variant', + 'font-weight', + 'fx', + 'fy', + 'g1', + 'g2', + 'glyph-name', + 'glyphref', + 'gradientunits', + 'gradienttransform', + 'height', + 'href', + 'id', + 'image-rendering', + 'in', + 'in2', + 'k', + 'k1', + 'k2', + 'k3', + 'k4', + 'kerning', + 'keypoints', + 'keysplines', + 'keytimes', + 'lang', + 'lengthadjust', + 'letter-spacing', + 'kernelmatrix', + 'kernelunitlength', + 'lighting-color', + 'local', + 'marker-end', + 'marker-mid', + 'marker-start', + 'markerheight', + 'markerunits', + 'markerwidth', + 'maskcontentunits', + 'maskunits', + 'max', + 'mask', + 'media', + 'method', + 'mode', + 'min', + 'name', + 'numoctaves', + 'offset', + 'operator', + 'opacity', + 'order', + 'orient', + 'orientation', + 'origin', + 'overflow', + 'paint-order', + 'path', + 'pathlength', + 'patterncontentunits', + 'patterntransform', + 'patternunits', + 'points', + 'preservealpha', + 'preserveaspectratio', + 'primitiveunits', + 'r', + 'rx', + 'ry', + 'radius', + 'refx', + 'refy', + 'repeatcount', + 'repeatdur', + 'restart', + 'result', + 'rotate', + 'scale', + 'seed', + 'shape-rendering', + 'specularconstant', + 'specularexponent', + 'spreadmethod', + 'startoffset', + 'stddeviation', + 'stitchtiles', + 'stop-color', + 'stop-opacity', + 'stroke-dasharray', + 'stroke-dashoffset', + 'stroke-linecap', + 'stroke-linejoin', + 'stroke-miterlimit', + 'stroke-opacity', + 'stroke', + 'stroke-width', + 'style', + 'surfacescale', + 'systemlanguage', + 'tabindex', + 'targetx', + 'targety', + 'transform', + 'transform-origin', + 'text-anchor', + 'text-decoration', + 'text-rendering', + 'textlength', + 'type', + 'u1', + 'u2', + 'unicode', + 'values', + 'viewbox', + 'visibility', + 'version', + 'vert-adv-y', + 'vert-origin-x', + 'vert-origin-y', + 'width', + 'word-spacing', + 'wrap', + 'writing-mode', + 'xchannelselector', + 'ychannelselector', + 'x', + 'x1', + 'x2', + 'xmlns', + 'y', + 'y1', + 'y2', + 'z', + 'zoomandpan' + ]); + const mathMl = freeze([ + 'accent', + 'accentunder', + 'align', + 'bevelled', + 'close', + 'columnsalign', + 'columnlines', + 'columnspan', + 'denomalign', + 'depth', + 'dir', + 'display', + 'displaystyle', + 'encoding', + 'fence', + 'frame', + 'height', + 'href', + 'id', + 'largeop', + 'length', + 'linethickness', + 'lspace', + 'lquote', + 'mathbackground', + 'mathcolor', + 'mathsize', + 'mathvariant', + 'maxsize', + 'minsize', + 'movablelimits', + 'notation', + 'numalign', + 'open', + 'rowalign', + 'rowlines', + 'rowspacing', + 'rowspan', + 'rspace', + 'rquote', + 'scriptlevel', + 'scriptminsize', + 'scriptsizemultiplier', + 'selection', + 'separator', + 'separators', + 'stretchy', + 'subscriptshift', + 'supscriptshift', + 'symmetric', + 'voffset', + 'width', + 'xmlns' + ]); + const xml = freeze([ + 'xlink:href', + 'xml:id', + 'xlink:title', + 'xml:space', + 'xmlns:xlink' + ]); + // eslint-disable-next-line unicorn/better-regex + const MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode + const ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); + const TMPLIT_EXPR = seal(/\${[\w\W]*}/gm); + const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape + const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape + const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape + ); + const IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); + const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex + ); + const DOCTYPE_NAME = seal(/^html$/i); + const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i); + var EXPRESSIONS = /*#__PURE__*/ Object.freeze({ + __proto__: null, + MUSTACHE_EXPR: MUSTACHE_EXPR, + ERB_EXPR: ERB_EXPR, + TMPLIT_EXPR: TMPLIT_EXPR, + DATA_ATTR: DATA_ATTR, + ARIA_ATTR: ARIA_ATTR, + IS_ALLOWED_URI: IS_ALLOWED_URI, + IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA, + ATTR_WHITESPACE: ATTR_WHITESPACE, + DOCTYPE_NAME: DOCTYPE_NAME, + CUSTOM_ELEMENT: CUSTOM_ELEMENT + }); + // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType + const NODE_TYPE = { + element: 1, + attribute: 2, + text: 3, + cdataSection: 4, + entityReference: 5, + // Deprecated + entityNode: 6, + // Deprecated + progressingInstruction: 7, + comment: 8, + document: 9, + documentType: 10, + documentFragment: 11, + notation: 12 // Deprecated + }; + const getGlobal = function getGlobal() { + return typeof window === 'undefined' ? null : window; + }; + /** + * Creates a no-op policy for internal use only. + * Don't export this function outside this module! + * @param {TrustedTypePolicyFactory} trustedTypes The policy factory. + * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix). + * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types + * are not supported or creating the policy failed). + */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) { + if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') { + return null; + } + // Allow the callers to control the unique policy name + // by adding a data-tt-policy-suffix to the script element with the DOMPurify. + // Policy creation with duplicate names throws in Trusted Types. + let suffix = null; + const ATTR_NAME = 'data-tt-policy-suffix'; + if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) { + suffix = purifyHostElement.getAttribute(ATTR_NAME); + } + const policyName = 'dompurify' + (suffix ? '#' + suffix : ''); + try { + return trustedTypes.createPolicy(policyName, { + createHTML (html) { + return html; + }, + createScriptURL (scriptUrl) { + return scriptUrl; + } + }); + } catch (_) { + // Policy creation failed (most likely another DOMPurify script has + // already run). Skip creating the policy, as this will only cause errors + // if TT are enforced. + console.warn('TrustedTypes policy ' + policyName + ' could not be created.'); + return null; + } + }; + function createDOMPurify() { + let window1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal(); + const DOMPurify = (root)=>createDOMPurify(root); + /** + * Version label, exposed for easier checks + * if DOMPurify is up to date or not + */ DOMPurify.version = '3.1.6'; + /** + * Array of elements that DOMPurify removed during sanitation. + * Empty if nothing was removed. + */ DOMPurify.removed = []; + if (!window1 || !window1.document || window1.document.nodeType !== NODE_TYPE.document) { + // Not running in a browser, provide a factory function + // so that you can pass your own Window + DOMPurify.isSupported = false; + return DOMPurify; + } + let { document } = window1; + const originalDocument = document; + const currentScript = originalDocument.currentScript; + const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window1.NamedNodeMap || window1.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window1; + const ElementPrototype = Element.prototype; + const cloneNode = lookupGetter(ElementPrototype, 'cloneNode'); + const remove = lookupGetter(ElementPrototype, 'remove'); + const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling'); + const getChildNodes = lookupGetter(ElementPrototype, 'childNodes'); + const getParentNode = lookupGetter(ElementPrototype, 'parentNode'); + // As per issue #47, the web-components registry is inherited by a + // new document created via createHTMLDocument. As per the spec + // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries) + // a new empty registry is used when creating a template contents owner + // document, so we use that as our parent document to ensure nothing + // is inherited. + if (typeof HTMLTemplateElement === 'function') { + const template = document.createElement('template'); + if (template.content && template.content.ownerDocument) { + document = template.content.ownerDocument; + } + } + let trustedTypesPolicy; + let emptyHTML = ''; + const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document; + const { importNode } = originalDocument; + let hooks = {}; + /** + * Expose whether this browser supports running the full DOMPurify. + */ DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined; + const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, CUSTOM_ELEMENT } = EXPRESSIONS; + let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS; + /** + * We consider the elements and attributes below to be safe. Ideally + * don't add any new ones but feel free to remove unwanted ones. + */ /* allowed element names */ let ALLOWED_TAGS = null; + const DEFAULT_ALLOWED_TAGS = addToSet({}, [ + ...html$1, + ...svg$1, + ...svgFilters, + ...mathMl$1, + ...text + ]); + /* Allowed attribute names */ let ALLOWED_ATTR = null; + const DEFAULT_ALLOWED_ATTR = addToSet({}, [ + ...html, + ...svg, + ...mathMl, + ...xml + ]); + /* + * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements. + * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements) + * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list) + * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`. + */ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, { + tagNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + attributeNameCheck: { + writable: true, + configurable: false, + enumerable: true, + value: null + }, + allowCustomizedBuiltInElements: { + writable: true, + configurable: false, + enumerable: true, + value: false + } + })); + /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null; + /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null; + /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true; + /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true; + /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false; + /* Decide if self-closing tags in attributes are allowed. + * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true; + /* Output should be safe for common template engines. + * This means, DOMPurify removes data attributes, mustaches and ERB + */ let SAFE_FOR_TEMPLATES = false; + /* Output should be safe even for XML used within HTML and alike. + * This means, DOMPurify removes comments when containing risky content. + */ let SAFE_FOR_XML = true; + /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false; + /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false; + /* Decide if all elements (e.g. style, script) must be children of + * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false; + /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported). + * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead + */ let RETURN_DOM = false; + /* Decide if a DOM `DocumentFragment` should be returned, instead of a html + * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false; + /* Try to return a Trusted Type object instead of a string, return a string in + * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false; + /* Output should be free from DOM clobbering attacks? + * This sanitizes markups named with colliding, clobberable built-in DOM APIs. + */ let SANITIZE_DOM = true; + /* Achieve full DOM Clobbering protection by isolating the namespace of named + * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules. + * + * HTML/DOM spec rules that enable DOM Clobbering: + * - Named Access on Window (§7.3.3) + * - DOM Tree Accessors (§3.1.5) + * - Form Element Parent-Child Relations (§4.10.3) + * - Iframe srcdoc / Nested WindowProxies (§4.8.5) + * - HTMLCollection (§4.2.10.2) + * + * Namespace isolation is implemented by prefixing `id` and `name` attributes + * with a constant string, i.e., `user-content-` + */ let SANITIZE_NAMED_PROPS = false; + const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-'; + /* Keep element content when removing element? */ let KEEP_CONTENT = true; + /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead + * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false; + /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {}; + /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null; + const DEFAULT_FORBID_CONTENTS = addToSet({}, [ + 'annotation-xml', + 'audio', + 'colgroup', + 'desc', + 'foreignobject', + 'head', + 'iframe', + 'math', + 'mi', + 'mn', + 'mo', + 'ms', + 'mtext', + 'noembed', + 'noframes', + 'noscript', + 'plaintext', + 'script', + 'style', + 'svg', + 'template', + 'thead', + 'title', + 'video', + 'xmp' + ]); + /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null; + const DEFAULT_DATA_URI_TAGS = addToSet({}, [ + 'audio', + 'video', + 'img', + 'source', + 'image', + 'track' + ]); + /* Attributes safe for values like "javascript:" */ let URI_SAFE_ATTRIBUTES = null; + const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [ + 'alt', + 'class', + 'for', + 'id', + 'label', + 'name', + 'pattern', + 'placeholder', + 'role', + 'summary', + 'title', + 'value', + 'style', + 'xmlns' + ]); + const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML'; + const SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; + const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml'; + /* Document namespace */ let NAMESPACE = HTML_NAMESPACE; + let IS_EMPTY_INPUT = false; + /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null; + const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [ + MATHML_NAMESPACE, + SVG_NAMESPACE, + HTML_NAMESPACE + ], stringToString); + /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null; + const SUPPORTED_PARSER_MEDIA_TYPES = [ + 'application/xhtml+xml', + 'text/html' + ]; + const DEFAULT_PARSER_MEDIA_TYPE = 'text/html'; + let transformCaseFunc = null; + /* Keep a reference to config to pass to hooks */ let CONFIG = null; + /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = document.createElement('form'); + const isRegexOrFunction = function isRegexOrFunction(testValue) { + return testValue instanceof RegExp || testValue instanceof Function; + }; + /** + * _parseConfig + * + * @param {Object} cfg optional config literal + */ // eslint-disable-next-line complexity + const _parseConfig = function _parseConfig() { + let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + if (CONFIG && CONFIG === cfg) { + return; + } + /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== 'object') { + cfg = {}; + } + /* Shield configuration object from prototype pollution */ cfg = clone(cfg); + PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes + SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE; + // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is. + transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase; + /* Set configuration parameters */ ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS; + ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR; + ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES; + URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent + cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent + transformCaseFunc // eslint-disable-line indent + ) // eslint-disable-line indent + : DEFAULT_URI_SAFE_ATTRIBUTES; + DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent + cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent + transformCaseFunc // eslint-disable-line indent + ) // eslint-disable-line indent + : DEFAULT_DATA_URI_TAGS; + FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS; + FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {}; + FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {}; + USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false; + ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true + ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true + ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false + ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true + SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false + SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true + WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false + RETURN_DOM = cfg.RETURN_DOM || false; // Default false + RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false + RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false + FORCE_BODY = cfg.FORCE_BODY || false; // Default false + SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true + SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false + KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true + IN_PLACE = cfg.IN_PLACE || false; // Default false + IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI; + NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; + CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { + CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { + CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; + } + if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') { + CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; + } + if (SAFE_FOR_TEMPLATES) { + ALLOW_DATA_ATTR = false; + } + if (RETURN_DOM_FRAGMENT) { + RETURN_DOM = true; + } + /* Parse profile info */ if (USE_PROFILES) { + ALLOWED_TAGS = addToSet({}, text); + ALLOWED_ATTR = []; + if (USE_PROFILES.html === true) { + addToSet(ALLOWED_TAGS, html$1); + addToSet(ALLOWED_ATTR, html); + } + if (USE_PROFILES.svg === true) { + addToSet(ALLOWED_TAGS, svg$1); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.svgFilters === true) { + addToSet(ALLOWED_TAGS, svgFilters); + addToSet(ALLOWED_ATTR, svg); + addToSet(ALLOWED_ATTR, xml); + } + if (USE_PROFILES.mathMl === true) { + addToSet(ALLOWED_TAGS, mathMl$1); + addToSet(ALLOWED_ATTR, mathMl); + addToSet(ALLOWED_ATTR, xml); + } + } + /* Merge configuration parameters */ if (cfg.ADD_TAGS) { + if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { + ALLOWED_TAGS = clone(ALLOWED_TAGS); + } + addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); + } + if (cfg.ADD_ATTR) { + if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { + ALLOWED_ATTR = clone(ALLOWED_ATTR); + } + addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); + } + if (cfg.ADD_URI_SAFE_ATTR) { + addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); + } + if (cfg.FORBID_CONTENTS) { + if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { + FORBID_CONTENTS = clone(FORBID_CONTENTS); + } + addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); + } + /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) { + ALLOWED_TAGS['#text'] = true; + } + /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) { + addToSet(ALLOWED_TAGS, [ + 'html', + 'head', + 'body' + ]); + } + /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) { + addToSet(ALLOWED_TAGS, [ + 'tbody' + ]); + delete FORBID_TAGS.tbody; + } + if (cfg.TRUSTED_TYPES_POLICY) { + if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') { + throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.'); + } + if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') { + throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.'); + } + // Overwrite existing TrustedTypes policy. + trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY; + // Sign local variables required by `sanitize`. + emptyHTML = trustedTypesPolicy.createHTML(''); + } else { + // Uninitialized policy, attempt to initialize the internal dompurify policy. + if (trustedTypesPolicy === undefined) { + trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript); + } + // If creating the internal policy succeeded sign internal variables. + if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') { + emptyHTML = trustedTypesPolicy.createHTML(''); + } + } + // Prevent further manipulation of configuration. + // Not available in IE8, Safari 5, etc. + if (freeze) { + freeze(cfg); + } + CONFIG = cfg; + }; + const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [ + 'mi', + 'mo', + 'mn', + 'ms', + 'mtext' + ]); + const HTML_INTEGRATION_POINTS = addToSet({}, [ + 'foreignobject', + 'annotation-xml' + ]); + // Certain elements are allowed in both SVG and HTML + // namespace. We need to specify them explicitly + // so that they don't get erroneously deleted from + // HTML namespace. + const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [ + 'title', + 'style', + 'font', + 'a', + 'script' + ]); + /* Keep track of all possible SVG and MathML tags + * so that we can perform the namespace checks + * correctly. */ const ALL_SVG_TAGS = addToSet({}, [ + ...svg$1, + ...svgFilters, + ...svgDisallowed + ]); + const ALL_MATHML_TAGS = addToSet({}, [ + ...mathMl$1, + ...mathMlDisallowed + ]); + /** + * @param {Element} element a DOM element whose namespace is being checked + * @returns {boolean} Return false if the element has a + * namespace that a spec-compliant parser would never + * return. Return true otherwise. + */ const _checkValidNamespace = function _checkValidNamespace(element) { + let parent = getParentNode(element); + // In JSDOM, if we're inside shadow DOM, then parentNode + // can be null. We just simulate parent in this case. + if (!parent || !parent.tagName) { + parent = { + namespaceURI: NAMESPACE, + tagName: 'template' + }; + } + const tagName = stringToLowerCase(element.tagName); + const parentTagName = stringToLowerCase(parent.tagName); + if (!ALLOWED_NAMESPACES[element.namespaceURI]) { + return false; + } + if (element.namespaceURI === SVG_NAMESPACE) { + // The only way to switch from HTML namespace to SVG + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'svg'; + } + // The only way to switch from MathML to SVG is via` + // svg if parent is either or MathML + // text integration points. + if (parent.namespaceURI === MATHML_NAMESPACE) { + return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); + } + // We only allow elements that are defined in SVG + // spec. All others are disallowed in SVG namespace. + return Boolean(ALL_SVG_TAGS[tagName]); + } + if (element.namespaceURI === MATHML_NAMESPACE) { + // The only way to switch from HTML namespace to MathML + // is via . If it happens via any other tag, then + // it should be killed. + if (parent.namespaceURI === HTML_NAMESPACE) { + return tagName === 'math'; + } + // The only way to switch from SVG to MathML is via + // and HTML integration points + if (parent.namespaceURI === SVG_NAMESPACE) { + return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName]; + } + // We only allow elements that are defined in MathML + // spec. All others are disallowed in MathML namespace. + return Boolean(ALL_MATHML_TAGS[tagName]); + } + if (element.namespaceURI === HTML_NAMESPACE) { + // The only way to switch from SVG to HTML is via + // HTML integration points, and from MathML to HTML + // is via MathML text integration points + if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { + return false; + } + if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { + return false; + } + // We disallow tags that are specific for MathML + // or SVG and should never appear in HTML namespace + return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); + } + // For XHTML and XML documents that support custom namespaces + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) { + return true; + } + // The code should never reach this place (this means + // that the element somehow got namespace that is not + // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES). + // Return false just in case. + return false; + }; + /** + * _forceRemove + * + * @param {Node} node a DOM node + */ const _forceRemove = function _forceRemove(node) { + arrayPush(DOMPurify.removed, { + element: node + }); + try { + // eslint-disable-next-line unicorn/prefer-dom-node-remove + getParentNode(node).removeChild(node); + } catch (_) { + remove(node); + } + }; + /** + * _removeAttribute + * + * @param {String} name an Attribute name + * @param {Node} node a DOM node + */ const _removeAttribute = function _removeAttribute(name, node) { + try { + arrayPush(DOMPurify.removed, { + attribute: node.getAttributeNode(name), + from: node + }); + } catch (_) { + arrayPush(DOMPurify.removed, { + attribute: null, + from: node + }); + } + node.removeAttribute(name); + // We void attribute values for unremovable "is"" attributes + if (name === 'is' && !ALLOWED_ATTR[name]) { + if (RETURN_DOM || RETURN_DOM_FRAGMENT) { + try { + _forceRemove(node); + } catch (_) {} + } else { + try { + node.setAttribute(name, ''); + } catch (_) {} + } + } + }; + /** + * _initDocument + * + * @param {String} dirty a string of dirty markup + * @return {Document} a DOM, filled with the dirty markup + */ const _initDocument = function _initDocument(dirty) { + /* Create a HTML document */ let doc = null; + let leadingWhitespace = null; + if (FORCE_BODY) { + dirty = '' + dirty; + } else { + /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = stringMatch(dirty, /^[\r\n\t ]+/); + leadingWhitespace = matches && matches[0]; + } + if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) { + // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict) + dirty = '' + dirty + ''; + } + const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; + /* + * Use the DOMParser API by default, fallback later if needs be + * DOMParser not work for svg when has multiple root element. + */ if (NAMESPACE === HTML_NAMESPACE) { + try { + doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); + } catch (_) {} + } + /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) { + doc = implementation.createDocument(NAMESPACE, 'template', null); + try { + doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; + } catch (_) { + // Syntax error if dirtyPayload is invalid xml + } + } + const body = doc.body || doc.documentElement; + if (dirty && leadingWhitespace) { + body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null); + } + /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) { + return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0]; + } + return WHOLE_DOCUMENT ? doc.documentElement : body; + }; + /** + * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document. + * + * @param {Node} root The root element or node to start traversing on. + * @return {NodeIterator} The created NodeIterator + */ const _createNodeIterator = function _createNodeIterator(root) { + return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise + NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null); + }; + /** + * _isClobbered + * + * @param {Node} elm element to check for clobbering attacks + * @return {Boolean} true if clobbered, false if safe + */ const _isClobbered = function _isClobbered(elm) { + return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function'); + }; + /** + * Checks whether the given object is a DOM node. + * + * @param {Node} object object to check whether it's a DOM node + * @return {Boolean} true is object is a DOM node + */ const _isNode = function _isNode(object) { + return typeof Node === 'function' && object instanceof Node; + }; + /** + * _executeHook + * Execute user configurable hooks + * + * @param {String} entryPoint Name of the hook's entry point + * @param {Node} currentNode node to work on with the hook + * @param {Object} data additional hook parameters + */ const _executeHook = function _executeHook(entryPoint, currentNode, data) { + if (!hooks[entryPoint]) { + return; + } + arrayForEach(hooks[entryPoint], (hook)=>{ + hook.call(DOMPurify, currentNode, data, CONFIG); + }); + }; + /** + * _sanitizeElements + * + * @protect nodeName + * @protect textContent + * @protect removeChild + * + * @param {Node} currentNode to check for permission to exist + * @return {Boolean} true if node was killed, false if left alive + */ const _sanitizeElements = function _sanitizeElements(currentNode) { + let content = null; + /* Execute a hook if present */ _executeHook('beforeSanitizeElements', currentNode, null); + /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + return true; + } + /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName); + /* Execute a hook if present */ _executeHook('uponSanitizeElement', currentNode, { + tagName, + allowedTags: ALLOWED_TAGS + }); + /* Detect mXSS attempts abusing namespace confusion */ if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { + _forceRemove(currentNode); + return true; + } + /* Remove any occurrence of processing instructions */ if (currentNode.nodeType === NODE_TYPE.progressingInstruction) { + _forceRemove(currentNode); + return true; + } + /* Remove any kind of possibly harmful comments */ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) { + _forceRemove(currentNode); + return true; + } + /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { + /* Check if we have a custom element to handle */ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) { + if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) { + return false; + } + if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) { + return false; + } + } + /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) { + const parentNode = getParentNode(currentNode) || currentNode.parentNode; + const childNodes = getChildNodes(currentNode) || currentNode.childNodes; + if (childNodes && parentNode) { + const childCount = childNodes.length; + for(let i = childCount - 1; i >= 0; --i){ + const childClone = cloneNode(childNodes[i], true); + childClone.__removalCount = (currentNode.__removalCount || 0) + 1; + parentNode.insertBefore(childClone, getNextSibling(currentNode)); + } + } + } + _forceRemove(currentNode); + return true; + } + /* Check whether element has a valid namespace */ if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) { + _forceRemove(currentNode); + return true; + } + /* Make sure that older browsers don't get fallback-tag mXSS */ if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) { + _forceRemove(currentNode); + return true; + } + /* Sanitize element content to be template-safe */ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) { + /* Get the element's text content */ content = currentNode.textContent; + arrayForEach([ + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR + ], (expr)=>{ + content = stringReplace(content, expr, ' '); + }); + if (currentNode.textContent !== content) { + arrayPush(DOMPurify.removed, { + element: currentNode.cloneNode() + }); + currentNode.textContent = content; + } + } + /* Execute a hook if present */ _executeHook('afterSanitizeElements', currentNode, null); + return false; + }; + /** + * _isValidAttribute + * + * @param {string} lcTag Lowercase tag name of containing element. + * @param {string} lcName Lowercase attribute name. + * @param {string} value Attribute value. + * @return {Boolean} Returns true if `value` is valid, otherwise false. + */ // eslint-disable-next-line complexity + const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) { + /* Make sure attribute cannot clobber */ if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) { + return false; + } + /* Allow valid data-* attributes: At least one character after "-" (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes) XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804) - We don't need to check the value; it's always URI safe. */ if ( - ALLOW_DATA_ATTR && - !FORBID_ATTR[lcName] && - regExpTest(DATA_ATTR, lcName) - ); - else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)); - else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { - if ( - // First condition does a very basic check if a) it's basically a valid custom element tagname AND - // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck - // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck - (_isBasicCustomElement(lcTag) && - ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag)) || - (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag))) && - ((CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName)) || - (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)))) || // Alternative, second condition checks if it's an `is`-attribute, AND - // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck - (lcName === "is" && - CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && - ((CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && - regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value)) || - (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && - CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)))) - ); - else { - return false; - } - /* Check value is safe. First, is attr inert? If so, is safe */ - } else if (URI_SAFE_ATTRIBUTES[lcName]); - else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ""))); - else if ( - (lcName === "src" || lcName === "xlink:href" || lcName === "href") && - lcTag !== "script" && - stringIndexOf(value, "data:") === 0 && - DATA_URI_TAGS[lcTag] - ); - else if ( - ALLOW_UNKNOWN_PROTOCOLS && - !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, "")) - ); - else if (value) { - return false; - } else; - return true; - }; - /** - * _isBasicCustomElement - * checks if at least one dash is included in tagName, and it's not the first char - * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name - * - * @param {string} tagName name of the tag of the node to sanitize - * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false. - */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) { - return tagName !== "annotation-xml" && stringMatch(tagName, CUSTOM_ELEMENT); - }; - /** - * _sanitizeAttributes - * - * @protect attributes - * @protect nodeName - * @protect removeAttribute - * @protect setAttribute - * - * @param {Node} currentNode to sanitize - */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) { - /* Execute a hook if present */ _executeHook("beforeSanitizeAttributes", currentNode, null); - const { attributes } = currentNode; - /* Check if we have attributes; if not we might have a text node */ if (!attributes) { - return; - } - const hookEvent = { - attrName: "", - attrValue: "", - keepAttr: true, - allowedAttributes: ALLOWED_ATTR, - }; - let l = attributes.length; - /* Go backwards over all attributes; safely remove bad ones */ while (l--) { - const attr = attributes[l]; - const { name, namespaceURI, value: attrValue } = attr; - const lcName = transformCaseFunc(name); - let value = name === "value" ? attrValue : stringTrim(attrValue); - /* Execute a hook if present */ hookEvent.attrName = lcName; - hookEvent.attrValue = value; - hookEvent.keepAttr = true; - hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set - _executeHook("uponSanitizeAttribute", currentNode, hookEvent); - value = hookEvent.attrValue; - /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) { - continue; - } - /* Remove attribute */ _removeAttribute(name, currentNode); - /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) { - continue; - } - /* Work around a security issue in jQuery 3.0 */ if ( - !ALLOW_SELF_CLOSE_IN_ATTR && - regExpTest(/\/>/i, value) - ) { - _removeAttribute(name, currentNode); - continue; - } - /* Work around a security issue with comments inside attributes */ if ( - SAFE_FOR_XML && - regExpTest(/((--!?|])>)|<\/(style|title)/i, value) - ) { - _removeAttribute(name, currentNode); - continue; - } - /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) { - arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => { - value = stringReplace(value, expr, " "); - }); - } - /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName); - if (!_isValidAttribute(lcTag, lcName, value)) { - continue; - } - /* Full DOM Clobbering protection via namespace isolation, - * Prefix id and name attributes with `user-content-` - */ if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) { - // Remove the attribute with this value - _removeAttribute(name, currentNode); - // Prefix the value and later re-create the attribute with the sanitized value - value = SANITIZE_NAMED_PROPS_PREFIX + value; - } - /* Handle attributes that require Trusted Types */ if ( - trustedTypesPolicy && - typeof trustedTypes === "object" && - typeof trustedTypes.getAttributeType === "function" - ) { - if (namespaceURI); - else { - switch (trustedTypes.getAttributeType(lcTag, lcName)) { - case "TrustedHTML": { - value = trustedTypesPolicy.createHTML(value); - break; - } - case "TrustedScriptURL": { - value = trustedTypesPolicy.createScriptURL(value); - break; - } - } - } - } - /* Handle invalid data-* attribute set by try-catching it */ try { - if (namespaceURI) { - currentNode.setAttributeNS(namespaceURI, name, value); - } else { - /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ currentNode.setAttribute( - name, - value, - ); - } - if (_isClobbered(currentNode)) { - _forceRemove(currentNode); - } else { - arrayPop(DOMPurify.removed); - } - } catch (_) {} - } - /* Execute a hook if present */ _executeHook("afterSanitizeAttributes", currentNode, null); - }; - /** - * _sanitizeShadowDOM - * - * @param {DocumentFragment} fragment to iterate over recursively - */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { - let shadowNode = null; - const shadowIterator = _createNodeIterator(fragment); - /* Execute a hook if present */ _executeHook("beforeSanitizeShadowDOM", fragment, null); - while ((shadowNode = shadowIterator.nextNode())) { - /* Execute a hook if present */ _executeHook("uponSanitizeShadowNode", shadowNode, null); - /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) { - continue; - } - /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) { - _sanitizeShadowDOM(shadowNode.content); - } - /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode); - } - /* Execute a hook if present */ _executeHook("afterSanitizeShadowDOM", fragment, null); - }; - /** - * Sanitize - * Public method providing core sanitation functionality - * - * @param {String|Node} dirty string or DOM node - * @param {Object} cfg object - */ // eslint-disable-next-line complexity - DOMPurify.sanitize = function (dirty) { - let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - let body = null; - let importedNode = null; - let currentNode = null; - let returnNode = null; - /* Make sure we have a string to sanitize. + We don't need to check the value; it's always URI safe. */ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; + else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; + else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) { + if (// First condition does a very basic check if a) it's basically a valid custom element tagname AND + // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck + _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND + // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck + lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; + else { + return false; + } + /* Check value is safe. First, is attr inert? If so, is safe */ } else if (URI_SAFE_ATTRIBUTES[lcName]) ; + else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; + else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; + else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; + else if (value) { + return false; + } else ; + return true; + }; + /** + * _isBasicCustomElement + * checks if at least one dash is included in tagName, and it's not the first char + * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name + * + * @param {string} tagName name of the tag of the node to sanitize + * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false. + */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) { + return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT); + }; + /** + * _sanitizeAttributes + * + * @protect attributes + * @protect nodeName + * @protect removeAttribute + * @protect setAttribute + * + * @param {Node} currentNode to sanitize + */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) { + /* Execute a hook if present */ _executeHook('beforeSanitizeAttributes', currentNode, null); + const { attributes } = currentNode; + /* Check if we have attributes; if not we might have a text node */ if (!attributes) { + return; + } + const hookEvent = { + attrName: '', + attrValue: '', + keepAttr: true, + allowedAttributes: ALLOWED_ATTR + }; + let l = attributes.length; + /* Go backwards over all attributes; safely remove bad ones */ while(l--){ + const attr = attributes[l]; + const { name, namespaceURI, value: attrValue } = attr; + const lcName = transformCaseFunc(name); + let value = name === 'value' ? attrValue : stringTrim(attrValue); + /* Execute a hook if present */ hookEvent.attrName = lcName; + hookEvent.attrValue = value; + hookEvent.keepAttr = true; + hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set + _executeHook('uponSanitizeAttribute', currentNode, hookEvent); + value = hookEvent.attrValue; + /* Work around a security issue with comments inside attributes */ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title)/i, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) { + continue; + } + /* Remove attribute */ _removeAttribute(name, currentNode); + /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) { + continue; + } + /* Work around a security issue in jQuery 3.0 */ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) { + _removeAttribute(name, currentNode); + continue; + } + /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) { + arrayForEach([ + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR + ], (expr)=>{ + value = stringReplace(value, expr, ' '); + }); + } + /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName); + if (!_isValidAttribute(lcTag, lcName, value)) { + continue; + } + /* Full DOM Clobbering protection via namespace isolation, + * Prefix id and name attributes with `user-content-` + */ if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) { + // Remove the attribute with this value + _removeAttribute(name, currentNode); + // Prefix the value and later re-create the attribute with the sanitized value + value = SANITIZE_NAMED_PROPS_PREFIX + value; + } + /* Handle attributes that require Trusted Types */ if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') { + if (namespaceURI) ; + else { + switch(trustedTypes.getAttributeType(lcTag, lcName)){ + case 'TrustedHTML': + { + value = trustedTypesPolicy.createHTML(value); + break; + } + case 'TrustedScriptURL': + { + value = trustedTypesPolicy.createScriptURL(value); + break; + } + } + } + } + /* Handle invalid data-* attribute set by try-catching it */ try { + if (namespaceURI) { + currentNode.setAttributeNS(namespaceURI, name, value); + } else { + /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */ currentNode.setAttribute(name, value); + } + if (_isClobbered(currentNode)) { + _forceRemove(currentNode); + } else { + arrayPop(DOMPurify.removed); + } + } catch (_) {} + } + /* Execute a hook if present */ _executeHook('afterSanitizeAttributes', currentNode, null); + }; + /** + * _sanitizeShadowDOM + * + * @param {DocumentFragment} fragment to iterate over recursively + */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) { + let shadowNode = null; + const shadowIterator = _createNodeIterator(fragment); + /* Execute a hook if present */ _executeHook('beforeSanitizeShadowDOM', fragment, null); + while(shadowNode = shadowIterator.nextNode()){ + /* Execute a hook if present */ _executeHook('uponSanitizeShadowNode', shadowNode, null); + /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) { + continue; + } + /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) { + _sanitizeShadowDOM(shadowNode.content); + } + /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode); + } + /* Execute a hook if present */ _executeHook('afterSanitizeShadowDOM', fragment, null); + }; + /** + * Sanitize + * Public method providing core sanitation functionality + * + * @param {String|Node} dirty string or DOM node + * @param {Object} cfg object + */ // eslint-disable-next-line complexity + DOMPurify.sanitize = function(dirty) { + let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + let body = null; + let importedNode = null; + let currentNode = null; + let returnNode = null; + /* Make sure we have a string to sanitize. DO NOT return early, as this will return the wrong type if the user has requested a DOM object rather than a string */ IS_EMPTY_INPUT = !dirty; - if (IS_EMPTY_INPUT) { - dirty = ""; - } - /* Stringify, in case dirty is an object */ if (typeof dirty !== "string" && !_isNode(dirty)) { - if (typeof dirty.toString === "function") { - dirty = dirty.toString(); - if (typeof dirty !== "string") { - throw typeErrorCreate("dirty is not a string, aborting"); - } - } else { - throw typeErrorCreate("toString is not a function"); - } - } - /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) { - return dirty; - } - /* Assign config vars */ if (!SET_CONFIG) { - _parseConfig(cfg); - } - /* Clean up removed elements */ DOMPurify.removed = []; - /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === "string") { - IN_PLACE = false; - } - if (IN_PLACE) { - /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) { - const tagName = transformCaseFunc(dirty.nodeName); - if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { - throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place"); - } - } - } else if (dirty instanceof Node) { - /* If dirty is a DOM element, append to an empty document to avoid - elements being stripped by the parser */ body = _initDocument(""); - importedNode = body.ownerDocument.importNode(dirty, true); - if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") { - /* Node is already a body, use as is */ body = importedNode; - } else if (importedNode.nodeName === "HTML") { - body = importedNode; - } else { - // eslint-disable-next-line unicorn/prefer-dom-node-append - body.appendChild(importedNode); - } - } else { - /* Exit directly if we have nothing to do */ if ( - !RETURN_DOM && - !SAFE_FOR_TEMPLATES && - !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes - dirty.indexOf("<") === -1 - ) { - return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty; - } - /* Initialize the document to work on */ body = _initDocument(dirty); - /* Check we have a DOM node from the data */ if (!body) { - return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : ""; - } - } - /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) { - _forceRemove(body.firstChild); - } - /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body); - /* Now start iterating over the created document */ while ((currentNode = nodeIterator.nextNode())) { - /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) { - continue; - } - /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) { - _sanitizeShadowDOM(currentNode.content); - } - /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode); - } - /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) { - return dirty; - } - /* Return sanitized string or DOM */ if (RETURN_DOM) { - if (RETURN_DOM_FRAGMENT) { - returnNode = createDocumentFragment.call(body.ownerDocument); - while (body.firstChild) { - // eslint-disable-next-line unicorn/prefer-dom-node-append - returnNode.appendChild(body.firstChild); - } - } else { - returnNode = body; - } - if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) { - /* + if (IS_EMPTY_INPUT) { + dirty = ''; + } + /* Stringify, in case dirty is an object */ if (typeof dirty !== 'string' && !_isNode(dirty)) { + if (typeof dirty.toString === 'function') { + dirty = dirty.toString(); + if (typeof dirty !== 'string') { + throw typeErrorCreate('dirty is not a string, aborting'); + } + } else { + throw typeErrorCreate('toString is not a function'); + } + } + /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) { + return dirty; + } + /* Assign config vars */ if (!SET_CONFIG) { + _parseConfig(cfg); + } + /* Clean up removed elements */ DOMPurify.removed = []; + /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === 'string') { + IN_PLACE = false; + } + if (IN_PLACE) { + /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) { + const tagName = transformCaseFunc(dirty.nodeName); + if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) { + throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place'); + } + } + } else if (dirty instanceof Node) { + /* If dirty is a DOM element, append to an empty document to avoid + elements being stripped by the parser */ body = _initDocument(''); + importedNode = body.ownerDocument.importNode(dirty, true); + if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') { + /* Node is already a body, use as is */ body = importedNode; + } else if (importedNode.nodeName === 'HTML') { + body = importedNode; + } else { + // eslint-disable-next-line unicorn/prefer-dom-node-append + body.appendChild(importedNode); + } + } else { + /* Exit directly if we have nothing to do */ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes + dirty.indexOf('<') === -1) { + return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty; + } + /* Initialize the document to work on */ body = _initDocument(dirty); + /* Check we have a DOM node from the data */ if (!body) { + return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : ''; + } + } + /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) { + _forceRemove(body.firstChild); + } + /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body); + /* Now start iterating over the created document */ while(currentNode = nodeIterator.nextNode()){ + /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) { + continue; + } + /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) { + _sanitizeShadowDOM(currentNode.content); + } + /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode); + } + /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) { + return dirty; + } + /* Return sanitized string or DOM */ if (RETURN_DOM) { + if (RETURN_DOM_FRAGMENT) { + returnNode = createDocumentFragment.call(body.ownerDocument); + while(body.firstChild){ + // eslint-disable-next-line unicorn/prefer-dom-node-append + returnNode.appendChild(body.firstChild); + } + } else { + returnNode = body; + } + if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) { + /* AdoptNode() is not used because internal state is not reset (e.g. the past names map of a HTMLFormElement), this is safe in theory but we would rather not risk another attack vector. The state that is cloned by importNode() is explicitly defined by the specs. */ returnNode = importNode.call(originalDocument, returnNode, true); - } - return returnNode; - } - let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; - /* Serialize doctype if allowed */ if ( - WHOLE_DOCUMENT && - ALLOWED_TAGS["!doctype"] && - body.ownerDocument && - body.ownerDocument.doctype && - body.ownerDocument.doctype.name && - regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name) - ) { - serializedHTML = "\n" + serializedHTML; - } - /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) { - arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], (expr) => { - serializedHTML = stringReplace(serializedHTML, expr, " "); - }); - } - return trustedTypesPolicy && RETURN_TRUSTED_TYPE - ? trustedTypesPolicy.createHTML(serializedHTML) - : serializedHTML; - }; - /** - * Public method to set the configuration once - * setConfig - * - * @param {Object} cfg configuration object - */ DOMPurify.setConfig = function () { - let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - _parseConfig(cfg); - SET_CONFIG = true; - }; - /** - * Public method to remove the configuration - * clearConfig - * - */ DOMPurify.clearConfig = function () { - CONFIG = null; - SET_CONFIG = false; - }; - /** - * Public method to check if an attribute value is valid. - * Uses last set config, if any. Otherwise, uses config defaults. - * isValidAttribute - * - * @param {String} tag Tag name of containing element. - * @param {String} attr Attribute name. - * @param {String} value Attribute value. - * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false. - */ DOMPurify.isValidAttribute = function (tag, attr, value) { - /* Initialize shared config vars if necessary. */ if (!CONFIG) { - _parseConfig({}); - } - const lcTag = transformCaseFunc(tag); - const lcName = transformCaseFunc(attr); - return _isValidAttribute(lcTag, lcName, value); - }; - /** - * AddHook - * Public method to add DOMPurify hooks - * - * @param {String} entryPoint entry point for the hook to add - * @param {Function} hookFunction function to execute - */ DOMPurify.addHook = function (entryPoint, hookFunction) { - if (typeof hookFunction !== "function") { - return; - } - hooks[entryPoint] = hooks[entryPoint] || []; - arrayPush(hooks[entryPoint], hookFunction); - }; - /** - * RemoveHook - * Public method to remove a DOMPurify hook at a given entryPoint - * (pops it from the stack of hooks if more are present) - * - * @param {String} entryPoint entry point for the hook to remove - * @return {Function} removed(popped) hook - */ DOMPurify.removeHook = function (entryPoint) { - if (hooks[entryPoint]) { - return arrayPop(hooks[entryPoint]); - } - }; - /** - * RemoveHooks - * Public method to remove all DOMPurify hooks at a given entryPoint - * - * @param {String} entryPoint entry point for the hooks to remove - */ DOMPurify.removeHooks = function (entryPoint) { - if (hooks[entryPoint]) { - hooks[entryPoint] = []; - } - }; - /** - * RemoveAllHooks - * Public method to remove all DOMPurify hooks - */ DOMPurify.removeAllHooks = function () { - hooks = {}; - }; - return DOMPurify; - } - var purify = createDOMPurify(); - return purify; - }); - })(purify); - var purifyExports = purify.exports; + } + return returnNode; + } + let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML; + /* Serialize doctype if allowed */ if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) { + serializedHTML = '\n' + serializedHTML; + } + /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) { + arrayForEach([ + MUSTACHE_EXPR, + ERB_EXPR, + TMPLIT_EXPR + ], (expr)=>{ + serializedHTML = stringReplace(serializedHTML, expr, ' '); + }); + } + return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML; + }; + /** + * Public method to set the configuration once + * setConfig + * + * @param {Object} cfg configuration object + */ DOMPurify.setConfig = function() { + let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + _parseConfig(cfg); + SET_CONFIG = true; + }; + /** + * Public method to remove the configuration + * clearConfig + * + */ DOMPurify.clearConfig = function() { + CONFIG = null; + SET_CONFIG = false; + }; + /** + * Public method to check if an attribute value is valid. + * Uses last set config, if any. Otherwise, uses config defaults. + * isValidAttribute + * + * @param {String} tag Tag name of containing element. + * @param {String} attr Attribute name. + * @param {String} value Attribute value. + * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false. + */ DOMPurify.isValidAttribute = function(tag, attr, value) { + /* Initialize shared config vars if necessary. */ if (!CONFIG) { + _parseConfig({}); + } + const lcTag = transformCaseFunc(tag); + const lcName = transformCaseFunc(attr); + return _isValidAttribute(lcTag, lcName, value); + }; + /** + * AddHook + * Public method to add DOMPurify hooks + * + * @param {String} entryPoint entry point for the hook to add + * @param {Function} hookFunction function to execute + */ DOMPurify.addHook = function(entryPoint, hookFunction) { + if (typeof hookFunction !== 'function') { + return; + } + hooks[entryPoint] = hooks[entryPoint] || []; + arrayPush(hooks[entryPoint], hookFunction); + }; + /** + * RemoveHook + * Public method to remove a DOMPurify hook at a given entryPoint + * (pops it from the stack of hooks if more are present) + * + * @param {String} entryPoint entry point for the hook to remove + * @return {Function} removed(popped) hook + */ DOMPurify.removeHook = function(entryPoint) { + if (hooks[entryPoint]) { + return arrayPop(hooks[entryPoint]); + } + }; + /** + * RemoveHooks + * Public method to remove all DOMPurify hooks at a given entryPoint + * + * @param {String} entryPoint entry point for the hooks to remove + */ DOMPurify.removeHooks = function(entryPoint) { + if (hooks[entryPoint]) { + hooks[entryPoint] = []; + } + }; + /** + * RemoveAllHooks + * Public method to remove all DOMPurify hooks + */ DOMPurify.removeAllHooks = function() { + hooks = {}; + }; + return DOMPurify; + } + var purify = createDOMPurify(); + return purify; + }); - /** - * This class represents all the constants needed in a MathType integration among different classes. - * If a constant should be used across different classes should be defined using attribute - * accessors. - */ class Constants { - /** - * Safe XML entities. - * @type {Object} - */ static get safeXmlCharactersEntities() { - return { - tagOpener: "«", - tagCloser: "»", - doubleQuote: "¨", - realDoubleQuote: """, - }; - } - /** - * Blackboard invalid safe characters. - * @type {Object} - */ static get safeBadBlackboardCharacters() { - return { - ltElement: "«mo»<«/mo»", - gtElement: "«mo»>«/mo»", - ampElement: "«mo»&«/mo»", - }; - } - /** - * Blackboard valid safe characters. - * @type{Object} - */ static get safeGoodBlackboardCharacters() { - return { - ltElement: "«mo»§lt;«/mo»", - gtElement: "«mo»§gt;«/mo»", - ampElement: "«mo»§amp;«/mo»", - }; - } - /** - * Standard XML special characters. - * @type {Object} - */ static get xmlCharacters() { - return { - id: "xmlCharacters", - tagOpener: "<", - tagCloser: ">", - doubleQuote: '"', - ampersand: "&", - quote: "'", - }; - } - /** - * Safe XML special characters. This characters are used instead the standard - * the standard to parse the MathML if safeXML save mode is enable. Each XML - * special character have a UTF-8 representation. - * @type {Object} - */ static get safeXmlCharacters() { - return { - id: "safeXmlCharacters", - tagOpener: "«", - tagCloser: "»", - doubleQuote: "¨", - ampersand: "§", - quote: "`", - realDoubleQuote: "¨", - }; - } - } + })(purify); + var purifyExports = purify.exports; - /** - * @classdesc - * This class represents a class to manage MathML objects. - */ class MathML { - /** - * Checks if the mathml at position i is inside an HTML attribute or not. - * @param {string} content - a string containing MathML code. - * @param {number} i - search index. - * @return {boolean} true if is inside an HTML attribute. false otherwise. - */ static isMathmlInAttribute(content, i) { - // Regex = - // '^[\'"][\\s]*=[\\s]*[\\w-]+([\\s]*("[^"]*"|\'[^\']*\')[\\s]* - // =[\\s]*[\\w-]+[\\s]*)*[\\s]+gmi<'; - const mathAtt = "['\"][\\s]*=[\\s]*[\\w-]+"; // "=att OR '=att - const attContent = "\"[^\"]*\"|'[^']*'"; // "blabla" OR 'blabla' - const att = `[\\s]*(${attContent})[\\s]*=[\\s]*[\\w-]+[\\s]*`; // "blabla"=att OR 'blabla'=att - const atts = `('${att}')*`; // "blabla"=att1 "blabla"=att2 - const regex = `^${mathAtt}${atts}[\\s]+gmi<`; // "=att "blabla"=att1 "blabla"=att2 gmi< . - const expression = new RegExp(regex); - const actualContent = content.substring(0, i); - const reversed = actualContent.split("").reverse().join(""); - const exists = expression.test(reversed); - return exists; - } - /** - * Decodes an encoded MathML with standard XML tags. - * We use these entities because IE doesn't support html entities - * on its attributes sometimes. Yes, sometimes. - * @param {string} input - string to be decoded. - * @return {string} decoded string. - */ static safeXmlDecode(input) { - let { tagOpener } = Constants.safeXmlCharactersEntities; - let { tagCloser } = Constants.safeXmlCharactersEntities; - let { doubleQuote } = Constants.safeXmlCharactersEntities; - let { realDoubleQuote } = Constants.safeXmlCharactersEntities; - // Decoding entities. - input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); - input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); - input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); - // Added to fix problem due to import from 1.9.x. - input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote); - // Blackboard. - const { ltElement } = Constants.safeBadBlackboardCharacters; - const { gtElement } = Constants.safeBadBlackboardCharacters; - const { ampElement } = Constants.safeBadBlackboardCharacters; - if ("_wrs_blackboard" in window && window._wrs_blackboard) { - input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement); - input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement); - input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement); - } - ({ tagOpener } = Constants.safeXmlCharacters); - ({ tagCloser } = Constants.safeXmlCharacters); - ({ doubleQuote } = Constants.safeXmlCharacters); - ({ realDoubleQuote } = Constants.safeXmlCharacters); - const { ampersand } = Constants.safeXmlCharacters; - const { quote } = Constants.safeXmlCharacters; - // Decoding characters. - input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener); - input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser); - input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote); - input = input.split(ampersand).join(Constants.xmlCharacters.ampersand); - input = input.split(quote).join(Constants.xmlCharacters.quote); - // We are replacing $ by & when its part of an entity for retro-compatibility. - // Now, the standard is replace § by &. - let returnValue = ""; - let currentEntity = null; - for (let i = 0; i < input.length; i += 1) { - const character = input.charAt(i); - if (currentEntity == null) { - if (character === "$") { - currentEntity = ""; - } else { - returnValue += character; - } - } else if (character === ";") { - returnValue += `&${currentEntity}`; - currentEntity = null; - } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) { - // Character is part of an entity. - currentEntity += character; - } else { - returnValue += `$${currentEntity}`; // Is not an entity. - currentEntity = null; - i -= 1; // Parse again the current character. - } - } - return returnValue; - } - /** - * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags. - * We use these entities because IE doesn't support html entities on its attributes sometimes. - * @param {string} input - input string to be encoded - * @returns {string} encoded string. - */ static safeXmlEncode(input) { - const { tagOpener } = Constants.xmlCharacters; - const { tagCloser } = Constants.xmlCharacters; - const { doubleQuote } = Constants.xmlCharacters; - const { ampersand } = Constants.xmlCharacters; - const { quote } = Constants.xmlCharacters; - input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); - input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); - input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); - input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand); - input = input.split(quote).join(Constants.safeXmlCharacters.quote); - return input; - } - /** - * Converts special symbols (> 128) to entities and replaces all textual - * entities by its number entities. - * @param {string} mathml - MathML string containing - or not - special symbols - * @returns {string} MathML with all textual entities replaced. - */ static mathMLEntities(mathml) { - let toReturn = ""; - for (let i = 0; i < mathml.length; i += 1) { - const character = mathml.charAt(i); - // Parsing > 128 characters. - if (mathml.codePointAt(i) > 128) { - toReturn += `&#${mathml.codePointAt(i)};`; - // For UTF-32 characters we need to move the index one position. - if (mathml.codePointAt(i) > 0xffff) { - i += 1; - } - } else if (character === "&") { - const end = mathml.indexOf(";", i + 1); - if (end >= 0) { - const container = document.createElement("span"); - container.innerHTML = mathml.substring(i, end + 1); - toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`; - i = end; - } else { - toReturn += character; - } - } else { - toReturn += character; - } - } - return toReturn; - } - /** - * Add a custom editor name with the prefix wrs_ to a MathML class attribute. - * @param {string} mathml - a MathML string created with a custom editor, like chemistry. - * @param {string} customEditor - custom editor name. - * @returns {string} MathML string with his class containing the editor toolbar string. - */ static addCustomEditorClassAttribute(mathml, customEditor) { - let toReturn = ""; - const start = mathml.indexOf(""); - if (mathml.indexOf("class") === -1) { - // Adding custom editor type. - toReturn = `${mathml.substr(start, end)} class="wrs_${customEditor}">`; - toReturn += mathml.substr(end + 1, mathml.length); - return toReturn; - } - } - return mathml; - } - /** - * Remove a custom editor name from the MathML class attribute. - * @param {string} mathml - a MathML string. - * @param {string} customEditor - custom editor name. - * @returns {string} The input MathML without customEditor name in his class. - */ static removeCustomEditorClassAttribute(mathml, customEditor) { - // Discard MathML without the specified class. - if (mathml.indexOf("class") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) { - return mathml; - } - // Trivial case: class attribute value equal to editor name. Then - // class attribute is removed. - // First try to remove it with a space before if there is one - // Otherwise without the space - if (mathml.indexOf(` class="wrs_${customEditor}"`) !== -1) { - return mathml.replace(` class="wrs_${customEditor}"`, ""); - } else if (mathml.indexOf(`class="wrs_${customEditor}"`) !== -1) { - return mathml.replace(`class="wrs_${customEditor}"`, ""); - } - // Non Trivial case: class attribute contains editor name. - return mathml.replace(`wrs_${customEditor}`, ""); - } - /** - * Adds annotation tag in MathML element. - * @param {String} mathml - valid MathML. - * @param {String} content - value to put inside annotation tag. - * @param {String} annotationEncoding - annotation encoding. - * @returns {String} - 'mathml' with an annotation that contains - * 'content' and encoding 'encoding'. - */ static addAnnotation(mathml, content, annotationEncoding) { - // If contains annotation, also contains semantics tag. - const containsAnnotation = mathml.indexOf(""); - mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`; - } else if (MathML.isEmpty(mathml)) { - const endIndexInline = mathml.indexOf("/>"); - const endIndexNonInline = mathml.indexOf(">"); - const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline; - mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`; - } else { - const beginMathMLContent = mathml.indexOf(">") + 1; - const endMathmlContent = mathml.lastIndexOf(""); - const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent); - mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len - } - return mathmlWithAnnotation; - } - /** - * Removes specific annotation tag in MathML element. - * In case of remove the unique annotation, also is removed semantics tag. - * @param {String} mathml - valid MathML. - * @param {String} annotationEncoding - annotation encoding to remove. - * @returns {String} - 'mathml' without the annotation encoding specified. - */ static removeAnnotation(mathml, annotationEncoding) { - let mathmlWithoutAnnotation = mathml; - const openAnnotationTag = ``; - const closeAnnotationTag = ""; - const startAnnotationIndex = mathml.indexOf(openAnnotationTag); - if (startAnnotationIndex !== -1) { - let differentAnnotationFound = false; - let differentAnnotationIndex = mathml.indexOf("\s*?()?/gm; - // If `mrow` is found right after the `annotation` ending tag, it's removed as well - // alongside `semantics` closing tag and the whole `annotation` tag and its contents. - const semanticsEndingTagRegex = /(<\/mrow>)?\s*/gm; - return mathml.replace(semanticsStartingTagRegex, "").replace(semanticsEndingTagRegex, ""); - } - /** - * Transforms all xml mathml occurrences that contain semantics to the same - * xml mathml occurrences without semantics. - * @param {string} text - string that can contain xml mathml occurrences. - * @param {Constants} [characters] - Constant object containing xmlCharacters - * or safeXmlCharacters relation. - * xmlCharacters by default. - * @returns {string} - 'text' with all xml mathml occurrences without annotation tag. - */ static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) { - const mathTagStart = `${characters.tagOpener}math`; - const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; - const mathTagEndline = `/${characters.tagCloser}`; - const { tagCloser } = characters; - const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`; - const annotationTagStart = `${characters.tagOpener}annotation encoding=`; - let output = ""; - let start = text.indexOf(mathTagStart); - let end = 0; - while (start !== -1) { - output += text.substring(end, start); - // MathML can be written as '' or ''. - const mathTagEndIndex = text.indexOf(mathTagEnd, start); - const mathTagEndlineIndex = text.indexOf(mathTagEndline, start); - const firstTagCloser = text.indexOf(tagCloser, start); - if (mathTagEndIndex !== -1) { - end = mathTagEndIndex; - } else if (mathTagEndlineIndex === firstTagCloser - 1) { - end = mathTagEndlineIndex; - } - const semanticsIndex = text.indexOf(semanticsTagStart, start); - if (semanticsIndex !== -1) { - const mmlTagStart = text.substring(start, semanticsIndex); - const annotationIndex = text.indexOf(annotationTagStart, start); - if (annotationIndex !== -1) { - const startIndex = semanticsIndex + semanticsTagStart.length; - const mmlContent = text.substring(startIndex, annotationIndex); - output += mmlTagStart + mmlContent + mathTagEnd; - start = text.indexOf(mathTagStart, start + mathTagStart.length); - end += mathTagEnd.length; - } else { - end = start; - start = text.indexOf(mathTagStart, start + mathTagStart.length); - } - } else { - end = start; - start = text.indexOf(mathTagStart, start + mathTagStart.length); - } - } - output += text.substring(end, text.length); - return output; - } - /** - * Returns true if a MathML contains a certain class. - * @param {string} mathML - input MathML. - * @param {string} className - className. - * @returns {boolean} true if the input MathML contains the input class. - * false otherwise. - * @static - */ static containClass(mathML, className) { - const classIndex = mathML.indexOf("class"); - if (classIndex === -1) { - return false; - } - const classTagEndIndex = mathML.indexOf(">", classIndex); - const classTag = mathML.substring(classIndex, classTagEndIndex); - if (classTag.indexOf(className) !== -1) { - return true; - } - return false; - } - /** - * Returns true if mathml is empty. Otherwise, false. - * @param {string} mathml - valid MathML with standard XML tags. - * @returns {boolean} - true if mathml is empty. Otherwise, false. - */ static isEmpty(mathml) { - // MathML can have the shape or ''. - const closeTag = ">"; - const closeTagInline = "/>"; - const firstCloseTagIndex = mathml.indexOf(closeTag); - const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline); - let empty = false; - // MathML is always empty in the second shape. - if (firstCloseTagInlineIndex !== -1) { - if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) { - empty = true; - } - } - // MathML is always empty in the first shape when there aren't elements - // between math tags. - if (!empty) { - const mathTagEndRegex = new RegExp(""); - const mathTagEndArray = mathTagEndRegex.exec(mathml); - if (mathTagEndArray) { - empty = firstCloseTagIndex + 1 === mathTagEndArray.index; - } - } - return empty; - } - /** - * Encodes html entities inside properties. - * @param {String} mathml - valid MathML with standard XML tags. - * @returns {String} - 'mathml' with property entities encoded. - */ static encodeProperties(mathml) { - // Search all the properties. - const regex = /\w+=".*?"/g; - // Encode html entities. - const replacer = (match) => { - // It has the shape: - // . - const quoteIndex = match.indexOf('"'); - const propertyValue = match.substring(quoteIndex + 1, match.length - 1); - const propertyValueEncoded = Util.htmlEntities(propertyValue); - const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}"`; - return matchEncoded; - }; - const mathmlEncoded = mathml.replace(regex, replacer); - return mathmlEncoded; - } - } + /** + * This class represents all the constants needed in a MathType integration among different classes. + * If a constant should be used across different classes should be defined using attribute + * accessors. + */ class Constants { + /** + * Safe XML entities. + * @type {Object} + */ static get safeXmlCharactersEntities() { + return { + tagOpener: "«", + tagCloser: "»", + doubleQuote: "¨", + realDoubleQuote: """ + }; + } + /** + * Blackboard invalid safe characters. + * @type {Object} + */ static get safeBadBlackboardCharacters() { + return { + ltElement: "«mo»<«/mo»", + gtElement: "«mo»>«/mo»", + ampElement: "«mo»&«/mo»" + }; + } + /** + * Blackboard valid safe characters. + * @type{Object} + */ static get safeGoodBlackboardCharacters() { + return { + ltElement: "«mo»§lt;«/mo»", + gtElement: "«mo»§gt;«/mo»", + ampElement: "«mo»§amp;«/mo»" + }; + } + /** + * Standard XML special characters. + * @type {Object} + */ static get xmlCharacters() { + return { + id: "xmlCharacters", + tagOpener: "<", + tagCloser: ">", + doubleQuote: '"', + ampersand: "&", + quote: "'" + }; + } + /** + * Safe XML special characters. This characters are used instead the standard + * the standard to parse the MathML if safeXML save mode is enable. Each XML + * special character have a UTF-8 representation. + * @type {Object} + */ static get safeXmlCharacters() { + return { + id: "safeXmlCharacters", + tagOpener: "«", + tagCloser: "»", + doubleQuote: "¨", + ampersand: "§", + quote: "`", + realDoubleQuote: "¨" + }; + } + } - /** - * This class represents the configuration class. - * Usually used to retrieve configuration properties generated in the backend into the frontend. - */ class Configuration { - /** - * Adds a properties object to {@link Configuration.properties}. - * @param {Object} properties - properties to append to current properties. - */ static addConfiguration(properties) { - Object.assign(Configuration.properties, properties); - } - /** - * Static property. - * The configuration properties object. - * @private - * @type {Object} - */ static get properties() { - return Configuration._properties; - } - /** - * Static property setter. - * Set configuration properties. - * @param {Object} value - The property value. - * @ignore - */ static set properties(value) { - Configuration._properties = value; - } - /** - * Returns the value of a property key. - * @param {String} key - Property key - * @returns {String} Property value - */ static get(key) { - if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) { - // Backwards compatibility. - if (Object.prototype.hasOwnProperty.call(Configuration.properties, "_wrs_conf_")) { - return Configuration.properties[`_wrs_conf_${key}`]; - } - return false; - } - return Configuration.properties[key]; - } - /** - * Adds a new property to Configuration class. - * @param {String} key - Property key. - * @param {Object} value - Property value. - */ static set(key, value) { - Configuration.properties[key] = value; - } - /** - * Updates a property object value with new values. - * @param {String} key - The property key to be updated. - * @param {Object} propertyValue - Object containing the new values. - */ static update(key, propertyValue) { - if (!Configuration.get(key)) { - Configuration.set(key, propertyValue); - } else { - const updateProperty = Object.assign(Configuration.get(key), propertyValue); - Configuration.set(key, updateProperty); - } - } - } - /** - * Static properties object. Stores all configuration properties. - * Needed to attribute accessors. - * @private - * @type {Object} - */ Configuration._properties = {}; + /** + * @classdesc + * This class represents a class to manage MathML objects. + */ class MathML { + /** + * Checks if the mathml at position i is inside an HTML attribute or not. + * @param {string} content - a string containing MathML code. + * @param {number} i - search index. + * @return {boolean} true if is inside an HTML attribute. false otherwise. + */ static isMathmlInAttribute(content, i) { + // Regex = + // '^[\'"][\\s]*=[\\s]*[\\w-]+([\\s]*("[^"]*"|\'[^\']*\')[\\s]* + // =[\\s]*[\\w-]+[\\s]*)*[\\s]+gmi<'; + const mathAtt = "['\"][\\s]*=[\\s]*[\\w-]+"; // "=att OR '=att + const attContent = "\"[^\"]*\"|'[^']*'"; // "blabla" OR 'blabla' + const att = `[\\s]*(${attContent})[\\s]*=[\\s]*[\\w-]+[\\s]*`; // "blabla"=att OR 'blabla'=att + const atts = `('${att}')*`; // "blabla"=att1 "blabla"=att2 + const regex = `^${mathAtt}${atts}[\\s]+gmi<`; // "=att "blabla"=att1 "blabla"=att2 gmi< . + const expression = new RegExp(regex); + const actualContent = content.substring(0, i); + const reversed = actualContent.split("").reverse().join(""); + const exists = expression.test(reversed); + return exists; + } + /** + * Decodes an encoded MathML with standard XML tags. + * We use these entities because IE doesn't support html entities + * on its attributes sometimes. Yes, sometimes. + * @param {string} input - string to be decoded. + * @return {string} decoded string. + */ static safeXmlDecode(input) { + let { tagOpener } = Constants.safeXmlCharactersEntities; + let { tagCloser } = Constants.safeXmlCharactersEntities; + let { doubleQuote } = Constants.safeXmlCharactersEntities; + let { realDoubleQuote } = Constants.safeXmlCharactersEntities; + // Decoding entities. + input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); + input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); + input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); + // Added to fix problem due to import from 1.9.x. + input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote); + // Blackboard. + const { ltElement } = Constants.safeBadBlackboardCharacters; + const { gtElement } = Constants.safeBadBlackboardCharacters; + const { ampElement } = Constants.safeBadBlackboardCharacters; + if ("_wrs_blackboard" in window && window._wrs_blackboard) { + input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement); + input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement); + input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement); + } + ({ tagOpener } = Constants.safeXmlCharacters); + ({ tagCloser } = Constants.safeXmlCharacters); + ({ doubleQuote } = Constants.safeXmlCharacters); + ({ realDoubleQuote } = Constants.safeXmlCharacters); + const { ampersand } = Constants.safeXmlCharacters; + const { quote } = Constants.safeXmlCharacters; + // Decoding characters. + input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener); + input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser); + input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote); + input = input.split(ampersand).join(Constants.xmlCharacters.ampersand); + input = input.split(quote).join(Constants.xmlCharacters.quote); + // We are replacing $ by & when its part of an entity for retro-compatibility. + // Now, the standard is replace § by &. + let returnValue = ""; + let currentEntity = null; + for(let i = 0; i < input.length; i += 1){ + const character = input.charAt(i); + if (currentEntity == null) { + if (character === "$") { + currentEntity = ""; + } else { + returnValue += character; + } + } else if (character === ";") { + returnValue += `&${currentEntity}`; + currentEntity = null; + } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) { + // Character is part of an entity. + currentEntity += character; + } else { + returnValue += `$${currentEntity}`; // Is not an entity. + currentEntity = null; + i -= 1; // Parse again the current character. + } + } + return returnValue; + } + /** + * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags. + * We use these entities because IE doesn't support html entities on its attributes sometimes. + * @param {string} input - input string to be encoded + * @returns {string} encoded string. + */ static safeXmlEncode(input) { + const { tagOpener } = Constants.xmlCharacters; + const { tagCloser } = Constants.xmlCharacters; + const { doubleQuote } = Constants.xmlCharacters; + const { ampersand } = Constants.xmlCharacters; + const { quote } = Constants.xmlCharacters; + input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener); + input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser); + input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote); + input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand); + input = input.split(quote).join(Constants.safeXmlCharacters.quote); + return input; + } + /** + * Converts special symbols (> 128) to entities and replaces all textual + * entities by its number entities. + * @param {string} mathml - MathML string containing - or not - special symbols + * @returns {string} MathML with all textual entities replaced. + */ static mathMLEntities(mathml) { + let toReturn = ""; + for(let i = 0; i < mathml.length; i += 1){ + const character = mathml.charAt(i); + // Parsing > 128 characters. + if (mathml.codePointAt(i) > 128) { + toReturn += `&#${mathml.codePointAt(i)};`; + // For UTF-32 characters we need to move the index one position. + if (mathml.codePointAt(i) > 0xffff) { + i += 1; + } + } else if (character === "&") { + const end = mathml.indexOf(";", i + 1); + if (end >= 0) { + const container = document.createElement("span"); + container.innerHTML = mathml.substring(i, end + 1); + toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`; + i = end; + } else { + toReturn += character; + } + } else { + toReturn += character; + } + } + return toReturn; + } + /** + * Add a custom editor name with the prefix wrs_ to a MathML class attribute. + * @param {string} mathml - a MathML string created with a custom editor, like chemistry. + * @param {string} customEditor - custom editor name. + * @returns {string} MathML string with his class containing the editor toolbar string. + */ static addCustomEditorClassAttribute(mathml, customEditor) { + let toReturn = ""; + const start = mathml.indexOf(""); + if (mathml.indexOf("class") === -1) { + // Adding custom editor type. + toReturn = `${mathml.substr(start, end)} class="wrs_${customEditor}">`; + toReturn += mathml.substr(end + 1, mathml.length); + return toReturn; + } + } + return mathml; + } + /** + * Remove a custom editor name from the MathML class attribute. + * @param {string} mathml - a MathML string. + * @param {string} customEditor - custom editor name. + * @returns {string} The input MathML without customEditor name in his class. + */ static removeCustomEditorClassAttribute(mathml, customEditor) { + // Discard MathML without the specified class. + if (mathml.indexOf("class") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) { + return mathml; + } + // Trivial case: class attribute value equal to editor name. Then + // class attribute is removed. + // First try to remove it with a space before if there is one + // Otherwise without the space + if (mathml.indexOf(` class="wrs_${customEditor}"`) !== -1) { + return mathml.replace(` class="wrs_${customEditor}"`, ""); + } else if (mathml.indexOf(`class="wrs_${customEditor}"`) !== -1) { + return mathml.replace(`class="wrs_${customEditor}"`, ""); + } + // Non Trivial case: class attribute contains editor name. + return mathml.replace(`wrs_${customEditor}`, ""); + } + /** + * Adds annotation tag in MathML element. + * @param {String} mathml - valid MathML. + * @param {String} content - value to put inside annotation tag. + * @param {String} annotationEncoding - annotation encoding. + * @returns {String} - 'mathml' with an annotation that contains + * 'content' and encoding 'encoding'. + */ static addAnnotation(mathml, content, annotationEncoding) { + // If contains annotation, also contains semantics tag. + const containsAnnotation = mathml.indexOf(""); + mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`; + } else if (MathML.isEmpty(mathml)) { + const endIndexInline = mathml.indexOf("/>"); + const endIndexNonInline = mathml.indexOf(">"); + const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline; + mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`; + } else { + const beginMathMLContent = mathml.indexOf(">") + 1; + const endMathmlContent = mathml.lastIndexOf(""); + const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent); + mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len + } + return mathmlWithAnnotation; + } + /** + * Removes specific annotation tag in MathML element. + * In case of remove the unique annotation, also is removed semantics tag. + * @param {String} mathml - valid MathML. + * @param {String} annotationEncoding - annotation encoding to remove. + * @returns {String} - 'mathml' without the annotation encoding specified. + */ static removeAnnotation(mathml, annotationEncoding) { + let mathmlWithoutAnnotation = mathml; + const openAnnotationTag = ``; + const closeAnnotationTag = ""; + const startAnnotationIndex = mathml.indexOf(openAnnotationTag); + if (startAnnotationIndex !== -1) { + let differentAnnotationFound = false; + let differentAnnotationIndex = mathml.indexOf("\s*?()?/gm; + // If `mrow` is found right after the `annotation` ending tag, it's removed as well + // alongside `semantics` closing tag and the whole `annotation` tag and its contents. + const semanticsEndingTagRegex = /(<\/mrow>)?\s*/gm; + return mathml.replace(semanticsStartingTagRegex, "").replace(semanticsEndingTagRegex, ""); + } + /** + * Transforms all xml mathml occurrences that contain semantics to the same + * xml mathml occurrences without semantics. + * @param {string} text - string that can contain xml mathml occurrences. + * @param {Constants} [characters] - Constant object containing xmlCharacters + * or safeXmlCharacters relation. + * xmlCharacters by default. + * @returns {string} - 'text' with all xml mathml occurrences without annotation tag. + */ static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) { + const mathTagStart = `${characters.tagOpener}math`; + const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; + const mathTagEndline = `/${characters.tagCloser}`; + const { tagCloser } = characters; + const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`; + const annotationTagStart = `${characters.tagOpener}annotation encoding=`; + let output = ""; + let start = text.indexOf(mathTagStart); + let end = 0; + while(start !== -1){ + output += text.substring(end, start); + // MathML can be written as '' or ''. + const mathTagEndIndex = text.indexOf(mathTagEnd, start); + const mathTagEndlineIndex = text.indexOf(mathTagEndline, start); + const firstTagCloser = text.indexOf(tagCloser, start); + if (mathTagEndIndex !== -1) { + end = mathTagEndIndex; + } else if (mathTagEndlineIndex === firstTagCloser - 1) { + end = mathTagEndlineIndex; + } + const semanticsIndex = text.indexOf(semanticsTagStart, start); + if (semanticsIndex !== -1) { + const mmlTagStart = text.substring(start, semanticsIndex); + const annotationIndex = text.indexOf(annotationTagStart, start); + if (annotationIndex !== -1) { + const startIndex = semanticsIndex + semanticsTagStart.length; + const mmlContent = text.substring(startIndex, annotationIndex); + output += mmlTagStart + mmlContent + mathTagEnd; + start = text.indexOf(mathTagStart, start + mathTagStart.length); + end += mathTagEnd.length; + } else { + end = start; + start = text.indexOf(mathTagStart, start + mathTagStart.length); + } + } else { + end = start; + start = text.indexOf(mathTagStart, start + mathTagStart.length); + } + } + output += text.substring(end, text.length); + return output; + } + /** + * Returns true if a MathML contains a certain class. + * @param {string} mathML - input MathML. + * @param {string} className - className. + * @returns {boolean} true if the input MathML contains the input class. + * false otherwise. + * @static + */ static containClass(mathML, className) { + const classIndex = mathML.indexOf("class"); + if (classIndex === -1) { + return false; + } + const classTagEndIndex = mathML.indexOf(">", classIndex); + const classTag = mathML.substring(classIndex, classTagEndIndex); + if (classTag.indexOf(className) !== -1) { + return true; + } + return false; + } + /** + * Returns true if mathml is empty. Otherwise, false. + * @param {string} mathml - valid MathML with standard XML tags. + * @returns {boolean} - true if mathml is empty. Otherwise, false. + */ static isEmpty(mathml) { + // MathML can have the shape or ''. + const closeTag = ">"; + const closeTagInline = "/>"; + const firstCloseTagIndex = mathml.indexOf(closeTag); + const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline); + let empty = false; + // MathML is always empty in the second shape. + if (firstCloseTagInlineIndex !== -1) { + if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) { + empty = true; + } + } + // MathML is always empty in the first shape when there aren't elements + // between math tags. + if (!empty) { + const mathTagEndRegex = new RegExp(""); + const mathTagEndArray = mathTagEndRegex.exec(mathml); + if (mathTagEndArray) { + empty = firstCloseTagIndex + 1 === mathTagEndArray.index; + } + } + return empty; + } + /** + * Encodes html entities inside properties. + * @param {String} mathml - valid MathML with standard XML tags. + * @returns {String} - 'mathml' with property entities encoded. + */ static encodeProperties(mathml) { + // Search all the properties. + const regex = /\w+=".*?"/g; + // Encode html entities. + const replacer = (match)=>{ + // It has the shape: + // . + const quoteIndex = match.indexOf('"'); + const propertyValue = match.substring(quoteIndex + 1, match.length - 1); + const propertyValueEncoded = Util.htmlEntities(propertyValue); + const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}"`; + return matchEncoded; + }; + const mathmlEncoded = mathml.replace(regex, replacer); + return mathmlEncoded; + } + } - class TextCache { - /** - * @classdesc - * This class represent a client-side text cache class. Contains pairs of - * strings (key/value) which can be retrieved in any moment. Usually used - * to store AJAX responses for text services like mathml2latex - * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class). - * @constructs - */ constructor() { - /** - * Cache array property storing the cache entries. - * @type {Array.} - */ this.cache = []; - } - /** - * This method populates a key/value pair into the {@link this.cache} property. - * @param {String} key - Cache key, usually the service string parameter. - * @param {String} value - Cache value, usually the service response. - */ populate(key, value) { - this.cache[key] = value; - } - /** - * Returns the cache value associated to certain cache key. - * @param {String} key - Cache key, usually the service string parameter. - * @return {String} value - Cache value, if exists. False otherwise. - */ get(key) { - if (Object.prototype.hasOwnProperty.call(this.cache, key)) { - return this.cache[key]; - } - return false; - } - } + /** + * This class represents the configuration class. + * Usually used to retrieve configuration properties generated in the backend into the frontend. + */ class Configuration { + /** + * Adds a properties object to {@link Configuration.properties}. + * @param {Object} properties - properties to append to current properties. + */ static addConfiguration(properties) { + Object.assign(Configuration.properties, properties); + } + /** + * Static property. + * The configuration properties object. + * @private + * @type {Object} + */ static get properties() { + return Configuration._properties; + } + /** + * Static property setter. + * Set configuration properties. + * @param {Object} value - The property value. + * @ignore + */ static set properties(value) { + Configuration._properties = value; + } + /** + * Returns the value of a property key. + * @param {String} key - Property key + * @returns {String} Property value + */ static get(key) { + if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) { + // Backwards compatibility. + if (Object.prototype.hasOwnProperty.call(Configuration.properties, "_wrs_conf_")) { + return Configuration.properties[`_wrs_conf_${key}`]; + } + return false; + } + return Configuration.properties[key]; + } + /** + * Adds a new property to Configuration class. + * @param {String} key - Property key. + * @param {Object} value - Property value. + */ static set(key, value) { + Configuration.properties[key] = value; + } + /** + * Updates a property object value with new values. + * @param {String} key - The property key to be updated. + * @param {Object} propertyValue - Object containing the new values. + */ static update(key, propertyValue) { + if (!Configuration.get(key)) { + Configuration.set(key, propertyValue); + } else { + const updateProperty = Object.assign(Configuration.get(key), propertyValue); + Configuration.set(key, updateProperty); + } + } + } + /** + * Static properties object. Stores all configuration properties. + * Needed to attribute accessors. + * @private + * @type {Object} + */ Configuration._properties = {}; - /** - * This object represents a custom listener. - * @typedef {Object} Listener - * @property {String} Listener.eventName - The listener name. - * @property {Function} Listener.callback - The listener callback function. - */ class Listeners { - /** - * @classdesc - * This class represents a custom listeners manager. - * @constructs - */ constructor() { - /** - * Array containing all custom listeners. - * @type {Object[]} - */ this.listeners = []; - } - /** - * Add a listener to Listener class. - * @param {Object} listener - A listener object. - */ add(listener) { - this.listeners.push(listener); - } - /** - * Fires MathType event listeners - * @param {String} eventName - event name - * @param {Event} event - event object. - * @return {boolean} false if event has been prevented. true otherwise. - */ fire(eventName, event) { - for (let i = 0; i < this.listeners.length && !event.cancelled; i += 1) { - if (this.listeners[i].eventName === eventName) { - // Calling listener. - this.listeners[i].callback(event); - } - } - return event.defaultPrevented; - } - /** - * Creates a new listener object. - * @param {string} eventName - Event name. - * @param {Object} callback - Callback function. - * @returns {object} the listener object. - */ static newListener(eventName, callback) { - const listener = {}; - listener.eventName = eventName; - listener.callback = callback; - return listener; - } - } + class TextCache { + /** + * @classdesc + * This class represent a client-side text cache class. Contains pairs of + * strings (key/value) which can be retrieved in any moment. Usually used + * to store AJAX responses for text services like mathml2latex + * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class). + * @constructs + */ constructor(){ + /** + * Cache array property storing the cache entries. + * @type {Array.} + */ this.cache = []; + } + /** + * This method populates a key/value pair into the {@link this.cache} property. + * @param {String} key - Cache key, usually the service string parameter. + * @param {String} value - Cache value, usually the service response. + */ populate(key, value) { + this.cache[key] = value; + } + /** + * Returns the cache value associated to certain cache key. + * @param {String} key - Cache key, usually the service string parameter. + * @return {String} value - Cache value, if exists. False otherwise. + */ get(key) { + if (Object.prototype.hasOwnProperty.call(this.cache, key)) { + return this.cache[key]; + } + return false; + } + } - /** - * @typedef {Object} ServiceProviderProperties - * @property {String} URI - Service URI. - * @property {String} server - Service server language. - */ /** - * @classdesc - * Class representing a serviceProvider. A serviceProvider is a class containing - * an arbitrary number of services with the correspondent path. - */ class ServiceProvider { - /** - * Returns Service Provider listeners. - * @type {Listeners} - */ static get listeners() { - return ServiceProvider._listeners; - } - /** - * Adds a {@link Listener} instance to {@link ServiceProvider} class. - * @param {Listener} listener - Instance of {@link Listener}. - */ static addListener(listener) { - ServiceProvider.listeners.add(listener); - } - /** - * Fires events in Service Provider. - * @param {String} eventName - Event name. - * @param {Event} event - Event object. - */ static fireEvent(eventName, event) { - ServiceProvider.listeners.fire(eventName, event); - } - /** - * Service parameters. - * @type {ServiceProviderProperties} - * - */ static get parameters() { - return ServiceProvider._parameters; - } - /** - * Service parameters. - * @private - * @type {ServiceProviderProperties} - */ static set parameters(parameters) { - ServiceProvider._parameters = parameters; - } - /** - * Static property. - * Return service provider paths. - * @private - * @type {String} - */ static get servicePaths() { - return ServiceProvider._servicePaths; - } - /** - * Static property setter. - * Set service paths. - * @param {String} value - The property value. - * @ignore - */ static set servicePaths(value) { - ServiceProvider._servicePaths = value; - } - /** - * Adds a new service to the ServiceProvider. - * @param {String} service - Service name. - * @param {String} path - Service path. - * @static - */ static setServicePath(service, path) { - ServiceProvider.servicePaths[service] = path; - } - /** - * Returns the service path for a certain service. - * @param {String} serviceName - Service name. - * @returns {String} The service path. - * @static - */ static getServicePath(serviceName) { - return ServiceProvider.servicePaths[serviceName]; - } - /** - * Static property. - * Service provider integration path. - * @type {String} - */ static get integrationPath() { - return ServiceProvider._integrationPath; - } - /** - * Static property setter. - * Set service provider integration path. - * @param {String} value - The property value. - * @ignore - */ static set integrationPath(value) { - ServiceProvider._integrationPath = value; - } - /** - * Returns the server URL in the form protocol://serverName:serverPort. - * @return {String} The client side server path. - */ static getServerURL() { - const url = window.location.href; - const arr = url.split("/"); - const result = `${arr[0]}//${arr[2]}`; - return result; - } - /** - * Inits {@link this} class. Uses {@link this.integrationPath} as - * base path to generate all backend services paths. - * @param {Object} parameters - Function parameters. - * @param {String} parameters.integrationPath - Service path. - */ static init(parameters) { - ServiceProvider.parameters = parameters; - // Services path (tech dependant). - let configurationURI = ServiceProvider.createServiceURI("configurationjs"); - let createImageURI = ServiceProvider.createServiceURI("createimage"); - let showImageURI = ServiceProvider.createServiceURI("showimage"); - let getMathMLURI = ServiceProvider.createServiceURI("getmathml"); - let serviceURI = ServiceProvider.createServiceURI("service"); - // Some backend integrations (like Java o Ruby) have an absolute backend path, - // for example: /app/service. For them we calculate the absolute URL path, i.e - // protocol://domain:port/app/service - if (ServiceProvider.parameters.URI.indexOf("/") === 0) { - const serverPath = ServiceProvider.getServerURL(); - configurationURI = serverPath + configurationURI; - showImageURI = serverPath + showImageURI; - createImageURI = serverPath + createImageURI; - getMathMLURI = serverPath + getMathMLURI; - serviceURI = serverPath + serviceURI; - } - ServiceProvider.setServicePath("configurationjs", configurationURI); - ServiceProvider.setServicePath("showimage", showImageURI); - ServiceProvider.setServicePath("createimage", createImageURI); - ServiceProvider.setServicePath("service", serviceURI); - ServiceProvider.setServicePath("getmathml", getMathMLURI); - ServiceProvider.setServicePath("configurationjs", configurationURI); - ServiceProvider.listeners.fire("onInit", {}); - } - /** - * Gets the content from an URL. - * @param {String} url - Target URL. - * @param {Object} [postVariables] - Object containing post variables. - * null if a GET query should be done. - * @returns {String} Content of the target URL. - * @private - * @static - */ static getUrl(url, postVariables) { - const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); - const httpRequest = Util.createHttpRequest(); - if (httpRequest) { - if (typeof postVariables === "undefined" || typeof postVariables === "undefined") { - httpRequest.open("GET", url, false); - } else if (url.substr(0, 1) === "/" || url.substr(0, 7) === "http://" || url.substr(0, 8) === "https://") { - httpRequest.open("POST", url, false); - } else { - httpRequest.open("POST", currentPath + url, false); - } - let header = Configuration.get("customHeaders"); - if (header) { - if (typeof header === "string") { - header = Util.convertStringToObject(header); - } - Object.entries(header).forEach(([key, val]) => httpRequest.setRequestHeader(key, val)); - } - if (typeof postVariables !== "undefined" && postVariables) { - httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); - httpRequest.send(Util.httpBuildQuery(postVariables)); - } else { - httpRequest.send(null); - } - return httpRequest.responseText; - } - return ""; - } - /** - * Returns the response text of a certain service. - * @param {String} service - Service name. - * @param {String} postVariables - Post variables. - * @param {Boolean} get - True if the request is GET instead of POST. false otherwise. - * @returns {String} Service response text. - */ static getService(service, postVariables, get) { - let response; - if (get === true) { - const getVariables = postVariables ? `?${postVariables}` : ""; - const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`; - response = ServiceProvider.getUrl(serviceUrl); - } else { - const serviceUrl = ServiceProvider.getServicePath(service); - response = ServiceProvider.getUrl(serviceUrl, postVariables); - } - return response; - } - /** - * Returns the server language of a certain service. The possible values - * are: php, aspx, java and ruby. - * This method has backward compatibility purposes. - * @param {String} service - The configuration service. - * @returns {String} - The server technology associated with the configuration service. - */ static getServerLanguageFromService(service) { - if (service.indexOf(".php") !== -1) { - return "php"; - } - if (service.indexOf(".aspx") !== -1) { - return "aspx"; - } - if (service.indexOf("wirispluginengine") !== -1) { - return "ruby"; - } - return "java"; - } - /** - * Returns the URI associated with a certain service. - * @param {String} service - The service name. - * @return {String} The service path. - */ static createServiceURI(service) { - const extension = ServiceProvider.serverExtension(); - return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension; - } - static serverExtension() { - if (ServiceProvider.parameters.server.indexOf("php") !== -1) { - return ".php"; - } - if (ServiceProvider.parameters.server.indexOf("aspx") !== -1) { - return ".aspx"; - } - return ""; - } - } - /** - * @property {String} service - The service name. - * @property {String} path - The service path. - * @static - */ ServiceProvider._servicePaths = {}; - /** - * The integration path. Contains the path of the configuration service. - * Used to define the path for all services. - * @type {String} - * @private - */ ServiceProvider._integrationPath = ""; - /** - * ServiceProvider static listeners. - * @type {Listeners} - * @private - */ ServiceProvider._listeners = new Listeners(); - /** - * Service provider parameters. - * @type {ServiceProviderParameters} - */ ServiceProvider._parameters = {}; + /** + * This object represents a custom listener. + * @typedef {Object} Listener + * @property {String} Listener.eventName - The listener name. + * @property {Function} Listener.callback - The listener callback function. + */ class Listeners { + /** + * @classdesc + * This class represents a custom listeners manager. + * @constructs + */ constructor(){ + /** + * Array containing all custom listeners. + * @type {Object[]} + */ this.listeners = []; + } + /** + * Add a listener to Listener class. + * @param {Object} listener - A listener object. + */ add(listener) { + this.listeners.push(listener); + } + /** + * Fires MathType event listeners + * @param {String} eventName - event name + * @param {Event} event - event object. + * @return {boolean} false if event has been prevented. true otherwise. + */ fire(eventName, event) { + for(let i = 0; i < this.listeners.length && !event.cancelled; i += 1){ + if (this.listeners[i].eventName === eventName) { + // Calling listener. + this.listeners[i].callback(event); + } + } + return event.defaultPrevented; + } + /** + * Creates a new listener object. + * @param {string} eventName - Event name. + * @param {Object} callback - Callback function. + * @returns {object} the listener object. + */ static newListener(eventName, callback) { + const listener = {}; + listener.eventName = eventName; + listener.callback = callback; + return listener; + } + } - /** - * @classdesc - * This class represents a LaTeX parser. Manages the services which allows to convert - * LaTeX into MathML and MathML into LaTeX. - */ class Latex { - /** - * Static property. - * Return latex cache. - * @private - * @type {Cache} - */ static get cache() { - return Latex._cache; - } - /** - * Static property setter. - * Set latex cache. - * @param {Cache} value - The property value. - * @ignore - */ static set cache(value) { - Latex._cache = value; - } - /** - * Converts MathML to LaTeX by calling mathml2latex service. For text services - * we call a text service with the param mathml2latex. - * @param {String} mathml - MathML String. - * @return {String} LaTeX string generated by the MathML argument. - */ static getLatexFromMathML(mathml) { - const mathmlWithoutSemantics = MathML.removeSemantics(mathml); - /** - * @type {TextCache} - */ const { cache } = Latex; - const data = { - service: "mathml2latex", - mml: mathmlWithoutSemantics, - }; - const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); - // TODO: Error handling. - let latex = ""; - if (jsonResponse.status === "ok") { - latex = jsonResponse.result.text; - const latexHtmlEntitiesEncoded = Util.htmlEntities(latex); - // Inserting LaTeX semantics. - const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, "LaTeX"); - cache.populate(latex, mathmlWithSemantics); - } - return latex; - } - /** - * Converts LaTeX to MathML by calling latex2mathml service. For text services - * we call a text service with the param latex2mathml. - * @param {String} latex - String containing a LaTeX formula. - * @param {Boolean} includeLatexOnSemantics - * - If true LaTeX would me included into MathML semantics. - * @return {String} MathML string generated by the LaTeX argument. - */ static getMathMLFromLatex(latex, includeLatexOnSemantics) { - /** - * @type {TextCache} - */ const latexCache = Latex.cache; - if (Latex.cache.get(latex)) { - return Latex.cache.get(latex); - } - const data = { - service: "latex2mathml", - latex, - }; - if (includeLatexOnSemantics) { - data.saveLatex = ""; - } - const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); - let output; - if (jsonResponse.status === "ok") { - let mathml = jsonResponse.result.text; - mathml = mathml.split("\r").join("").split("\n").join(" "); - // Populate LatexCache. - if (mathml.indexOf("semantics") === -1 && mathml.indexOf("annotation") === -1) { - const content = Util.htmlEntities(latex); - mathml = MathML.addAnnotation(mathml, content, "LaTeX"); - output = mathml; - } else { - output = mathml; - } - if (!latexCache.get(latex)) { - latexCache.populate(latex, mathml); - } - } else { - output = `$$${latex}$$`; - } - return output; - } - /** - * Converts all occurrences of MathML code to LaTeX. - * The MathML code should containing to be converted. - * @param {String} content - A string containing MathML valid code. - * @param {Object} characters - An object containing special characters. - * @return {String} A string containing all MathML annotated occurrences - * replaced by the corresponding LaTeX code. - */ static parseMathmlToLatex(content, characters) { - let output = ""; - const mathTagBegin = `${characters.tagOpener}math`; - const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; - const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`; - const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`; - let start = content.indexOf(mathTagBegin); - let end = 0; - let mathml; - let startAnnotation; - let closeAnnotation; - while (start !== -1) { - output += content.substring(end, start); - end = content.indexOf(mathTagEnd, start); - if (end === -1) { - end = content.length - 1; - } else { - end += mathTagEnd.length; - } - mathml = content.substring(start, end); - startAnnotation = mathml.indexOf(openTarget); - if (startAnnotation !== -1) { - startAnnotation += openTarget.length; - closeAnnotation = mathml.indexOf(closeTarget); - let latex = mathml.substring(startAnnotation, closeAnnotation); - if (characters === Constants.safeXmlCharacters) { - latex = MathML.safeXmlDecode(latex); - } - output += `$$${latex}$$`; - // Populate latex into cache. - Latex.cache.populate(latex, mathml); - } else { - output += mathml; - } - start = content.indexOf(mathTagBegin, end); - } - output += content.substring(end, content.length); - return output; - } - /** - * Extracts the latex of a determined position in a text. - * @param {Node} textNode - textNode to extract the LaTeX - * @param {Number} caretPosition - Starting position to find LaTeX. - * @param {Object} latexTags - Optional parameter representing tags between latex is inserted. - * It has the 'open' attribute for the open tag and the 'close' attribute for the close tag. - * "$$" by default. - * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found. - * @static - */ static getLatexFromTextNode(textNode, caretPosition, latexTags) { - // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument). - // Tags used for LaTeX formulas. - const defaultLatexTags = { - open: "$$", - close: "$$", - }; - // latexTags is an optional parameter. If is not set, use default latexTags. - if (typeof latexTags === "undefined" || latexTags == null) { - latexTags = defaultLatexTags; - } - // Looking for the first textNode. - let startNode = textNode; - while (startNode.previousSibling && startNode.previousSibling.nodeType === 3) { - // TEXT_NODE. - startNode = startNode.previousSibling; - } - /** - * Returns the next latex position and node from a specific node and position. - * @param {Node} currentNode - Node where searching latex. - * @param {Number} currentPosition - Current position inside the currentNode. - * @param {Object} latexTagsToUse - Tags used at latex beginning and latex final. - * "$$" by default. - * @param {Boolean} tag - Tag containing the current search. - * @returns {Object} Object containing the current node and the position. - */ function getNextLatexPosition(currentNode, currentPosition, tag) { - let position = currentNode.nodeValue.indexOf(tag, currentPosition); - while (position === -1) { - currentNode = currentNode.nextSibling; - if (!currentNode) { - // TEXT_NODE. - return null; // Not found. - } - position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1; - } - return { - node: currentNode, - position, - }; - } - /** - * Determines if a node is previous, or not, to a second one. - * @param {Node} node - Start node. - * @param {Number} position - Start node position. - * @param {Node} endNode - End node. - * @param {Number} endPosition - End node position. - * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise. - */ function isPrevious(node, position, endNode, endPosition) { - if (node === endNode) { - return position <= endPosition; - } - while (node && node !== endNode) { - node = node.nextSibling; - } - return node === endNode; - } - let start; - let end = { - node: startNode, - position: 0, - }; - // Is supposed that open and close tags has the same length. - const tagLength = latexTags.open.length; - do { - start = getNextLatexPosition(end.node, end.position, latexTags.open); - if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) { - return null; - } - end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close); - if (end == null) { - return null; - } - end.position += tagLength; - } while (isPrevious(end.node, end.position, textNode, caretPosition)); - // Isolating latex. - let latex; - if (start.node === end.node) { - latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength); - } else { - const index = start.position + tagLength; - latex = start.node.nodeValue.substring(index, start.node.nodeValue.length); - let currentNode = start.node; - do { - currentNode = currentNode.nextSibling; - if (currentNode === end.node) { - latex += end.node.nodeValue.substring(0, end.position - tagLength); - } else { - latex += currentNode.nodeValue ? currentNode.nodeValue : ""; - } - } while (currentNode !== end.node); - } - return { - latex, - startNode: start.node, - startPosition: start.position, - endNode: end.node, - endPosition: end.position, - }; - } - } - /** - * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string. - * @type {Cache} - * @static - */ Latex._cache = new TextCache(); + /** + * @typedef {Object} ServiceProviderProperties + * @property {String} URI - Service URI. + * @property {String} server - Service server language. + */ /** + * @classdesc + * Class representing a serviceProvider. A serviceProvider is a class containing + * an arbitrary number of services with the correspondent path. + */ class ServiceProvider { + /** + * Returns Service Provider listeners. + * @type {Listeners} + */ static get listeners() { + return ServiceProvider._listeners; + } + /** + * Adds a {@link Listener} instance to {@link ServiceProvider} class. + * @param {Listener} listener - Instance of {@link Listener}. + */ static addListener(listener) { + ServiceProvider.listeners.add(listener); + } + /** + * Fires events in Service Provider. + * @param {String} eventName - Event name. + * @param {Event} event - Event object. + */ static fireEvent(eventName, event) { + ServiceProvider.listeners.fire(eventName, event); + } + /** + * Service parameters. + * @type {ServiceProviderProperties} + * + */ static get parameters() { + return ServiceProvider._parameters; + } + /** + * Service parameters. + * @private + * @type {ServiceProviderProperties} + */ static set parameters(parameters) { + ServiceProvider._parameters = parameters; + } + /** + * Static property. + * Return service provider paths. + * @private + * @type {String} + */ static get servicePaths() { + return ServiceProvider._servicePaths; + } + /** + * Static property setter. + * Set service paths. + * @param {String} value - The property value. + * @ignore + */ static set servicePaths(value) { + ServiceProvider._servicePaths = value; + } + /** + * Adds a new service to the ServiceProvider. + * @param {String} service - Service name. + * @param {String} path - Service path. + * @static + */ static setServicePath(service, path) { + ServiceProvider.servicePaths[service] = path; + } + /** + * Returns the service path for a certain service. + * @param {String} serviceName - Service name. + * @returns {String} The service path. + * @static + */ static getServicePath(serviceName) { + return ServiceProvider.servicePaths[serviceName]; + } + /** + * Static property. + * Service provider integration path. + * @type {String} + */ static get integrationPath() { + return ServiceProvider._integrationPath; + } + /** + * Static property setter. + * Set service provider integration path. + * @param {String} value - The property value. + * @ignore + */ static set integrationPath(value) { + ServiceProvider._integrationPath = value; + } + /** + * Returns the server URL in the form protocol://serverName:serverPort. + * @return {String} The client side server path. + */ static getServerURL() { + const url = window.location.href; + const arr = url.split("/"); + const result = `${arr[0]}//${arr[2]}`; + return result; + } + /** + * Inits {@link this} class. Uses {@link this.integrationPath} as + * base path to generate all backend services paths. + * @param {Object} parameters - Function parameters. + * @param {String} parameters.integrationPath - Service path. + */ static init(parameters) { + ServiceProvider.parameters = parameters; + // Services path (tech dependant). + let configurationURI = ServiceProvider.createServiceURI("configurationjs"); + let createImageURI = ServiceProvider.createServiceURI("createimage"); + let showImageURI = ServiceProvider.createServiceURI("showimage"); + let getMathMLURI = ServiceProvider.createServiceURI("getmathml"); + let serviceURI = ServiceProvider.createServiceURI("service"); + // Some backend integrations (like Java o Ruby) have an absolute backend path, + // for example: /app/service. For them we calculate the absolute URL path, i.e + // protocol://domain:port/app/service + if (ServiceProvider.parameters.URI.indexOf("/") === 0) { + const serverPath = ServiceProvider.getServerURL(); + configurationURI = serverPath + configurationURI; + showImageURI = serverPath + showImageURI; + createImageURI = serverPath + createImageURI; + getMathMLURI = serverPath + getMathMLURI; + serviceURI = serverPath + serviceURI; + } + ServiceProvider.setServicePath("configurationjs", configurationURI); + ServiceProvider.setServicePath("showimage", showImageURI); + ServiceProvider.setServicePath("createimage", createImageURI); + ServiceProvider.setServicePath("service", serviceURI); + ServiceProvider.setServicePath("getmathml", getMathMLURI); + ServiceProvider.setServicePath("configurationjs", configurationURI); + ServiceProvider.listeners.fire("onInit", {}); + } + /** + * Gets the content from an URL. + * @param {String} url - Target URL. + * @param {Object} [postVariables] - Object containing post variables. + * null if a GET query should be done. + * @returns {String} Content of the target URL. + * @private + * @static + */ static getUrl(url, postVariables) { + const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); + const httpRequest = Util.createHttpRequest(); + if (httpRequest) { + if (typeof postVariables === "undefined" || typeof postVariables === "undefined") { + httpRequest.open("GET", url, false); + } else if (url.substr(0, 1) === "/" || url.substr(0, 7) === "http://" || url.substr(0, 8) === "https://") { + httpRequest.open("POST", url, false); + } else { + httpRequest.open("POST", currentPath + url, false); + } + let header = Configuration.get("customHeaders"); + if (header) { + if (typeof header === "string") { + header = Util.convertStringToObject(header); + } + Object.entries(header).forEach(([key, val])=>httpRequest.setRequestHeader(key, val)); + } + if (typeof postVariables !== "undefined" && postVariables) { + httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); + httpRequest.send(Util.httpBuildQuery(postVariables)); + } else { + httpRequest.send(null); + } + return httpRequest.responseText; + } + return ""; + } + /** + * Returns the response text of a certain service. + * @param {String} service - Service name. + * @param {String} postVariables - Post variables. + * @param {Boolean} get - True if the request is GET instead of POST. false otherwise. + * @returns {String} Service response text. + */ static getService(service, postVariables, get) { + let response; + if (get === true) { + const getVariables = postVariables ? `?${postVariables}` : ""; + const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`; + response = ServiceProvider.getUrl(serviceUrl); + } else { + const serviceUrl = ServiceProvider.getServicePath(service); + response = ServiceProvider.getUrl(serviceUrl, postVariables); + } + return response; + } + /** + * Returns the server language of a certain service. The possible values + * are: php, aspx, java and ruby. + * This method has backward compatibility purposes. + * @param {String} service - The configuration service. + * @returns {String} - The server technology associated with the configuration service. + */ static getServerLanguageFromService(service) { + if (service.indexOf(".php") !== -1) { + return "php"; + } + if (service.indexOf(".aspx") !== -1) { + return "aspx"; + } + if (service.indexOf("wirispluginengine") !== -1) { + return "ruby"; + } + return "java"; + } + /** + * Returns the URI associated with a certain service. + * @param {String} service - The service name. + * @return {String} The service path. + */ static createServiceURI(service) { + const extension = ServiceProvider.serverExtension(); + return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension; + } + static serverExtension() { + if (ServiceProvider.parameters.server.indexOf("php") !== -1) { + return ".php"; + } + if (ServiceProvider.parameters.server.indexOf("aspx") !== -1) { + return ".aspx"; + } + return ""; + } + } + /** + * @property {String} service - The service name. + * @property {String} path - The service path. + * @static + */ ServiceProvider._servicePaths = {}; + /** + * The integration path. Contains the path of the configuration service. + * Used to define the path for all services. + * @type {String} + * @private + */ ServiceProvider._integrationPath = ""; + /** + * ServiceProvider static listeners. + * @type {Listeners} + * @private + */ ServiceProvider._listeners = new Listeners(); + /** + * Service provider parameters. + * @type {ServiceProviderParameters} + */ ServiceProvider._parameters = {}; - var ar = { - latex: "LaTeX", - cancel: "إلغاء", - accept: "إدراج", - manual: "الدليل", - insert_math: "إدراج صيغة رياضية - MathType", - insert_chem: "إدراج صيغة كيميائية - ChemType", - minimize: "تصغير", - maximize: "تكبير", - fullscreen: "ملء الشاشة", - exit_fullscreen: "الخروج من ملء الشاشة", - close: "إغلاق", - mathtype: "MathType", - title_modalwindow: "نافذة MathType مشروطة", - close_modal_warning: "هل تريد المغادرة بالتأكيد؟ ستُفقد التغييرات التي أجريتها.", - latex_name_label: "صيغة Latex", - browser_no_compatible: "المستعرض غير متوافق مع تقنية AJAX. الرجاء استخدام أحدث إصدار من Mozilla Firefox.", - error_convert_accessibility: "حدث خطأ أثناء التحويل من MathML إلى نص قابل للاستخدام.", - exception_cross_site: "البرمجة النصية للمواقع المشتركة مسموح بها لـ HTTP فقط.", - exception_high_surrogate: "المركّب المرتفع غير متبوع بمركّب منخفض في fixedCharCodeAt()‎", - exception_string_length: "سلسلة غير صالحة. يجب أن يكون الطول من مضاعفات العدد 4", - exception_key_nonobject: "Object.keys مستدعاة على غير كائن", - exception_null_or_undefined: " هذا فارغ أو غير محدد", - exception_not_function: " ليست دالة", - exception_invalid_date_format: "تنسيق تاريخ غير صالح: ", - exception_casting: "لا يمكن الصياغة ", - exception_casting_to: " إلى ", - }; - var ca = { - latex: "LaTeX", - cancel: "Cancel·lar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir fórmula matemàtica - MathType", - insert_chem: "Inserir fórmula química - ChemType", - minimize: "Minimitza", - maximize: "Maximitza", - fullscreen: "Pantalla completa", - exit_fullscreen: "Sortir de la pantalla complera", - close: "Tanca", - mathtype: "MathType", - title_modalwindow: " Finestra modal de MathType", - close_modal_warning: "N'estàs segur que vols sortir? Es perdran els canvis que has fet.", - latex_name_label: "Fórmula en Latex", - browser_no_compatible: - "El teu navegador no és compatible amb AJAX. Si us plau, usa la darrera versió de Mozilla Firefox.", - error_convert_accessibility: "Error en convertir de MathML a text accessible.", - exception_cross_site: "Els scripts de llocs creuats només estan permesos per HTTP.", - exception_high_surrogate: "Subrogat alt no seguit de subrogat baix a fixedCharCodeAt()", - exception_string_length: "Cadena invàlida. La longitud ha de ser un múltiple de 4", - exception_key_nonobject: "Object.keys anomenat a non-object", - exception_null_or_undefined: " això és null o no definit", - exception_not_function: " no és una funció", - exception_invalid_date_format: "Format de data invàlid : ", - exception_casting: "No es pot emetre ", - exception_casting_to: " a ", - }; - var cs = { - latex: "LaTeX", - cancel: "Storno", - accept: "Vložit", - manual: "Příručka", - insert_math: "Vložit matematický vzorec - MathType", - insert_chem: "Vložení chemického vzorce – ChemType", - minimize: "Minimalizovat", - maximize: "Maximalizovat", - fullscreen: "Celá obrazovka", - exit_fullscreen: "Opustit režim celé obrazovky", - close: "Zavřít", - mathtype: "MathType", - title_modalwindow: "Modální okno MathType", - close_modal_warning: "Opravdu chcete okno zavřít? Provedené změny budou ztraceny.", - latex_name_label: "Vzorec v LaTeXu", - browser_no_compatible: - "Váš prohlížeč nepodporuje technologii AJAX. Použijte nejnovější verzi prohlížeče Mozilla Firefox.", - error_convert_accessibility: "Při převodu kódu MathML na čitelný text došlo k chybě.", - exception_cross_site: "Skriptování mezi více servery je povoleno jen v HTTP.", - exception_high_surrogate: "Ve funkci fixedCharCodeAt() nenásleduje po první části kódu znaku druhá část", - exception_string_length: "Neplatný řetězec. Délka musí být násobkem 4.", - exception_key_nonobject: "Funkce Object.keys byla použita pro prvek, který není objektem", - exception_null_or_undefined: " hodnota je null nebo není definovaná", - exception_not_function: " není funkce", - exception_invalid_date_format: "Neplatný formát data: ", - exception_casting: "Nelze přetypovat ", - exception_casting_to: " na ", - }; - var da = { - latex: "LaTeX", - cancel: "Annuller", - accept: "Indsæt", - manual: "Brugervejledning", - insert_math: "Indsæt matematisk formel - MathType", - insert_chem: "Indsæt en kemisk formel - ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fuld skærm", - exit_fullscreen: "Afslut Fuld skærm", - close: "Luk", - mathtype: "MathType", - title_modalwindow: "MathType-modalvindue", - close_modal_warning: "Er du sikker på, du vil lukke? Dine ændringer går tabt.", - latex_name_label: "LaTex-formel", - browser_no_compatible: - "Din browser er ikke kompatibel med AJAX-teknologi. Brug den nyeste version af Mozilla Firefox.", - error_convert_accessibility: "Fejl under konvertering fra MathML til tilgængelig tekst.", - exception_cross_site: "Scripts på tværs af websteder er kun tilladt for HTTP.", - exception_high_surrogate: "Et højt erstatningstegn er ikke fulgt af et lavt erstatningstegn i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Længden skal være et multiplum af 4", - exception_key_nonobject: "Object.keys kaldet ved ikke-objekt", - exception_null_or_undefined: " dette er nul eller ikke defineret", - exception_not_function: " er ikke en funktion", - exception_invalid_date_format: "Ugyldigt datoformat: ", - exception_casting: "Kan ikke beregne ", - exception_casting_to: " til ", - }; - var de = { - latex: "LaTeX", - cancel: "Abbrechen", - accept: "Einfügen", - manual: "Handbuch", - insert_math: "Mathematische Formel einfügen - MathType", - insert_chem: "Eine chemische Formel einfügen – ChemType", - minimize: "Verkleinern", - maximize: "Vergrößern", - fullscreen: "Vollbild", - exit_fullscreen: "Vollbild schließen", - close: "Schließen", - mathtype: "MathType", - title_modalwindow: "Modales MathType-Fenster", - close_modal_warning: - "Bist du sicher, dass du das Programm verlassen willst? Alle vorgenommenen Änderungen gehen damit verloren.", - latex_name_label: "Latex-Formel", - browser_no_compatible: - "Dein Browser ist nicht mit der AJAX-Technologie kompatibel. Verwende bitte die neueste Version von Mozilla Firefox.", - error_convert_accessibility: "Fehler beim Konvertieren von MathML in barrierefreien Text.", - exception_cross_site: "Cross-Site-Scripting ist nur bei HTTP zulässig.", - exception_high_surrogate: "Hoher Ersatz bei bei festerZeichenkodierungbei() nicht von niedrigem Ersatz befolgt.", - exception_string_length: "Ungültige Zeichenfolge. Länge muss ein Vielfaches von 4 sein.", - exception_key_nonobject: "Object.keys wurde für ein Nicht-Objekt aufgerufen.", - exception_null_or_undefined: " Das ist Null oder nicht definiert.", - exception_not_function: " ist keine Funktion", - exception_invalid_date_format: "Ungültiges Datumsformat: ", - exception_casting: "Umwandlung nicht möglich ", - exception_casting_to: " zu ", - }; - var el = { - latex: "LaTeX", - cancel: "Άκυρο", - accept: "Εισαγωγή", - manual: "Χειροκίνητα", - insert_math: "Εισαγωγή μαθηματικού τύπου - MathType", - insert_chem: "Εισαγωγή χημικού τύπου - ChemType", - minimize: "Ελαχιστοποίηση", - maximize: "Μεγιστοποίηση", - fullscreen: "Πλήρης οθόνη", - exit_fullscreen: "Έξοδος από πλήρη οθόνη", - close: "Κλείσιμο", - mathtype: "MathType", - title_modalwindow: "Τροπικό παράθυρο MathType", - close_modal_warning: "Επιθυμείτε σίγουρα αποχώρηση; Θα χαθούν οι αλλαγές που έχετε κάνει.", - latex_name_label: "Τύπος LaTeX", - browser_no_compatible: - "Το πρόγραμμα περιήγησής σας δεν είναι συμβατό με την τεχνολογία AJAX. Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Mozilla Firefox.", - error_convert_accessibility: "Σφάλμα κατά τη μετατροπή από MathML σε προσβάσιμο κείμενο.", - exception_cross_site: "Το XSS (Cross site scripting) επιτρέπεται μόνο για HTTP.", - exception_high_surrogate: "Το υψηλό υποκατάστατο δεν ακολουθείται από χαμηλό υποκατάστατο στο fixedCharCodeAt()", - exception_string_length: "Μη έγκυρη συμβολοσειρά. Το μήκος πρέπει να είναι πολλαπλάσιο του 4", - exception_key_nonobject: "Έγινε κλήση του Object.keys σε μη αντικείμενο", - exception_null_or_undefined: " αυτό είναι μηδενικό ή δεν έχει οριστεί", - exception_not_function: " δεν είναι συνάρτηση", - exception_invalid_date_format: "Μη έγκυρη μορφή ημερομηνίας: ", - exception_casting: "Δεν είναι δυνατή η μετατροπή ", - exception_casting_to: " σε ", - }; - var en = { - latex: "LaTeX", - cancel: "Cancel", - accept: "Insert", - manual: "Manual", - insert_math: "Insert a math equation - MathType", - insert_chem: "Insert a chemistry formula - ChemType", - minimize: "Minimize", - maximize: "Maximize", - fullscreen: "Full-screen", - exit_fullscreen: "Exit full-screen", - close: "Close", - mathtype: "MathType", - title_modalwindow: "MathType modal window", - close_modal_warning: "Are you sure you want to leave? The changes you made will be lost.", - latex_name_label: "Latex Formula", - browser_no_compatible: - "Your browser is not compatible with AJAX technology. Please, use the latest version of Mozilla Firefox.", - error_convert_accessibility: "Error converting from MathML to accessible text.", - exception_cross_site: "Cross site scripting is only allowed for HTTP.", - exception_high_surrogate: "High surrogate not followed by low surrogate in fixedCharCodeAt()", - exception_string_length: "Invalid string. Length must be a multiple of 4", - exception_key_nonobject: "Object.keys called on non-object", - exception_null_or_undefined: " this is null or not defined", - exception_not_function: " is not a function", - exception_invalid_date_format: "Invalid date format : ", - exception_casting: "Cannot cast ", - exception_casting_to: " to ", - }; - var es = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Insertar", - manual: "Manual", - insert_math: "Insertar fórmula matemática - MathType", - insert_chem: "Insertar fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Pantalla completa", - exit_fullscreen: "Salir de pantalla completa", - close: "Cerrar", - mathtype: "MathType", - title_modalwindow: "Ventana modal de MathType", - close_modal_warning: "Seguro que quieres cerrar? Los cambios que has hecho se perderán", - latex_name_label: "Formula en Latex", - browser_no_compatible: - "Tu navegador no es complatible con AJAX. Por favor, usa la última version de Mozilla Firefox.", - error_convert_accessibility: "Error conviertiendo una fórmula MathML a texto accesible.", - exception_cross_site: "Cross site scripting solo está permitido para HTTP.", - exception_high_surrogate: "Subrogado alto no seguido por subrogado bajo en fixedCharCodeAt()", - exception_string_length: "Cadena no válida. La longitud debe ser múltiplo de 4", - exception_key_nonobject: "Object.keys called on non-object", - exception_null_or_undefined: " esto es null o no definido", - exception_not_function: " no es una función", - exception_invalid_date_format: "Formato de fecha inválido: ", - exception_casting: "No se puede emitir", - exception_casting_to: " a ", - }; - var et = { - latex: "LaTeX", - cancel: "Loobu", - accept: "Lisa", - manual: "Käsiraamat", - insert_math: "Lisa matemaatiline valem – WIRIS", - insert_chem: "Lisa keemiline valem – ChemType", - minimize: "Minimeeri", - maximize: "Maksimeeri", - fullscreen: "Täiskuva", - exit_fullscreen: "Välju täiskuvalt", - close: "Sule", - mathtype: "MathType", - title_modalwindow: "MathType'i modaalaken", - close_modal_warning: "Kas soovite kindlasti lahkuda? Tehtud muudatused lähevad kaduma.", - latex_name_label: "Latexi valem", - browser_no_compatible: - "Teie brauser ei ühildu AJAXi tehnoloogiaga. Palun kasutage Mozilla Firefoxi uusimat versiooni.", - error_convert_accessibility: "Tõrge teisendamisel MathML-ist muudetavaks tekstiks.", - exception_cross_site: "Ristskriptimine on lubatud ainult HTTP kasutamisel.", - exception_high_surrogate: - "Funktsioonis fixedCharCodeAt() ei järgne kõrgemale asendusliikmele madalam asendusliige.", - exception_string_length: "Vigane string. Pikkus peab olema 4 kordne.", - exception_key_nonobject: "Protseduur Object.keys kutsuti mitteobjekti korral.", - exception_null_or_undefined: " see on null või määramata", - exception_not_function: " ei ole funktsioon", - exception_invalid_date_format: "Sobimatu kuupäeva kuju: ", - exception_casting: "Esitamine ei õnnestu ", - exception_casting_to: " – ", - }; - var eu = { - latex: "LaTeX", - cancel: "Ezeztatu", - accept: "Txertatu", - manual: "Gida", - insert_math: "Txertatu matematikako formula - MathType", - insert_chem: "Txertatu formula kimiko bat - ChemType", - minimize: "Ikonotu", - maximize: "Maximizatu", - fullscreen: "Pantaila osoa", - exit_fullscreen: "Irten pantaila osotik", - close: "Itxi", - mathtype: "MathType", - title_modalwindow: "MathType leiho modala", - close_modal_warning: "Ziur irten nahi duzula? Egiten dituzun aldaketak galdu egingo dira.", - latex_name_label: "LaTex Formula", - browser_no_compatible: - "Zure arakatzailea ez da bateragarria AJAX teknologiarekin. Erabili Mozilla Firefoxen azken bertsioa.", - error_convert_accessibility: "Errorea MathMLtik testu irisgarrira bihurtzean.", - exception_cross_site: "Gune arteko scriptak HTTPrako soilik onartzen dira.", - exception_high_surrogate: "Ordezko baxuak ez dio ordezko altuari jarraitzen, hemen: fixedCharCodeAt()", - exception_string_length: "Kate baliogabea. Luzerak 4ren multiploa izan behar du", - exception_key_nonobject: "Object.keys deitu zaio objektua ez den zerbaiti", - exception_null_or_undefined: " nulua edo definitu gabea da", - exception_not_function: " ez da funtzio bat", - exception_invalid_date_format: "Data-formatu baliogabea : ", - exception_casting: "Ezin da igorri ", - exception_casting_to: " honi ", - }; - var fi = { - latex: "LaTeX", - cancel: "Peruuta", - accept: "Lisää", - manual: "Manual", - insert_math: "Liitä matemaattinen kaava - MathType", - insert_chem: "Lisää kemian kaava - ChemType", - minimize: "Pienennä", - maximize: "Suurenna", - fullscreen: "Koko ruutu", - exit_fullscreen: "Poistu koko ruudun tilasta", - close: "Sulje", - mathtype: "MathType", - title_modalwindow: "MathTypen modaalinen ikkuna", - close_modal_warning: "Oletko varma, että haluat poistua? Menetät tekemäsi muutokset.", - latex_name_label: "Latex-kaava", - browser_no_compatible: "Selaimesi ei tue AJAX-tekniikkaa. Ole hyvä ja käytä uusinta Firefox-versiota.", - error_convert_accessibility: "Virhe muunnettaessa MathML:stä tekstiksi.", - exception_cross_site: "Cross site scripting sallitaan vain HTTP:llä.", - exception_high_surrogate: "fixedCharCodeAt(): yläsijaismerkkiä ei seurannut alasijaismerkki", - exception_string_length: "Epäkelpo merkkijono. Pituuden on oltava 4:n kerrannainen", - exception_key_nonobject: "Object.keys kutsui muuta kuin oliota", - exception_null_or_undefined: " tämä on null tai ei määritelty", - exception_not_function: " ei ole funktio", - exception_invalid_date_format: "Virheellinen päivämäärämuoto : ", - exception_casting: "Ei voida muuntaa tyyppiä ", - exception_casting_to: " tyyppiin ", - }; - var fr = { - latex: "LaTeX", - cancel: "Annuler", - accept: "Insérer", - manual: "Manuel", - insert_math: "Insérer une formule mathématique - MathType", - insert_chem: "Insérer une formule chimique - ChemType", - minimize: "Minimiser", - maximize: "Maximiser", - fullscreen: "Plein écran", - exit_fullscreen: "Quitter le plein écran", - close: "Fermer", - mathtype: "MathType", - title_modalwindow: "Fenêtre modale MathType", - close_modal_warning: "Confirmez-vous vouloir fermer ? Les changements effectués seront perdus.", - latex_name_label: "Formule LaTeX", - browser_no_compatible: - "Votre navigateur n’est pas compatible avec la technologie AJAX. Veuillez utiliser la dernière version de Mozilla Firefox.", - error_convert_accessibility: "Une erreur de conversion du format MathML en texte accessible est survenue.", - exception_cross_site: "Le cross-site scripting n’est autorisé que pour HTTP.", - exception_high_surrogate: "Substitut élevé non suivi d’un substitut inférieur dans fixedCharCodeAt()", - exception_string_length: "Chaîne non valide. Longueur limitée aux multiples de 4", - exception_key_nonobject: "Object.keys appelé sur un non-objet", - exception_null_or_undefined: " nul ou non défini", - exception_not_function: " n’est pas une fonction", - exception_invalid_date_format: "Format de date non valide : ", - exception_casting: "Impossible de convertir ", - exception_casting_to: " sur ", - }; - var gl = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir unha fórmula matemática - MathType", - insert_chem: "Inserir unha fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Pantalla completa", - exit_fullscreen: "Saír da pantalla completa", - close: "Pechar", - mathtype: "MathType", - title_modalwindow: "Ventá modal de MathType", - close_modal_warning: "Seguro que quere saír? Perderanse os cambios realizados.", - latex_name_label: "Fórmula Latex", - browser_no_compatible: - "O seu explorador non é compatible coa tecnoloxía AJAX. Use a versión máis recente de Mozilla Firefox.", - error_convert_accessibility: "Erro ao converter de MathML a texto accesible.", - exception_cross_site: "Os scripts de sitios só se permiten para HTTP.", - exception_high_surrogate: "Suplente superior non seguido por suplente inferior en fixedCharCodeAt()", - exception_string_length: "Cadea non válida. A lonxitude debe ser un múltiplo de 4", - exception_key_nonobject: "Claves de obxecto chamadas en non obxecto", - exception_null_or_undefined: " nulo ou non definido", - exception_not_function: " non é unha función", - exception_invalid_date_format: "Formato de data non válido: ", - exception_casting: "Non se pode converter ", - exception_casting_to: " a ", - }; - var he = { - latex: "LaTeX", - cancel: "ביטול", - accept: "עדכון", - manual: "ידני", - insert_math: "הוספת נוסחה מתמטית - MathType", - insert_chem: "הוספת כתיבה כימית - ChemType", - minimize: "מזערי", - maximize: "מרבי", - fullscreen: "מסך מלא", - exit_fullscreen: "יציאה ממצב מסך מלא", - close: "סגירה", - mathtype: "MathType", - title_modalwindow: "חלון מודאלי של MathType", - close_modal_warning: "האם לצאת? שינויים אשר בוצעו ימחקו.", - latex_name_label: "נוסחת Latex", - browser_no_compatible: "הדפדפן שלך אינו תואם לטכנולוגיית AJAX. יש להשתמש בגרסה העדכנית ביותר של Mozilla Firefox.", - error_convert_accessibility: "שגיאה בהמרה מ-MathML לטקסט נגיש.", - exception_cross_site: "סקריפטינג חוצה-אתרים מורשה עבור HTTP בלבד.", - exception_high_surrogate: "ערך ממלא מקום גבוה אינו מופיע אחרי ערך ממלא מקום נמוך ב-fixedCharCodeAt()‎", - exception_string_length: "מחרוזת לא חוקית. האורך חייב להיות כפולה של 4", - exception_key_nonobject: "בוצעה קריאה אל Object.keys ברכיב שאינו אובייקט", - exception_null_or_undefined: " הוא Null או לא מוגדר", - exception_not_function: "איננה פונקציה", - exception_invalid_date_format: "תסדיר תאריך אינו תקין : ", - exception_casting: "לא ניתן להמיר ", - exception_casting_to: " ל ", - }; - var hr = { - latex: "LaTeX", - cancel: "Poništi", - accept: "Umetni", - manual: "Priručnik", - insert_math: "Umetnite matematičku formulu - MathType", - insert_chem: "Umetnite kemijsku formulu - ChemType", - minimize: "Minimiziraj", - maximize: "Maksimiziraj", - fullscreen: "Cijeli zaslon", - exit_fullscreen: "Izlaz iz prikaza na cijelom zaslonu", - close: "Zatvori", - mathtype: "MathType", - title_modalwindow: "MathType modalni prozor", - close_modal_warning: "Sigurno želite zatvoriti? Izgubit će se unesene promjene.", - latex_name_label: "Latex formula", - browser_no_compatible: - "Vaš preglednik nije kompatibilan s AJAX tehnologijom. Upotrijebite najnoviju verziju Mozilla Firefoxa.", - error_convert_accessibility: "Pogreška konverzije iz MathML-a u dostupni tekst.", - exception_cross_site: "Skriptiranje na različitim web-mjestima dopušteno je samo za HTTP.", - exception_high_surrogate: "Iza visoke zamjene ne slijedi niska zamjena u fixedCharCodeAt()", - exception_string_length: "Nevažeći niz. Duljina mora biti višekratnik broja 4", - exception_key_nonobject: "Object.keys pozvano na ne-objekt", - exception_null_or_undefined: " ovo je nula ili nije definirano", - exception_not_function: " nije funkcija", - exception_invalid_date_format: "Nevažeći format datuma : ", - exception_casting: "Ne može se poslati ", - exception_casting_to: " na ", - }; - var hu = { - latex: "LaTeX", - cancel: "Mégsem", - accept: "Beszúrás", - manual: "Kézikönyv", - insert_math: "Matematikai képlet beszúrása - MathType", - insert_chem: "Kémiai képet beillesztése - ChemType", - minimize: "Kis méret", - maximize: "Nagy méret", - fullscreen: "Teljes képernyő", - exit_fullscreen: "Teljes képernyő elhagyása", - close: "Bezárás", - mathtype: "MathType", - title_modalwindow: "MathType modális ablak", - close_modal_warning: "Biztosan kilép? A módosítások el fognak veszni.", - latex_name_label: "Latex képlet", - browser_no_compatible: - "A böngészője nem kompatibilis az AJAX technológiával. Használja a Mozilla Firefox legújabb verzióját.", - error_convert_accessibility: "Hiba lépett fel a MathML szöveggé történő konvertálása során.", - exception_cross_site: "Az oldalak közti scriptelés csak HTTP esetén engedélyezett.", - exception_high_surrogate: - "A magas helyettesítő karaktert nem alacsony helyettesítő karakter követi a fixedCharCodeAt() esetében", - exception_string_length: "Érvénytelen karakterlánc. A hossznak a 4 többszörösének kell lennie", - exception_key_nonobject: "Az Object.keys egy nem objektumra került meghívásra", - exception_null_or_undefined: " null vagy nem definiált", - exception_not_function: " nem függvény", - exception_invalid_date_format: "Érvénytelen dátumformátum: ", - exception_casting: "Nem alkalmazható ", - exception_casting_to: " erre ", - }; - var id = { - latex: "LaTeX", - cancel: "Membatalkan", - accept: "Masukkan", - manual: "Manual", - insert_math: "Masukkan rumus matematika - MathType", - insert_chem: "Masukkan rumus kimia - ChemType", - minimize: "Minikan", - maximize: "Perbesar", - fullscreen: "Layar penuh", - exit_fullscreen: "Keluar layar penuh", - close: "Tutup", - mathtype: "MathType", - title_modalwindow: "Jendela modal MathType", - close_modal_warning: "Anda yakin ingin keluar? Anda akan kehilangan perubahan yang Anda buat.", - latex_name_label: "Rumus Latex", - browser_no_compatible: - "Penjelajah Anda tidak kompatibel dengan teknologi AJAX. Harap gunakan Mozilla Firefox versi terbaru.", - error_convert_accessibility: "Kesalahan konversi dari MathML menjadi teks yang dapat diakses.", - exception_cross_site: "Skrip lintas situs hanya diizinkan untuk HTTP.", - exception_high_surrogate: "Pengganti tinggi tidak diikuti oleh pengganti rendah di fixedCharCodeAt()", - exception_string_length: "String tidak valid. Panjang harus kelipatan 4", - exception_key_nonobject: "Object.keys meminta nonobjek", - exception_null_or_undefined: " ini tidak berlaku atau tidak didefinisikan", - exception_not_function: " bukan sebuah fungsi", - exception_invalid_date_format: "Format tanggal tidak valid : ", - exception_casting: "Tidak dapat mentransmisikan ", - exception_casting_to: " untuk ", - }; - var it = { - latex: "LaTeX", - cancel: "Annulla", - accept: "Inserisci", - manual: "Manuale", - insert_math: "Inserisci una formula matematica - MathType", - insert_chem: "Inserisci una formula chimica - ChemType", - minimize: "Riduci a icona", - maximize: "Ingrandisci", - fullscreen: "Schermo intero", - exit_fullscreen: "Esci da schermo intero", - close: "Chiudi", - mathtype: "MathType", - title_modalwindow: "Finestra modale di MathType", - close_modal_warning: "Confermi di voler uscire? Le modifiche effettuate andranno perse.", - latex_name_label: "Formula LaTeX", - browser_no_compatible: - "Il tuo browser non è compatibile con la tecnologia AJAX. Utilizza la versione più recente di Mozilla Firefox.", - error_convert_accessibility: "Errore durante la conversione da MathML in testo accessibile.", - exception_cross_site: "Lo scripting tra siti è consentito solo per HTTP.", - exception_high_surrogate: "Surrogato alto non seguito da surrogato basso in fixedCharCodeAt()", - exception_string_length: "Stringa non valida. La lunghezza deve essere un multiplo di 4", - exception_key_nonobject: "Metodo Object.keys richiamato in un elemento non oggetto", - exception_null_or_undefined: " questo è un valore null o non definito", - exception_not_function: " non è una funzione", - exception_invalid_date_format: "Formato di data non valido: ", - exception_casting: "Impossibile eseguire il cast ", - exception_casting_to: " a ", - }; - var ja = { - latex: "LaTeX", - cancel: "キャンセル", - accept: "挿入", - manual: "マニュアル", - insert_math: "数式を挿入 - MathType", - insert_chem: "化学式を挿入 - ChemType", - minimize: "最小化", - maximize: "最大化", - fullscreen: "全画面表示", - exit_fullscreen: "全画面表示を解除", - close: "閉じる", - mathtype: "MathType", - title_modalwindow: "MathType モードウィンドウ", - close_modal_warning: "このページから移動してもよろしいですか?変更内容は失われます。", - latex_name_label: "LaTeX 数式", - browser_no_compatible: - "お使いのブラウザは、AJAX 技術と互換性がありません。Mozilla Firefox の最新バージョンをご使用ください。", - error_convert_accessibility: "MathML からアクセシブルなテキストへの変換中にエラーが発生しました。", - exception_cross_site: "クロスサイトスクリプティングは、HTTP のみに許可されています。", - exception_high_surrogate: "fixedCharCodeAt()で上位サロゲートの後に下位サロゲートがありません", - exception_string_length: "無効な文字列です。長さは4の倍数である必要があります", - exception_key_nonobject: "Object.keys が非オブジェクトで呼び出されました", - exception_null_or_undefined: " null であるか、定義されていません", - exception_not_function: " は関数ではありません", - exception_invalid_date_format: "無効な日付形式: ", - exception_casting: "次にキャスト ", - exception_casting_to: " できません ", - }; - var ko = { - latex: "LaTeX", - cancel: "취소", - accept: "삽입", - manual: "설명서", - insert_math: "수학 공식 삽입 - MathType", - insert_chem: "화학 공식 입력하기 - ChemType", - minimize: "최소화", - maximize: "최대화", - fullscreen: "전체 화면", - exit_fullscreen: "전체 화면 나가기", - close: "닫기", - mathtype: "MathType", - title_modalwindow: "MathType 모달 창", - close_modal_warning: "정말로 나가시겠습니까? 변경 사항이 손실됩니다.", - latex_name_label: "Latex 공식", - browser_no_compatible: - "사용자의 브라우저는 AJAX 기술과 호환되지 않습니다. Mozilla Firefox 최신 버전을 사용하십시오.", - error_convert_accessibility: "MathML로부터 접근 가능한 텍스트로 오류 변환.", - exception_cross_site: "사이트 교차 스크립팅은 HTTP 환경에서만 사용할 수 있습니다.", - exception_high_surrogate: "fixedCharCodeAt()에서는 상위 서러게이트 뒤에 하위 서러게이트가 붙지 않습니다", - exception_string_length: "유효하지 않은 스트링입니다. 길이는 4의 배수여야 합니다", - exception_key_nonobject: "Object.keys가 non-object를 요청하였습니다", - exception_null_or_undefined: " Null값이거나 정의되지 않았습니다", - exception_not_function: " 함수가 아닙니다", - exception_invalid_date_format: "유효하지 않은 날짜 포맷 : ", - exception_casting: "캐스팅할 수 없습니다 ", - exception_casting_to: " (으)로 ", - }; - var nl = { - latex: "LaTeX", - cancel: "Annuleren", - insert_chem: "Een scheikundige formule invoegen - ChemType", - minimize: "Minimaliseer", - maximize: "Maximaliseer", - fullscreen: "Schermvullend", - exit_fullscreen: "Verlaat volledig scherm", - close: "Sluit", - mathtype: "MathType", - title_modalwindow: "Modaal venster MathType", - close_modal_warning: "Weet je zeker dat je de app wilt sluiten? De gemaakte wijzigingen gaan verloren.", - latex_name_label: "LaTeX-formule", - browser_no_compatible: - "Je browser is niet compatibel met AJAX-technologie. Gebruik de meest recente versie van Mozilla Firefox.", - error_convert_accessibility: "Fout bij conversie van MathML naar toegankelijke tekst.", - exception_cross_site: "Cross-site scripting is alleen toegestaan voor HTTP.", - exception_high_surrogate: "Hoog surrogaat niet gevolgd door laag surrogaat in fixedCharCodeAt()", - exception_string_length: "Ongeldige tekenreeks. Lengte moet een veelvoud van 4 zijn", - exception_key_nonobject: "Object.keys opgeroepen voor niet-object", - exception_null_or_undefined: " dit is nul of niet gedefinieerd", - exception_not_function: " is geen functie", - exception_invalid_date_format: "Ongeldige datumnotatie: ", - exception_casting: "Kan niet weergeven ", - exception_casting_to: " op ", - }; - var no = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Set inn", - manual: "Håndbok", - insert_math: "Sett inn matematikkformel - MathType", - insert_chem: "Set inn ein kjemisk formel – ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fullskjerm", - exit_fullscreen: "Avslutt fullskjerm", - close: "Lukk", - mathtype: "MathType", - title_modalwindow: "Modalt MathType-vindu", - close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", - latex_name_label: "LaTeX-formel", - browser_no_compatible: - "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", - error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", - exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", - exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", - exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", - exception_null_or_undefined: " dette er null eller ikkje definert", - exception_not_function: " er ikkje ein funksjon", - exception_invalid_date_format: "Ugyldig datoformat: ", - exception_casting: "Kan ikkje bruka casting ", - exception_casting_to: " til ", - }; - var nb = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Insert", - manual: "Håndbok", - insert_math: "Sett inn matematikkformel - MathType", - insert_chem: "Sett inn en kjemisk formel – ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fullskjerm", - exit_fullscreen: "Avslutt fullskjerm", - close: "Lukk", - mathtype: "MathType", - title_modalwindow: "Modalt MathType-vindu", - close_modal_warning: "Er du sikker på at du vil gå ut? Endringene du har gjort, vil gå tapt.", - latex_name_label: "LaTeX-formel", - browser_no_compatible: - "Nettleseren er ikke kompatibel med AJAX-teknologien. Bruk den nyeste versjonen av Mozilla Firefox.", - error_convert_accessibility: "Feil under konvertering fra MathML til tilgjengelig tekst.", - exception_cross_site: "Skripting på tvers av nettsteder er bare tillatt med HTTP.", - exception_high_surrogate: "Høyt surrogat etterfølges ikke av lavt surrogat i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Lengden må være delelig på 4", - exception_key_nonobject: "Object.keys kalte på et ikke-objekt", - exception_null_or_undefined: " dette er null eller ikke definert", - exception_not_function: " er ikke en funksjon", - exception_invalid_date_format: "Ugyldig datoformat: ", - exception_casting: "Kan ikke bruke casting ", - exception_casting_to: " til ", - }; - var nn = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Set inn", - manual: "Håndbok", - insert_math: "Sett inn matematikkformel - MathType", - insert_chem: "Set inn ein kjemisk formel – ChemType", - minimize: "Minimer", - maximize: "Maksimer", - fullscreen: "Fullskjerm", - exit_fullscreen: "Avslutt fullskjerm", - close: "Lukk", - mathtype: "MathType", - title_modalwindow: "Modalt MathType-vindu", - close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", - latex_name_label: "LaTeX-formel", - browser_no_compatible: - "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", - error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", - exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", - exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", - exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", - exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", - exception_null_or_undefined: " dette er null eller ikkje definert", - exception_not_function: " er ikkje ein funksjon", - exception_invalid_date_format: "Ugyldig datoformat: ", - exception_casting: "Kan ikkje bruka casting ", - exception_casting_to: " til ", - }; - var pl = { - latex: "LaTeX", - cancel: "Anuluj", - accept: "Wstaw", - manual: "Instrukcja", - insert_math: "Wstaw formułę matematyczną - MathType", - insert_chem: "Wstaw wzór chemiczny — ChemType", - minimize: "Minimalizuj", - maximize: "Maksymalizuj", - fullscreen: "Pełny ekran", - exit_fullscreen: "Opuść tryb pełnoekranowy", - close: "Zamknij", - mathtype: "MathType", - title_modalwindow: "Okno modalne MathType", - close_modal_warning: "Czy na pewno chcesz zamknąć? Wprowadzone zmiany zostaną utracone.", - latex_name_label: "Wzór Latex", - browser_no_compatible: - "Twoja przeglądarka jest niezgodna z technologią AJAX Użyj najnowszej wersji Mozilla Firefox.", - error_convert_accessibility: "Błąd podczas konwertowania z formatu MathML na dostępny tekst.", - exception_cross_site: "Krzyżowanie skryptów witryny jest dozwolone tylko dla HTTP.", - exception_high_surrogate: "Brak niskiego surogatu po wysokim surogacie w fixedCharCodeAt()", - exception_string_length: "Niewłaściwy ciąg znaków. Długość musi być wielokrotnością liczby 4.", - exception_key_nonobject: "Argumentem wywołanej funkcji Object.key nie jest obiekt.", - exception_null_or_undefined: " jest zerowy lub niezdefiniowany", - exception_not_function: " nie jest funkcją", - exception_invalid_date_format: "Nieprawidłowy format daty: ", - exception_casting: "Nie można rzutować ", - exception_casting_to: " na ", - }; - var pt = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir fórmula matemática - MathType", - insert_chem: "Inserir uma fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Ecrã completo", - exit_fullscreen: "Sair do ecrã completo", - close: "Fechar", - mathtype: "MathType", - title_modalwindow: "Janela modal do MathType", - close_modal_warning: "Pretende sair? As alterações efetuadas serão perdidas.", - latex_name_label: "Fórmula Latex", - browser_no_compatible: - "O seu navegador não é compatível com a tecnologia AJAX. Utilize a versão mais recente do Mozilla Firefox.", - error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", - exception_cross_site: "O processamento de scripts em vários sites só é permitido para HTTP.", - exception_high_surrogate: "Substituto alto não seguido por um substituto baixo em fixedCharCodeAt()", - exception_string_length: "Cadeia inválida. O comprimento tem de ser um múltiplo de 4", - exception_key_nonobject: "Object.keys chamou um não-objeto", - exception_null_or_undefined: " é nulo ou não está definido", - exception_not_function: " não é uma função", - exception_invalid_date_format: "Formato de data inválido: ", - exception_casting: "Não é possível adicionar ", - exception_casting_to: " até ", - }; - var pt_br = { - latex: "LaTeX", - cancel: "Cancelar", - accept: "Inserir", - manual: "Manual", - insert_math: "Inserir fórmula matemática - MathType", - insert_chem: "Insira uma fórmula química - ChemType", - minimize: "Minimizar", - maximize: "Maximizar", - fullscreen: "Tela cheia", - exit_fullscreen: "Sair de tela cheia", - close: "Fechar", - mathtype: "MathType", - title_modalwindow: "Janela modal do MathType", - close_modal_warning: "Tem certeza de que deseja sair? Todas as alterações serão perdidas.", - latex_name_label: "Fórmula LaTeX", - browser_no_compatible: - "O navegador não é compatível com a tecnologia AJAX. Use a versão mais recente do Mozilla Firefox.", - error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", - exception_cross_site: "O uso de scripts entre sites só é permitido para HTTP.", - exception_high_surrogate: "High surrogate não seguido de low surrogate em fixedCharCodeAt()", - exception_string_length: "String inválida. O comprimento deve ser um múltiplo de 4", - exception_key_nonobject: "Object.keys chamados em não objeto", - exception_null_or_undefined: " isto é nulo ou não definido", - exception_not_function: " não é uma função", - exception_invalid_date_format: "Formato de data inválido: ", - exception_casting: "Não é possível transmitir ", - exception_casting_to: " para ", - }; - var ro = { - latex: "LaTeX", - cancel: "Anulare", - accept: "Inserați", - manual: "Ghid", - insert_math: "Inserați o formulă matematică - MathType", - insert_chem: "Inserați o formulă chimică - ChemType", - minimize: "Minimizați", - maximize: "Maximizați", - fullscreen: "Afișați pe tot ecranul", - exit_fullscreen: "Opriți afișarea pe tot ecranul", - close: "Închideți", - mathtype: "MathType", - title_modalwindow: "Fereastră modală MathType", - close_modal_warning: "Sigur doriți să ieșiți? Modificările realizate se vor pierde.", - latex_name_label: "Formulă Latex", - browser_no_compatible: - "Browserul dvs. nu este compatibil cu tehnologia AJAX. Utilizați cea mai recentă versiune de Mozilla Firefox.", - error_convert_accessibility: "Eroare la convertirea din MathML în text accesibil.", - exception_cross_site: "Scriptarea între site‑uri este permisă doar pentru HTTP.", - exception_high_surrogate: "Surogatul superior nu este urmat de un surogat inferior în fixedCharCodeAt()", - exception_string_length: "Șir nevalid. Lungimea trebuie să fie multiplu de 4", - exception_key_nonobject: "Object.keys a apelat un non-obiect", - exception_null_or_undefined: " este null sau nu este definit", - exception_not_function: " nu este funcție", - exception_invalid_date_format: "Format de dată nevalid: ", - exception_casting: "nu se poate difuza ", - exception_casting_to: " către ", - }; - var ru = { - latex: "LaTeX", - cancel: "отмена", - accept: "Вставка", - manual: "вручную", - insert_math: "Вставить математическую формулу: WIRIS", - insert_chem: "Вставить химическую формулу — ChemType", - minimize: "Свернуть", - maximize: "Развернуть", - fullscreen: "На весь экран", - exit_fullscreen: "Выйти из полноэкранного режима", - close: "Закрыть", - mathtype: "MathType", - title_modalwindow: "Режимное окно MathType", - close_modal_warning: "Вы уверены, что хотите выйти? Все внесенные изменения будут утрачены.", - latex_name_label: "Формула Latex", - browser_no_compatible: "Ваш браузер несовместим с технологией AJAX. Используйте последнюю версию Mozilla Firefox.", - error_convert_accessibility: "При преобразовании формулы в текст допустимого формата произошла ошибка.", - exception_cross_site: "Межсайтовые сценарии доступны только для HTTP.", - exception_high_surrogate: - "Младший символ-заместитель не сопровождает старший символ-заместитель в исправленном методе CharCodeAt()", - exception_string_length: "Недопустимая строка. Длинна должна быть кратной 4.", - exception_key_nonobject: "Метод Object.keys вызван не для объекта", - exception_null_or_undefined: " значение пустое или не определено", - exception_not_function: " не функция", - exception_invalid_date_format: "Недопустимый формат даты: ", - exception_casting: "Не удается привести ", - exception_casting_to: " к ", - }; - var sv = { - latex: "LaTeX", - cancel: "Avbryt", - accept: "Infoga", - manual: "Bruksanvisning", - insert_math: "Infoga matematisk formel - MathType", - insert_chem: "Infoga en kemiformel – ChemType", - minimize: "Minimera", - maximize: "Maximera", - fullscreen: "Helskärm", - exit_fullscreen: "Stäng helskärm", - close: "Stäng", - mathtype: "MathType", - title_modalwindow: "MathType modulfönster", - close_modal_warning: "Vill du avsluta? Inga ändringar kommer att sparas.", - latex_name_label: "Latex-formel", - browser_no_compatible: - "Din webbläsare är inte kompatibel med AJAX-teknik. Använd den senaste versionen av Mozilla Firefox.", - error_convert_accessibility: "Det uppstod ett fel vid konvertering från MathML till åtkomlig text.", - exception_cross_site: "Skriptkörning över flera sajter är endast tillåtet för HTTP.", - exception_high_surrogate: "Hög surrogat följs inte av låg surrogat i fixedCharCodeAt()", - exception_string_length: "Ogiltig sträng. Längden måste vara en multipel av 4", - exception_key_nonobject: "Object.keys anropade icke-objekt", - exception_null_or_undefined: " det är null eller inte definierat", - exception_not_function: " är inte en funktion", - exception_invalid_date_format: "Ogiltigt datumformat: ", - exception_casting: "Går inte att konvertera ", - exception_casting_to: " till ", - }; - var tr = { - latex: "LaTeX", - cancel: "Vazgeç", - accept: "Ekle", - manual: "Kılavuz", - insert_math: "Matematik formülü ekle - MathType", - insert_chem: "Kimya formülü ekleyin - ChemType", - minimize: "Simge Durumuna Küçült", - maximize: "Ekranı Kapla", - fullscreen: "Tam Ekran", - exit_fullscreen: "Tam Ekrandan Çık", - close: "Kapat", - mathtype: "MathType", - title_modalwindow: "MathType kalıcı penceresi", - close_modal_warning: "Çıkmak istediğinizden emin misiniz? Yaptığınız değişiklikler kaybolacak.", - latex_name_label: "Latex Formülü", - browser_no_compatible: - "Tarayıcınız AJAX teknolojisiyle uyumlu değil. Lütfen en güncel Mozilla Firefox sürümünü kullanın.", - error_convert_accessibility: "MathML biçiminden erişilebilir metne dönüştürme hatası.", - exception_cross_site: "Siteler arası komut dosyası yazma işlemine yalnızca HTTP için izin verilir.", - exception_high_surrogate: "fixedCharCodeAt() fonksiyonunda üst vekilin ardından alt vekil gelmiyor", - exception_string_length: "Geçersiz dizgi. Uzunluk, 4'ün katlarından biri olmalıdır", - exception_key_nonobject: "Nesne olmayan öğe üzerinde Object.keys çağrıldı", - exception_null_or_undefined: " bu değer boş veya tanımlanmamış", - exception_not_function: " bir fonksiyon değil", - exception_invalid_date_format: "Geçersiz tarih biçimi: ", - exception_casting: "Tür dönüştürülemiyor ", - exception_casting_to: " hedef: ", - }; - var zh = { - latex: "LaTeX", - cancel: "取消", - accept: "插入", - manual: "手册", - insert_math: "插入数学公式 - MathType", - insert_chem: "插入化学分子式 - ChemType", - minimize: "最小化", - maximize: "最大化", - fullscreen: "全屏幕", - exit_fullscreen: "退出全屏幕", - close: "关闭", - mathtype: "MathType", - title_modalwindow: "MathType 模式窗口", - close_modal_warning: "您确定要离开吗?您所做的修改将丢失。", - latex_name_label: "Latex 分子式", - browser_no_compatible: "您的浏览器不兼容 AJAX 技术。请使用最新版 Mozilla Firefox。", - error_convert_accessibility: "将 MathML 转换为可访问文本时出错。", - exception_cross_site: "仅 HTTP 允许跨站脚本。", - exception_high_surrogate: "fixedCharCodeAt() 中的高位代理之后未跟随低位代理", - exception_string_length: "无效字符串。长度必须是 4 的倍数", - exception_key_nonobject: "非对象调用了 Object.keys", - exception_null_or_undefined: " 该值为空或未定义", - exception_not_function: " 不是一个函数", - exception_invalid_date_format: "无效日期格式: ", - exception_casting: "无法转换 ", - exception_casting_to: " 为 ", - }; - var translations = { - ar: ar, - ca: ca, - cs: cs, - da: da, - de: de, - el: el, - en: en, - es: es, - et: et, - eu: eu, - fi: fi, - fr: fr, - gl: gl, - he: he, - hr: hr, - hu: hu, - id: id, - it: it, - ja: ja, - ko: ko, - nl: nl, - no: no, - nb: nb, - nn: nn, - pl: pl, - pt: pt, - pt_br: pt_br, - ro: ro, - ru: ru, - sv: sv, - tr: tr, - zh: zh, - "": {}, - }; + /** + * @classdesc + * This class represents a LaTeX parser. Manages the services which allows to convert + * LaTeX into MathML and MathML into LaTeX. + */ class Latex { + /** + * Static property. + * Return latex cache. + * @private + * @type {Cache} + */ static get cache() { + return Latex._cache; + } + /** + * Static property setter. + * Set latex cache. + * @param {Cache} value - The property value. + * @ignore + */ static set cache(value) { + Latex._cache = value; + } + /** + * Converts MathML to LaTeX by calling mathml2latex service. For text services + * we call a text service with the param mathml2latex. + * @param {String} mathml - MathML String. + * @return {String} LaTeX string generated by the MathML argument. + */ static getLatexFromMathML(mathml) { + const mathmlWithoutSemantics = MathML.removeSemantics(mathml); + /** + * @type {TextCache} + */ const { cache } = Latex; + const data = { + service: "mathml2latex", + mml: mathmlWithoutSemantics + }; + const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); + // TODO: Error handling. + let latex = ""; + if (jsonResponse.status === "ok") { + latex = jsonResponse.result.text; + const latexHtmlEntitiesEncoded = Util.htmlEntities(latex); + // Inserting LaTeX semantics. + const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, "LaTeX"); + cache.populate(latex, mathmlWithSemantics); + } + return latex; + } + /** + * Converts LaTeX to MathML by calling latex2mathml service. For text services + * we call a text service with the param latex2mathml. + * @param {String} latex - String containing a LaTeX formula. + * @param {Boolean} includeLatexOnSemantics + * - If true LaTeX would me included into MathML semantics. + * @return {String} MathML string generated by the LaTeX argument. + */ static getMathMLFromLatex(latex, includeLatexOnSemantics) { + /** + * @type {TextCache} + */ const latexCache = Latex.cache; + if (Latex.cache.get(latex)) { + return Latex.cache.get(latex); + } + const data = { + service: "latex2mathml", + latex + }; + if (includeLatexOnSemantics) { + data.saveLatex = ""; + } + const jsonResponse = JSON.parse(ServiceProvider.getService("service", data)); + let output; + if (jsonResponse.status === "ok") { + let mathml = jsonResponse.result.text; + mathml = mathml.split("\r").join("").split("\n").join(" "); + // Populate LatexCache. + if (mathml.indexOf("semantics") === -1 && mathml.indexOf("annotation") === -1) { + const content = Util.htmlEntities(latex); + mathml = MathML.addAnnotation(mathml, content, "LaTeX"); + output = mathml; + } else { + output = mathml; + } + if (!latexCache.get(latex)) { + latexCache.populate(latex, mathml); + } + } else { + output = `$$${latex}$$`; + } + return output; + } + /** + * Converts all occurrences of MathML code to LaTeX. + * The MathML code should containing to be converted. + * @param {String} content - A string containing MathML valid code. + * @param {Object} characters - An object containing special characters. + * @return {String} A string containing all MathML annotated occurrences + * replaced by the corresponding LaTeX code. + */ static parseMathmlToLatex(content, characters) { + let output = ""; + const mathTagBegin = `${characters.tagOpener}math`; + const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; + const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`; + const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`; + let start = content.indexOf(mathTagBegin); + let end = 0; + let mathml; + let startAnnotation; + let closeAnnotation; + while(start !== -1){ + output += content.substring(end, start); + end = content.indexOf(mathTagEnd, start); + if (end === -1) { + end = content.length - 1; + } else { + end += mathTagEnd.length; + } + mathml = content.substring(start, end); + startAnnotation = mathml.indexOf(openTarget); + if (startAnnotation !== -1) { + startAnnotation += openTarget.length; + closeAnnotation = mathml.indexOf(closeTarget); + let latex = mathml.substring(startAnnotation, closeAnnotation); + if (characters === Constants.safeXmlCharacters) { + latex = MathML.safeXmlDecode(latex); + } + output += `$$${latex}$$`; + // Populate latex into cache. + Latex.cache.populate(latex, mathml); + } else { + output += mathml; + } + start = content.indexOf(mathTagBegin, end); + } + output += content.substring(end, content.length); + return output; + } + /** + * Extracts the latex of a determined position in a text. + * @param {Node} textNode - textNode to extract the LaTeX + * @param {Number} caretPosition - Starting position to find LaTeX. + * @param {Object} latexTags - Optional parameter representing tags between latex is inserted. + * It has the 'open' attribute for the open tag and the 'close' attribute for the close tag. + * "$$" by default. + * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found. + * @static + */ static getLatexFromTextNode(textNode, caretPosition, latexTags) { + // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument). + // Tags used for LaTeX formulas. + const defaultLatexTags = { + open: "$$", + close: "$$" + }; + // latexTags is an optional parameter. If is not set, use default latexTags. + if (typeof latexTags === "undefined" || latexTags == null) { + latexTags = defaultLatexTags; + } + // Looking for the first textNode. + let startNode = textNode; + while(startNode.previousSibling && startNode.previousSibling.nodeType === 3){ + // TEXT_NODE. + startNode = startNode.previousSibling; + } + /** + * Returns the next latex position and node from a specific node and position. + * @param {Node} currentNode - Node where searching latex. + * @param {Number} currentPosition - Current position inside the currentNode. + * @param {Object} latexTagsToUse - Tags used at latex beginning and latex final. + * "$$" by default. + * @param {Boolean} tag - Tag containing the current search. + * @returns {Object} Object containing the current node and the position. + */ function getNextLatexPosition(currentNode, currentPosition, tag) { + let position = currentNode.nodeValue.indexOf(tag, currentPosition); + while(position === -1){ + currentNode = currentNode.nextSibling; + if (!currentNode) { + // TEXT_NODE. + return null; // Not found. + } + position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1; + } + return { + node: currentNode, + position + }; + } + /** + * Determines if a node is previous, or not, to a second one. + * @param {Node} node - Start node. + * @param {Number} position - Start node position. + * @param {Node} endNode - End node. + * @param {Number} endPosition - End node position. + * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise. + */ function isPrevious(node, position, endNode, endPosition) { + if (node === endNode) { + return position <= endPosition; + } + while(node && node !== endNode){ + node = node.nextSibling; + } + return node === endNode; + } + let start; + let end = { + node: startNode, + position: 0 + }; + // Is supposed that open and close tags has the same length. + const tagLength = latexTags.open.length; + do { + start = getNextLatexPosition(end.node, end.position, latexTags.open); + if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) { + return null; + } + end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close); + if (end == null) { + return null; + } + end.position += tagLength; + }while (isPrevious(end.node, end.position, textNode, caretPosition)) + // Isolating latex. + let latex; + if (start.node === end.node) { + latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength); + } else { + const index = start.position + tagLength; + latex = start.node.nodeValue.substring(index, start.node.nodeValue.length); + let currentNode = start.node; + do { + currentNode = currentNode.nextSibling; + if (currentNode === end.node) { + latex += end.node.nodeValue.substring(0, end.position - tagLength); + } else { + latex += currentNode.nodeValue ? currentNode.nodeValue : ""; + } + }while (currentNode !== end.node) + } + return { + latex, + startNode: start.node, + startPosition: start.position, + endNode: end.node, + endPosition: end.position + }; + } + } + /** + * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string. + * @type {Cache} + * @static + */ Latex._cache = new TextCache(); - /** - * This class represents a string manager. It's used to load localized strings. - */ class StringManager { - constructor() { - throw new Error("Static class StringManager can not be instantiated."); - } - /** - * Returns the associated value of certain string key. If the associated value - * doesn't exits returns the original key. - * @param {string} key - string key - * @param {string} lang - DEFAULT = null. Specify the language to translate the string - * @returns {string} correspondent value. If doesn't exists original key. - */ static get(key, lang) { - // Default language definition - let { language } = this; - // If parameter language, use it - if (lang) { - language = lang; - } - // Cut down on strings. e.g. en_US -> en - if (language && language.length > 2) { - language = language.slice(0, 2); - } - // Check if we support the language - if (!this.strings.hasOwnProperty(language)) { - // eslint-disable-line no-prototype-builtins - console.warn(`Unknown language ${language} set in StringManager.`); - language = "en"; - } - // Check if the key is supported in the given language - if (!this.strings[language].hasOwnProperty(key)) { - // eslint-disable-line no-prototype-builtins - console.warn(`Unknown key ${key} for language ${language} in StringManager.`); - return key; - } - return this.strings[language][key]; - } - } - /** - * Dictionary of dictionaries: - * Key: language code - * Value: Key: id of the string - * Value: translation of the string - */ StringManager.strings = translations; - /** - * Language of the translations; English by default - */ StringManager.language = "en"; + var ar = { + latex: "LaTeX", + cancel: "إلغاء", + accept: "إدراج", + manual: "الدليل", + insert_math: "إدراج صيغة رياضية - MathType", + insert_chem: "إدراج صيغة كيميائية - ChemType", + minimize: "تصغير", + maximize: "تكبير", + fullscreen: "ملء الشاشة", + exit_fullscreen: "الخروج من ملء الشاشة", + close: "إغلاق", + mathtype: "MathType", + title_modalwindow: "نافذة MathType مشروطة", + close_modal_warning: "هل تريد المغادرة بالتأكيد؟ ستُفقد التغييرات التي أجريتها.", + latex_name_label: "صيغة Latex", + browser_no_compatible: "المستعرض غير متوافق مع تقنية AJAX. الرجاء استخدام أحدث إصدار من Mozilla Firefox.", + error_convert_accessibility: "حدث خطأ أثناء التحويل من MathML إلى نص قابل للاستخدام.", + exception_cross_site: "البرمجة النصية للمواقع المشتركة مسموح بها لـ HTTP فقط.", + exception_high_surrogate: "المركّب المرتفع غير متبوع بمركّب منخفض في fixedCharCodeAt()‎", + exception_string_length: "سلسلة غير صالحة. يجب أن يكون الطول من مضاعفات العدد 4", + exception_key_nonobject: "Object.keys مستدعاة على غير كائن", + exception_null_or_undefined: " هذا فارغ أو غير محدد", + exception_not_function: " ليست دالة", + exception_invalid_date_format: "تنسيق تاريخ غير صالح: ", + exception_casting: "لا يمكن الصياغة ", + exception_casting_to: " إلى " + }; + var ca = { + latex: "LaTeX", + cancel: "Cancel·lar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir fórmula matemàtica - MathType", + insert_chem: "Inserir fórmula química - ChemType", + minimize: "Minimitza", + maximize: "Maximitza", + fullscreen: "Pantalla completa", + exit_fullscreen: "Sortir de la pantalla complera", + close: "Tanca", + mathtype: "MathType", + title_modalwindow: " Finestra modal de MathType", + close_modal_warning: "N'estàs segur que vols sortir? Es perdran els canvis que has fet.", + latex_name_label: "Fórmula en Latex", + browser_no_compatible: "El teu navegador no és compatible amb AJAX. Si us plau, usa la darrera versió de Mozilla Firefox.", + error_convert_accessibility: "Error en convertir de MathML a text accessible.", + exception_cross_site: "Els scripts de llocs creuats només estan permesos per HTTP.", + exception_high_surrogate: "Subrogat alt no seguit de subrogat baix a fixedCharCodeAt()", + exception_string_length: "Cadena invàlida. La longitud ha de ser un múltiple de 4", + exception_key_nonobject: "Object.keys anomenat a non-object", + exception_null_or_undefined: " això és null o no definit", + exception_not_function: " no és una funció", + exception_invalid_date_format: "Format de data invàlid : ", + exception_casting: "No es pot emetre ", + exception_casting_to: " a " + }; + var cs = { + latex: "LaTeX", + cancel: "Storno", + accept: "Vložit", + manual: "Příručka", + insert_math: "Vložit matematický vzorec - MathType", + insert_chem: "Vložení chemického vzorce – ChemType", + minimize: "Minimalizovat", + maximize: "Maximalizovat", + fullscreen: "Celá obrazovka", + exit_fullscreen: "Opustit režim celé obrazovky", + close: "Zavřít", + mathtype: "MathType", + title_modalwindow: "Modální okno MathType", + close_modal_warning: "Opravdu chcete okno zavřít? Provedené změny budou ztraceny.", + latex_name_label: "Vzorec v LaTeXu", + browser_no_compatible: "Váš prohlížeč nepodporuje technologii AJAX. Použijte nejnovější verzi prohlížeče Mozilla Firefox.", + error_convert_accessibility: "Při převodu kódu MathML na čitelný text došlo k chybě.", + exception_cross_site: "Skriptování mezi více servery je povoleno jen v HTTP.", + exception_high_surrogate: "Ve funkci fixedCharCodeAt() nenásleduje po první části kódu znaku druhá část", + exception_string_length: "Neplatný řetězec. Délka musí být násobkem 4.", + exception_key_nonobject: "Funkce Object.keys byla použita pro prvek, který není objektem", + exception_null_or_undefined: " hodnota je null nebo není definovaná", + exception_not_function: " není funkce", + exception_invalid_date_format: "Neplatný formát data: ", + exception_casting: "Nelze přetypovat ", + exception_casting_to: " na " + }; + var da = { + latex: "LaTeX", + cancel: "Annuller", + accept: "Indsæt", + manual: "Brugervejledning", + insert_math: "Indsæt matematisk formel - MathType", + insert_chem: "Indsæt en kemisk formel - ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fuld skærm", + exit_fullscreen: "Afslut Fuld skærm", + close: "Luk", + mathtype: "MathType", + title_modalwindow: "MathType-modalvindue", + close_modal_warning: "Er du sikker på, du vil lukke? Dine ændringer går tabt.", + latex_name_label: "LaTex-formel", + browser_no_compatible: "Din browser er ikke kompatibel med AJAX-teknologi. Brug den nyeste version af Mozilla Firefox.", + error_convert_accessibility: "Fejl under konvertering fra MathML til tilgængelig tekst.", + exception_cross_site: "Scripts på tværs af websteder er kun tilladt for HTTP.", + exception_high_surrogate: "Et højt erstatningstegn er ikke fulgt af et lavt erstatningstegn i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Længden skal være et multiplum af 4", + exception_key_nonobject: "Object.keys kaldet ved ikke-objekt", + exception_null_or_undefined: " dette er nul eller ikke defineret", + exception_not_function: " er ikke en funktion", + exception_invalid_date_format: "Ugyldigt datoformat: ", + exception_casting: "Kan ikke beregne ", + exception_casting_to: " til " + }; + var de = { + latex: "LaTeX", + cancel: "Abbrechen", + accept: "Einfügen", + manual: "Handbuch", + insert_math: "Mathematische Formel einfügen - MathType", + insert_chem: "Eine chemische Formel einfügen – ChemType", + minimize: "Verkleinern", + maximize: "Vergrößern", + fullscreen: "Vollbild", + exit_fullscreen: "Vollbild schließen", + close: "Schließen", + mathtype: "MathType", + title_modalwindow: "Modales MathType-Fenster", + close_modal_warning: "Bist du sicher, dass du das Programm verlassen willst? Alle vorgenommenen Änderungen gehen damit verloren.", + latex_name_label: "Latex-Formel", + browser_no_compatible: "Dein Browser ist nicht mit der AJAX-Technologie kompatibel. Verwende bitte die neueste Version von Mozilla Firefox.", + error_convert_accessibility: "Fehler beim Konvertieren von MathML in barrierefreien Text.", + exception_cross_site: "Cross-Site-Scripting ist nur bei HTTP zulässig.", + exception_high_surrogate: "Hoher Ersatz bei bei festerZeichenkodierungbei() nicht von niedrigem Ersatz befolgt.", + exception_string_length: "Ungültige Zeichenfolge. Länge muss ein Vielfaches von 4 sein.", + exception_key_nonobject: "Object.keys wurde für ein Nicht-Objekt aufgerufen.", + exception_null_or_undefined: " Das ist Null oder nicht definiert.", + exception_not_function: " ist keine Funktion", + exception_invalid_date_format: "Ungültiges Datumsformat: ", + exception_casting: "Umwandlung nicht möglich ", + exception_casting_to: " zu " + }; + var el = { + latex: "LaTeX", + cancel: "Άκυρο", + accept: "Εισαγωγή", + manual: "Χειροκίνητα", + insert_math: "Εισαγωγή μαθηματικού τύπου - MathType", + insert_chem: "Εισαγωγή χημικού τύπου - ChemType", + minimize: "Ελαχιστοποίηση", + maximize: "Μεγιστοποίηση", + fullscreen: "Πλήρης οθόνη", + exit_fullscreen: "Έξοδος από πλήρη οθόνη", + close: "Κλείσιμο", + mathtype: "MathType", + title_modalwindow: "Τροπικό παράθυρο MathType", + close_modal_warning: "Επιθυμείτε σίγουρα αποχώρηση; Θα χαθούν οι αλλαγές που έχετε κάνει.", + latex_name_label: "Τύπος LaTeX", + browser_no_compatible: "Το πρόγραμμα περιήγησής σας δεν είναι συμβατό με την τεχνολογία AJAX. Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Mozilla Firefox.", + error_convert_accessibility: "Σφάλμα κατά τη μετατροπή από MathML σε προσβάσιμο κείμενο.", + exception_cross_site: "Το XSS (Cross site scripting) επιτρέπεται μόνο για HTTP.", + exception_high_surrogate: "Το υψηλό υποκατάστατο δεν ακολουθείται από χαμηλό υποκατάστατο στο fixedCharCodeAt()", + exception_string_length: "Μη έγκυρη συμβολοσειρά. Το μήκος πρέπει να είναι πολλαπλάσιο του 4", + exception_key_nonobject: "Έγινε κλήση του Object.keys σε μη αντικείμενο", + exception_null_or_undefined: " αυτό είναι μηδενικό ή δεν έχει οριστεί", + exception_not_function: " δεν είναι συνάρτηση", + exception_invalid_date_format: "Μη έγκυρη μορφή ημερομηνίας: ", + exception_casting: "Δεν είναι δυνατή η μετατροπή ", + exception_casting_to: " σε " + }; + var en = { + latex: "LaTeX", + cancel: "Cancel", + accept: "Insert", + manual: "Manual", + insert_math: "Insert a math equation - MathType", + insert_chem: "Insert a chemistry formula - ChemType", + minimize: "Minimize", + maximize: "Maximize", + fullscreen: "Full-screen", + exit_fullscreen: "Exit full-screen", + close: "Close", + mathtype: "MathType", + title_modalwindow: "MathType modal window", + close_modal_warning: "Are you sure you want to leave? The changes you made will be lost.", + latex_name_label: "Latex Formula", + browser_no_compatible: "Your browser is not compatible with AJAX technology. Please, use the latest version of Mozilla Firefox.", + error_convert_accessibility: "Error converting from MathML to accessible text.", + exception_cross_site: "Cross site scripting is only allowed for HTTP.", + exception_high_surrogate: "High surrogate not followed by low surrogate in fixedCharCodeAt()", + exception_string_length: "Invalid string. Length must be a multiple of 4", + exception_key_nonobject: "Object.keys called on non-object", + exception_null_or_undefined: " this is null or not defined", + exception_not_function: " is not a function", + exception_invalid_date_format: "Invalid date format : ", + exception_casting: "Cannot cast ", + exception_casting_to: " to " + }; + var es = { + latex: "LaTeX", + cancel: "Cancelar", + accept: "Insertar", + manual: "Manual", + insert_math: "Insertar fórmula matemática - MathType", + insert_chem: "Insertar fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Pantalla completa", + exit_fullscreen: "Salir de pantalla completa", + close: "Cerrar", + mathtype: "MathType", + title_modalwindow: "Ventana modal de MathType", + close_modal_warning: "Seguro que quieres cerrar? Los cambios que has hecho se perderán", + latex_name_label: "Formula en Latex", + browser_no_compatible: "Tu navegador no es complatible con AJAX. Por favor, usa la última version de Mozilla Firefox.", + error_convert_accessibility: "Error conviertiendo una fórmula MathML a texto accesible.", + exception_cross_site: "Cross site scripting solo está permitido para HTTP.", + exception_high_surrogate: "Subrogado alto no seguido por subrogado bajo en fixedCharCodeAt()", + exception_string_length: "Cadena no válida. La longitud debe ser múltiplo de 4", + exception_key_nonobject: "Object.keys called on non-object", + exception_null_or_undefined: " esto es null o no definido", + exception_not_function: " no es una función", + exception_invalid_date_format: "Formato de fecha inválido: ", + exception_casting: "No se puede emitir", + exception_casting_to: " a " + }; + var et = { + latex: "LaTeX", + cancel: "Loobu", + accept: "Lisa", + manual: "Käsiraamat", + insert_math: "Lisa matemaatiline valem – WIRIS", + insert_chem: "Lisa keemiline valem – ChemType", + minimize: "Minimeeri", + maximize: "Maksimeeri", + fullscreen: "Täiskuva", + exit_fullscreen: "Välju täiskuvalt", + close: "Sule", + mathtype: "MathType", + title_modalwindow: "MathType'i modaalaken", + close_modal_warning: "Kas soovite kindlasti lahkuda? Tehtud muudatused lähevad kaduma.", + latex_name_label: "Latexi valem", + browser_no_compatible: "Teie brauser ei ühildu AJAXi tehnoloogiaga. Palun kasutage Mozilla Firefoxi uusimat versiooni.", + error_convert_accessibility: "Tõrge teisendamisel MathML-ist muudetavaks tekstiks.", + exception_cross_site: "Ristskriptimine on lubatud ainult HTTP kasutamisel.", + exception_high_surrogate: "Funktsioonis fixedCharCodeAt() ei järgne kõrgemale asendusliikmele madalam asendusliige.", + exception_string_length: "Vigane string. Pikkus peab olema 4 kordne.", + exception_key_nonobject: "Protseduur Object.keys kutsuti mitteobjekti korral.", + exception_null_or_undefined: " see on null või määramata", + exception_not_function: " ei ole funktsioon", + exception_invalid_date_format: "Sobimatu kuupäeva kuju: ", + exception_casting: "Esitamine ei õnnestu ", + exception_casting_to: " – " + }; + var eu = { + latex: "LaTeX", + cancel: "Ezeztatu", + accept: "Txertatu", + manual: "Gida", + insert_math: "Txertatu matematikako formula - MathType", + insert_chem: "Txertatu formula kimiko bat - ChemType", + minimize: "Ikonotu", + maximize: "Maximizatu", + fullscreen: "Pantaila osoa", + exit_fullscreen: "Irten pantaila osotik", + close: "Itxi", + mathtype: "MathType", + title_modalwindow: "MathType leiho modala", + close_modal_warning: "Ziur irten nahi duzula? Egiten dituzun aldaketak galdu egingo dira.", + latex_name_label: "LaTex Formula", + browser_no_compatible: "Zure arakatzailea ez da bateragarria AJAX teknologiarekin. Erabili Mozilla Firefoxen azken bertsioa.", + error_convert_accessibility: "Errorea MathMLtik testu irisgarrira bihurtzean.", + exception_cross_site: "Gune arteko scriptak HTTPrako soilik onartzen dira.", + exception_high_surrogate: "Ordezko baxuak ez dio ordezko altuari jarraitzen, hemen: fixedCharCodeAt()", + exception_string_length: "Kate baliogabea. Luzerak 4ren multiploa izan behar du", + exception_key_nonobject: "Object.keys deitu zaio objektua ez den zerbaiti", + exception_null_or_undefined: " nulua edo definitu gabea da", + exception_not_function: " ez da funtzio bat", + exception_invalid_date_format: "Data-formatu baliogabea : ", + exception_casting: "Ezin da igorri ", + exception_casting_to: " honi " + }; + var fi = { + latex: "LaTeX", + cancel: "Peruuta", + accept: "Lisää", + manual: "Manual", + insert_math: "Liitä matemaattinen kaava - MathType", + insert_chem: "Lisää kemian kaava - ChemType", + minimize: "Pienennä", + maximize: "Suurenna", + fullscreen: "Koko ruutu", + exit_fullscreen: "Poistu koko ruudun tilasta", + close: "Sulje", + mathtype: "MathType", + title_modalwindow: "MathTypen modaalinen ikkuna", + close_modal_warning: "Oletko varma, että haluat poistua? Menetät tekemäsi muutokset.", + latex_name_label: "Latex-kaava", + browser_no_compatible: "Selaimesi ei tue AJAX-tekniikkaa. Ole hyvä ja käytä uusinta Firefox-versiota.", + error_convert_accessibility: "Virhe muunnettaessa MathML:stä tekstiksi.", + exception_cross_site: "Cross site scripting sallitaan vain HTTP:llä.", + exception_high_surrogate: "fixedCharCodeAt(): yläsijaismerkkiä ei seurannut alasijaismerkki", + exception_string_length: "Epäkelpo merkkijono. Pituuden on oltava 4:n kerrannainen", + exception_key_nonobject: "Object.keys kutsui muuta kuin oliota", + exception_null_or_undefined: " tämä on null tai ei määritelty", + exception_not_function: " ei ole funktio", + exception_invalid_date_format: "Virheellinen päivämäärämuoto : ", + exception_casting: "Ei voida muuntaa tyyppiä ", + exception_casting_to: " tyyppiin " + }; + var fr = { + latex: "LaTeX", + cancel: "Annuler", + accept: "Insérer", + manual: "Manuel", + insert_math: "Insérer une formule mathématique - MathType", + insert_chem: "Insérer une formule chimique - ChemType", + minimize: "Minimiser", + maximize: "Maximiser", + fullscreen: "Plein écran", + exit_fullscreen: "Quitter le plein écran", + close: "Fermer", + mathtype: "MathType", + title_modalwindow: "Fenêtre modale MathType", + close_modal_warning: "Confirmez-vous vouloir fermer ? Les changements effectués seront perdus.", + latex_name_label: "Formule LaTeX", + browser_no_compatible: "Votre navigateur n’est pas compatible avec la technologie AJAX. Veuillez utiliser la dernière version de Mozilla Firefox.", + error_convert_accessibility: "Une erreur de conversion du format MathML en texte accessible est survenue.", + exception_cross_site: "Le cross-site scripting n’est autorisé que pour HTTP.", + exception_high_surrogate: "Substitut élevé non suivi d’un substitut inférieur dans fixedCharCodeAt()", + exception_string_length: "Chaîne non valide. Longueur limitée aux multiples de 4", + exception_key_nonobject: "Object.keys appelé sur un non-objet", + exception_null_or_undefined: " nul ou non défini", + exception_not_function: " n’est pas une fonction", + exception_invalid_date_format: "Format de date non valide : ", + exception_casting: "Impossible de convertir ", + exception_casting_to: " sur " + }; + var gl = { + latex: "LaTeX", + cancel: "Cancelar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir unha fórmula matemática - MathType", + insert_chem: "Inserir unha fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Pantalla completa", + exit_fullscreen: "Saír da pantalla completa", + close: "Pechar", + mathtype: "MathType", + title_modalwindow: "Ventá modal de MathType", + close_modal_warning: "Seguro que quere saír? Perderanse os cambios realizados.", + latex_name_label: "Fórmula Latex", + browser_no_compatible: "O seu explorador non é compatible coa tecnoloxía AJAX. Use a versión máis recente de Mozilla Firefox.", + error_convert_accessibility: "Erro ao converter de MathML a texto accesible.", + exception_cross_site: "Os scripts de sitios só se permiten para HTTP.", + exception_high_surrogate: "Suplente superior non seguido por suplente inferior en fixedCharCodeAt()", + exception_string_length: "Cadea non válida. A lonxitude debe ser un múltiplo de 4", + exception_key_nonobject: "Claves de obxecto chamadas en non obxecto", + exception_null_or_undefined: " nulo ou non definido", + exception_not_function: " non é unha función", + exception_invalid_date_format: "Formato de data non válido: ", + exception_casting: "Non se pode converter ", + exception_casting_to: " a " + }; + var he = { + latex: "LaTeX", + cancel: "ביטול", + accept: "עדכון", + manual: "ידני", + insert_math: "הוספת נוסחה מתמטית - MathType", + insert_chem: "הוספת כתיבה כימית - ChemType", + minimize: "מזערי", + maximize: "מרבי", + fullscreen: "מסך מלא", + exit_fullscreen: "יציאה ממצב מסך מלא", + close: "סגירה", + mathtype: "MathType", + title_modalwindow: "חלון מודאלי של MathType", + close_modal_warning: "האם לצאת? שינויים אשר בוצעו ימחקו.", + latex_name_label: "נוסחת Latex", + browser_no_compatible: "הדפדפן שלך אינו תואם לטכנולוגיית AJAX. יש להשתמש בגרסה העדכנית ביותר של Mozilla Firefox.", + error_convert_accessibility: "שגיאה בהמרה מ-MathML לטקסט נגיש.", + exception_cross_site: "סקריפטינג חוצה-אתרים מורשה עבור HTTP בלבד.", + exception_high_surrogate: "ערך ממלא מקום גבוה אינו מופיע אחרי ערך ממלא מקום נמוך ב-fixedCharCodeAt()‎", + exception_string_length: "מחרוזת לא חוקית. האורך חייב להיות כפולה של 4", + exception_key_nonobject: "בוצעה קריאה אל Object.keys ברכיב שאינו אובייקט", + exception_null_or_undefined: " הוא Null או לא מוגדר", + exception_not_function: "איננה פונקציה", + exception_invalid_date_format: "תסדיר תאריך אינו תקין : ", + exception_casting: "לא ניתן להמיר ", + exception_casting_to: " ל " + }; + var hr = { + latex: "LaTeX", + cancel: "Poništi", + accept: "Umetni", + manual: "Priručnik", + insert_math: "Umetnite matematičku formulu - MathType", + insert_chem: "Umetnite kemijsku formulu - ChemType", + minimize: "Minimiziraj", + maximize: "Maksimiziraj", + fullscreen: "Cijeli zaslon", + exit_fullscreen: "Izlaz iz prikaza na cijelom zaslonu", + close: "Zatvori", + mathtype: "MathType", + title_modalwindow: "MathType modalni prozor", + close_modal_warning: "Sigurno želite zatvoriti? Izgubit će se unesene promjene.", + latex_name_label: "Latex formula", + browser_no_compatible: "Vaš preglednik nije kompatibilan s AJAX tehnologijom. Upotrijebite najnoviju verziju Mozilla Firefoxa.", + error_convert_accessibility: "Pogreška konverzije iz MathML-a u dostupni tekst.", + exception_cross_site: "Skriptiranje na različitim web-mjestima dopušteno je samo za HTTP.", + exception_high_surrogate: "Iza visoke zamjene ne slijedi niska zamjena u fixedCharCodeAt()", + exception_string_length: "Nevažeći niz. Duljina mora biti višekratnik broja 4", + exception_key_nonobject: "Object.keys pozvano na ne-objekt", + exception_null_or_undefined: " ovo je nula ili nije definirano", + exception_not_function: " nije funkcija", + exception_invalid_date_format: "Nevažeći format datuma : ", + exception_casting: "Ne može se poslati ", + exception_casting_to: " na " + }; + var hu = { + latex: "LaTeX", + cancel: "Mégsem", + accept: "Beszúrás", + manual: "Kézikönyv", + insert_math: "Matematikai képlet beszúrása - MathType", + insert_chem: "Kémiai képet beillesztése - ChemType", + minimize: "Kis méret", + maximize: "Nagy méret", + fullscreen: "Teljes képernyő", + exit_fullscreen: "Teljes képernyő elhagyása", + close: "Bezárás", + mathtype: "MathType", + title_modalwindow: "MathType modális ablak", + close_modal_warning: "Biztosan kilép? A módosítások el fognak veszni.", + latex_name_label: "Latex képlet", + browser_no_compatible: "A böngészője nem kompatibilis az AJAX technológiával. Használja a Mozilla Firefox legújabb verzióját.", + error_convert_accessibility: "Hiba lépett fel a MathML szöveggé történő konvertálása során.", + exception_cross_site: "Az oldalak közti scriptelés csak HTTP esetén engedélyezett.", + exception_high_surrogate: "A magas helyettesítő karaktert nem alacsony helyettesítő karakter követi a fixedCharCodeAt() esetében", + exception_string_length: "Érvénytelen karakterlánc. A hossznak a 4 többszörösének kell lennie", + exception_key_nonobject: "Az Object.keys egy nem objektumra került meghívásra", + exception_null_or_undefined: " null vagy nem definiált", + exception_not_function: " nem függvény", + exception_invalid_date_format: "Érvénytelen dátumformátum: ", + exception_casting: "Nem alkalmazható ", + exception_casting_to: " erre " + }; + var id = { + latex: "LaTeX", + cancel: "Membatalkan", + accept: "Masukkan", + manual: "Manual", + insert_math: "Masukkan rumus matematika - MathType", + insert_chem: "Masukkan rumus kimia - ChemType", + minimize: "Minikan", + maximize: "Perbesar", + fullscreen: "Layar penuh", + exit_fullscreen: "Keluar layar penuh", + close: "Tutup", + mathtype: "MathType", + title_modalwindow: "Jendela modal MathType", + close_modal_warning: "Anda yakin ingin keluar? Anda akan kehilangan perubahan yang Anda buat.", + latex_name_label: "Rumus Latex", + browser_no_compatible: "Penjelajah Anda tidak kompatibel dengan teknologi AJAX. Harap gunakan Mozilla Firefox versi terbaru.", + error_convert_accessibility: "Kesalahan konversi dari MathML menjadi teks yang dapat diakses.", + exception_cross_site: "Skrip lintas situs hanya diizinkan untuk HTTP.", + exception_high_surrogate: "Pengganti tinggi tidak diikuti oleh pengganti rendah di fixedCharCodeAt()", + exception_string_length: "String tidak valid. Panjang harus kelipatan 4", + exception_key_nonobject: "Object.keys meminta nonobjek", + exception_null_or_undefined: " ini tidak berlaku atau tidak didefinisikan", + exception_not_function: " bukan sebuah fungsi", + exception_invalid_date_format: "Format tanggal tidak valid : ", + exception_casting: "Tidak dapat mentransmisikan ", + exception_casting_to: " untuk " + }; + var it = { + latex: "LaTeX", + cancel: "Annulla", + accept: "Inserisci", + manual: "Manuale", + insert_math: "Inserisci una formula matematica - MathType", + insert_chem: "Inserisci una formula chimica - ChemType", + minimize: "Riduci a icona", + maximize: "Ingrandisci", + fullscreen: "Schermo intero", + exit_fullscreen: "Esci da schermo intero", + close: "Chiudi", + mathtype: "MathType", + title_modalwindow: "Finestra modale di MathType", + close_modal_warning: "Confermi di voler uscire? Le modifiche effettuate andranno perse.", + latex_name_label: "Formula LaTeX", + browser_no_compatible: "Il tuo browser non è compatibile con la tecnologia AJAX. Utilizza la versione più recente di Mozilla Firefox.", + error_convert_accessibility: "Errore durante la conversione da MathML in testo accessibile.", + exception_cross_site: "Lo scripting tra siti è consentito solo per HTTP.", + exception_high_surrogate: "Surrogato alto non seguito da surrogato basso in fixedCharCodeAt()", + exception_string_length: "Stringa non valida. La lunghezza deve essere un multiplo di 4", + exception_key_nonobject: "Metodo Object.keys richiamato in un elemento non oggetto", + exception_null_or_undefined: " questo è un valore null o non definito", + exception_not_function: " non è una funzione", + exception_invalid_date_format: "Formato di data non valido: ", + exception_casting: "Impossibile eseguire il cast ", + exception_casting_to: " a " + }; + var ja = { + latex: "LaTeX", + cancel: "キャンセル", + accept: "挿入", + manual: "マニュアル", + insert_math: "数式を挿入 - MathType", + insert_chem: "化学式を挿入 - ChemType", + minimize: "最小化", + maximize: "最大化", + fullscreen: "全画面表示", + exit_fullscreen: "全画面表示を解除", + close: "閉じる", + mathtype: "MathType", + title_modalwindow: "MathType モードウィンドウ", + close_modal_warning: "このページから移動してもよろしいですか?変更内容は失われます。", + latex_name_label: "LaTeX 数式", + browser_no_compatible: "お使いのブラウザは、AJAX 技術と互換性がありません。Mozilla Firefox の最新バージョンをご使用ください。", + error_convert_accessibility: "MathML からアクセシブルなテキストへの変換中にエラーが発生しました。", + exception_cross_site: "クロスサイトスクリプティングは、HTTP のみに許可されています。", + exception_high_surrogate: "fixedCharCodeAt()で上位サロゲートの後に下位サロゲートがありません", + exception_string_length: "無効な文字列です。長さは4の倍数である必要があります", + exception_key_nonobject: "Object.keys が非オブジェクトで呼び出されました", + exception_null_or_undefined: " null であるか、定義されていません", + exception_not_function: " は関数ではありません", + exception_invalid_date_format: "無効な日付形式: ", + exception_casting: "次にキャスト ", + exception_casting_to: " できません " + }; + var ko = { + latex: "LaTeX", + cancel: "취소", + accept: "삽입", + manual: "설명서", + insert_math: "수학 공식 삽입 - MathType", + insert_chem: "화학 공식 입력하기 - ChemType", + minimize: "최소화", + maximize: "최대화", + fullscreen: "전체 화면", + exit_fullscreen: "전체 화면 나가기", + close: "닫기", + mathtype: "MathType", + title_modalwindow: "MathType 모달 창", + close_modal_warning: "정말로 나가시겠습니까? 변경 사항이 손실됩니다.", + latex_name_label: "Latex 공식", + browser_no_compatible: "사용자의 브라우저는 AJAX 기술과 호환되지 않습니다. Mozilla Firefox 최신 버전을 사용하십시오.", + error_convert_accessibility: "MathML로부터 접근 가능한 텍스트로 오류 변환.", + exception_cross_site: "사이트 교차 스크립팅은 HTTP 환경에서만 사용할 수 있습니다.", + exception_high_surrogate: "fixedCharCodeAt()에서는 상위 서러게이트 뒤에 하위 서러게이트가 붙지 않습니다", + exception_string_length: "유효하지 않은 스트링입니다. 길이는 4의 배수여야 합니다", + exception_key_nonobject: "Object.keys가 non-object를 요청하였습니다", + exception_null_or_undefined: " Null값이거나 정의되지 않았습니다", + exception_not_function: " 함수가 아닙니다", + exception_invalid_date_format: "유효하지 않은 날짜 포맷 : ", + exception_casting: "캐스팅할 수 없습니다 ", + exception_casting_to: " (으)로 " + }; + var nl = { + latex: "LaTeX", + cancel: "Annuleren", + insert_chem: "Een scheikundige formule invoegen - ChemType", + minimize: "Minimaliseer", + maximize: "Maximaliseer", + fullscreen: "Schermvullend", + exit_fullscreen: "Verlaat volledig scherm", + close: "Sluit", + mathtype: "MathType", + title_modalwindow: "Modaal venster MathType", + close_modal_warning: "Weet je zeker dat je de app wilt sluiten? De gemaakte wijzigingen gaan verloren.", + latex_name_label: "LaTeX-formule", + browser_no_compatible: "Je browser is niet compatibel met AJAX-technologie. Gebruik de meest recente versie van Mozilla Firefox.", + error_convert_accessibility: "Fout bij conversie van MathML naar toegankelijke tekst.", + exception_cross_site: "Cross-site scripting is alleen toegestaan voor HTTP.", + exception_high_surrogate: "Hoog surrogaat niet gevolgd door laag surrogaat in fixedCharCodeAt()", + exception_string_length: "Ongeldige tekenreeks. Lengte moet een veelvoud van 4 zijn", + exception_key_nonobject: "Object.keys opgeroepen voor niet-object", + exception_null_or_undefined: " dit is nul of niet gedefinieerd", + exception_not_function: " is geen functie", + exception_invalid_date_format: "Ongeldige datumnotatie: ", + exception_casting: "Kan niet weergeven ", + exception_casting_to: " op " + }; + var no = { + latex: "LaTeX", + cancel: "Avbryt", + accept: "Set inn", + manual: "Håndbok", + insert_math: "Sett inn matematikkformel - MathType", + insert_chem: "Set inn ein kjemisk formel – ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fullskjerm", + exit_fullscreen: "Avslutt fullskjerm", + close: "Lukk", + mathtype: "MathType", + title_modalwindow: "Modalt MathType-vindu", + close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", + latex_name_label: "LaTeX-formel", + browser_no_compatible: "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", + error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", + exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", + exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", + exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", + exception_null_or_undefined: " dette er null eller ikkje definert", + exception_not_function: " er ikkje ein funksjon", + exception_invalid_date_format: "Ugyldig datoformat: ", + exception_casting: "Kan ikkje bruka casting ", + exception_casting_to: " til " + }; + var nb = { + latex: "LaTeX", + cancel: "Avbryt", + accept: "Insert", + manual: "Håndbok", + insert_math: "Sett inn matematikkformel - MathType", + insert_chem: "Sett inn en kjemisk formel – ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fullskjerm", + exit_fullscreen: "Avslutt fullskjerm", + close: "Lukk", + mathtype: "MathType", + title_modalwindow: "Modalt MathType-vindu", + close_modal_warning: "Er du sikker på at du vil gå ut? Endringene du har gjort, vil gå tapt.", + latex_name_label: "LaTeX-formel", + browser_no_compatible: "Nettleseren er ikke kompatibel med AJAX-teknologien. Bruk den nyeste versjonen av Mozilla Firefox.", + error_convert_accessibility: "Feil under konvertering fra MathML til tilgjengelig tekst.", + exception_cross_site: "Skripting på tvers av nettsteder er bare tillatt med HTTP.", + exception_high_surrogate: "Høyt surrogat etterfølges ikke av lavt surrogat i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Lengden må være delelig på 4", + exception_key_nonobject: "Object.keys kalte på et ikke-objekt", + exception_null_or_undefined: " dette er null eller ikke definert", + exception_not_function: " er ikke en funksjon", + exception_invalid_date_format: "Ugyldig datoformat: ", + exception_casting: "Kan ikke bruke casting ", + exception_casting_to: " til " + }; + var nn = { + latex: "LaTeX", + cancel: "Avbryt", + accept: "Set inn", + manual: "Håndbok", + insert_math: "Sett inn matematikkformel - MathType", + insert_chem: "Set inn ein kjemisk formel – ChemType", + minimize: "Minimer", + maximize: "Maksimer", + fullscreen: "Fullskjerm", + exit_fullscreen: "Avslutt fullskjerm", + close: "Lukk", + mathtype: "MathType", + title_modalwindow: "Modalt MathType-vindu", + close_modal_warning: "Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.", + latex_name_label: "LaTeX-formel", + browser_no_compatible: "Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.", + error_convert_accessibility: "Feil under konvertering frå MathML til tilgjengeleg tekst.", + exception_cross_site: "Skripting på tvers av nettstadar er bere tillaten med HTTP.", + exception_high_surrogate: "Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()", + exception_string_length: "Ugyldig streng. Lengda må vera deleleg på 4", + exception_key_nonobject: "Object.keys kalla på eit ikkje-objekt", + exception_null_or_undefined: " dette er null eller ikkje definert", + exception_not_function: " er ikkje ein funksjon", + exception_invalid_date_format: "Ugyldig datoformat: ", + exception_casting: "Kan ikkje bruka casting ", + exception_casting_to: " til " + }; + var pl = { + latex: "LaTeX", + cancel: "Anuluj", + accept: "Wstaw", + manual: "Instrukcja", + insert_math: "Wstaw formułę matematyczną - MathType", + insert_chem: "Wstaw wzór chemiczny — ChemType", + minimize: "Minimalizuj", + maximize: "Maksymalizuj", + fullscreen: "Pełny ekran", + exit_fullscreen: "Opuść tryb pełnoekranowy", + close: "Zamknij", + mathtype: "MathType", + title_modalwindow: "Okno modalne MathType", + close_modal_warning: "Czy na pewno chcesz zamknąć? Wprowadzone zmiany zostaną utracone.", + latex_name_label: "Wzór Latex", + browser_no_compatible: "Twoja przeglądarka jest niezgodna z technologią AJAX Użyj najnowszej wersji Mozilla Firefox.", + error_convert_accessibility: "Błąd podczas konwertowania z formatu MathML na dostępny tekst.", + exception_cross_site: "Krzyżowanie skryptów witryny jest dozwolone tylko dla HTTP.", + exception_high_surrogate: "Brak niskiego surogatu po wysokim surogacie w fixedCharCodeAt()", + exception_string_length: "Niewłaściwy ciąg znaków. Długość musi być wielokrotnością liczby 4.", + exception_key_nonobject: "Argumentem wywołanej funkcji Object.key nie jest obiekt.", + exception_null_or_undefined: " jest zerowy lub niezdefiniowany", + exception_not_function: " nie jest funkcją", + exception_invalid_date_format: "Nieprawidłowy format daty: ", + exception_casting: "Nie można rzutować ", + exception_casting_to: " na " + }; + var pt = { + latex: "LaTeX", + cancel: "Cancelar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir fórmula matemática - MathType", + insert_chem: "Inserir uma fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Ecrã completo", + exit_fullscreen: "Sair do ecrã completo", + close: "Fechar", + mathtype: "MathType", + title_modalwindow: "Janela modal do MathType", + close_modal_warning: "Pretende sair? As alterações efetuadas serão perdidas.", + latex_name_label: "Fórmula Latex", + browser_no_compatible: "O seu navegador não é compatível com a tecnologia AJAX. Utilize a versão mais recente do Mozilla Firefox.", + error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", + exception_cross_site: "O processamento de scripts em vários sites só é permitido para HTTP.", + exception_high_surrogate: "Substituto alto não seguido por um substituto baixo em fixedCharCodeAt()", + exception_string_length: "Cadeia inválida. O comprimento tem de ser um múltiplo de 4", + exception_key_nonobject: "Object.keys chamou um não-objeto", + exception_null_or_undefined: " é nulo ou não está definido", + exception_not_function: " não é uma função", + exception_invalid_date_format: "Formato de data inválido: ", + exception_casting: "Não é possível adicionar ", + exception_casting_to: " até " + }; + var pt_br = { + latex: "LaTeX", + cancel: "Cancelar", + accept: "Inserir", + manual: "Manual", + insert_math: "Inserir fórmula matemática - MathType", + insert_chem: "Insira uma fórmula química - ChemType", + minimize: "Minimizar", + maximize: "Maximizar", + fullscreen: "Tela cheia", + exit_fullscreen: "Sair de tela cheia", + close: "Fechar", + mathtype: "MathType", + title_modalwindow: "Janela modal do MathType", + close_modal_warning: "Tem certeza de que deseja sair? Todas as alterações serão perdidas.", + latex_name_label: "Fórmula LaTeX", + browser_no_compatible: "O navegador não é compatível com a tecnologia AJAX. Use a versão mais recente do Mozilla Firefox.", + error_convert_accessibility: "Erro ao converter de MathML para texto acessível.", + exception_cross_site: "O uso de scripts entre sites só é permitido para HTTP.", + exception_high_surrogate: "High surrogate não seguido de low surrogate em fixedCharCodeAt()", + exception_string_length: "String inválida. O comprimento deve ser um múltiplo de 4", + exception_key_nonobject: "Object.keys chamados em não objeto", + exception_null_or_undefined: " isto é nulo ou não definido", + exception_not_function: " não é uma função", + exception_invalid_date_format: "Formato de data inválido: ", + exception_casting: "Não é possível transmitir ", + exception_casting_to: " para " + }; + var ro = { + latex: "LaTeX", + cancel: "Anulare", + accept: "Inserați", + manual: "Ghid", + insert_math: "Inserați o formulă matematică - MathType", + insert_chem: "Inserați o formulă chimică - ChemType", + minimize: "Minimizați", + maximize: "Maximizați", + fullscreen: "Afișați pe tot ecranul", + exit_fullscreen: "Opriți afișarea pe tot ecranul", + close: "Închideți", + mathtype: "MathType", + title_modalwindow: "Fereastră modală MathType", + close_modal_warning: "Sigur doriți să ieșiți? Modificările realizate se vor pierde.", + latex_name_label: "Formulă Latex", + browser_no_compatible: "Browserul dvs. nu este compatibil cu tehnologia AJAX. Utilizați cea mai recentă versiune de Mozilla Firefox.", + error_convert_accessibility: "Eroare la convertirea din MathML în text accesibil.", + exception_cross_site: "Scriptarea între site‑uri este permisă doar pentru HTTP.", + exception_high_surrogate: "Surogatul superior nu este urmat de un surogat inferior în fixedCharCodeAt()", + exception_string_length: "Șir nevalid. Lungimea trebuie să fie multiplu de 4", + exception_key_nonobject: "Object.keys a apelat un non-obiect", + exception_null_or_undefined: " este null sau nu este definit", + exception_not_function: " nu este funcție", + exception_invalid_date_format: "Format de dată nevalid: ", + exception_casting: "nu se poate difuza ", + exception_casting_to: " către " + }; + var ru = { + latex: "LaTeX", + cancel: "отмена", + accept: "Вставка", + manual: "вручную", + insert_math: "Вставить математическую формулу: WIRIS", + insert_chem: "Вставить химическую формулу — ChemType", + minimize: "Свернуть", + maximize: "Развернуть", + fullscreen: "На весь экран", + exit_fullscreen: "Выйти из полноэкранного режима", + close: "Закрыть", + mathtype: "MathType", + title_modalwindow: "Режимное окно MathType", + close_modal_warning: "Вы уверены, что хотите выйти? Все внесенные изменения будут утрачены.", + latex_name_label: "Формула Latex", + browser_no_compatible: "Ваш браузер несовместим с технологией AJAX. Используйте последнюю версию Mozilla Firefox.", + error_convert_accessibility: "При преобразовании формулы в текст допустимого формата произошла ошибка.", + exception_cross_site: "Межсайтовые сценарии доступны только для HTTP.", + exception_high_surrogate: "Младший символ-заместитель не сопровождает старший символ-заместитель в исправленном методе CharCodeAt()", + exception_string_length: "Недопустимая строка. Длинна должна быть кратной 4.", + exception_key_nonobject: "Метод Object.keys вызван не для объекта", + exception_null_or_undefined: " значение пустое или не определено", + exception_not_function: " не функция", + exception_invalid_date_format: "Недопустимый формат даты: ", + exception_casting: "Не удается привести ", + exception_casting_to: " к " + }; + var sv = { + latex: "LaTeX", + cancel: "Avbryt", + accept: "Infoga", + manual: "Bruksanvisning", + insert_math: "Infoga matematisk formel - MathType", + insert_chem: "Infoga en kemiformel – ChemType", + minimize: "Minimera", + maximize: "Maximera", + fullscreen: "Helskärm", + exit_fullscreen: "Stäng helskärm", + close: "Stäng", + mathtype: "MathType", + title_modalwindow: "MathType modulfönster", + close_modal_warning: "Vill du avsluta? Inga ändringar kommer att sparas.", + latex_name_label: "Latex-formel", + browser_no_compatible: "Din webbläsare är inte kompatibel med AJAX-teknik. Använd den senaste versionen av Mozilla Firefox.", + error_convert_accessibility: "Det uppstod ett fel vid konvertering från MathML till åtkomlig text.", + exception_cross_site: "Skriptkörning över flera sajter är endast tillåtet för HTTP.", + exception_high_surrogate: "Hög surrogat följs inte av låg surrogat i fixedCharCodeAt()", + exception_string_length: "Ogiltig sträng. Längden måste vara en multipel av 4", + exception_key_nonobject: "Object.keys anropade icke-objekt", + exception_null_or_undefined: " det är null eller inte definierat", + exception_not_function: " är inte en funktion", + exception_invalid_date_format: "Ogiltigt datumformat: ", + exception_casting: "Går inte att konvertera ", + exception_casting_to: " till " + }; + var tr = { + latex: "LaTeX", + cancel: "Vazgeç", + accept: "Ekle", + manual: "Kılavuz", + insert_math: "Matematik formülü ekle - MathType", + insert_chem: "Kimya formülü ekleyin - ChemType", + minimize: "Simge Durumuna Küçült", + maximize: "Ekranı Kapla", + fullscreen: "Tam Ekran", + exit_fullscreen: "Tam Ekrandan Çık", + close: "Kapat", + mathtype: "MathType", + title_modalwindow: "MathType kalıcı penceresi", + close_modal_warning: "Çıkmak istediğinizden emin misiniz? Yaptığınız değişiklikler kaybolacak.", + latex_name_label: "Latex Formülü", + browser_no_compatible: "Tarayıcınız AJAX teknolojisiyle uyumlu değil. Lütfen en güncel Mozilla Firefox sürümünü kullanın.", + error_convert_accessibility: "MathML biçiminden erişilebilir metne dönüştürme hatası.", + exception_cross_site: "Siteler arası komut dosyası yazma işlemine yalnızca HTTP için izin verilir.", + exception_high_surrogate: "fixedCharCodeAt() fonksiyonunda üst vekilin ardından alt vekil gelmiyor", + exception_string_length: "Geçersiz dizgi. Uzunluk, 4'ün katlarından biri olmalıdır", + exception_key_nonobject: "Nesne olmayan öğe üzerinde Object.keys çağrıldı", + exception_null_or_undefined: " bu değer boş veya tanımlanmamış", + exception_not_function: " bir fonksiyon değil", + exception_invalid_date_format: "Geçersiz tarih biçimi: ", + exception_casting: "Tür dönüştürülemiyor ", + exception_casting_to: " hedef: " + }; + var zh = { + latex: "LaTeX", + cancel: "取消", + accept: "插入", + manual: "手册", + insert_math: "插入数学公式 - MathType", + insert_chem: "插入化学分子式 - ChemType", + minimize: "最小化", + maximize: "最大化", + fullscreen: "全屏幕", + exit_fullscreen: "退出全屏幕", + close: "关闭", + mathtype: "MathType", + title_modalwindow: "MathType 模式窗口", + close_modal_warning: "您确定要离开吗?您所做的修改将丢失。", + latex_name_label: "Latex 分子式", + browser_no_compatible: "您的浏览器不兼容 AJAX 技术。请使用最新版 Mozilla Firefox。", + error_convert_accessibility: "将 MathML 转换为可访问文本时出错。", + exception_cross_site: "仅 HTTP 允许跨站脚本。", + exception_high_surrogate: "fixedCharCodeAt() 中的高位代理之后未跟随低位代理", + exception_string_length: "无效字符串。长度必须是 4 的倍数", + exception_key_nonobject: "非对象调用了 Object.keys", + exception_null_or_undefined: " 该值为空或未定义", + exception_not_function: " 不是一个函数", + exception_invalid_date_format: "无效日期格式: ", + exception_casting: "无法转换 ", + exception_casting_to: " 为 " + }; + var translations = { + ar: ar, + ca: ca, + cs: cs, + da: da, + de: de, + el: el, + en: en, + es: es, + et: et, + eu: eu, + fi: fi, + fr: fr, + gl: gl, + he: he, + hr: hr, + hu: hu, + id: id, + it: it, + ja: ja, + ko: ko, + nl: nl, + no: no, + nb: nb, + nn: nn, + pl: pl, + pt: pt, + pt_br: pt_br, + ro: ro, + ru: ru, + sv: sv, + tr: tr, + zh: zh, + "": { + } + }; - /** - * This class represents an utility class. - */ class Util { - /** - * Fires an event in a target. - * @param {EventTarget} eventTarget - target where event should be fired. - * @param {string} eventName event to fire. - * @static - */ static fireEvent(eventTarget, eventName) { - if (document.createEvent) { - const eventObject = document.createEvent("HTMLEvents"); - eventObject.initEvent(eventName, true, true); - return !eventTarget.dispatchEvent(eventObject); - } - const eventObject = document.createEventObject(); - return eventTarget.fireEvent(`on${eventName}`, eventObject); - } - /** - * Cross-browser addEventListener/attachEvent function. - * @param {EventTarget} eventTarget - target to add the event. - * @param {string} eventName - specifies the type of event. - * @param {Function} callBackFunction - callback function. - * @static - */ static addEvent(eventTarget, eventName, callBackFunction) { - if (eventTarget.addEventListener) { - eventTarget.addEventListener(eventName, callBackFunction, true); - } else if (eventTarget.attachEvent) { - // Backwards compatibility. - eventTarget.attachEvent(`on${eventName}`, callBackFunction); - } - } - /** - * Cross-browser removeEventListener/detachEvent function. - * @param {EventTarget} eventTarget - target to add the event. - * @param {string} eventName - specifies the type of event. - * @param {Function} callBackFunction - function to remove from the event target. - * @static - */ static removeEvent(eventTarget, eventName, callBackFunction) { - if (eventTarget.removeEventListener) { - eventTarget.removeEventListener(eventName, callBackFunction, true); - } else if (eventTarget.detachEvent) { - eventTarget.detachEvent(`on${eventName}`, callBackFunction); - } - } - /** - * Adds the a callback function, for a certain event target, to the following event types: - * - dblclick - * - mousedown - * - mouseup - * @param {EventTarget} eventTarget - event target. - * @param {Function} doubleClickHandler - function to run when on dblclick event. - * @param {Function} mousedownHandler - function to run when on mousedown event. - * @param {Function} mouseupHandler - function to run when on mouseup event. - * @static - */ static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) { - if (doubleClickHandler) { - this.callbackDblclick = (event) => { - const realEvent = event || window.event; - const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; - doubleClickHandler(element, realEvent); - }; - Util.addEvent(eventTarget, "dblclick", this.callbackDblclick); - } - if (mousedownHandler) { - this.callbackMousedown = (event) => { - const realEvent = event || window.event; - const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; - mousedownHandler(element, realEvent); - }; - Util.addEvent(eventTarget, "mousedown", this.callbackMousedown); - } - if (mouseupHandler) { - this.callbackMouseup = (event) => { - const realEvent = event || window.event; - const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; - mouseupHandler(element, realEvent); - }; - // Chrome doesn't trigger this event for eventTarget if we release the mouse button - // while the mouse is outside the editor text field. - // This is a workaround: we trigger the event independently of where the mouse - // is when we release its button. - Util.addEvent(document, "mouseup", this.callbackMouseup); - Util.addEvent(eventTarget, "mouseup", this.callbackMouseup); - } - } - /** - * Remove all callback function, for a certain event target, to the following event types: - * - dblclick - * - mousedown - * - mouseup - * @param {EventTarget} eventTarget - event target. - * @static - */ static removeElementEvents(eventTarget) { - Util.removeEvent(eventTarget, "dblclick", this.callbackDblclick); - Util.removeEvent(eventTarget, "mousedown", this.callbackMousedown); - Util.removeEvent(document, "mouseup", this.callbackMouseup); - Util.removeEvent(eventTarget, "mouseup", this.callbackMouseup); - } - /** - * Adds a class name to a HTMLElement. - * @param {HTMLElement} element - the HTML element. - * @param {string} className - the class name. - * @static - */ static addClass(element, className) { - if (!Util.containsClass(element, className)) { - element.className += ` ${className}`; - } - } - /** - * Checks if a HTMLElement contains a certain class. - * @param {HTMLElement} element - the HTML element. - * @param {string} className - the className. - * @returns {boolean} true if the HTMLElement contains the class name. false otherwise. - * @static - */ static containsClass(element, className) { - if (element == null || !("className" in element)) { - return false; - } - const currentClasses = element.className.split(" "); - for (let i = currentClasses.length - 1; i >= 0; i -= 1) { - if (currentClasses[i] === className) { - return true; - } - } - return false; - } - /** - * Remove a certain class for a HTMLElement. - * @param {HTMLElement} element - the HTML element. - * @param {string} className - the class name. - * @static - */ static removeClass(element, className) { - let newClassName = ""; - const classes = element.className.split(" "); - for (let i = 0; i < classes.length; i += 1) { - if (classes[i] !== className) { - newClassName += `${classes[i]} `; - } - } - element.className = newClassName.trim(); - } - /** - * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's - * used to parse old applets. - * @param {string} text - string containing safeXml characters - * @returns {string} a string with safeXml characters parsed. - * @static - */ static convertOldXmlinitialtextAttribute(text) { - // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x. - // This could be removed in future. - const val = "value="; - const xitpos = text.indexOf("xmlinitialtext"); - const valpos = text.indexOf(val, xitpos); - const quote = text.charAt(valpos + val.length); - const startquote = valpos + val.length + 1; - const endquote = text.indexOf(quote, startquote); - const value = text.substring(startquote, endquote); - let newvalue = value.split("«").join("§lt;"); - newvalue = newvalue.split("»").join("§gt;"); - newvalue = newvalue.split("&").join("§"); - newvalue = newvalue.split("¨").join("§quot;"); - text = text.split(value).join(newvalue); - return text; - } - /** - * Convert a string representation of key-value pairs to an object. - * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2' - * @returns {Object} - Object containing the key-value pairs - */ static convertStringToObject(keyValueString) { - if (!keyValueString || typeof keyValueString !== "string") { - return {}; - } - return keyValueString - .split(",") - .map((pair) => pair.trim().split("=")) - .reduce((resultObject, [key, value]) => { - if (key && value) { - resultObject[key] = value; - } - return resultObject; - }, {}); - } - /** - * Cross-browser solution for creating new elements. - * @param {string} tagName - tag name of the wished element. - * @param {Object} attributes - an object where each key is a wished - * attribute name and each value is its value. - * @param {Object} [creator] - if supplied, this function will use - * the "createElement" method from this param. Otherwise - * document will be used as creator. - * @returns {Element} The DOM element with the specified attributes assigned. - * @static - */ static createElement(tagName, attributes, creator) { - if (attributes === undefined) { - attributes = {}; - } - if (creator === undefined) { - creator = document; - } - let element; - /* - * Internet Explorer fix: - * If you create a new object dynamically, you can't set a non-standard attribute. - * For example, you can't set the "src" attribute on an "applet" object. - * Other browsers will throw an exception and will run the standard code. - */ try { - let html = `<${tagName}`; - Object.keys(attributes).forEach((attributeName) => { - html += ` ${attributeName}="${Util.htmlEntities(attributes[attributeName])}"`; - }); - html += ">"; - element = creator.createElement(html); - } catch (e) { - element = creator.createElement(tagName); - Object.keys(attributes).forEach((attributeName) => { - element.setAttribute(attributeName, attributes[attributeName]); - }); - } - return element; - } - /** - * Creates new HTML from it's HTML code as string. - * @param {string} objectCode - html code - * @returns {Element} the HTML element. - * @static - */ static createObject(objectCode, creator) { - if (creator === undefined) { - creator = document; - } - // Internet Explorer can't include "param" tag when is setting an innerHTML property. - objectCode = objectCode - .split("").join("").split("").join(""); - objectCode = objectCode - .split("").join("
").split("").join("
"); - const container = Util.createElement("div", {}, creator); - container.innerHTML = objectCode; - function recursiveParamsFix(object) { - if (object.getAttribute && object.getAttribute("wirisObject") === "WirisParam") { - const attributesParsed = {}; - for (let i = 0; i < object.attributes.length; i += 1) { - if (object.attributes[i].nodeValue !== null) { - attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; - } - } - const param = Util.createElement("param", attributesParsed, creator); - // IE fix. - if (param.NAME) { - param.name = param.NAME; - param.value = param.VALUE; - } - param.removeAttribute("wirisObject"); - object.parentNode.replaceChild(param, object); - } else if (object.getAttribute && object.getAttribute("wirisObject") === "WirisApplet") { - const attributesParsed = {}; - for (let i = 0; i < object.attributes.length; i += 1) { - if (object.attributes[i].nodeValue !== null) { - attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; - } - } - const applet = Util.createElement("applet", attributesParsed, creator); - applet.removeAttribute("wirisObject"); - for (let i = 0; i < object.childNodes.length; i += 1) { - recursiveParamsFix(object.childNodes[i]); - if (object.childNodes[i].nodeName.toLowerCase() === "param") { - applet.appendChild(object.childNodes[i]); - i -= 1; // When we insert the object child into the applet, object loses one child. - } - } - object.parentNode.replaceChild(applet, object); - } else { - for (let i = 0; i < object.childNodes.length; i += 1) { - recursiveParamsFix(object.childNodes[i]); - } - } - } - recursiveParamsFix(container); - return container.firstChild; - } - /** - * Converts an Element to its HTML code. - * @param {Element} element - entry element. - * @return {string} the HTML code of the input element. - * @static - */ static createObjectCode(element) { - // In case that the image was not created, the object can be null or undefined. - if (typeof element === "undefined" || element === null) { - return null; - } - if (element.nodeType === 1) { - // ELEMENT_NODE. - let output = `<${element.tagName}`; - for (let i = 0; i < element.attributes.length; i += 1) { - if (element.attributes[i].specified) { - output += ` ${element.attributes[i].name}="${Util.htmlEntities(element.attributes[i].value)}"`; - } - } - if (element.childNodes.length > 0) { - output += ">"; - for (let i = 0; i < element.childNodes.length; i += 1) { - output += Util.createObject(element.childNodes[i]); - } - output += ``; - } else if (element.nodeName === "DIV" || element.nodeName === "SCRIPT") { - output += `>`; - } else { - output += "/>"; - } - return output; - } - if (element.nodeType === 3) { - // TEXT_NODE. - return Util.htmlEntities(element.nodeValue); - } - return ""; - } - /** - * Concatenates two URL paths. - * @param {string} path1 - first URL path - * @param {string} path2 - second URL path - * @returns {string} new URL. - */ static concatenateUrl(path1, path2) { - let separator = ""; - if (path1.indexOf("/") !== path1.length && path2.indexOf("/") !== 0) { - separator = "/"; - } - return (path1 + separator + path2).replace(/([^:]\/)\/+/g, "$1"); - } - /** - * Parses a text and replaces all HTML special characters by their correspondent entities. - * @param {string} input - text to be parsed. - * @returns {string} the input text with all their special characters replaced by their entities. - * @static - */ static htmlEntities(input) { - return input.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join("""); - } - /** - * Sanitize HTML to prevent XSS injections. - * @param {string} html - html to be sanitize. - * @returns {string} html sanitized. - * @static - */ static htmlSanitize(html) { - let annotationRegex = /\/; - // Get all the annotation content including the tags. - let annotation = html.match(annotationRegex); - // Sanitize html code without removing our supported MathML tags and attributes. - html = purifyExports.sanitize(html, { - ADD_TAGS: ["semantics", "annotation", "mstack", "msline", "msrow"], - ADD_ATTR: ["linebreak", "charalign", "stackalign"], - }); - // Readd old annotation content. - return html.replace(annotationRegex, annotation); - } - /** - * Parses a text and replaces all the HTML entities by their characters. - * @param {string} input - text to be parsed - * @returns {string} the input text with all their entities replaced by characters. - * @static - */ static htmlEntitiesDecode(input) { - // Textarea element decodes when inner html is set. - const textarea = document.createElement("textarea"); - textarea.innerHTML = input; - return textarea.value; - } - /** - * Returns a cross-browser http request. - * @return {object} httpRequest request object. - * @returns {XMLHttpRequest|ActiveXObject} the proper request object. - */ static createHttpRequest() { - const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); - if (currentPath.substr(0, 7) === "file://") { - throw StringManager.get("exception_cross_site"); - } - if (typeof XMLHttpRequest !== "undefined") { - return new XMLHttpRequest(); - } - try { - return new ActiveXObject("Msxml2.XMLHTTP"); - } catch (e) { - try { - return new ActiveXObject("Microsoft.XMLHTTP"); - } catch (oc) { - return null; - } - } - } - /** - * Converts a hash to a HTTP query. - * @param {Object[]} properties - a key/value object. - * @returns {string} a HTTP query containing all the key value pairs with - * all the special characters replaced by their entities. - * @static - */ static httpBuildQuery(properties) { - let result = ""; - Object.keys(properties).forEach((i) => { - if (properties[i] != null) { - result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`; - } - }); - // Deleting last '&' empty character. - if (result.substring(result.length - 1) === "&") { - result = result.substring(0, result.length - 1); - } - return result; - } - /** - * Convert a hash to string sorting keys to get a deterministic output - * @param {Object[]} hash - a key/value object. - * @returns {string} a string with the form key1=value1...keyn=valuen - * @static - */ static propertiesToString(hash) { - // 1. Sort keys. We sort the keys because we want a deterministic output. - const keys = []; - Object.keys(hash).forEach((key) => { - if (Object.prototype.hasOwnProperty.call(hash, key)) { - keys.push(key); - } - }); - const n = keys.length; - for (let i = 0; i < n; i += 1) { - for (let j = i + 1; j < n; j += 1) { - const s1 = keys[i]; - const s2 = keys[j]; - if (Util.compareStrings(s1, s2) > 0) { - // Swap. - keys[i] = s2; - keys[j] = s1; - } - } - } - // 2. Generate output. - let output = ""; - for (let i = 0; i < n; i += 1) { - const key = keys[i]; - output += key; - output += "="; - let value = hash[key]; - value = value.replace("\\", "\\\\"); - value = value.replace("\n", "\\n"); - value = value.replace("\r", "\\r"); - value = value.replace("\t", "\\t"); - output += value; - output += "\n"; - } - return output; - } - /** - * Compare two strings using charCodeAt method - * @param {string} a - first string to compare. - * @param {string} b - second string to compare. - * @returns {number} the difference between a and b - * @static - */ static compareStrings(a, b) { - let i; - const an = a.length; - const bn = b.length; - const n = an > bn ? bn : an; - for (i = 0; i < n; i += 1) { - const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i); - if (c !== 0) { - return c; - } - } - return a.length - b.length; - } - /** - * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters. - * @param {string} string - input string - * @param {number} idx - an integer greater than or equal to 0 - * and less than the length of the string - * @returns {number} an integer representing the UTF-16 code of the string at the given index. - * @static - */ static fixedCharCodeAt(string, idx) { - idx = idx || 0; - const code = string.charCodeAt(idx); - let hi; - let low; - /* High surrogate (could change last hex to 0xDB7F to treat high + /** + * This class represents a string manager. It's used to load localized strings. + */ class StringManager { + constructor(){ + throw new Error("Static class StringManager can not be instantiated."); + } + /** + * Returns the associated value of certain string key. If the associated value + * doesn't exits returns the original key. + * @param {string} key - string key + * @param {string} lang - DEFAULT = null. Specify the language to translate the string + * @returns {string} correspondent value. If doesn't exists original key. + */ static get(key, lang) { + // Default language definition + let { language } = this; + // If parameter language, use it + if (lang) { + language = lang; + } + // Cut down on strings. e.g. en_US -> en + if (language && language.length > 2) { + language = language.slice(0, 2); + } + // Check if we support the language + if (!this.strings.hasOwnProperty(language)) { + // eslint-disable-line no-prototype-builtins + console.warn(`Unknown language ${language} set in StringManager.`); + language = "en"; + } + // Check if the key is supported in the given language + if (!this.strings[language].hasOwnProperty(key)) { + // eslint-disable-line no-prototype-builtins + console.warn(`Unknown key ${key} for language ${language} in StringManager.`); + return key; + } + return this.strings[language][key]; + } + } + /** + * Dictionary of dictionaries: + * Key: language code + * Value: Key: id of the string + * Value: translation of the string + */ StringManager.strings = translations; + /** + * Language of the translations; English by default + */ StringManager.language = "en"; + + /** + * This class represents an utility class. + */ class Util { + /** + * Fires an event in a target. + * @param {EventTarget} eventTarget - target where event should be fired. + * @param {string} eventName event to fire. + * @static + */ static fireEvent(eventTarget, eventName) { + if (document.createEvent) { + const eventObject = document.createEvent("HTMLEvents"); + eventObject.initEvent(eventName, true, true); + return !eventTarget.dispatchEvent(eventObject); + } + const eventObject = document.createEventObject(); + return eventTarget.fireEvent(`on${eventName}`, eventObject); + } + /** + * Cross-browser addEventListener/attachEvent function. + * @param {EventTarget} eventTarget - target to add the event. + * @param {string} eventName - specifies the type of event. + * @param {Function} callBackFunction - callback function. + * @static + */ static addEvent(eventTarget, eventName, callBackFunction) { + if (eventTarget.addEventListener) { + eventTarget.addEventListener(eventName, callBackFunction, true); + } else if (eventTarget.attachEvent) { + // Backwards compatibility. + eventTarget.attachEvent(`on${eventName}`, callBackFunction); + } + } + /** + * Cross-browser removeEventListener/detachEvent function. + * @param {EventTarget} eventTarget - target to add the event. + * @param {string} eventName - specifies the type of event. + * @param {Function} callBackFunction - function to remove from the event target. + * @static + */ static removeEvent(eventTarget, eventName, callBackFunction) { + if (eventTarget.removeEventListener) { + eventTarget.removeEventListener(eventName, callBackFunction, true); + } else if (eventTarget.detachEvent) { + eventTarget.detachEvent(`on${eventName}`, callBackFunction); + } + } + /** + * Adds the a callback function, for a certain event target, to the following event types: + * - dblclick + * - mousedown + * - mouseup + * @param {EventTarget} eventTarget - event target. + * @param {Function} doubleClickHandler - function to run when on dblclick event. + * @param {Function} mousedownHandler - function to run when on mousedown event. + * @param {Function} mouseupHandler - function to run when on mouseup event. + * @static + */ static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) { + if (doubleClickHandler) { + this.callbackDblclick = (event)=>{ + const realEvent = event || window.event; + const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; + doubleClickHandler(element, realEvent); + }; + Util.addEvent(eventTarget, "dblclick", this.callbackDblclick); + } + if (mousedownHandler) { + this.callbackMousedown = (event)=>{ + const realEvent = event || window.event; + const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; + mousedownHandler(element, realEvent); + }; + Util.addEvent(eventTarget, "mousedown", this.callbackMousedown); + } + if (mouseupHandler) { + this.callbackMouseup = (event)=>{ + const realEvent = event || window.event; + const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target; + mouseupHandler(element, realEvent); + }; + // Chrome doesn't trigger this event for eventTarget if we release the mouse button + // while the mouse is outside the editor text field. + // This is a workaround: we trigger the event independently of where the mouse + // is when we release its button. + Util.addEvent(document, "mouseup", this.callbackMouseup); + Util.addEvent(eventTarget, "mouseup", this.callbackMouseup); + } + } + /** + * Remove all callback function, for a certain event target, to the following event types: + * - dblclick + * - mousedown + * - mouseup + * @param {EventTarget} eventTarget - event target. + * @static + */ static removeElementEvents(eventTarget) { + Util.removeEvent(eventTarget, "dblclick", this.callbackDblclick); + Util.removeEvent(eventTarget, "mousedown", this.callbackMousedown); + Util.removeEvent(document, "mouseup", this.callbackMouseup); + Util.removeEvent(eventTarget, "mouseup", this.callbackMouseup); + } + /** + * Adds a class name to a HTMLElement. + * @param {HTMLElement} element - the HTML element. + * @param {string} className - the class name. + * @static + */ static addClass(element, className) { + if (!Util.containsClass(element, className)) { + element.className += ` ${className}`; + } + } + /** + * Checks if a HTMLElement contains a certain class. + * @param {HTMLElement} element - the HTML element. + * @param {string} className - the className. + * @returns {boolean} true if the HTMLElement contains the class name. false otherwise. + * @static + */ static containsClass(element, className) { + if (element == null || !("className" in element)) { + return false; + } + const currentClasses = element.className.split(" "); + for(let i = currentClasses.length - 1; i >= 0; i -= 1){ + if (currentClasses[i] === className) { + return true; + } + } + return false; + } + /** + * Remove a certain class for a HTMLElement. + * @param {HTMLElement} element - the HTML element. + * @param {string} className - the class name. + * @static + */ static removeClass(element, className) { + let newClassName = ""; + const classes = element.className.split(" "); + for(let i = 0; i < classes.length; i += 1){ + if (classes[i] !== className) { + newClassName += `${classes[i]} `; + } + } + element.className = newClassName.trim(); + } + /** + * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's + * used to parse old applets. + * @param {string} text - string containing safeXml characters + * @returns {string} a string with safeXml characters parsed. + * @static + */ static convertOldXmlinitialtextAttribute(text) { + // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x. + // This could be removed in future. + const val = "value="; + const xitpos = text.indexOf("xmlinitialtext"); + const valpos = text.indexOf(val, xitpos); + const quote = text.charAt(valpos + val.length); + const startquote = valpos + val.length + 1; + const endquote = text.indexOf(quote, startquote); + const value = text.substring(startquote, endquote); + let newvalue = value.split("«").join("§lt;"); + newvalue = newvalue.split("»").join("§gt;"); + newvalue = newvalue.split("&").join("§"); + newvalue = newvalue.split("¨").join("§quot;"); + text = text.split(value).join(newvalue); + return text; + } + /** + * Convert a string representation of key-value pairs to an object. + * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2' + * @returns {Object} - Object containing the key-value pairs + */ static convertStringToObject(keyValueString) { + if (!keyValueString || typeof keyValueString !== "string") { + return {}; + } + return keyValueString.split(",").map((pair)=>pair.trim().split("=")).reduce((resultObject, [key, value])=>{ + if (key && value) { + resultObject[key] = value; + } + return resultObject; + }, {}); + } + /** + * Cross-browser solution for creating new elements. + * @param {string} tagName - tag name of the wished element. + * @param {Object} attributes - an object where each key is a wished + * attribute name and each value is its value. + * @param {Object} [creator] - if supplied, this function will use + * the "createElement" method from this param. Otherwise + * document will be used as creator. + * @returns {Element} The DOM element with the specified attributes assigned. + * @static + */ static createElement(tagName, attributes, creator) { + if (attributes === undefined) { + attributes = {}; + } + if (creator === undefined) { + creator = document; + } + let element; + /* + * Internet Explorer fix: + * If you create a new object dynamically, you can't set a non-standard attribute. + * For example, you can't set the "src" attribute on an "applet" object. + * Other browsers will throw an exception and will run the standard code. + */ try { + let html = `<${tagName}`; + Object.keys(attributes).forEach((attributeName)=>{ + html += ` ${attributeName}="${Util.htmlEntities(attributes[attributeName])}"`; + }); + html += ">"; + element = creator.createElement(html); + } catch (e) { + element = creator.createElement(tagName); + Object.keys(attributes).forEach((attributeName)=>{ + element.setAttribute(attributeName, attributes[attributeName]); + }); + } + return element; + } + /** + * Creates new HTML from it's HTML code as string. + * @param {string} objectCode - html code + * @returns {Element} the HTML element. + * @static + */ static createObject(objectCode, creator) { + if (creator === undefined) { + creator = document; + } + // Internet Explorer can't include "param" tag when is setting an innerHTML property. + objectCode = objectCode.split("").join("").split("").join("
"); + objectCode = objectCode.split("").join("
").split("").join("
"); + const container = Util.createElement("div", {}, creator); + container.innerHTML = objectCode; + function recursiveParamsFix(object) { + if (object.getAttribute && object.getAttribute("wirisObject") === "WirisParam") { + const attributesParsed = {}; + for(let i = 0; i < object.attributes.length; i += 1){ + if (object.attributes[i].nodeValue !== null) { + attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; + } + } + const param = Util.createElement("param", attributesParsed, creator); + // IE fix. + if (param.NAME) { + param.name = param.NAME; + param.value = param.VALUE; + } + param.removeAttribute("wirisObject"); + object.parentNode.replaceChild(param, object); + } else if (object.getAttribute && object.getAttribute("wirisObject") === "WirisApplet") { + const attributesParsed = {}; + for(let i = 0; i < object.attributes.length; i += 1){ + if (object.attributes[i].nodeValue !== null) { + attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue; + } + } + const applet = Util.createElement("applet", attributesParsed, creator); + applet.removeAttribute("wirisObject"); + for(let i = 0; i < object.childNodes.length; i += 1){ + recursiveParamsFix(object.childNodes[i]); + if (object.childNodes[i].nodeName.toLowerCase() === "param") { + applet.appendChild(object.childNodes[i]); + i -= 1; // When we insert the object child into the applet, object loses one child. + } + } + object.parentNode.replaceChild(applet, object); + } else { + for(let i = 0; i < object.childNodes.length; i += 1){ + recursiveParamsFix(object.childNodes[i]); + } + } + } + recursiveParamsFix(container); + return container.firstChild; + } + /** + * Converts an Element to its HTML code. + * @param {Element} element - entry element. + * @return {string} the HTML code of the input element. + * @static + */ static createObjectCode(element) { + // In case that the image was not created, the object can be null or undefined. + if (typeof element === "undefined" || element === null) { + return null; + } + if (element.nodeType === 1) { + // ELEMENT_NODE. + let output = `<${element.tagName}`; + for(let i = 0; i < element.attributes.length; i += 1){ + if (element.attributes[i].specified) { + output += ` ${element.attributes[i].name}="${Util.htmlEntities(element.attributes[i].value)}"`; + } + } + if (element.childNodes.length > 0) { + output += ">"; + for(let i = 0; i < element.childNodes.length; i += 1){ + output += Util.createObject(element.childNodes[i]); + } + output += ``; + } else if (element.nodeName === "DIV" || element.nodeName === "SCRIPT") { + output += `>`; + } else { + output += "/>"; + } + return output; + } + if (element.nodeType === 3) { + // TEXT_NODE. + return Util.htmlEntities(element.nodeValue); + } + return ""; + } + /** + * Concatenates two URL paths. + * @param {string} path1 - first URL path + * @param {string} path2 - second URL path + * @returns {string} new URL. + */ static concatenateUrl(path1, path2) { + let separator = ""; + if (path1.indexOf("/") !== path1.length && path2.indexOf("/") !== 0) { + separator = "/"; + } + return (path1 + separator + path2).replace(/([^:]\/)\/+/g, "$1"); + } + /** + * Parses a text and replaces all HTML special characters by their correspondent entities. + * @param {string} input - text to be parsed. + * @returns {string} the input text with all their special characters replaced by their entities. + * @static + */ static htmlEntities(input) { + return input.split("&").join("&").split("<").join("<").split(">").join(">").split('"').join("""); + } + /** + * Sanitize HTML to prevent XSS injections. + * @param {string} html - html to be sanitize. + * @returns {string} html sanitized. + * @static + */ static htmlSanitize(html) { + let annotationRegex = /\/; + // Get all the annotation content including the tags. + let annotation = html.match(annotationRegex); + // Sanitize html code without removing our supported MathML tags and attributes. + html = purifyExports.sanitize(html, { + ADD_TAGS: [ + "semantics", + "annotation", + "mstack", + "msline", + "msrow", + "none" + ], + ADD_ATTR: [ + "linebreak", + "charalign", + "stackalign" + ] + }); + // Readd old annotation content. + return html.replace(annotationRegex, annotation); + } + /** + * Parses a text and replaces all the HTML entities by their characters. + * @param {string} input - text to be parsed + * @returns {string} the input text with all their entities replaced by characters. + * @static + */ static htmlEntitiesDecode(input) { + // Textarea element decodes when inner html is set. + const textarea = document.createElement("textarea"); + textarea.innerHTML = input; + return textarea.value; + } + /** + * Returns a cross-browser http request. + * @return {object} httpRequest request object. + * @returns {XMLHttpRequest|ActiveXObject} the proper request object. + */ static createHttpRequest() { + const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf("/") + 1); + if (currentPath.substr(0, 7) === "file://") { + throw StringManager.get("exception_cross_site"); + } + if (typeof XMLHttpRequest !== "undefined") { + return new XMLHttpRequest(); + } + try { + return new ActiveXObject("Msxml2.XMLHTTP"); + } catch (e) { + try { + return new ActiveXObject("Microsoft.XMLHTTP"); + } catch (oc) { + return null; + } + } + } + /** + * Converts a hash to a HTTP query. + * @param {Object[]} properties - a key/value object. + * @returns {string} a HTTP query containing all the key value pairs with + * all the special characters replaced by their entities. + * @static + */ static httpBuildQuery(properties) { + let result = ""; + Object.keys(properties).forEach((i)=>{ + if (properties[i] != null) { + result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`; + } + }); + // Deleting last '&' empty character. + if (result.substring(result.length - 1) === "&") { + result = result.substring(0, result.length - 1); + } + return result; + } + /** + * Convert a hash to string sorting keys to get a deterministic output + * @param {Object[]} hash - a key/value object. + * @returns {string} a string with the form key1=value1...keyn=valuen + * @static + */ static propertiesToString(hash) { + // 1. Sort keys. We sort the keys because we want a deterministic output. + const keys = []; + Object.keys(hash).forEach((key)=>{ + if (Object.prototype.hasOwnProperty.call(hash, key)) { + keys.push(key); + } + }); + const n = keys.length; + for(let i = 0; i < n; i += 1){ + for(let j = i + 1; j < n; j += 1){ + const s1 = keys[i]; + const s2 = keys[j]; + if (Util.compareStrings(s1, s2) > 0) { + // Swap. + keys[i] = s2; + keys[j] = s1; + } + } + } + // 2. Generate output. + let output = ""; + for(let i = 0; i < n; i += 1){ + const key = keys[i]; + output += key; + output += "="; + let value = hash[key]; + value = value.replace("\\", "\\\\"); + value = value.replace("\n", "\\n"); + value = value.replace("\r", "\\r"); + value = value.replace("\t", "\\t"); + output += value; + output += "\n"; + } + return output; + } + /** + * Compare two strings using charCodeAt method + * @param {string} a - first string to compare. + * @param {string} b - second string to compare. + * @returns {number} the difference between a and b + * @static + */ static compareStrings(a, b) { + let i; + const an = a.length; + const bn = b.length; + const n = an > bn ? bn : an; + for(i = 0; i < n; i += 1){ + const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i); + if (c !== 0) { + return c; + } + } + return a.length - b.length; + } + /** + * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters. + * @param {string} string - input string + * @param {number} idx - an integer greater than or equal to 0 + * and less than the length of the string + * @returns {number} an integer representing the UTF-16 code of the string at the given index. + * @static + */ static fixedCharCodeAt(string, idx) { + idx = idx || 0; + const code = string.charCodeAt(idx); + let hi; + let low; + /* High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters) */ if (code >= 0xd800 && code <= 0xdbff) { - hi = code; - low = string.charCodeAt(idx + 1); - if (Number.isNaN(low)) { - throw StringManager.get("exception_high_surrogate"); - } - return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000; - } - if (code >= 0xdc00 && code <= 0xdfff) { - // Low surrogate. - /* We return false to allow loops to skip this iteration since should have + hi = code; + low = string.charCodeAt(idx + 1); + if (Number.isNaN(low)) { + throw StringManager.get("exception_high_surrogate"); + } + return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000; + } + if (code >= 0xdc00 && code <= 0xdfff) { + // Low surrogate. + /* We return false to allow loops to skip this iteration since should have already handled high surrogate above in the previous iteration. */ return false; - } - return code; - } - /** - * Returns an URL with it's query params converted into array. - * @param {string} url - input URL. - * @returns {Object[]} an array containing all URL query params. - * @static - */ static urlToAssArray(url) { - let i; - i = url.indexOf("?"); - if (i > 0) { - const query = url.substring(i + 1); - const ss = query.split("&"); - const h = {}; - for (i = 0; i < ss.length; i += 1) { - const s = ss[i]; - const kv = s.split("="); - if (kv.length > 1) { - h[kv[0]] = decodeURIComponent(kv[1].replace(/\+/g, " ")); - } - } - return h; - } - return {}; - } - /** - * Returns an encoded URL by replacing each instance of certain characters by - * one, two, three or four escape sequences using encodeURIComponent method. - * !'()* . will not be encoded. - * - * @param {string} clearString - URL string to be encoded - * @returns {string} URL with it's special characters replaced. - * @static - */ static urlEncode(clearString) { - let output = ""; - // Method encodeURIComponent doesn't encode !'()*~ . - output = encodeURIComponent(clearString); - return output; - } - // TODO: To parser? - /** - * Converts the HTML of a image into the output code that WIRIS must return. - * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula) - * or the Wiriscas attribute of a WIRIS applet. - * @param {string} imgCode - the html code from a formula or a CAS image. - * @param {boolean} convertToXml - true if the image should be converted to XML. - * @param {boolean} convertToSafeXml - true if the image should be converted to safeXML. - * @returns {string} the XML or safeXML of a WIRIS image. - * @static - */ static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) { - const imgObject = Util.createObject(imgCode); - if (imgObject) { - if ( - imgObject.className === Configuration.get("imageClassName") || - imgObject.getAttribute(Configuration.get("imageMathmlAttribute")) - ) { - if (!convertToXml) { - return imgCode; - } - const dataMathML = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); - // To handle annotations, first we need the MathML in XML. - let mathML = MathML.safeXmlDecode(dataMathML); - if (!Configuration.get("saveHandTraces")) { - mathML = MathML.removeAnnotation(mathML, "application/json"); - } - if (mathML == null) { - mathML = imgObject.getAttribute("alt"); - } - if (convertToSafeXml) { - const safeMathML = MathML.safeXmlEncode(mathML); - return safeMathML; - } - return mathML; - } - } - return imgCode; - } - /** - * Gets the node length in characters. - * @param {Node} node - HTML node. - * @returns {number} node length. - * @static - */ static getNodeLength(node) { - const staticNodeLengths = { - IMG: 1, - BR: 1, - }; - if (node.nodeType === 3) { - // TEXT_NODE. - return node.nodeValue.length; - } - if (node.nodeType === 1) { - // ELEMENT_NODE. - let length = staticNodeLengths[node.nodeName.toUpperCase()]; - if (length === undefined) { - length = 0; - } - for (let i = 0; i < node.childNodes.length; i += 1) { - length += Util.getNodeLength(node.childNodes[i]); - } - return length; - } - return 0; - } - /** - * Gets a selected node or text from an editable HTMLElement. - * If the caret is on a text node, concatenates it with all the previous and next text nodes. - * @param {HTMLElement} target - the editable HTMLElement. - * @param {boolean} isIframe - specifies if the target is an iframe or not - * @param {boolean} forceGetSelection - if true, ignores IE system to get - * the current selection and uses window.getSelection() - * @returns {object} an object with the 'node' key set if the item is an - * element or the keys 'node' and 'caretPosition' if the element is text. - * @static - */ static getSelectedItem(target, isIframe, forceGetSelection) { - let windowTarget; - if (isIframe) { - windowTarget = target.contentWindow; - windowTarget.focus(); - } else { - windowTarget = window; - target.focus(); - } - if (document.selection && !forceGetSelection) { - const range = windowTarget.document.selection.createRange(); - if (range.parentElement) { - if (range.htmlText.length > 0) { - if (range.text.length === 0) { - return Util.getSelectedItem(target, isIframe, true); - } - return null; - } - windowTarget.document.execCommand("InsertImage", false, "#"); - let temporalObject = range.parentElement(); - if (temporalObject.nodeName.toUpperCase() !== "IMG") { - // IE9 fix: parentElement() does not return the IMG node, - // returns the parent DIV node. In IE < 9, pasteHTML does not work well. - range.pasteHTML(''); - temporalObject = windowTarget.document.getElementById("wrs_openEditorWindow_temporalObject"); - } - let node; - let caretPosition; - if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) { - // TEXT_NODE. - node = temporalObject.nextSibling; - caretPosition = 0; - } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) { - node = temporalObject.previousSibling; - caretPosition = node.nodeValue.length; - } else { - node = windowTarget.document.createTextNode(""); - temporalObject.parentNode.insertBefore(node, temporalObject); - caretPosition = 0; - } - temporalObject.parentNode.removeChild(temporalObject); - return { - node, - caretPosition, - }; - } - if (range.length > 1) { - return null; - } - return { - node: range.item(0), - }; - } - if (windowTarget.getSelection) { - let range; - const selection = windowTarget.getSelection(); - try { - range = selection.getRangeAt(0); - } catch (e) { - range = windowTarget.document.createRange(); - } - const node = range.startContainer; - if (node.nodeType === 3) { - // TEXT_NODE. - return { - node, - caretPosition: range.startOffset, - }; - } - if (node !== range.endContainer) { - return null; - } - if (node.nodeType === 1) { - // ELEMENT_NODE. - const position = range.startOffset; - if (node.childNodes[position]) { - // In case that a formula is detected but not selected, - // we create an empty span where we could insert the new formula. - if (range.startOffset === range.endOffset) { - if ( - position !== 0 && - node.childNodes[position - 1].localName === "span" && - node.childNodes[position].classList?.contains("Wirisformula") - ) { - node.childNodes[position - 1].remove(); - return Util.getSelectedItem(target, isIframe, forceGetSelection); - } else if (node.childNodes[position].classList?.contains("Wirisformula")) { - if ( - (position > 0 && node.childNodes[position - 1].classList?.contains("Wirisformula")) || - position === 0 - ) { - var emptySpan = document.createElement("span"); - node.insertBefore(emptySpan, node.childNodes[position]); - return { - node: node.childNodes[position], - }; - } - } - } - return { - node: node.childNodes[position], - }; - } - } - } - return null; - } - /** - * Returns null if there isn't any item or if it is malformed. - * Otherwise returns an object containing the node with the MathML image - * and the cursor position inside the textarea. - * @param {HTMLTextAreaElement} textarea - textarea element. - * @returns {Object} An object containing the node, the index of the - * beginning of the selected text, caret position and the start and end position of the - * text node. - * @static - */ static getSelectedItemOnTextarea(textarea) { - const textNode = document.createTextNode(textarea.value); - const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart); - if (textNodeValues === null) { - return null; - } - return { - node: textNode, - caretPosition: textarea.selectionStart, - startPosition: textNodeValues.startPosition, - endPosition: textNodeValues.endPosition, - }; - } - /** - * Looks for elements that match the given name in a HTML code string. - * Important: this function is very concrete for WIRIS code. - * It takes as preconditions lots of behaviors that are not the general case. - * @param {string} code - HTML code. - * @param {string} name - element name. - * @param {boolean} autoClosed - true if the elements are autoClosed. - * @return {Object[]} an object containing all HTML elements of code matching the name argument. - * @static - */ static getElementsByNameFromString(code, name, autoClosed) { - const elements = []; - code = code.toLowerCase(); - name = name.toLowerCase(); - let start = code.indexOf(`<${name} `); - while (start !== -1) { - // Look for nodes. - let endString; - if (autoClosed) { - endString = ">"; - } else { - endString = ``; - } - let end = code.indexOf(endString, start); - if (end !== -1) { - end += endString.length; - elements.push({ - start, - end, - }); - } else { - end = start + 1; - } - start = code.indexOf(`<${name} `, end); - } - return elements; - } - /** - * Returns the numeric value of a base64 character. - * @param {string} character - base64 character. - * @returns {number} base64 character numeric value. - * @static - */ static decode64(character) { - const PLUS = "+".charCodeAt(0); - const SLASH = "/".charCodeAt(0); - const NUMBER = "0".charCodeAt(0); - const LOWER = "a".charCodeAt(0); - const UPPER = "A".charCodeAt(0); - const PLUS_URL_SAFE = "-".charCodeAt(0); - const SLASH_URL_SAFE = "_".charCodeAt(0); - const code = character.charCodeAt(0); - if (code === PLUS || code === PLUS_URL_SAFE) { - return 62; // Char '+'. - } - if (code === SLASH || code === SLASH_URL_SAFE) { - return 63; // Char '/'. - } - if (code < NUMBER) { - return -1; // No match. - } - if (code < NUMBER + 10) { - return code - NUMBER + 26 + 26; - } - if (code < UPPER + 26) { - return code - UPPER; - } - if (code < LOWER + 26) { - return code - LOWER + 26; - } - return null; - } - /** - * Converts a base64 string to a array of bytes. - * @param {string} b64String - base64 string. - * @param {number} length - dimension of byte array (by default whole string). - * @return {Object[]} the resultant byte array. - * @static - */ static b64ToByteArray(b64String, length) { - let tmp; - if (b64String.length % 4 > 0) { - throw new Error("Invalid string. Length must be a multiple of 4"); // Tipped base64. Length is fixed. - } - const arr = []; - let l; - let placeHolders; - if (!length) { - // All b64String string. - if (b64String.charAt(b64String.length - 2) === "=") { - placeHolders = 2; - } else if (b64String.charAt(b64String.length - 1) === "=") { - placeHolders = 1; - } else { - placeHolders = 0; - } - l = placeHolders > 0 ? b64String.length - 4 : b64String.length; - } else { - l = length; - } - let i; - for (i = 0; i < l; i += 4) { - // Ignoring code checker standards (bitewise operators). - // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information. - // @codingStandardsIgnoreStart - // eslint-disable-next-line max-len - tmp = - (Util.decode64(b64String.charAt(i)) << 18) | - (Util.decode64(b64String.charAt(i + 1)) << 12) | - (Util.decode64(b64String.charAt(i + 2)) << 6) | - Util.decode64(b64String.charAt(i + 3)); - arr.push((tmp >> 16) & 0xff); - arr.push((tmp >> 8) & 0xff); - arr.push(tmp & 0xff); - // @codingStandardsIgnoreEnd - } - if (placeHolders) { - if (placeHolders === 2) { - // Ignoring code checker standards (bitewise operators). - // @codingStandardsIgnoreStart - // eslint-disable-next-line max-len - tmp = (Util.decode64(b64String.charAt(i)) << 2) | (Util.decode64(b64String.charAt(i + 1)) >> 4); - arr.push(tmp & 0xff); - } else if (placeHolders === 1) { - // eslint-disable-next-line max-len - tmp = - (Util.decode64(b64String.charAt(i)) << 10) | - (Util.decode64(b64String.charAt(i + 1)) << 4) | - (Util.decode64(b64String.charAt(i + 2)) >> 2); - arr.push((tmp >> 8) & 0xff); - arr.push(tmp & 0xff); - // @codingStandardsIgnoreEnd - } - } - return arr; - } - /** - * Returns the first 32-bit signed integer from a byte array. - * @param {Object[]} bytes - array of bytes. - * @returns {number} the 32-bit signed integer. - * @static - */ static readInt32(bytes) { - if (bytes.length < 4) { - return false; - } - const int32 = bytes.splice(0, 4); - // @codingStandardsIgnoreStart¡ - return (int32[0] << 24) | (int32[1] << 16) | (int32[2] << 8) | (int32[3] << 0); - // @codingStandardsIgnoreEnd - } - /** - * Read the first byte from a byte array. - * @param {Object} bytes - input byte array. - * @returns {number} first byte of the byte array. - * @static - */ static readByte(bytes) { - // @codingStandardsIgnoreStart - return bytes.shift() << 0; - // @codingStandardsIgnoreEnd - } - /** - * Read an arbitrary number of bytes, from a fixed position on a byte array. - * @param {Object[]} bytes - byte array. - * @param {number} pos - start position. - * @param {number} len - number of bytes to read. - * @returns {Object[]} the byte array. - * @static - */ static readBytes(bytes, pos, len) { - return bytes.splice(pos, len); - } - /** - * Inserts or modifies formulas or CAS on a textarea. - * @param {HTMLTextAreaElement} textarea - textarea target. - * @param {string} text - text to add in the textarea. For example, to add the link to the image, - * call this function as (textarea, Parser.createImageSrc(mathml)); - * @static - */ static updateTextArea(textarea, text) { - if (textarea && text) { - textarea.focus(); - if (textarea.selectionStart != null) { - const { selectionEnd } = textarea; - const selectionStart = textarea.value.substring(0, textarea.selectionStart); - const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length); - textarea.value = selectionStart + text + selectionEndSub; - textarea.selectionEnd = selectionEnd + text.length; - } else { - const selection = document.selection.createRange(); - selection.text = text; - } - } - } - /** - * Modifies existing formula on a textarea. - * @param {HTMLTextAreaElement} textarea - text area target. - * @param {string} text - text to add in the textarea. For example, if you want to add the link - * to the image,you can call this function as - * Util.updateTextarea(textarea, Parser.createImageSrc(mathml)); - * @param {number} start - beginning index from textarea where it needs to be replaced by text. - * @param {number} end - ending index from textarea where it needs to be replaced by text - * @static - */ static updateExistingTextOnTextarea(textarea, text, start, end) { - textarea.focus(); - const textareaStart = textarea.value.substring(0, start); - textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length); - textarea.selectionEnd = start + text.length; - } - /** - * Add a parameter with it's correspondent value to an URL (GET). - * @param {string} path - URL path - * @param {string} parameter - parameter - * @param {string} value - value - * @static - */ static addArgument(path, parameter, value) { - let sep; - if (path.indexOf("?") > 0) { - sep = "&"; - } else { - sep = "?"; - } - return `${path + sep + parameter}=${value}`; - } - } + } + return code; + } + /** + * Returns an URL with it's query params converted into array. + * @param {string} url - input URL. + * @returns {Object[]} an array containing all URL query params. + * @static + */ static urlToAssArray(url) { + let i; + i = url.indexOf("?"); + if (i > 0) { + const query = url.substring(i + 1); + const ss = query.split("&"); + const h = {}; + for(i = 0; i < ss.length; i += 1){ + const s = ss[i]; + const kv = s.split("="); + if (kv.length > 1) { + h[kv[0]] = decodeURIComponent(kv[1].replace(/\+/g, " ")); + } + } + return h; + } + return {}; + } + /** + * Returns an encoded URL by replacing each instance of certain characters by + * one, two, three or four escape sequences using encodeURIComponent method. + * !'()* . will not be encoded. + * + * @param {string} clearString - URL string to be encoded + * @returns {string} URL with it's special characters replaced. + * @static + */ static urlEncode(clearString) { + let output = ""; + // Method encodeURIComponent doesn't encode !'()*~ . + output = encodeURIComponent(clearString); + return output; + } + // TODO: To parser? + /** + * Converts the HTML of a image into the output code that WIRIS must return. + * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula) + * or the Wiriscas attribute of a WIRIS applet. + * @param {string} imgCode - the html code from a formula or a CAS image. + * @param {boolean} convertToXml - true if the image should be converted to XML. + * @param {boolean} convertToSafeXml - true if the image should be converted to safeXML. + * @returns {string} the XML or safeXML of a WIRIS image. + * @static + */ static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) { + const imgObject = Util.createObject(imgCode); + if (imgObject) { + if (imgObject.className === Configuration.get("imageClassName") || imgObject.getAttribute(Configuration.get("imageMathmlAttribute"))) { + if (!convertToXml) { + return imgCode; + } + const dataMathML = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); + // To handle annotations, first we need the MathML in XML. + let mathML = MathML.safeXmlDecode(dataMathML); + if (!Configuration.get("saveHandTraces")) { + mathML = MathML.removeAnnotation(mathML, "application/json"); + } + if (mathML == null) { + mathML = imgObject.getAttribute("alt"); + } + if (convertToSafeXml) { + const safeMathML = MathML.safeXmlEncode(mathML); + return safeMathML; + } + return mathML; + } + } + return imgCode; + } + /** + * Gets the node length in characters. + * @param {Node} node - HTML node. + * @returns {number} node length. + * @static + */ static getNodeLength(node) { + const staticNodeLengths = { + IMG: 1, + BR: 1 + }; + if (node.nodeType === 3) { + // TEXT_NODE. + return node.nodeValue.length; + } + if (node.nodeType === 1) { + // ELEMENT_NODE. + let length = staticNodeLengths[node.nodeName.toUpperCase()]; + if (length === undefined) { + length = 0; + } + for(let i = 0; i < node.childNodes.length; i += 1){ + length += Util.getNodeLength(node.childNodes[i]); + } + return length; + } + return 0; + } + /** + * Gets a selected node or text from an editable HTMLElement. + * If the caret is on a text node, concatenates it with all the previous and next text nodes. + * @param {HTMLElement} target - the editable HTMLElement. + * @param {boolean} isIframe - specifies if the target is an iframe or not + * @param {boolean} forceGetSelection - if true, ignores IE system to get + * the current selection and uses window.getSelection() + * @returns {object} an object with the 'node' key set if the item is an + * element or the keys 'node' and 'caretPosition' if the element is text. + * @static + */ static getSelectedItem(target, isIframe, forceGetSelection) { + let windowTarget; + if (isIframe) { + windowTarget = target.contentWindow; + windowTarget.focus(); + } else { + windowTarget = window; + target.focus(); + } + if (document.selection && !forceGetSelection) { + const range = windowTarget.document.selection.createRange(); + if (range.parentElement) { + if (range.htmlText.length > 0) { + if (range.text.length === 0) { + return Util.getSelectedItem(target, isIframe, true); + } + return null; + } + windowTarget.document.execCommand("InsertImage", false, "#"); + let temporalObject = range.parentElement(); + if (temporalObject.nodeName.toUpperCase() !== "IMG") { + // IE9 fix: parentElement() does not return the IMG node, + // returns the parent DIV node. In IE < 9, pasteHTML does not work well. + range.pasteHTML(''); + temporalObject = windowTarget.document.getElementById("wrs_openEditorWindow_temporalObject"); + } + let node; + let caretPosition; + if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) { + // TEXT_NODE. + node = temporalObject.nextSibling; + caretPosition = 0; + } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) { + node = temporalObject.previousSibling; + caretPosition = node.nodeValue.length; + } else { + node = windowTarget.document.createTextNode(""); + temporalObject.parentNode.insertBefore(node, temporalObject); + caretPosition = 0; + } + temporalObject.parentNode.removeChild(temporalObject); + return { + node, + caretPosition + }; + } + if (range.length > 1) { + return null; + } + return { + node: range.item(0) + }; + } + if (windowTarget.getSelection) { + let range; + const selection = windowTarget.getSelection(); + try { + range = selection.getRangeAt(0); + } catch (e) { + range = windowTarget.document.createRange(); + } + const node = range.startContainer; + if (node.nodeType === 3) { + // TEXT_NODE. + return { + node, + caretPosition: range.startOffset + }; + } + if (node !== range.endContainer) { + return null; + } + if (node.nodeType === 1) { + // ELEMENT_NODE. + const position = range.startOffset; + if (node.childNodes[position]) { + // In case that a formula is detected but not selected, + // we create an empty span where we could insert the new formula. + if (range.startOffset === range.endOffset) { + if (position !== 0 && node.childNodes[position - 1].localName === "span" && node.childNodes[position].classList?.contains("Wirisformula")) { + node.childNodes[position - 1].remove(); + return Util.getSelectedItem(target, isIframe, forceGetSelection); + } else if (node.childNodes[position].classList?.contains("Wirisformula")) { + if (position > 0 && node.childNodes[position - 1].classList?.contains("Wirisformula") || position === 0) { + var emptySpan = document.createElement("span"); + node.insertBefore(emptySpan, node.childNodes[position]); + return { + node: node.childNodes[position] + }; + } + } + } + return { + node: node.childNodes[position] + }; + } + } + } + return null; + } + /** + * Returns null if there isn't any item or if it is malformed. + * Otherwise returns an object containing the node with the MathML image + * and the cursor position inside the textarea. + * @param {HTMLTextAreaElement} textarea - textarea element. + * @returns {Object} An object containing the node, the index of the + * beginning of the selected text, caret position and the start and end position of the + * text node. + * @static + */ static getSelectedItemOnTextarea(textarea) { + const textNode = document.createTextNode(textarea.value); + const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart); + if (textNodeValues === null) { + return null; + } + return { + node: textNode, + caretPosition: textarea.selectionStart, + startPosition: textNodeValues.startPosition, + endPosition: textNodeValues.endPosition + }; + } + /** + * Looks for elements that match the given name in a HTML code string. + * Important: this function is very concrete for WIRIS code. + * It takes as preconditions lots of behaviors that are not the general case. + * @param {string} code - HTML code. + * @param {string} name - element name. + * @param {boolean} autoClosed - true if the elements are autoClosed. + * @return {Object[]} an object containing all HTML elements of code matching the name argument. + * @static + */ static getElementsByNameFromString(code, name, autoClosed) { + const elements = []; + code = code.toLowerCase(); + name = name.toLowerCase(); + let start = code.indexOf(`<${name} `); + while(start !== -1){ + // Look for nodes. + let endString; + if (autoClosed) { + endString = ">"; + } else { + endString = ``; + } + let end = code.indexOf(endString, start); + if (end !== -1) { + end += endString.length; + elements.push({ + start, + end + }); + } else { + end = start + 1; + } + start = code.indexOf(`<${name} `, end); + } + return elements; + } + /** + * Returns the numeric value of a base64 character. + * @param {string} character - base64 character. + * @returns {number} base64 character numeric value. + * @static + */ static decode64(character) { + const PLUS = "+".charCodeAt(0); + const SLASH = "/".charCodeAt(0); + const NUMBER = "0".charCodeAt(0); + const LOWER = "a".charCodeAt(0); + const UPPER = "A".charCodeAt(0); + const PLUS_URL_SAFE = "-".charCodeAt(0); + const SLASH_URL_SAFE = "_".charCodeAt(0); + const code = character.charCodeAt(0); + if (code === PLUS || code === PLUS_URL_SAFE) { + return 62; // Char '+'. + } + if (code === SLASH || code === SLASH_URL_SAFE) { + return 63; // Char '/'. + } + if (code < NUMBER) { + return -1; // No match. + } + if (code < NUMBER + 10) { + return code - NUMBER + 26 + 26; + } + if (code < UPPER + 26) { + return code - UPPER; + } + if (code < LOWER + 26) { + return code - LOWER + 26; + } + return null; + } + /** + * Converts a base64 string to a array of bytes. + * @param {string} b64String - base64 string. + * @param {number} length - dimension of byte array (by default whole string). + * @return {Object[]} the resultant byte array. + * @static + */ static b64ToByteArray(b64String, length) { + let tmp; + if (b64String.length % 4 > 0) { + throw new Error("Invalid string. Length must be a multiple of 4"); // Tipped base64. Length is fixed. + } + const arr = []; + let l; + let placeHolders; + if (!length) { + // All b64String string. + if (b64String.charAt(b64String.length - 2) === "=") { + placeHolders = 2; + } else if (b64String.charAt(b64String.length - 1) === "=") { + placeHolders = 1; + } else { + placeHolders = 0; + } + l = placeHolders > 0 ? b64String.length - 4 : b64String.length; + } else { + l = length; + } + let i; + for(i = 0; i < l; i += 4){ + // Ignoring code checker standards (bitewise operators). + // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information. + // @codingStandardsIgnoreStart + // eslint-disable-next-line max-len + tmp = Util.decode64(b64String.charAt(i)) << 18 | Util.decode64(b64String.charAt(i + 1)) << 12 | Util.decode64(b64String.charAt(i + 2)) << 6 | Util.decode64(b64String.charAt(i + 3)); + arr.push(tmp >> 16 & 0xff); + arr.push(tmp >> 8 & 0xff); + arr.push(tmp & 0xff); + // @codingStandardsIgnoreEnd + } + if (placeHolders) { + if (placeHolders === 2) { + // Ignoring code checker standards (bitewise operators). + // @codingStandardsIgnoreStart + // eslint-disable-next-line max-len + tmp = Util.decode64(b64String.charAt(i)) << 2 | Util.decode64(b64String.charAt(i + 1)) >> 4; + arr.push(tmp & 0xff); + } else if (placeHolders === 1) { + // eslint-disable-next-line max-len + tmp = Util.decode64(b64String.charAt(i)) << 10 | Util.decode64(b64String.charAt(i + 1)) << 4 | Util.decode64(b64String.charAt(i + 2)) >> 2; + arr.push(tmp >> 8 & 0xff); + arr.push(tmp & 0xff); + // @codingStandardsIgnoreEnd + } + } + return arr; + } + /** + * Returns the first 32-bit signed integer from a byte array. + * @param {Object[]} bytes - array of bytes. + * @returns {number} the 32-bit signed integer. + * @static + */ static readInt32(bytes) { + if (bytes.length < 4) { + return false; + } + const int32 = bytes.splice(0, 4); + // @codingStandardsIgnoreStart¡ + return int32[0] << 24 | int32[1] << 16 | int32[2] << 8 | int32[3] << 0; + // @codingStandardsIgnoreEnd + } + /** + * Read the first byte from a byte array. + * @param {Object} bytes - input byte array. + * @returns {number} first byte of the byte array. + * @static + */ static readByte(bytes) { + // @codingStandardsIgnoreStart + return bytes.shift() << 0; + // @codingStandardsIgnoreEnd + } + /** + * Read an arbitrary number of bytes, from a fixed position on a byte array. + * @param {Object[]} bytes - byte array. + * @param {number} pos - start position. + * @param {number} len - number of bytes to read. + * @returns {Object[]} the byte array. + * @static + */ static readBytes(bytes, pos, len) { + return bytes.splice(pos, len); + } + /** + * Inserts or modifies formulas or CAS on a textarea. + * @param {HTMLTextAreaElement} textarea - textarea target. + * @param {string} text - text to add in the textarea. For example, to add the link to the image, + * call this function as (textarea, Parser.createImageSrc(mathml)); + * @static + */ static updateTextArea(textarea, text) { + if (textarea && text) { + textarea.focus(); + if (textarea.selectionStart != null) { + const { selectionEnd } = textarea; + const selectionStart = textarea.value.substring(0, textarea.selectionStart); + const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length); + textarea.value = selectionStart + text + selectionEndSub; + textarea.selectionEnd = selectionEnd + text.length; + } else { + const selection = document.selection.createRange(); + selection.text = text; + } + } + } + /** + * Modifies existing formula on a textarea. + * @param {HTMLTextAreaElement} textarea - text area target. + * @param {string} text - text to add in the textarea. For example, if you want to add the link + * to the image,you can call this function as + * Util.updateTextarea(textarea, Parser.createImageSrc(mathml)); + * @param {number} start - beginning index from textarea where it needs to be replaced by text. + * @param {number} end - ending index from textarea where it needs to be replaced by text + * @static + */ static updateExistingTextOnTextarea(textarea, text, start, end) { + textarea.focus(); + const textareaStart = textarea.value.substring(0, start); + textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length); + textarea.selectionEnd = start + text.length; + } + /** + * Add a parameter with it's correspondent value to an URL (GET). + * @param {string} path - URL path + * @param {string} parameter - parameter + * @param {string} value - value + * @static + */ static addArgument(path, parameter, value) { + let sep; + if (path.indexOf("?") > 0) { + sep = "&"; + } else { + sep = "?"; + } + return `${path + sep + parameter}=${value}`; + } + } - /** - * @classdesc - * This class represents MathType Image class. Contains all the logic related - * to MathType images manipulation. - * All MathType images are generated using the appropriate MathType - * integration service: showimage or createimage. - * - * There are two available image formats: - * - svg (default) - * - png - * - * There are two formats for the image src attribute: - * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64. - * - A link to the showimage service. - */ class Image { - /** - * Removes data attributes from an image. - * @param {HTMLImageElement} img - Image where remove data attributes. - */ static removeImgDataAttributes(img) { - const attributesToRemove = []; - const { attributes } = img; - Object.keys(attributes).forEach((key) => { - const attribute = attributes[key]; - if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf("data-") === 0) { - // Is preferred keep an array and remove after the search - // because when attribute is removed the array of attributes - // is modified. - attributesToRemove.push(attribute.name); - } - }); - attributesToRemove.forEach((attribute) => { - img.removeAttribute(attribute); - }); - } - /** - * @static - * Clones all MathType image attributes from a HTMLImageElement to another. - * @param {HTMLImageElement} originImg - The original image. - * @param {HTMLImageElement} destImg - The destination image. - */ static clone(originImg, destImg) { - const customEditorAttributeName = Configuration.get("imageCustomEditorName"); - if (!originImg.hasAttribute(customEditorAttributeName)) { - destImg.removeAttribute(customEditorAttributeName); - } - const mathmlAttributeName = Configuration.get("imageMathmlAttribute"); - const imgAttributes = [ - mathmlAttributeName, - customEditorAttributeName, - "alt", - "height", - "width", - "style", - "src", - "role", - ]; - imgAttributes.forEach((iterator) => { - const originAttribute = originImg.getAttribute(iterator); - if (originAttribute) { - destImg.setAttribute(iterator, originAttribute); - } - }); - } - /** - * Determines whether an img src contains an SVG. - * @param {HTMLImageElement} img the img element to inspect - * @returns true if the img src contains an SVG, false otherwise - */ static isSvg(img) { - return img.src.startsWith("data:image/svg+xml;"); - } - /** - * Determines whether an img src is encoded in base64 or not. - * @param {HTMLImageElement} img the img element to inspect - * @returns true if the img src is encoded in base64, false otherwise - */ static isBase64(img) { - return img.src.startsWith("data:image/svg+xml;base64,") || img.src.startsWith("data:image/png;base64,"); - } - /** - * Calculates the metrics of a MathType image given the the service response and the image format. - * @param {HTMLImageElement} img - The HTMLImageElement. - * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL. - * @param {Boolean} jsonResponse - True the response of the image service is a - * JSON object. False otherwise. - */ static setImgSize(img, uri, jsonResponse) { - let ar; - let base64String; - let bytes; - let svgString; - if (jsonResponse) { - // Cleaning data:image/png;base64. - if (Image.isSvg(img)) { - // SVG format. - // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string. - if (!Image.isBase64(img)) { - ar = Image.getMetricsFromSvgString(uri); - } else { - base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); - svgString = ""; - bytes = Util.b64ToByteArray(base64String, base64String.length); - for (let i = 0; i < bytes.length; i += 1) { - svgString += String.fromCharCode(bytes[i]); - } - ar = Image.getMetricsFromSvgString(svgString); - } - // PNG format: we store all metrics information in the first 88 bytes. - } else { - base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); - bytes = Util.b64ToByteArray(base64String, 88); - ar = Image.getMetricsFromBytes(bytes); - } - // Backwards compatibility: we store the metrics into createimage response. - } else { - ar = Util.urlToAssArray(uri); - } - let width = ar.cw; - if (!width) { - return; - } - let height = ar.ch; - let baseline = ar.cb; - const { dpi } = ar; - if (dpi) { - width = (width * 96) / dpi; - height = (height * 96) / dpi; - baseline = (baseline * 96) / dpi; - } - img.width = width; - img.height = height; - img.style.verticalAlign = `-${height - baseline}px`; - } - /** - * Calculates the metrics of an image which has been resized. Is used to restore the original - * metrics of a resized image. - * @param {HTMLImageElement } img - The resized HTMLImageElement. - */ static fixAfterResize(img) { - img.removeAttribute("style"); - img.removeAttribute("width"); - img.removeAttribute("height"); - // In order to avoid resize with max-width css property. - img.style.maxWidth = "none"; - const processImg = (img) => { - if (img.src.indexOf("data:image") !== -1) { - if (img.src.indexOf("data:image/svg+xml") !== -1) { - // Image is in base64: decode it in order to calculate the size, and then bring it back to base64 - // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it - // (which would actually make more sense for readibility and efficiency). - if (img.src.indexOf("data:image/svg+xml;base64,") !== -1) { - // 'data:image/svg+xml;base64,'.length === 26 - const base64String = img.getAttribute("src").substring(26); - const svgString = window.atob(base64String); - const encodedSvgString = encodeURIComponent(svgString); - img.setAttribute("src", `data:image/svg+xml;charset=utf8,${encodedSvgString}`); - // 'data:image/svg+xml;charset=utf8,'.length === 32. - const svg = decodeURIComponent(img.src.substring(32, img.src.length)); - Image.setImgSize(img, svg, true); - // Return src to base64! - img.setAttribute("src", `data:image/svg+xml;base64,${base64String}`); - } else { - // 'data:image/svg+xml;charset=utf8,'.length === 32. - const svg = decodeURIComponent(img.src.substring(32, img.src.length)); - Image.setImgSize(img, svg, true); - } - } else { - // 'data:image/png;base64,' === 22. - const base64 = img.src.substring(22, img.src.length); - Image.setImgSize(img, base64, true); - } - } else { - Image.setImgSize(img, img.src); - } - }; - // If the image doesn't contain a blob, just process it normally - if (img.src.indexOf("blob:") === -1) { - processImg(img); - // if it does contain a blob, then read that, replace the src with the decoded content, and process it - } else { - let reader = new FileReader(); - reader.onload = function () { - img.setAttribute("src", reader.result); - processImg(img); - }; - fetch(img.src) - .then((r) => r.blob()) - .then((blob) => { - reader.readAsDataURL(blob); - }); - } - } - /** - * Returns the metrics (height, width and baseline) contained in a SVG image generated - * by the MathType image service. This image contains as an extra custom attribute: - * the baseline (wrs:baseline). - * @param {String} svgString - The SVG image. - * @return {Array} - The image metrics. - */ static getMetricsFromSvgString(svgString) { - let first = svgString.indexOf('height="'); - let last = svgString.indexOf('"', first + 8, svgString.length); - const height = svgString.substring(first + 8, last); - first = svgString.indexOf('width="'); - last = svgString.indexOf('"', first + 7, svgString.length); - const width = svgString.substring(first + 7, last); - first = svgString.indexOf('wrs:baseline="'); - last = svgString.indexOf('"', first + 14, svgString.length); - const baseline = svgString.substring(first + 14, last); - if (typeof width !== "undefined") { - const arr = []; - arr.cw = width; - arr.ch = height; - if (typeof baseline !== "undefined") { - arr.cb = baseline; - } - return arr; - } - return []; - } - /** - * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array. - * @param {Array.} bytes - png byte array. - * @return {Array} The png metrics. - */ static getMetricsFromBytes(bytes) { - Util.readBytes(bytes, 0, 8); - let width; - let height; - let typ; - let baseline; - let dpi; - while (bytes.length >= 4) { - typ = Util.readInt32(bytes); - if (typ === 0x49484452) { - width = Util.readInt32(bytes); - height = Util.readInt32(bytes); - // Read 5 bytes. - Util.readInt32(bytes); - Util.readByte(bytes); - } else if (typ === 0x62615345) { - // Baseline: 'baSE'. - baseline = Util.readInt32(bytes); - } else if (typ === 0x70485973) { - // Dpis: 'pHYs'. - dpi = Util.readInt32(bytes); - dpi = Math.round(dpi / 39.37); - Util.readInt32(bytes); - Util.readByte(bytes); - } - Util.readInt32(bytes); - } - if (typeof width !== "undefined") { - const arr = []; - arr.cw = width; - arr.ch = height; - arr.dpi = dpi; - if (baseline) { - arr.cb = baseline; - } - return arr; - } - return []; - } - } + /** + * @classdesc + * This class represents MathType Image class. Contains all the logic related + * to MathType images manipulation. + * All MathType images are generated using the appropriate MathType + * integration service: showimage or createimage. + * + * There are two available image formats: + * - svg (default) + * - png + * + * There are two formats for the image src attribute: + * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64. + * - A link to the showimage service. + */ class Image { + /** + * Removes data attributes from an image. + * @param {HTMLImageElement} img - Image where remove data attributes. + */ static removeImgDataAttributes(img) { + const attributesToRemove = []; + const { attributes } = img; + Object.keys(attributes).forEach((key)=>{ + const attribute = attributes[key]; + if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf("data-") === 0) { + // Is preferred keep an array and remove after the search + // because when attribute is removed the array of attributes + // is modified. + attributesToRemove.push(attribute.name); + } + }); + attributesToRemove.forEach((attribute)=>{ + img.removeAttribute(attribute); + }); + } + /** + * @static + * Clones all MathType image attributes from a HTMLImageElement to another. + * @param {HTMLImageElement} originImg - The original image. + * @param {HTMLImageElement} destImg - The destination image. + */ static clone(originImg, destImg) { + const customEditorAttributeName = Configuration.get("imageCustomEditorName"); + if (!originImg.hasAttribute(customEditorAttributeName)) { + destImg.removeAttribute(customEditorAttributeName); + } + const mathmlAttributeName = Configuration.get("imageMathmlAttribute"); + const imgAttributes = [ + mathmlAttributeName, + customEditorAttributeName, + "alt", + "height", + "width", + "style", + "src", + "role" + ]; + imgAttributes.forEach((iterator)=>{ + const originAttribute = originImg.getAttribute(iterator); + if (originAttribute) { + destImg.setAttribute(iterator, originAttribute); + } + }); + } + /** + * Determines whether an img src contains an SVG. + * @param {HTMLImageElement} img the img element to inspect + * @returns true if the img src contains an SVG, false otherwise + */ static isSvg(img) { + return img.src.startsWith("data:image/svg+xml;"); + } + /** + * Determines whether an img src is encoded in base64 or not. + * @param {HTMLImageElement} img the img element to inspect + * @returns true if the img src is encoded in base64, false otherwise + */ static isBase64(img) { + return img.src.startsWith("data:image/svg+xml;base64,") || img.src.startsWith("data:image/png;base64,"); + } + /** + * Calculates the metrics of a MathType image given the the service response and the image format. + * @param {HTMLImageElement} img - The HTMLImageElement. + * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL. + * @param {Boolean} jsonResponse - True the response of the image service is a + * JSON object. False otherwise. + */ static setImgSize(img, uri, jsonResponse) { + let ar; + let base64String; + let bytes; + let svgString; + if (jsonResponse) { + // Cleaning data:image/png;base64. + if (Image.isSvg(img)) { + // SVG format. + // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string. + if (!Image.isBase64(img)) { + ar = Image.getMetricsFromSvgString(uri); + } else { + base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); + svgString = ""; + bytes = Util.b64ToByteArray(base64String, base64String.length); + for(let i = 0; i < bytes.length; i += 1){ + svgString += String.fromCharCode(bytes[i]); + } + ar = Image.getMetricsFromSvgString(svgString); + } + // PNG format: we store all metrics information in the first 88 bytes. + } else { + base64String = img.src.substr(img.src.indexOf("base64,") + 7, img.src.length); + bytes = Util.b64ToByteArray(base64String, 88); + ar = Image.getMetricsFromBytes(bytes); + } + // Backwards compatibility: we store the metrics into createimage response. + } else { + ar = Util.urlToAssArray(uri); + } + let width = ar.cw; + if (!width) { + return; + } + let height = ar.ch; + let baseline = ar.cb; + const { dpi } = ar; + if (dpi) { + width = width * 96 / dpi; + height = height * 96 / dpi; + baseline = baseline * 96 / dpi; + } + img.width = width; + img.height = height; + img.style.verticalAlign = `-${height - baseline}px`; + } + /** + * Calculates the metrics of an image which has been resized. Is used to restore the original + * metrics of a resized image. + * @param {HTMLImageElement } img - The resized HTMLImageElement. + */ static fixAfterResize(img) { + img.removeAttribute("style"); + img.removeAttribute("width"); + img.removeAttribute("height"); + // In order to avoid resize with max-width css property. + img.style.maxWidth = "none"; + const processImg = (img)=>{ + if (img.src.indexOf("data:image") !== -1) { + if (img.src.indexOf("data:image/svg+xml") !== -1) { + // Image is in base64: decode it in order to calculate the size, and then bring it back to base64 + // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it + // (which would actually make more sense for readibility and efficiency). + if (img.src.indexOf("data:image/svg+xml;base64,") !== -1) { + // 'data:image/svg+xml;base64,'.length === 26 + const base64String = img.getAttribute("src").substring(26); + const svgString = window.atob(base64String); + const encodedSvgString = encodeURIComponent(svgString); + img.setAttribute("src", `data:image/svg+xml;charset=utf8,${encodedSvgString}`); + // 'data:image/svg+xml;charset=utf8,'.length === 32. + const svg = decodeURIComponent(img.src.substring(32, img.src.length)); + Image.setImgSize(img, svg, true); + // Return src to base64! + img.setAttribute("src", `data:image/svg+xml;base64,${base64String}`); + } else { + // 'data:image/svg+xml;charset=utf8,'.length === 32. + const svg = decodeURIComponent(img.src.substring(32, img.src.length)); + Image.setImgSize(img, svg, true); + } + } else { + // 'data:image/png;base64,' === 22. + const base64 = img.src.substring(22, img.src.length); + Image.setImgSize(img, base64, true); + } + } else { + Image.setImgSize(img, img.src); + } + }; + // If the image doesn't contain a blob, just process it normally + if (img.src.indexOf("blob:") === -1) { + processImg(img); + // if it does contain a blob, then read that, replace the src with the decoded content, and process it + } else { + let reader = new FileReader(); + reader.onload = function() { + img.setAttribute("src", reader.result); + processImg(img); + }; + fetch(img.src).then((r)=>r.blob()).then((blob)=>{ + reader.readAsDataURL(blob); + }); + } + } + /** + * Returns the metrics (height, width and baseline) contained in a SVG image generated + * by the MathType image service. This image contains as an extra custom attribute: + * the baseline (wrs:baseline). + * @param {String} svgString - The SVG image. + * @return {Array} - The image metrics. + */ static getMetricsFromSvgString(svgString) { + let first = svgString.indexOf('height="'); + let last = svgString.indexOf('"', first + 8, svgString.length); + const height = svgString.substring(first + 8, last); + first = svgString.indexOf('width="'); + last = svgString.indexOf('"', first + 7, svgString.length); + const width = svgString.substring(first + 7, last); + first = svgString.indexOf('wrs:baseline="'); + last = svgString.indexOf('"', first + 14, svgString.length); + const baseline = svgString.substring(first + 14, last); + if (typeof width !== "undefined") { + const arr = []; + arr.cw = width; + arr.ch = height; + if (typeof baseline !== "undefined") { + arr.cb = baseline; + } + return arr; + } + return []; + } + /** + * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array. + * @param {Array.} bytes - png byte array. + * @return {Array} The png metrics. + */ static getMetricsFromBytes(bytes) { + Util.readBytes(bytes, 0, 8); + let width; + let height; + let typ; + let baseline; + let dpi; + while(bytes.length >= 4){ + typ = Util.readInt32(bytes); + if (typ === 0x49484452) { + width = Util.readInt32(bytes); + height = Util.readInt32(bytes); + // Read 5 bytes. + Util.readInt32(bytes); + Util.readByte(bytes); + } else if (typ === 0x62615345) { + // Baseline: 'baSE'. + baseline = Util.readInt32(bytes); + } else if (typ === 0x70485973) { + // Dpis: 'pHYs'. + dpi = Util.readInt32(bytes); + dpi = Math.round(dpi / 39.37); + Util.readInt32(bytes); + Util.readByte(bytes); + } + Util.readInt32(bytes); + } + if (typeof width !== "undefined") { + const arr = []; + arr.cw = width; + arr.ch = height; + arr.dpi = dpi; + if (baseline) { + arr.cb = baseline; + } + return arr; + } + return []; + } + } - /** - * @classdesc - * This class represents MathType accessible class. Converts MathML to accessible text and manages - * the associated client-side cache. - */ class Accessibility { - /** - * Static property. - * Accessibility cache, each entry contains a MathML and its correspondent accessibility text. - * @type {TextCache} - */ static get cache() { - return Accessibility._cache; - } - /** - * Static property setter. - * Set accessibility cache. - * @param {TextCahe} value - The property value. - * @ignore - */ static set cache(value) { - Accessibility._cache = value; - } - /** - * Converts MathML strings to its accessible text representation. - * @param {String} mathML - MathML to be converted to accessible text. - * @param {String} [language] - Language of the accessible text. 'en' by default. - * @param {Array.} [data] - Parameters to send to mathml2accessible service. - * @return {String} Accessibility text. - */ static mathMLToAccessible(mathML, language, data) { - if (typeof language === "undefined") { - language = "en"; - } - // Check MathML class. If the class is chemistry, - // we add chemistry to data to force accessibility service - // to load chemistry grammar. - if (MathML.containClass(mathML, "wrs_chemistry")) { - data.mode = "chemistry"; - } - // Ignore accesibility styles - data.ignoreStyles = true; - let accessibleText = ""; - if (Accessibility.cache.get(mathML)) { - accessibleText = Accessibility.cache.get(mathML); - } else { - data.service = "mathml2accessible"; - data.lang = language; - const accessibleJsonResponse = JSON.parse(ServiceProvider.getService("service", data)); - if (accessibleJsonResponse.status !== "error") { - accessibleText = accessibleJsonResponse.result.text; - Accessibility.cache.populate(mathML, accessibleText); - } else { - accessibleText = StringManager.get("error_convert_accessibility"); - } - } - return accessibleText; - } - } - /** - * Contains an instance of TextCache class to manage the JavaScript accessible cache. - * Each entry of the cache object contains the MathML and it's correspondent accessibility text. - * @private - * @type {TextCache} - */ Accessibility._cache = new TextCache(); + /** + * @classdesc + * This class represents MathType accessible class. Converts MathML to accessible text and manages + * the associated client-side cache. + */ class Accessibility { + /** + * Static property. + * Accessibility cache, each entry contains a MathML and its correspondent accessibility text. + * @type {TextCache} + */ static get cache() { + return Accessibility._cache; + } + /** + * Static property setter. + * Set accessibility cache. + * @param {TextCahe} value - The property value. + * @ignore + */ static set cache(value) { + Accessibility._cache = value; + } + /** + * Converts MathML strings to its accessible text representation. + * @param {String} mathML - MathML to be converted to accessible text. + * @param {String} [language] - Language of the accessible text. 'en' by default. + * @param {Array.} [data] - Parameters to send to mathml2accessible service. + * @return {String} Accessibility text. + */ static mathMLToAccessible(mathML, language, data) { + if (typeof language === "undefined") { + language = "en"; + } + // Check MathML class. If the class is chemistry, + // we add chemistry to data to force accessibility service + // to load chemistry grammar. + if (MathML.containClass(mathML, "wrs_chemistry")) { + data.mode = "chemistry"; + } + // Ignore accesibility styles + data.ignoreStyles = true; + let accessibleText = ""; + if (Accessibility.cache.get(mathML)) { + accessibleText = Accessibility.cache.get(mathML); + } else { + data.service = "mathml2accessible"; + data.lang = language; + const accessibleJsonResponse = JSON.parse(ServiceProvider.getService("service", data)); + if (accessibleJsonResponse.status !== "error") { + accessibleText = accessibleJsonResponse.result.text; + Accessibility.cache.populate(mathML, accessibleText); + } else { + accessibleText = StringManager.get("error_convert_accessibility"); + } + } + return accessibleText; + } + } + /** + * Contains an instance of TextCache class to manage the JavaScript accessible cache. + * Each entry of the cache object contains the MathML and it's correspondent accessibility text. + * @private + * @type {TextCache} + */ Accessibility._cache = new TextCache(); - /** - * @classdesc - * This class represent a MahML parser. Converts MathML into formulas depending on the - * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured - * in the backend. - */ class Parser { - /** - * Converts a MathML string to an img element. - * @param {Document} creator - Document object to call createElement method. - * @param {string} mathml - MathML code - * @param {Object[]} wirisProperties - object containing WIRIS custom properties - * @param {language} language - custom language for accessibility. - * @returns {HTMLImageElement} the formula image corresponding to initial MathML string. - * @static - */ static mathmlToImgObject(creator, mathml, wirisProperties, language) { - const imgObject = creator.createElement("img"); - imgObject.align = "middle"; - imgObject.style.maxWidth = "none"; - let data = wirisProperties || {}; - // Take into account the backend config - const wirisEditorProperties = Configuration.get("editorParameters"); - data = { - ...wirisEditorProperties, - ...data, - }; - data.mml = mathml; - data.lang = language; - // Request metrics of the generated image. - data.metrics = "true"; - data.centerbaseline = "false"; - // Full base64 method (edit & save). - if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { - data.base64 = true; - } - // Render js params: _wrs_int_wirisProperties contains some js render params. - // Since MathML can support render params, js params should be send only to editor. - imgObject.className = Configuration.get("imageClassName"); - if (mathml.indexOf('class="') !== -1) { - // We check here if the MathML has been created from a customEditor (such chemistry) - // to add custom editor name attribute to img object (if necessary). - let mathmlSubstring = mathml.substring(mathml.indexOf('class="') + 'class="'.length, mathml.length); - mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('"')); - mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length); - imgObject.setAttribute(Configuration.get("imageCustomEditorName"), mathmlSubstring); - } - // Performance enabled. - if ( - Configuration.get("wirisPluginPerformance") && - (Configuration.get("saveMode") === "xml" || Configuration.get("saveMode") === "safeXml") - ) { - let result = JSON.parse(Parser.createShowImageSrc(data, language)); - if (result.status === "warning") { - // POST call. - // if the mathml is malformed, this function will throw an exception. - try { - result = JSON.parse(ServiceProvider.getService("showimage", data)); - } catch (e) { - return null; - } - } - ({ result } = result); - if (result.format === "png") { - imgObject.src = `data:image/png;base64,${result.content}`; - } else { - imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`; - } - imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); - Image.setImgSize(imgObject, result.content, true); - if (Configuration.get("enableAccessibility")) { - if (typeof result.alt === "undefined") { - imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); - } else { - imgObject.alt = result.alt; - } - } - } else { - const result = Parser.createImageSrc(mathml, data); - imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); - imgObject.src = result; - Image.setImgSize( - imgObject, - result, - Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default", - ); - if (Configuration.get("enableAccessibility")) { - imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); - } - } - if (typeof Parser.observer !== "undefined") { - Parser.observer.observe(imgObject); - } - // Role math https://www.w3.org/TR/wai-aria/roles#math. - imgObject.setAttribute("role", "math"); - return imgObject; - } - /** - * Returns the source to showimage service by calling createimage service. The - * output of the createimage service is a URL path pointing to showimage service. - * This method is called when performance is disabled. - * @param {string} mathml - MathML code. - * @param {Object[]} data - data object containing service parameters. - * @returns {string} the showimage path. - */ static createImageSrc(mathml, data) { - // Full base64 method (edit & save). - if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { - data.base64 = true; - } - let result = ServiceProvider.getService("createimage", data); - if (result.indexOf("@BASE@") !== -1) { - // Replacing '@BASE@' with the base URL of createimage. - const baseParts = ServiceProvider.getServicePath("createimage").split("/"); - baseParts.pop(); - result = result.split("@BASE@").join(baseParts.join("/")); - } - return result; - } - /** - * Parses initial HTML code. If the HTML contains data generated by WIRIS, - * this data would be converted as following: - *
-     * MathML code: Image containing the corresponding MathML formulas.
-     * MathML code with LaTeX annotation : LaTeX string.
-     * 
- * @param {string} code - HTML code containing MathML data. - * @param {string} language - language to create image alt text. - * @returns {string} HTML code with the original MathML converted into LaTeX and images. - */ static initParse(code, language) { - /* Note: The code inside this function has been inverted. + /** + * @classdesc + * This class represent a MahML parser. Converts MathML into formulas depending on the + * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured + * in the backend. + */ class Parser { + /** + * Converts a MathML string to an img element. + * @param {Document} creator - Document object to call createElement method. + * @param {string} mathml - MathML code + * @param {Object[]} wirisProperties - object containing WIRIS custom properties + * @param {language} language - custom language for accessibility. + * @returns {HTMLImageElement} the formula image corresponding to initial MathML string. + * @static + */ static mathmlToImgObject(creator, mathml, wirisProperties, language) { + const imgObject = creator.createElement("img"); + imgObject.align = "middle"; + imgObject.style.maxWidth = "none"; + let data = wirisProperties || {}; + // Take into account the backend config + const wirisEditorProperties = Configuration.get("editorParameters"); + data = { + ...wirisEditorProperties, + ...data + }; + data.mml = mathml; + data.lang = language; + // Request metrics of the generated image. + data.metrics = "true"; + data.centerbaseline = "false"; + // Full base64 method (edit & save). + if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { + data.base64 = true; + } + // Render js params: _wrs_int_wirisProperties contains some js render params. + // Since MathML can support render params, js params should be send only to editor. + imgObject.className = Configuration.get("imageClassName"); + if (mathml.indexOf('class="') !== -1) { + // We check here if the MathML has been created from a customEditor (such chemistry) + // to add custom editor name attribute to img object (if necessary). + let mathmlSubstring = mathml.substring(mathml.indexOf('class="') + 'class="'.length, mathml.length); + mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('"')); + mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length); + imgObject.setAttribute(Configuration.get("imageCustomEditorName"), mathmlSubstring); + } + // Performance enabled. + if (Configuration.get("wirisPluginPerformance") && (Configuration.get("saveMode") === "xml" || Configuration.get("saveMode") === "safeXml")) { + let result = JSON.parse(Parser.createShowImageSrc(data, language)); + if (result.status === "warning") { + // POST call. + // if the mathml is malformed, this function will throw an exception. + try { + result = JSON.parse(ServiceProvider.getService("showimage", data)); + } catch (e) { + return null; + } + } + ({ result } = result); + if (result.format === "png") { + imgObject.src = `data:image/png;base64,${result.content}`; + } else { + imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`; + } + imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + Image.setImgSize(imgObject, result.content, true); + if (Configuration.get("enableAccessibility")) { + if (typeof result.alt === "undefined") { + imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); + } else { + imgObject.alt = result.alt; + } + } + } else { + const result = Parser.createImageSrc(mathml, data); + imgObject.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + imgObject.src = result; + Image.setImgSize(imgObject, result, Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default"); + if (Configuration.get("enableAccessibility")) { + imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data); + } + } + if (typeof Parser.observer !== "undefined") { + Parser.observer.observe(imgObject); + } + // Role math https://www.w3.org/TR/wai-aria/roles#math. + imgObject.setAttribute("role", "math"); + return imgObject; + } + /** + * Returns the source to showimage service by calling createimage service. The + * output of the createimage service is a URL path pointing to showimage service. + * This method is called when performance is disabled. + * @param {string} mathml - MathML code. + * @param {Object[]} data - data object containing service parameters. + * @returns {string} the showimage path. + */ static createImageSrc(mathml, data) { + // Full base64 method (edit & save). + if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "default") { + data.base64 = true; + } + let result = ServiceProvider.getService("createimage", data); + if (result.indexOf("@BASE@") !== -1) { + // Replacing '@BASE@' with the base URL of createimage. + const baseParts = ServiceProvider.getServicePath("createimage").split("/"); + baseParts.pop(); + result = result.split("@BASE@").join(baseParts.join("/")); + } + return result; + } + /** + * Parses initial HTML code. If the HTML contains data generated by WIRIS, + * this data would be converted as following: + *
+      * MathML code: Image containing the corresponding MathML formulas.
+      * MathML code with LaTeX annotation : LaTeX string.
+      * 
+ * @param {string} code - HTML code containing MathML data. + * @param {string} language - language to create image alt text. + * @returns {string} HTML code with the original MathML converted into LaTeX and images. + */ static initParse(code, language) { + /* Note: The code inside this function has been inverted. If you invert again the code then you cannot use correctly LaTeX in Moodle. */ code = Parser.initParseSaveMode(code, language); - return Parser.initParseEditMode(code); - } - /** - * Parses initial HTML code depending on the save mode. Transforms all MathML - * occurrences for it's correspondent image or LaTeX. - * @param {string} code - HTML code to be parsed - * @param {string} language - language to create image alt text. - * @returns {string} HTML code parsed. - */ static initParseSaveMode(code, language) { - if (Configuration.get("saveMode")) { - // Converting XML to tags. - code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters); - code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters); - code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language); - code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language); - if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") { - code = Parser.codeImgTransform(code, "base642showimage"); - } - } - return code; - } - /** - * Parses initial HTML code depending on the edit mode. - * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will - * be converted into a LaTeX string instead of an image. - * @param {string} code - HTML code containing MathML. - * @returns {string} parsed HTML code. - */ static initParseEditMode(code) { - if (Configuration.get("parseModes").indexOf("latex") !== -1) { - const imgList = Util.getElementsByNameFromString(code, "img", true); - const token = 'encoding="LaTeX">'; - // While replacing images with latex, the indexes of the found images changes - // respecting the original code, so this carry is needed. - let carry = 0; - for (let i = 0; i < imgList.length; i += 1) { - const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry); - if (imgCode.indexOf(` class="${Configuration.get("imageClassName")}"`) !== -1) { - let mathmlStartToken = ` ${Configuration.get("imageMathmlAttribute")}="`; - let mathmlStart = imgCode.indexOf(mathmlStartToken); - if (mathmlStart === -1) { - mathmlStartToken = ' alt="'; - mathmlStart = imgCode.indexOf(mathmlStartToken); - } - if (mathmlStart !== -1) { - mathmlStart += mathmlStartToken.length; - const mathmlEnd = imgCode.indexOf('"', mathmlStart); - const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd))); - let latexStartPosition = mathml.indexOf(token); - if (latexStartPosition !== -1) { - latexStartPosition += token.length; - const latexEndPosition = mathml.indexOf("", latexStartPosition); - const latex = mathml.substring(latexStartPosition, latexEndPosition); - const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`; - const start = code.substring(0, imgList[i].start + carry); - const end = code.substring(imgList[i].end + carry); - code = start + replaceText + end; - carry += replaceText.length - (imgList[i].end - imgList[i].start); - } - } - } - } - } - return code; - } - /** - * Parses end HTML code. The end HTML code is HTML code with embedded images - * or LaTeX formulas created with MathType.
- * By default this method converts the formula images and LaTeX strings in MathML.
- * If image mode is enabled the images will not be converted into MathML. For further information see {@link https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-web-interface-features/full-mathml-mode---wirisplugins-js.html}. - * @param {string} code - HTML to be parsed - * @returns {string} the HTML code parsed. - */ static endParse(code) { - // Transform LaTeX ocurrences to MathML elements. - const codeEndParsedEditMode = Parser.endParseEditMode(code); - // Transform img elements to MathML elements. - const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode); - return codeEndParseSaveMode; - } - /** - * Parses end HTML code depending on the edit mode. - * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML. - * @param {string} code - HTML code to be parsed. - * @returns {string} HTML code parsed. - */ static endParseEditMode(code) { - // Converting LaTeX to images. - if (Configuration.get("parseModes").indexOf("latex") !== -1) { - let output = ""; - let endPosition = 0; - let startPosition = code.indexOf("$$"); - while (startPosition !== -1) { - output += code.substring(endPosition, startPosition); - endPosition = code.indexOf("$$", startPosition + 2); - if (endPosition !== -1) { - // Before, it was a condition here to execute the next codelines - // 'latex.indexOf('<') == -1'. - // We don't know why it was used, but seems to have a conflict with - // latex formulas that contains '<'. - const latex = code.substring(startPosition + 2, endPosition); - const decodedLatex = Util.htmlEntitiesDecode(latex); - let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true)); - if (!Configuration.get("saveHandTraces")) { - // Remove hand traces. - mathml = MathML.removeAnnotation(mathml, "application/json"); - } - output += mathml; - endPosition += 2; - } else { - output += "$$"; - endPosition = startPosition + 2; - } - startPosition = code.indexOf("$$", endPosition); - } - output += code.substring(endPosition, code.length); - code = output; - } - return code; - } - /** - * Parses end HTML code depending on the save mode. Converts all - * images into the element determined by the save mode: - * - xml: Parses images formulas into MathML. - * - safeXml: Parses images formulas into safeMAthML - * - base64: Parses images into base64 images. - * - image: Parse images into images (no parsing) - * @param {string} code - HTML code to be parsed - * @returns {string} HTML code parsed. - */ static endParseSaveMode(code) { - if (Configuration.get("saveMode")) { - if (Configuration.get("saveMode") === "safeXml") { - code = Parser.codeImgTransform(code, "img2mathml"); - } else if (Configuration.get("saveMode") === "xml") { - code = Parser.codeImgTransform(code, "img2mathml"); - } else if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") { - code = Parser.codeImgTransform(code, "img264"); - } - } - return code; - } - /** - * Auxiliar function that builds the data object to send to the showimage endpoint - * @param {Object[]} data - object containing showimage service parameters. - * @param {string} language - string containing the language of the formula. - * @returns {Object} JSON object with the data to send to showimage. - */ static createShowImageSrcData(data, language) { - const dataMd5 = {}; - const renderParams = [ - "mml", - "color", - "centerbaseline", - "zoom", - "dpi", - "fontSize", - "fontFamily", - "defaultStretchy", - "backgroundColor", - "format", - ]; - renderParams.forEach((param) => { - if (typeof data[param] !== "undefined") { - dataMd5[param] = data[param]; - } - }); - // Data variables to get. - const dataObject = {}; - Object.keys(data).forEach((key) => { - // We don't need mathml in this request we try to get cached. - // Only need the formula md5 calculated before. - if (key !== "mml") { - dataObject[key] = data[key]; - } - }); - dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5)); - dataObject.lang = typeof language === "undefined" ? "en" : language; - dataObject.version = Configuration.get("version"); - return dataObject; - } - /** - * Returns the result to call showimage service with the formula md5 as parameter. - * The result could be: - * - {'status' : warning'} : The image associated to the MathML md5 is not in cache. - * - {'status' : 'ok' ...} : The image associated to the MathML md5 is in cache. - * @param {Object[]} data - object containing showimage service parameters. - * @param {string} language - string containing the language of the formula. - * @returns {Object} JSON object containing showimage response. - */ static createShowImageSrc(data, language) { - const dataObject = this.createShowImageSrcData(data, language); - const result = ServiceProvider.getService("showimage", Util.httpBuildQuery(dataObject), true); - return result; - } - /** - * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src) - * or showimage img tags (i.e with showimage.php on src) - * @param {string} code - HTML code - * @param {string} mode - base642showimage or img2mathml or img264 transform. - * @returns {string} html - code transformed. - */ static codeImgTransform(code, mode) { - let output = ""; - let endPosition = 0; - const pattern = /") { - endPosition = i + 1; - } - i += 1; - } - if (endPosition < startPosition) { - // The img tag is stripped. - output += code.substring(startPosition, code.length); - return output; - } - let imgCode = code.substring(startPosition, endPosition); - const imgObject = Util.createObject(imgCode); - let xmlCode = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); - let convertToXml; - let convertToSafeXml; - if (mode === "base642showimage") { - if (xmlCode == null) { - xmlCode = imgObject.getAttribute("alt"); - } - xmlCode = MathML.safeXmlDecode(xmlCode); - imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null); - output += Util.createObjectCode(imgCode); - } else if (mode === "img2mathml") { - if (Configuration.get("saveMode")) { - if (Configuration.get("saveMode") === "safeXml") { - convertToXml = true; - convertToSafeXml = true; - } else if (Configuration.get("saveMode") === "xml") { - convertToXml = true; - convertToSafeXml = false; - } - } - output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml); - } else if (mode === "img264") { - if (xmlCode === null) { - xmlCode = imgObject.getAttribute("alt"); - } - xmlCode = MathML.safeXmlDecode(xmlCode); - const properties = {}; - properties.base64 = "true"; - imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null); - // Metrics. - Image.setImgSize(imgCode, imgCode.src, true); - output += Util.createObjectCode(imgCode); - } - } - output += code.substring(endPosition, code.length); - return output; - } - /** - * Converts all occurrences of MathML to the corresponding image. - * @param {string} content - string with valid MathML code. - * The MathML code doesn't contain semantics. - * @param {Constants} characters - Constant object containing xmlCharacters - * or safeXmlCharacters relation. - * @param {string} language - a valid language code - * in order to generate formula accessibility. - * @returns {string} The input string with all the MathML - * occurrences replaced by the corresponding image. - */ static parseMathmlToImg(content, characters, language) { - let output = ""; - const mathTagBegin = `${characters.tagOpener}math`; - const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; - let start = content.indexOf(mathTagBegin); - let end = 0; - while (start !== -1) { - output += content.substring(end, start); - // Avoid WIRIS images to be parsed. - const imageMathmlAtrribute = content.indexOf(Configuration.get("imageMathmlAttribute")); - end = content.indexOf(mathTagEnd, start); - if (end === -1) { - end = content.length - 1; - } else if (imageMathmlAtrribute !== -1) { - // First close tag of img attribute - // If a mathmlAttribute exists should be inside a img tag. - end += content.indexOf("/>", start); - } else { - end += mathTagEnd.length; - } - if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) { - let mathml = content.substring(start, end); - mathml = - characters.id === Constants.safeXmlCharacters.id - ? MathML.safeXmlDecode(mathml) - : MathML.mathMLEntities(mathml); - output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language)); - } else { - output += content.substring(start, end); - } - start = content.indexOf(mathTagBegin, end); - } - output += content.substring(end, content.length); - return output; - } - } - // Mutation observers to avoid wiris image formulas class be removed. - if (typeof MutationObserver !== "undefined") { - const mutationObserver = new MutationObserver((mutations) => { - mutations.forEach((mutation) => { - if ( - mutation.oldValue === Configuration.get("imageClassName") && - mutation.attributeName === "class" && - mutation.target.className.indexOf(Configuration.get("imageClassName")) === -1 - ) { - mutation.target.className = Configuration.get("imageClassName"); - } - }); - }); - Parser.observer = Object.create(mutationObserver); - Parser.observer.Config = { - attributes: true, - attributeOldValue: true, - }; - // We use own default config. - Parser.observer.observe = function (target) { - Object.getPrototypeOf(this).observe(target, this.Config); - }; - } + return Parser.initParseEditMode(code); + } + /** + * Parses initial HTML code depending on the save mode. Transforms all MathML + * occurrences for it's correspondent image or LaTeX. + * @param {string} code - HTML code to be parsed + * @param {string} language - language to create image alt text. + * @returns {string} HTML code parsed. + */ static initParseSaveMode(code, language) { + if (Configuration.get("saveMode")) { + // Converting XML to tags. + code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters); + code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters); + code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language); + code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language); + if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") { + code = Parser.codeImgTransform(code, "base642showimage"); + } + } + return code; + } + /** + * Parses initial HTML code depending on the edit mode. + * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will + * be converted into a LaTeX string instead of an image. + * @param {string} code - HTML code containing MathML. + * @returns {string} parsed HTML code. + */ static initParseEditMode(code) { + if (Configuration.get("parseModes").indexOf("latex") !== -1) { + const imgList = Util.getElementsByNameFromString(code, "img", true); + const token = 'encoding="LaTeX">'; + // While replacing images with latex, the indexes of the found images changes + // respecting the original code, so this carry is needed. + let carry = 0; + for(let i = 0; i < imgList.length; i += 1){ + const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry); + if (imgCode.indexOf(` class="${Configuration.get("imageClassName")}"`) !== -1) { + let mathmlStartToken = ` ${Configuration.get("imageMathmlAttribute")}="`; + let mathmlStart = imgCode.indexOf(mathmlStartToken); + if (mathmlStart === -1) { + mathmlStartToken = ' alt="'; + mathmlStart = imgCode.indexOf(mathmlStartToken); + } + if (mathmlStart !== -1) { + mathmlStart += mathmlStartToken.length; + const mathmlEnd = imgCode.indexOf('"', mathmlStart); + const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd))); + let latexStartPosition = mathml.indexOf(token); + if (latexStartPosition !== -1) { + latexStartPosition += token.length; + const latexEndPosition = mathml.indexOf("", latexStartPosition); + const latex = mathml.substring(latexStartPosition, latexEndPosition); + const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`; + const start = code.substring(0, imgList[i].start + carry); + const end = code.substring(imgList[i].end + carry); + code = start + replaceText + end; + carry += replaceText.length - (imgList[i].end - imgList[i].start); + } + } + } + } + } + return code; + } + /** + * Parses end HTML code. The end HTML code is HTML code with embedded images + * or LaTeX formulas created with MathType.
+ * By default this method converts the formula images and LaTeX strings in MathML.
+ * If image mode is enabled the images will not be converted into MathML. For further information see {@link https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-web-interface-features/full-mathml-mode---wirisplugins-js.html}. + * @param {string} code - HTML to be parsed + * @returns {string} the HTML code parsed. + */ static endParse(code) { + // Transform LaTeX ocurrences to MathML elements. + const codeEndParsedEditMode = Parser.endParseEditMode(code); + // Transform img elements to MathML elements. + const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode); + return codeEndParseSaveMode; + } + /** + * Parses end HTML code depending on the edit mode. + * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML. + * @param {string} code - HTML code to be parsed. + * @returns {string} HTML code parsed. + */ static endParseEditMode(code) { + // Converting LaTeX to images. + if (Configuration.get("parseModes").indexOf("latex") !== -1) { + let output = ""; + let endPosition = 0; + let startPosition = code.indexOf("$$"); + while(startPosition !== -1){ + output += code.substring(endPosition, startPosition); + endPosition = code.indexOf("$$", startPosition + 2); + if (endPosition !== -1) { + // Before, it was a condition here to execute the next codelines + // 'latex.indexOf('<') == -1'. + // We don't know why it was used, but seems to have a conflict with + // latex formulas that contains '<'. + const latex = code.substring(startPosition + 2, endPosition); + const decodedLatex = Util.htmlEntitiesDecode(latex); + let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true)); + if (!Configuration.get("saveHandTraces")) { + // Remove hand traces. + mathml = MathML.removeAnnotation(mathml, "application/json"); + } + output += mathml; + endPosition += 2; + } else { + output += "$$"; + endPosition = startPosition + 2; + } + startPosition = code.indexOf("$$", endPosition); + } + output += code.substring(endPosition, code.length); + code = output; + } + return code; + } + /** + * Parses end HTML code depending on the save mode. Converts all + * images into the element determined by the save mode: + * - xml: Parses images formulas into MathML. + * - safeXml: Parses images formulas into safeMAthML + * - base64: Parses images into base64 images. + * - image: Parse images into images (no parsing) + * @param {string} code - HTML code to be parsed + * @returns {string} HTML code parsed. + */ static endParseSaveMode(code) { + if (Configuration.get("saveMode")) { + if (Configuration.get("saveMode") === "safeXml") { + code = Parser.codeImgTransform(code, "img2mathml"); + } else if (Configuration.get("saveMode") === "xml") { + code = Parser.codeImgTransform(code, "img2mathml"); + } else if (Configuration.get("saveMode") === "base64" && Configuration.get("base64savemode") === "image") { + code = Parser.codeImgTransform(code, "img264"); + } + } + return code; + } + /** + * Auxiliar function that builds the data object to send to the showimage endpoint + * @param {Object[]} data - object containing showimage service parameters. + * @param {string} language - string containing the language of the formula. + * @returns {Object} JSON object with the data to send to showimage. + */ static createShowImageSrcData(data, language) { + const dataMd5 = {}; + const renderParams = [ + "mml", + "color", + "centerbaseline", + "zoom", + "dpi", + "fontSize", + "fontFamily", + "defaultStretchy", + "backgroundColor", + "format" + ]; + renderParams.forEach((param)=>{ + if (typeof data[param] !== "undefined") { + dataMd5[param] = data[param]; + } + }); + // Data variables to get. + const dataObject = {}; + Object.keys(data).forEach((key)=>{ + // We don't need mathml in this request we try to get cached. + // Only need the formula md5 calculated before. + if (key !== "mml") { + dataObject[key] = data[key]; + } + }); + dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5)); + dataObject.lang = typeof language === "undefined" ? "en" : language; + dataObject.version = Configuration.get("version"); + return dataObject; + } + /** + * Returns the result to call showimage service with the formula md5 as parameter. + * The result could be: + * - {'status' : warning'} : The image associated to the MathML md5 is not in cache. + * - {'status' : 'ok' ...} : The image associated to the MathML md5 is in cache. + * @param {Object[]} data - object containing showimage service parameters. + * @param {string} language - string containing the language of the formula. + * @returns {Object} JSON object containing showimage response. + */ static createShowImageSrc(data, language) { + const dataObject = this.createShowImageSrcData(data, language); + const result = ServiceProvider.getService("showimage", Util.httpBuildQuery(dataObject), true); + return result; + } + /** + * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src) + * or showimage img tags (i.e with showimage.php on src) + * @param {string} code - HTML code + * @param {string} mode - base642showimage or img2mathml or img264 transform. + * @returns {string} html - code transformed. + */ static codeImgTransform(code, mode) { + let output = ""; + let endPosition = 0; + const pattern = /") { + endPosition = i + 1; + } + i += 1; + } + if (endPosition < startPosition) { + // The img tag is stripped. + output += code.substring(startPosition, code.length); + return output; + } + let imgCode = code.substring(startPosition, endPosition); + const imgObject = Util.createObject(imgCode); + let xmlCode = imgObject.getAttribute(Configuration.get("imageMathmlAttribute")); + let convertToXml; + let convertToSafeXml; + if (mode === "base642showimage") { + if (xmlCode == null) { + xmlCode = imgObject.getAttribute("alt"); + } + xmlCode = MathML.safeXmlDecode(xmlCode); + imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null); + output += Util.createObjectCode(imgCode); + } else if (mode === "img2mathml") { + if (Configuration.get("saveMode")) { + if (Configuration.get("saveMode") === "safeXml") { + convertToXml = true; + convertToSafeXml = true; + } else if (Configuration.get("saveMode") === "xml") { + convertToXml = true; + convertToSafeXml = false; + } + } + output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml); + } else if (mode === "img264") { + if (xmlCode === null) { + xmlCode = imgObject.getAttribute("alt"); + } + xmlCode = MathML.safeXmlDecode(xmlCode); + const properties = {}; + properties.base64 = "true"; + imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null); + // Metrics. + Image.setImgSize(imgCode, imgCode.src, true); + output += Util.createObjectCode(imgCode); + } + } + output += code.substring(endPosition, code.length); + return output; + } + /** + * Converts all occurrences of MathML to the corresponding image. + * @param {string} content - string with valid MathML code. + * The MathML code doesn't contain semantics. + * @param {Constants} characters - Constant object containing xmlCharacters + * or safeXmlCharacters relation. + * @param {string} language - a valid language code + * in order to generate formula accessibility. + * @returns {string} The input string with all the MathML + * occurrences replaced by the corresponding image. + */ static parseMathmlToImg(content, characters, language) { + let output = ""; + const mathTagBegin = `${characters.tagOpener}math`; + const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`; + let start = content.indexOf(mathTagBegin); + let end = 0; + while(start !== -1){ + output += content.substring(end, start); + // Avoid WIRIS images to be parsed. + const imageMathmlAtrribute = content.indexOf(Configuration.get("imageMathmlAttribute")); + end = content.indexOf(mathTagEnd, start); + if (end === -1) { + end = content.length - 1; + } else if (imageMathmlAtrribute !== -1) { + // First close tag of img attribute + // If a mathmlAttribute exists should be inside a img tag. + end += content.indexOf("/>", start); + } else { + end += mathTagEnd.length; + } + if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) { + let mathml = content.substring(start, end); + mathml = characters.id === Constants.safeXmlCharacters.id ? MathML.safeXmlDecode(mathml) : MathML.mathMLEntities(mathml); + output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language)); + } else { + output += content.substring(start, end); + } + start = content.indexOf(mathTagBegin, end); + } + output += content.substring(end, content.length); + return output; + } + } + // Mutation observers to avoid wiris image formulas class be removed. + if (typeof MutationObserver !== "undefined") { + const mutationObserver = new MutationObserver((mutations)=>{ + mutations.forEach((mutation)=>{ + if (mutation.oldValue === Configuration.get("imageClassName") && mutation.attributeName === "class" && mutation.target.className.indexOf(Configuration.get("imageClassName")) === -1) { + mutation.target.className = Configuration.get("imageClassName"); + } + }); + }); + Parser.observer = Object.create(mutationObserver); + Parser.observer.Config = { + attributes: true, + attributeOldValue: true + }; + // We use own default config. + Parser.observer.observe = function(target) { + Object.getPrototypeOf(this).observe(target, this.Config); + }; + } - /* eslint-disable class-methods-use-this */ /* eslint-disable no-unused-vars */ /* eslint-disable no-extra-semi */ // The rules above are disabled because we are implementing - // an external interface. - class EditorListener { - /** - * @classdesc - * Determines if the content of the - * MathType Editor has changes. - * @implements {EditorListeners} - * @constructs - */ constructor() { - /** - * Indicates if the content of the editor has changed. - * @type {Boolean} - */ this.isContentChanged = false; - /** - * Indicates if the listener should be waiting for changes in the editor. - * @type {Boolean} - */ this.waitingForChanges = false; - } - /** - * Sets {@link EditorListener.isContentChanged} property. - * @param {Boolean} value - The new vlue. - */ setIsContentChanged(value) { - this.isContentChanged = value; - } - /** - * Returns true if the content of the editor has been changed, false otherwise. - * @return {Boolean} - */ getIsContentChanged() { - return this.isContentChanged; - } - /** - * Determines if the EditorListener should wait for any changes. - * @param {Boolean} value - True if the editor should wait for changes, false otherwise. - */ setWaitingForChanges(value) { - this.waitingForChanges = value; - } - /** - * EditorListener method to overwrite. - * @type {JsEditor} - * @ignore - */ caretPositionChanged(_editor) {} - /** - * EditorListener method to overwrite - * @type {JsEditor} - * @ignore - */ clipboardChanged(_editor) {} - /** - * Determines if the content of an editor has been changed. - * @param {JsEditor} editor - editor object. - */ contentChanged(_editor) { - if (this.waitingForChanges === true && this.isContentChanged === false) { - this.isContentChanged = true; - } - } - /** - * EditorListener method to overwrite - * @param {JsEditor} editor - The editor instance. - */ styleChanged(_editor) {} - /** - * EditorListener method to overwrite - * @param {JsEditor} - The editor instance. - */ transformationReceived(_editor) {} - } + /* eslint-disable class-methods-use-this */ /* eslint-disable no-unused-vars */ /* eslint-disable no-extra-semi */ // The rules above are disabled because we are implementing + // an external interface. + class EditorListener { + /** + * @classdesc + * Determines if the content of the + * MathType Editor has changes. + * @implements {EditorListeners} + * @constructs + */ constructor(){ + /** + * Indicates if the content of the editor has changed. + * @type {Boolean} + */ this.isContentChanged = false; + /** + * Indicates if the listener should be waiting for changes in the editor. + * @type {Boolean} + */ this.waitingForChanges = false; + } + /** + * Sets {@link EditorListener.isContentChanged} property. + * @param {Boolean} value - The new vlue. + */ setIsContentChanged(value) { + this.isContentChanged = value; + } + /** + * Returns true if the content of the editor has been changed, false otherwise. + * @return {Boolean} + */ getIsContentChanged() { + return this.isContentChanged; + } + /** + * Determines if the EditorListener should wait for any changes. + * @param {Boolean} value - True if the editor should wait for changes, false otherwise. + */ setWaitingForChanges(value) { + this.waitingForChanges = value; + } + /** + * EditorListener method to overwrite. + * @type {JsEditor} + * @ignore + */ caretPositionChanged(_editor) {} + /** + * EditorListener method to overwrite + * @type {JsEditor} + * @ignore + */ clipboardChanged(_editor) {} + /** + * Determines if the content of an editor has been changed. + * @param {JsEditor} editor - editor object. + */ contentChanged(_editor) { + if (this.waitingForChanges === true && this.isContentChanged === false) { + this.isContentChanged = true; + } + } + /** + * EditorListener method to overwrite + * @param {JsEditor} editor - The editor instance. + */ styleChanged(_editor) {} + /** + * EditorListener method to overwrite + * @param {JsEditor} - The editor instance. + */ transformationReceived(_editor) {} + } - let wasm; - const cachedTextDecoder = - typeof TextDecoder !== "undefined" - ? new TextDecoder("utf-8", { - ignoreBOM: true, - fatal: true, - }) - : { - decode: () => { - throw Error("TextDecoder not available"); - }, - }; - if (typeof TextDecoder !== "undefined") { - cachedTextDecoder.decode(); - } - let cachedUint8Memory0 = null; - function getUint8Memory0() { - if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { - cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8Memory0; - } - function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); - } - const heap = new Array(128).fill(undefined); - heap.push(undefined, null, true, false); - let heap_next = heap.length; - function addHeapObject(obj) { - if (heap_next === heap.length) heap.push(heap.length + 1); - const idx = heap_next; - heap_next = heap[idx]; - heap[idx] = obj; - return idx; - } - function getObject(idx) { - return heap[idx]; - } - function dropObject(idx) { - if (idx < 132) return; - heap[idx] = heap_next; - heap_next = idx; - } - function takeObject(idx) { - const ret = getObject(idx); - dropObject(idx); - return ret; - } - let WASM_VECTOR_LEN = 0; - const cachedTextEncoder = - typeof TextEncoder !== "undefined" - ? new TextEncoder("utf-8") - : { - encode: () => { - throw Error("TextEncoder not available"); - }, - }; - const encodeString = - typeof cachedTextEncoder.encodeInto === "function" - ? function (arg, view) { - return cachedTextEncoder.encodeInto(arg, view); - } - : function (arg, view) { - const buf = cachedTextEncoder.encode(arg); - view.set(buf); - return { - read: arg.length, - written: buf.length, - }; - }; - function passStringToWasm0(arg, malloc, realloc) { - if (realloc === undefined) { - const buf = cachedTextEncoder.encode(arg); - const ptr = malloc(buf.length, 1) >>> 0; - getUint8Memory0() - .subarray(ptr, ptr + buf.length) - .set(buf); - WASM_VECTOR_LEN = buf.length; - return ptr; - } - let len = arg.length; - let ptr = malloc(len, 1) >>> 0; - const mem = getUint8Memory0(); - let offset = 0; - for (; offset < len; offset++) { - const code = arg.charCodeAt(offset); - if (code > 0x7f) break; - mem[ptr + offset] = code; - } - if (offset !== len) { - if (offset !== 0) { - arg = arg.slice(offset); - } - ptr = realloc(ptr, len, (len = offset + arg.length * 3), 1) >>> 0; - const view = getUint8Memory0().subarray(ptr + offset, ptr + len); - const ret = encodeString(arg, view); - offset += ret.written; - } - WASM_VECTOR_LEN = offset; - return ptr; - } - function isLikeNone(x) { - return x === undefined || x === null; - } - let cachedInt32Memory0 = null; - function getInt32Memory0() { - if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { - cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); - } - return cachedInt32Memory0; - } - let cachedFloat64Memory0 = null; - function getFloat64Memory0() { - if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { - cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); - } - return cachedFloat64Memory0; - } - let cachedBigInt64Memory0 = null; - function getBigInt64Memory0() { - if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) { - cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); - } - return cachedBigInt64Memory0; - } - function debugString(val) { - // primitive types - const type = typeof val; - if (type == "number" || type == "boolean" || val == null) { - return `${val}`; - } - if (type == "string") { - return `"${val}"`; - } - if (type == "symbol") { - const description = val.description; - if (description == null) { - return "Symbol"; - } else { - return `Symbol(${description})`; - } - } - if (type == "function") { - const name = val.name; - if (typeof name == "string" && name.length > 0) { - return `Function(${name})`; - } else { - return "Function"; - } - } - // objects - if (Array.isArray(val)) { - const length = val.length; - let debug = "["; - if (length > 0) { - debug += debugString(val[0]); - } - for (let i = 1; i < length; i++) { - debug += ", " + debugString(val[i]); - } - debug += "]"; - return debug; - } - // Test for built-in - const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); - let className; - if (builtInMatches.length > 1) { - className = builtInMatches[1]; - } else { - // Failed to match the standard '[object ClassName]' - return toString.call(val); - } - if (className == "Object") { - // we're a user defined class or Object - // JSON.stringify avoids problems with cycles, and is generally much - // easier than looping through ownProperties of `val`. - try { - return "Object(" + JSON.stringify(val) + ")"; - } catch (_) { - return "Object"; - } - } - // errors - if (val instanceof Error) { - return `${val.name}: ${val.message}\n${val.stack}`; - } - // TODO we could test for more things here, like `Set`s and `Map`s. - return className; - } - function makeClosure(arg0, arg1, dtor, f) { - const state = { - a: arg0, - b: arg1, - cnt: 1, - dtor, - }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - try { - return f(state.a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); - state.a = 0; - } - } - }; - real.original = state; - return real; - } - function __wbg_adapter_46(arg0, arg1, arg2) { - wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2)); - } - function makeMutClosure(arg0, arg1, dtor, f) { - const state = { - a: arg0, - b: arg1, - cnt: 1, - dtor, - }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); - } else { - state.a = a; - } - } - }; - real.original = state; - return real; - } - function __wbg_adapter_49(arg0, arg1) { - wasm.__wbindgen_export_4(arg0, arg1); - } - function __wbg_adapter_52(arg0, arg1, arg2) { - wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2)); - } - function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - wasm.__wbindgen_export_6(addHeapObject(e)); - } - } - function __wbg_adapter_103(arg0, arg1, arg2, arg3) { - wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); - } - function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); - } - /** - */ let Telemeter$1 = class Telemeter { - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - return ptr; - } - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_telemeter_free(ptr); - } - /** - * @param {any} solution - * @param {any} hosts - * @param {any} config - */ constructor(solution, hosts, config) { - try { - const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); - wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config)); - var r0 = getInt32Memory0()[retptr / 4 + 0]; - var r1 = getInt32Memory0()[retptr / 4 + 1]; - var r2 = getInt32Memory0()[retptr / 4 + 2]; - if (r2) { - throw takeObject(r1); - } - this.__wbg_ptr = r0 >>> 0; - return this; - } finally { - wasm.__wbindgen_add_to_stack_pointer(16); - } - } - /** - * @param {string} sender_id - * @returns {Promise} - */ identify(sender_id) { - const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0); - return takeObject(ret); - } - /** - * @param {string} event_type - * @param {any} event_payload - * @returns {Promise} - */ track(event_type, event_payload) { - const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload)); - return takeObject(ret); - } - /** - * @param {any} level - * @param {string} message - * @param {any} payload - * @returns {Promise} - */ log(level, message, payload) { - const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload)); - return takeObject(ret); - } - /** - * @returns {Promise} - */ finish() { - const ptr = this.__destroy_into_raw(); - const ret = wasm.telemeter_finish(ptr); - return takeObject(ret); - } - /** - * @param {boolean | undefined} [new_debug_status] - */ debug(new_debug_status) { - wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0); - } - }; - async function __wbg_load(module1, imports) { - if (typeof Response === "function" && module1 instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === "function") { - try { - return await WebAssembly.instantiateStreaming(module1, imports); - } catch (e) { - if (module1.headers.get("Content-Type") != "application/wasm") { - console.warn( - "`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", - e, - ); - } else { - throw e; - } - } - } - const bytes = await module1.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - } else { - const instance = await WebAssembly.instantiate(module1, imports); - if (instance instanceof WebAssembly.Instance) { - return { - instance, - module: module1, - }; - } else { - return instance; - } - } - } - function __wbg_get_imports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbindgen_string_new = function (arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_c728d68b8b34487e = function () { - const ret = new Object(); - return addHeapObject(ret); - }; - imports.wbg.__wbg_status_7841bb47be2a8f16 = function (arg0) { - const ret = getObject(arg0).status; - return ret; - }; - imports.wbg.__wbg_headers_ea7ef583d1564b08 = function (arg0) { - const ret = getObject(arg0).headers; - return addHeapObject(ret); - }; - imports.wbg.__wbg_new0_ad75dd38f92424e2 = function () { - const ret = new Date(); - return addHeapObject(ret); - }; - imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function (arg0) { - const ret = getObject(arg0).getTime(); - return ret; - }; - imports.wbg.__wbindgen_object_drop_ref = function (arg0) { - takeObject(arg0); - }; - imports.wbg.__wbindgen_is_object = function (arg0) { - const val = getObject(arg0); - const ret = typeof val === "object" && val !== null; - return ret; - }; - imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function (arg0) { - const ret = getObject(arg0).crypto; - return addHeapObject(ret); - }; - imports.wbg.__wbg_process_5b786e71d465a513 = function (arg0) { - const ret = getObject(arg0).process; - return addHeapObject(ret); - }; - imports.wbg.__wbg_versions_c2ab80650590b6a2 = function (arg0) { - const ret = getObject(arg0).versions; - return addHeapObject(ret); - }; - imports.wbg.__wbg_node_523d7bd03ef69fba = function (arg0) { - const ret = getObject(arg0).node; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_string = function (arg0) { - const ret = typeof getObject(arg0) === "string"; - return ret; - }; - imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function (arg0) { - const ret = getObject(arg0).msCrypto; - return addHeapObject(ret); - }; - imports.wbg.__wbg_require_2784e593a4674877 = function () { - return handleError(function () { - const ret = module.require; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function (arg0) { - const ret = new Uint8Array(arg0 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_get_4a9aa5157afeb382 = function (arg0, arg1) { - const ret = getObject(arg0)[arg1 >>> 0]; - return addHeapObject(ret); - }; - imports.wbg.__wbg_next_1989a20442400aaa = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).next(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_done_bc26bf4ada718266 = function (arg0) { - const ret = getObject(arg0).done; - return ret; - }; - imports.wbg.__wbg_value_0570714ff7d75f35 = function (arg0) { - const ret = getObject(arg0).value; - return addHeapObject(ret); - }; - imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function () { - const ret = Symbol.iterator; - return addHeapObject(ret); - }; - imports.wbg.__wbg_get_2aff440840bb6202 = function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.get(getObject(arg0), getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_next_15da6a3df9290720 = function (arg0) { - const ret = getObject(arg0).next; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_is_function = function (arg0) { - const ret = typeof getObject(arg0) === "function"; - return ret; - }; - imports.wbg.__wbg_call_669127b9d730c650 = function () { - return handleError(function (arg0, arg1) { - const ret = getObject(arg0).call(getObject(arg1)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbindgen_object_clone_ref = function (arg0) { - const ret = getObject(arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_self_3fad056edded10bd = function () { - return handleError(function () { - const ret = self.self; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_window_a4f46c98a61d4089 = function () { - return handleError(function () { - const ret = window.window; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_globalThis_17eff828815f7d84 = function () { - return handleError(function () { - const ret = globalThis.globalThis; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_global_46f939f6541643c5 = function () { - return handleError(function () { - const ret = global.global; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbindgen_is_undefined = function (arg0) { - const ret = getObject(arg0) === undefined; - return ret; - }; - imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function (arg0, arg1) { - const ret = new Function(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_isArray_38525be7442aa21e = function (arg0) { - const ret = Array.isArray(getObject(arg0)); - return ret; - }; - imports.wbg.__wbg_call_53fc3abd42e24ec8 = function () { - return handleError(function (arg0, arg1, arg2) { - const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function (arg0) { - const ret = Number.isSafeInteger(getObject(arg0)); - return ret; - }; - imports.wbg.__wbg_new_feb65b865d980ae2 = function (arg0, arg1) { - try { - var state0 = { - a: arg0, - b: arg1, - }; - var cb0 = (arg0, arg1) => { - const a = state0.a; - state0.a = 0; - try { - return __wbg_adapter_103(a, state0.b, arg0, arg1); - } finally { - state0.a = a; - } - }; - const ret = new Promise(cb0); - return addHeapObject(ret); - } finally { - state0.a = state0.b = 0; - } - }; - imports.wbg.__wbindgen_memory = function () { - const ret = wasm.memory; - return addHeapObject(ret); - }; - imports.wbg.__wbg_buffer_344d9b41efe96da7 = function (arg0) { - const ret = getObject(arg0).buffer; - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_d8a000788389a31e = function (arg0) { - const ret = new Uint8Array(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_set_dcfd613a3420f908 = function (arg0, arg1, arg2) { - getObject(arg0).set(getObject(arg1), arg2 >>> 0); - }; - imports.wbg.__wbg_length_a5587d6cd79ab197 = function (arg0) { - const ret = getObject(arg0).length; - return ret; - }; - imports.wbg.__wbindgen_string_get = function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "string" ? obj : undefined; - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_stringify_4039297315a25b00 = function () { - return handleError(function (arg0) { - const ret = JSON.stringify(getObject(arg0)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_set_40f7786a25a9cc7e = function () { - return handleError(function (arg0, arg1, arg2) { - const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); - return ret; - }, arguments); - }; - imports.wbg.__wbg_has_cdf8b85f6e903c80 = function () { - return handleError(function (arg0, arg1) { - const ret = Reflect.has(getObject(arg0), getObject(arg1)); - return ret; - }, arguments); - }; - imports.wbg.__wbg_fetch_701fcd2bde06379a = function (arg0, arg1) { - const ret = getObject(arg0).fetch(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function (arg0) { - const ret = fetch(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function (arg0, arg1, arg2) { - const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_new_e4960143e41697a4 = function () { - return handleError(function () { - const ret = new AbortController(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_signal_1ed842bebd6ae322 = function (arg0) { - const ret = getObject(arg0).signal; - return addHeapObject(ret); - }; - imports.wbg.__wbg_abort_8355f201f30300bb = function (arg0) { - getObject(arg0).abort(); - }; - imports.wbg.__wbindgen_error_new = function (arg0, arg1) { - const ret = new Error(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_jsval_loose_eq = function (arg0, arg1) { - const ret = getObject(arg0) == getObject(arg1); - return ret; - }; - imports.wbg.__wbindgen_boolean_get = function (arg0) { - const v = getObject(arg0); - const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; - return ret; - }; - imports.wbg.__wbindgen_number_get = function (arg0, arg1) { - const obj = getObject(arg1); - const ret = typeof obj === "number" ? obj : undefined; - getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Uint8Array; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof ArrayBuffer; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_entries_6d727b73ee02b7ce = function (arg0) { - const ret = Object.entries(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_String_917f38a1211cf44b = function (arg0, arg1) { - const ret = String(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function (arg0, arg1) { - console.warn(getObject(arg0), getObject(arg1)); - }; - imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function (arg0) { - const ret = getObject(arg0).readyState; - return ret; - }; - imports.wbg.__wbg_warn_4affe1093892a4ef = function (arg0) { - console.warn(getObject(arg0)); - }; - imports.wbg.__wbg_close_f4135085ec3fc8f0 = function () { - return handleError(function (arg0) { - getObject(arg0).close(); - }, arguments); - }; - imports.wbg.__wbg_new_b9b318679315404f = function () { - return handleError(function (arg0, arg1) { - const ret = new WebSocket(getStringFromWasm0(arg0, arg1)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function (arg0, arg1) { - getObject(arg0).binaryType = takeObject(arg1); - }; - imports.wbg.__wbg_log_7811587c4c6d2844 = function (arg0) { - console.log(getObject(arg0)); - }; - imports.wbg.__wbg_error_f0a6627f4b23c19d = function (arg0) { - console.error(getObject(arg0)); - }; - imports.wbg.__wbg_info_3ca7870690403fee = function (arg0) { - console.info(getObject(arg0)); - }; - imports.wbg.__wbg_document_183cf1eecfdbffee = function (arg0) { - const ret = getObject(arg0).document; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }; - imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function (arg0) { - const ret = getObject(arg0).visibilityState; - return addHeapObject(ret); - }; - imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function (arg0, arg1) { - const ret = getObject(arg0)[getObject(arg1)]; - return addHeapObject(ret); - }; - imports.wbg.__wbg_length_cace2e0b3ddc0502 = function (arg0) { - const ret = getObject(arg0).length; - return ret; - }; - imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function () { - return handleError(function (arg0, arg1, arg2, arg3) { - getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); - }, arguments); - }; - imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function () { - return handleError(function (arg0, arg1, arg2, arg3) { - getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); - }, arguments); - }; - imports.wbg.__wbindgen_is_bigint = function (arg0) { - const ret = typeof getObject(arg0) === "bigint"; - return ret; - }; - imports.wbg.__wbindgen_bigint_from_i64 = function (arg0) { - const ret = arg0; - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_in = function (arg0, arg1) { - const ret = getObject(arg0) in getObject(arg1); - return ret; - }; - imports.wbg.__wbindgen_bigint_from_u64 = function (arg0) { - const ret = BigInt.asUintN(64, arg0); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_jsval_eq = function (arg0, arg1) { - const ret = getObject(arg0) === getObject(arg1); - return ret; - }; - imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).localStorage; - return isLikeNone(ret) ? 0 : addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function () { - return handleError(function (arg0, arg1, arg2, arg3) { - const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3)); - var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - var len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }, arguments); - }; - imports.wbg.__wbg_navigator_7078da62d92ff5ad = function (arg0) { - const ret = getObject(arg0).navigator; - return addHeapObject(ret); - }; - imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).mediaDevices; - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function () { - return handleError(function (arg0) { - const ret = getObject(arg0).enumerateDevices(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_setItem_fe04f524052a3839 = function () { - return handleError(function (arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }, arguments); - }; - imports.wbg.__wbindgen_cb_drop = function (arg0) { - const obj = takeObject(arg0).original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - const ret = false; - return ret; - }; - imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function (arg0, arg1) { - const ret = getObject(arg1).deviceId; - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Response; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function () { - return handleError(function (arg0, arg1) { - getObject(arg0).randomFillSync(takeObject(arg1)); - }, arguments); - }; - imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function (arg0, arg1, arg2) { - const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0); - return addHeapObject(ret); - }; - imports.wbg.__wbg_getRandomValues_504510b5564925af = function () { - return handleError(function (arg0, arg1) { - getObject(arg0).getRandomValues(getObject(arg1)); - }, arguments); - }; - imports.wbg.__wbindgen_bigint_get_as_i64 = function (arg0, arg1) { - const v = getObject(arg1); - const ret = typeof v === "bigint" ? v : undefined; - getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; - getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); - }; - imports.wbg.__wbindgen_debug_string = function (arg0, arg1) { - const ret = debugString(getObject(arg1)); - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbindgen_throw = function (arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - imports.wbg.__wbg_then_89e1c559530b85cf = function (arg0, arg1) { - const ret = getObject(arg0).then(getObject(arg1)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function (arg0) { - queueMicrotask(getObject(arg0)); - }; - imports.wbg.__wbg_then_1bbc9edafd859b06 = function (arg0, arg1, arg2) { - const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function (arg0) { - const ret = getObject(arg0).queueMicrotask; - return addHeapObject(ret); - }; - imports.wbg.__wbg_resolve_a3252b2860f0a09e = function (arg0) { - const ret = Promise.resolve(getObject(arg0)); - return addHeapObject(ret); - }; - imports.wbg.__wbg_url_1f609e63ff1a7983 = function (arg0, arg1) { - const ret = getObject(arg1).url; - const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); - const len1 = WASM_VECTOR_LEN; - getInt32Memory0()[arg0 / 4 + 1] = len1; - getInt32Memory0()[arg0 / 4 + 0] = ptr1; - }; - imports.wbg.__wbg_send_2860805104507701 = function () { - return handleError(function (arg0, arg1, arg2) { - getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2)); - }, arguments); - }; - imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function (arg0) { - let result; - try { - result = getObject(arg0) instanceof Window; - } catch (_) { - result = false; - } - const ret = result; - return ret; - }; - imports.wbg.__wbg_new_19676474aa414d62 = function () { - return handleError(function () { - const ret = new Headers(); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbg_append_feec4143bbf21904 = function () { - return handleError(function (arg0, arg1, arg2, arg3, arg4) { - getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); - }, arguments); - }; - imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function () { - return handleError(function (arg0, arg1, arg2) { - const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); - return addHeapObject(ret); - }, arguments); - }; - imports.wbg.__wbindgen_closure_wrapper1532 = function (arg0, arg1, arg2) { - const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_closure_wrapper1602 = function (arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49); - return addHeapObject(ret); - }; - imports.wbg.__wbindgen_closure_wrapper1834 = function (arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52); - return addHeapObject(ret); - }; - return imports; - } - function __wbg_finalize_init(instance, module1) { - wasm = instance.exports; - __wbg_init.__wbindgen_wasm_module = module1; - cachedBigInt64Memory0 = null; - cachedFloat64Memory0 = null; - cachedInt32Memory0 = null; - cachedUint8Memory0 = null; - wasm.__wbindgen_start(); - return wasm; - } - async function __wbg_init(input) { - if (wasm !== undefined) return wasm; - if (typeof input === "undefined") { - input = new URL( - "telemeter_wasm_bg.wasm", - typeof document === "undefined" && typeof location === "undefined" - ? require("u" + "rl").pathToFileURL(__filename).href - : typeof document === "undefined" - ? location.href - : (_documentCurrentScript && _documentCurrentScript.src) || new URL("index.umd.js", document.baseURI).href, - ); - } - const imports = __wbg_get_imports(); - if ( - typeof input === "string" || - (typeof Request === "function" && input instanceof Request) || - (typeof URL === "function" && input instanceof URL) - ) { - input = fetch(input); - } - const { instance, module: module1 } = await __wbg_load(await input, imports); - return __wbg_finalize_init(instance, module1); - } + let wasm; + const cachedTextDecoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-8", { + ignoreBOM: true, + fatal: true + }) : { + decode: ()=>{ + throw Error("TextDecoder not available"); + } + }; + if (typeof TextDecoder !== "undefined") { + cachedTextDecoder.decode(); + } + let cachedUint8Memory0 = null; + function getUint8Memory0() { + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; + } + function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); + } + const heap = new Array(128).fill(undefined); + heap.push(undefined, null, true, false); + let heap_next = heap.length; + function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + heap[idx] = obj; + return idx; + } + function getObject(idx) { + return heap[idx]; + } + function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; + } + function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; + } + let WASM_VECTOR_LEN = 0; + const cachedTextEncoder = typeof TextEncoder !== "undefined" ? new TextEncoder("utf-8") : { + encode: ()=>{ + throw Error("TextEncoder not available"); + } + }; + const encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) { + return cachedTextEncoder.encodeInto(arg, view); + } : function(arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + }; + function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + const mem = getUint8Memory0(); + let offset = 0; + for(; offset < len; offset++){ + const code = arg.charCodeAt(offset); + if (code > 0x7f) break; + mem[ptr + offset] = code; + } + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + offset += ret.written; + } + WASM_VECTOR_LEN = offset; + return ptr; + } + function isLikeNone(x) { + return x === undefined || x === null; + } + let cachedInt32Memory0 = null; + function getInt32Memory0() { + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; + } + let cachedFloat64Memory0 = null; + function getFloat64Memory0() { + if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { + cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); + } + return cachedFloat64Memory0; + } + let cachedBigInt64Memory0 = null; + function getBigInt64Memory0() { + if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) { + cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); + } + return cachedBigInt64Memory0; + } + function debugString(val) { + // primitive types + const type = typeof val; + if (type == "number" || type == "boolean" || val == null) { + return `${val}`; + } + if (type == "string") { + return `"${val}"`; + } + if (type == "symbol") { + const description = val.description; + if (description == null) { + return "Symbol"; + } else { + return `Symbol(${description})`; + } + } + if (type == "function") { + const name = val.name; + if (typeof name == "string" && name.length > 0) { + return `Function(${name})`; + } else { + return "Function"; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = "["; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++){ + debug += ", " + debugString(val[i]); + } + debug += "]"; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == "Object") { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return "Object(" + JSON.stringify(val) + ")"; + } catch (_) { + return "Object"; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; + } + function makeClosure(arg0, arg1, dtor, f) { + const state = { + a: arg0, + b: arg1, + cnt: 1, + dtor + }; + const real = (...args)=>{ + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + try { + return f(state.a, state.b, ...args); + } finally{ + if (--state.cnt === 0) { + wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); + state.a = 0; + } + } + }; + real.original = state; + return real; + } + function __wbg_adapter_46(arg0, arg1, arg2) { + wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2)); + } + function makeMutClosure(arg0, arg1, dtor, f) { + const state = { + a: arg0, + b: arg1, + cnt: 1, + dtor + }; + const real = (...args)=>{ + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + const a = state.a; + state.a = 0; + try { + return f(a, state.b, ...args); + } finally{ + if (--state.cnt === 0) { + wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); + } else { + state.a = a; + } + } + }; + real.original = state; + return real; + } + function __wbg_adapter_49(arg0, arg1) { + wasm.__wbindgen_export_4(arg0, arg1); + } + function __wbg_adapter_52(arg0, arg1, arg2) { + wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2)); + } + function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_export_6(addHeapObject(e)); + } + } + function __wbg_adapter_103(arg0, arg1, arg2, arg3) { + wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3)); + } + function getArrayU8FromWasm0(ptr, len) { + ptr = ptr >>> 0; + return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len); + } + /** + */ let Telemeter$1 = class Telemeter { + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + return ptr; + } + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_telemeter_free(ptr); + } + /** + * @param {any} solution + * @param {any} hosts + * @param {any} config + */ constructor(solution, hosts, config){ + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + this.__wbg_ptr = r0 >>> 0; + return this; + } finally{ + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} sender_id + * @returns {Promise} + */ identify(sender_id) { + const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0); + return takeObject(ret); + } + /** + * @param {string} event_type + * @param {any} event_payload + * @returns {Promise} + */ track(event_type, event_payload) { + const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload)); + return takeObject(ret); + } + /** + * @param {any} level + * @param {string} message + * @param {any} payload + * @returns {Promise} + */ log(level, message, payload) { + const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload)); + return takeObject(ret); + } + /** + * @returns {Promise} + */ finish() { + const ptr = this.__destroy_into_raw(); + const ret = wasm.telemeter_finish(ptr); + return takeObject(ret); + } + /** + * @param {boolean | undefined} [new_debug_status] + */ debug(new_debug_status) { + wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0); + } + }; + async function __wbg_load(module1, imports) { + if (typeof Response === "function" && module1 instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === "function") { + try { + return await WebAssembly.instantiateStreaming(module1, imports); + } catch (e) { + if (module1.headers.get("Content-Type") != "application/wasm") { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + } else { + throw e; + } + } + } + const bytes = await module1.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + } else { + const instance = await WebAssembly.instantiate(module1, imports); + if (instance instanceof WebAssembly.Instance) { + return { + instance, + module: module1 + }; + } else { + return instance; + } + } + } + function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_c728d68b8b34487e = function() { + const ret = new Object(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_status_7841bb47be2a8f16 = function(arg0) { + const ret = getObject(arg0).status; + return ret; + }; + imports.wbg.__wbg_headers_ea7ef583d1564b08 = function(arg0) { + const ret = getObject(arg0).headers; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new0_ad75dd38f92424e2 = function() { + const ret = new Date(); + return addHeapObject(ret); + }; + imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function(arg0) { + const ret = getObject(arg0).getTime(); + return ret; + }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_is_object = function(arg0) { + const val = getObject(arg0); + const ret = typeof val === "object" && val !== null; + return ret; + }; + imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function(arg0) { + const ret = getObject(arg0).crypto; + return addHeapObject(ret); + }; + imports.wbg.__wbg_process_5b786e71d465a513 = function(arg0) { + const ret = getObject(arg0).process; + return addHeapObject(ret); + }; + imports.wbg.__wbg_versions_c2ab80650590b6a2 = function(arg0) { + const ret = getObject(arg0).versions; + return addHeapObject(ret); + }; + imports.wbg.__wbg_node_523d7bd03ef69fba = function(arg0) { + const ret = getObject(arg0).node; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_string = function(arg0) { + const ret = typeof getObject(arg0) === "string"; + return ret; + }; + imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function(arg0) { + const ret = getObject(arg0).msCrypto; + return addHeapObject(ret); + }; + imports.wbg.__wbg_require_2784e593a4674877 = function() { + return handleError(function() { + const ret = module.require; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function(arg0) { + const ret = new Uint8Array(arg0 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_4a9aa5157afeb382 = function(arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_next_1989a20442400aaa = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).next(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_done_bc26bf4ada718266 = function(arg0) { + const ret = getObject(arg0).done; + return ret; + }; + imports.wbg.__wbg_value_0570714ff7d75f35 = function(arg0) { + const ret = getObject(arg0).value; + return addHeapObject(ret); + }; + imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function() { + const ret = Symbol.iterator; + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_2aff440840bb6202 = function() { + return handleError(function(arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_next_15da6a3df9290720 = function(arg0) { + const ret = getObject(arg0).next; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_function = function(arg0) { + const ret = typeof getObject(arg0) === "function"; + return ret; + }; + imports.wbg.__wbg_call_669127b9d730c650 = function() { + return handleError(function(arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbindgen_object_clone_ref = function(arg0) { + const ret = getObject(arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_self_3fad056edded10bd = function() { + return handleError(function() { + const ret = self.self; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_window_a4f46c98a61d4089 = function() { + return handleError(function() { + const ret = window.window; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_globalThis_17eff828815f7d84 = function() { + return handleError(function() { + const ret = globalThis.globalThis; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_global_46f939f6541643c5 = function() { + return handleError(function() { + const ret = global.global; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }; + imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function(arg0, arg1) { + const ret = new Function(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_isArray_38525be7442aa21e = function(arg0) { + const ret = Array.isArray(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_call_53fc3abd42e24ec8 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function(arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_new_feb65b865d980ae2 = function(arg0, arg1) { + try { + var state0 = { + a: arg0, + b: arg1 + }; + var cb0 = (arg0, arg1)=>{ + const a = state0.a; + state0.a = 0; + try { + return __wbg_adapter_103(a, state0.b, arg0, arg1); + } finally{ + state0.a = a; + } + }; + const ret = new Promise(cb0); + return addHeapObject(ret); + } finally{ + state0.a = state0.b = 0; + } + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); + }; + imports.wbg.__wbg_buffer_344d9b41efe96da7 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_d8a000788389a31e = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_set_dcfd613a3420f908 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }; + imports.wbg.__wbg_length_a5587d6cd79ab197 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbindgen_string_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "string" ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_stringify_4039297315a25b00 = function() { + return handleError(function(arg0) { + const ret = JSON.stringify(getObject(arg0)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_set_40f7786a25a9cc7e = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2)); + return ret; + }, arguments); + }; + imports.wbg.__wbg_has_cdf8b85f6e903c80 = function() { + return handleError(function(arg0, arg1) { + const ret = Reflect.has(getObject(arg0), getObject(arg1)); + return ret; + }, arguments); + }; + imports.wbg.__wbg_fetch_701fcd2bde06379a = function(arg0, arg1) { + const ret = getObject(arg0).fetch(getObject(arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function(arg0) { + const ret = fetch(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function(arg0, arg1, arg2) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_e4960143e41697a4 = function() { + return handleError(function() { + const ret = new AbortController(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_signal_1ed842bebd6ae322 = function(arg0) { + const ret = getObject(arg0).signal; + return addHeapObject(ret); + }; + imports.wbg.__wbg_abort_8355f201f30300bb = function(arg0) { + getObject(arg0).abort(); + }; + imports.wbg.__wbindgen_error_new = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_boolean_get = function(arg0) { + const v = getObject(arg0); + const ret = typeof v === "boolean" ? v ? 1 : 0 : 2; + return ret; + }; + imports.wbg.__wbindgen_number_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "number" ? obj : undefined; + getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_entries_6d727b73ee02b7ce = function(arg0) { + const ret = Object.entries(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_String_917f38a1211cf44b = function(arg0, arg1) { + const ret = String(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function(arg0, arg1) { + console.warn(getObject(arg0), getObject(arg1)); + }; + imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function(arg0) { + const ret = getObject(arg0).readyState; + return ret; + }; + imports.wbg.__wbg_warn_4affe1093892a4ef = function(arg0) { + console.warn(getObject(arg0)); + }; + imports.wbg.__wbg_close_f4135085ec3fc8f0 = function() { + return handleError(function(arg0) { + getObject(arg0).close(); + }, arguments); + }; + imports.wbg.__wbg_new_b9b318679315404f = function() { + return handleError(function(arg0, arg1) { + const ret = new WebSocket(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function(arg0, arg1) { + getObject(arg0).binaryType = takeObject(arg1); + }; + imports.wbg.__wbg_log_7811587c4c6d2844 = function(arg0) { + console.log(getObject(arg0)); + }; + imports.wbg.__wbg_error_f0a6627f4b23c19d = function(arg0) { + console.error(getObject(arg0)); + }; + imports.wbg.__wbg_info_3ca7870690403fee = function(arg0) { + console.info(getObject(arg0)); + }; + imports.wbg.__wbg_document_183cf1eecfdbffee = function(arg0) { + const ret = getObject(arg0).document; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }; + imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function(arg0) { + const ret = getObject(arg0).visibilityState; + return addHeapObject(ret); + }; + imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function(arg0, arg1) { + const ret = getObject(arg0)[getObject(arg1)]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_length_cace2e0b3ddc0502 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function() { + return handleError(function(arg0, arg1, arg2, arg3) { + getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); + }, arguments); + }; + imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function() { + return handleError(function(arg0, arg1, arg2, arg3) { + getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3)); + }, arguments); + }; + imports.wbg.__wbindgen_is_bigint = function(arg0) { + const ret = typeof getObject(arg0) === "bigint"; + return ret; + }; + imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) { + const ret = arg0; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_in = function(arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }; + imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).localStorage; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function() { + return handleError(function(arg0, arg1, arg2, arg3) { + const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3)); + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, arguments); + }; + imports.wbg.__wbg_navigator_7078da62d92ff5ad = function(arg0) { + const ret = getObject(arg0).navigator; + return addHeapObject(ret); + }; + imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).mediaDevices; + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function() { + return handleError(function(arg0) { + const ret = getObject(arg0).enumerateDevices(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_setItem_fe04f524052a3839 = function() { + return handleError(function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); + }, arguments); + }; + imports.wbg.__wbindgen_cb_drop = function(arg0) { + const obj = takeObject(arg0).original; + if (obj.cnt-- == 1) { + obj.a = 0; + return true; + } + const ret = false; + return ret; + }; + imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function(arg0, arg1) { + const ret = getObject(arg1).deviceId; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Response; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function() { + return handleError(function(arg0, arg1) { + getObject(arg0).randomFillSync(takeObject(arg1)); + }, arguments); + }; + imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function(arg0, arg1, arg2) { + const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbg_getRandomValues_504510b5564925af = function() { + return handleError(function(arg0, arg1) { + getObject(arg0).getRandomValues(getObject(arg1)); + }, arguments); + }; + imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { + const v = getObject(arg1); + const ret = typeof v === "bigint" ? v : undefined; + getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbg_then_89e1c559530b85cf = function(arg0, arg1) { + const ret = getObject(arg0).then(getObject(arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function(arg0) { + queueMicrotask(getObject(arg0)); + }; + imports.wbg.__wbg_then_1bbc9edafd859b06 = function(arg0, arg1, arg2) { + const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function(arg0) { + const ret = getObject(arg0).queueMicrotask; + return addHeapObject(ret); + }; + imports.wbg.__wbg_resolve_a3252b2860f0a09e = function(arg0) { + const ret = Promise.resolve(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_url_1f609e63ff1a7983 = function(arg0, arg1) { + const ret = getObject(arg1).url; + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }; + imports.wbg.__wbg_send_2860805104507701 = function() { + return handleError(function(arg0, arg1, arg2) { + getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2)); + }, arguments); + }; + imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Window; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_new_19676474aa414d62 = function() { + return handleError(function() { + const ret = new Headers(); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbg_append_feec4143bbf21904 = function() { + return handleError(function(arg0, arg1, arg2, arg3, arg4) { + getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4)); + }, arguments); + }; + imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function() { + return handleError(function(arg0, arg1, arg2) { + const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); + }; + imports.wbg.__wbindgen_closure_wrapper1532 = function(arg0, arg1, arg2) { + const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_closure_wrapper1602 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_closure_wrapper1834 = function(arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52); + return addHeapObject(ret); + }; + return imports; + } + function __wbg_finalize_init(instance, module1) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module1; + cachedBigInt64Memory0 = null; + cachedFloat64Memory0 = null; + cachedInt32Memory0 = null; + cachedUint8Memory0 = null; + wasm.__wbindgen_start(); + return wasm; + } + async function __wbg_init(input) { + if (wasm !== undefined) return wasm; + if (typeof input === "undefined") { + input = new URL("telemeter_wasm_bg.wasm", (typeof document === 'undefined' && typeof location === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : typeof document === 'undefined' ? location.href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.umd.js', document.baseURI).href))); + } + const imports = __wbg_get_imports(); + if (typeof input === "string" || typeof Request === "function" && input instanceof Request || typeof URL === "function" && input instanceof URL) { + input = fetch(input); + } + const { instance, module: module1 } = await __wbg_load(await input, imports); + return __wbg_finalize_init(instance, module1); + } - /** - * @classdesc - * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data - * to Telemetry in a more comfortable and homogeneous way. - */ class Telemeter { - /** - * Inits Telemeter class. - * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)} - * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry. - * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated. - * @param {Object} telemeterAttributes.config - Configuration parameters. - */ static init(telemeterAttributes) { - if (!this.telemeter && !this.waitingForInit) { - this.waitingForInit = true; - __wbg_init(telemeterAttributes.url) - .then(() => { - this.telemeter = new Telemeter$1( - telemeterAttributes.solution, - telemeterAttributes.hosts, - telemeterAttributes.config, - ); - }) - .catch((error) => { - console.log(error); - }) - .finally(() => (this.waitingForInit = false)); - } - } - /** - * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session. - */ static async finish() { - if (!this.telemeter) return; - try { - let local_telemeter = this.telemeter; - this.telemeter = undefined; - await local_telemeter.finish(); - } catch (e) { - console.error(e); - } - } - } + /** + * @classdesc + * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data + * to Telemetry in a more comfortable and homogeneous way. + */ class Telemeter { + /** + * Inits Telemeter class. + * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)} + * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry. + * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated. + * @param {Object} telemeterAttributes.config - Configuration parameters. + */ static init(telemeterAttributes) { + if (!this.telemeter && !this.waitingForInit) { + this.waitingForInit = true; + __wbg_init(telemeterAttributes.url).then(()=>{ + this.telemeter = new Telemeter$1(telemeterAttributes.solution, telemeterAttributes.hosts, telemeterAttributes.config); + }).catch((error)=>{ + console.log(error); + }).finally(()=>this.waitingForInit = false); + } + } + /** + * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session. + */ static async finish() { + if (!this.telemeter) return; + try { + let local_telemeter = this.telemeter; + this.telemeter = undefined; + await local_telemeter.finish(); + } catch (e) { + console.error(e); + } + } + } - class ContentManager { - /** - * @classdesc - * This class represents a modal dialog, managing the following: - * - The insertion of content into the current instance of the {@link ModalDialog} class. - * - The actions to be done once the modal object has been submitted - * (submitAction} method). - * - The update of the content when the {@link ModalDialog} class is also updated, - * for example when ModalDialog is re-opened. - * - The communication between the {@link ModalDialog} class and itself, if the content - * has been changed (hasChanges} method). - * @constructs - * @param {Object} contentManagerAttributes - Object containing all attributes needed to - * create a new instance. - */ constructor(contentManagerAttributes) { - /** - * An object containing MathType editor parameters. See - * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information. - * @type {Object} - */ this.editorAttributes = {}; - if ("editorAttributes" in contentManagerAttributes) { - this.editorAttributes = contentManagerAttributes.editorAttributes; - } else { - throw new Error("ContentManager constructor error: editorAttributes property missed."); - } - /** - * CustomEditors instance. Contains the custom editors. - * @type {CustomEditors} - */ this.customEditors = null; - if ("customEditors" in contentManagerAttributes) { - this.customEditors = contentManagerAttributes.customEditors; - } - /** - * Environment properties. This object contains data about the integration platform. - * @type {Object} - * @property {String} editor - Editor name. Usually the HTML editor. - * @property {String} mode - Save mode. Xml by default. - * @property {String} version - Plugin version. - */ this.environment = {}; - if ("environment" in contentManagerAttributes) { - this.environment = contentManagerAttributes.environment; - } else { - throw new Error("ContentManager constructor error: environment property missed"); - } - /** - * ContentManager language. - * @type {String} - */ this.language = ""; - if ("language" in contentManagerAttributes) { - this.language = contentManagerAttributes.language; - } else { - throw new Error("ContentManager constructor error: language property missed"); - } - /** - * {@link EditorListener} instance. Manages the changes inside the editor. - * @type {EditorListener} - */ this.editorListener = new EditorListener(); - /** - * MathType editor instance. - * @type {JsEditor} - */ this.editor = null; - /** - * Navigator user agent. - * @type {String} - */ this.ua = navigator.userAgent.toLowerCase(); - /** - * Mobile device properties object - * @type {DeviceProperties} - */ this.deviceProperties = {}; - this.deviceProperties.isAndroid = this.ua.indexOf("android") > -1; - this.deviceProperties.isIOS = ContentManager.isIOS(); - /** - * Custom editor toolbar. - * @type {String} - */ this.toolbar = null; - /** - * Custom editor toolbar. - * @type {String} - */ this.dbclick = null; - /** - * Instance of the {@link ModalDialog} class associated with the current - * {@link ContentManager} instance. - * @type {ModalDialog} - */ this.modalDialogInstance = null; - /** - * ContentManager listeners. - * @type {Listeners} - */ this.listeners = new Listeners(); - /** - * MathML associated to the ContentManager instance. - * @type {String} - */ this.mathML = null; - /** - * Indicates if the edited element is a new one or not. - * @type {Boolean} - */ this.isNewElement = true; - /** - * {@link IntegrationModel} instance. Needed to call wrapper methods. - * @type {IntegrationModel} - */ this.integrationModel = null; - } - /** - * Adds a new listener to the current {@link ContentManager} instance. - * @param {Object} listener - The listener to be added. - */ addListener(listener) { - this.listeners.add(listener); - } - /** - * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager} - * instance. - * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance. - */ setIntegrationModel(integrationModel) { - this.integrationModel = integrationModel; - } - /** - * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance. - * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance - */ setModalDialogInstance(modalDialogInstance) { - this.modalDialogInstance = modalDialogInstance; - } - /** - * Inserts the content into the current {@link ModalDialog} instance updating - * the title and inserting the JavaScript editor. - */ insert() { - // Before insert the editor we update the modal object title to avoid weird render display. - this.updateTitle(this.modalDialogInstance); - this.insertEditor(this.modalDialogInstance); - } - /** - * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until - * editor's JavaScript is loaded. - */ insertEditor() { - if (ContentManager.isEditorLoaded()) { - this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes); - this.editor.insertInto(this.modalDialogInstance.contentContainer); - this.editor.focus(); - if (this.modalDialogInstance.rtl) { - this.editor.action("rtl"); - } - // Setting div in rtl in case of it's activated. - if (this.editor.getEditorModel().isRTL()) { - this.editor.element.style.direction = "rtl"; - } - // Editor listener: this object manages the changes logic of editor. - this.editor.getEditorModel().addEditorListener(this.editorListener); - // iOS events. - if (this.modalDialogInstance.deviceProperties.isIOS) { - setTimeout(function () { - // Make sure the modalDialogInstance is available when the timeout is over - // to avoid throw errors and stop execution. - if (this.hasOwnProperty("modalDialogInstance")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins - }, 400); - const formulaDisplayDiv = document.getElementsByClassName("wrs_formulaDisplay")[0]; - Util.addEvent(formulaDisplayDiv, "focus", this.modalDialogInstance.handleOpenedIosSoftkeyboard); - Util.addEvent(formulaDisplayDiv, "blur", this.modalDialogInstance.handleClosedIosSoftkeyboard); - } - // Fire onLoad event. Necessary to set the MathML into the editor - // after is loaded. - this.listeners.fire("onLoad", {}); - } else { - setTimeout(ContentManager.prototype.insertEditor.bind(this), 100); - } - } - /** - * Initializes the current class by loading MathType script. - */ init() { - if (!ContentManager.isEditorLoaded()) { - this.addEditorAsExternalDependency(); - } - } - /** - * Adds script element to the DOM to include editor externally. - */ addEditorAsExternalDependency() { - const script = document.createElement("script"); - script.type = "text/javascript"; - let editorUrl = Configuration.get("editorUrl"); - // We create an object url for parse url string and work more efficiently. - const anchorElement = document.createElement("a"); - ContentManager.setHrefToAnchorElement(anchorElement, editorUrl); - ContentManager.setProtocolToAnchorElement(anchorElement); - editorUrl = ContentManager.getURLFromAnchorElement(anchorElement); - // Load editor URL. We add stats as GET params. - const stats = this.getEditorStats(); - script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`; - document.getElementsByTagName("head")[0].appendChild(script); - } - /** - * Sets the specified url to the anchor element. - * @param {HTMLAnchorElement} anchorElement - Element where set 'url'. - * @param {String} url - URL to set. - */ static setHrefToAnchorElement(anchorElement, url) { - anchorElement.href = url; - } - /** - * Sets the current protocol to the anchor element. - * @param {HTMLAnchorElement} anchorElement - Element where set its protocol. - */ static setProtocolToAnchorElement(anchorElement) { - // Change to https if necessary. - if (window.location.href.indexOf("https://") === 0) { - // It check if browser is https and configuration is http. - // If this is so, we will replace protocol. - if (anchorElement.protocol === "http:") { - anchorElement.protocol = "https:"; - } - } - } - /** - * Returns the url of the anchor element adding the current port - * if it is needed. - * @param {HTMLAnchorElement} anchorElement - Element where extract the url. - * @returns {String} - */ static getURLFromAnchorElement(anchorElement) { - // Check protocol and remove port if it's standard. - const removePort = anchorElement.port === "80" || anchorElement.port === "443" || anchorElement.port === ""; - return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? "" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith("/") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len - } - /** - * Returns object with editor stats. - * - * @typedef {Object} EditorStatsObject - * @property {string} editor - Editor name. - * @property {string} mode - Current configuration for formula save mode. - * @property {string} version - Current plugins version. - * @returns {EditorStatsObject} - */ getEditorStats() { - // Editor stats. Use environment property to set it. - const stats = {}; - if ("editor" in this.environment) { - stats.editor = this.environment.editor; - } else { - stats.editor = "unknown"; - } - if ("mode" in this.environment) { - stats.mode = this.environment.mode; - } else { - stats.mode = Configuration.get("saveMode"); - } - if ("version" in this.environment) { - stats.version = this.environment.version; - } else { - stats.version = Configuration.get("version"); - } - return stats; - } - /** - * Returns true if device is iOS. Otherwise, false. - * @returns {Boolean} - */ static isIOS() { - return ( - ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"].includes( - navigator.platform, - ) || // iPad on iOS 13 detection - (navigator.userAgent.includes("Mac") && "ontouchend" in document) - ); - } - /** - * Returns true if device is Mobile. Otherwise, false. - * @returns {Boolean} - */ static isMobile() { - return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); - } - /** - * Returns true if editor is loaded. Otherwise, false. - * @returns {Boolean} - */ static isEditorLoaded() { - // To know if editor JavaScript is loaded we need to wait until - // window.com.wiris.jsEditor.JsEditor.newInstance is ready. - return ( - window.com && - window.com.wiris && - window.com.wiris.jsEditor && - window.com.wiris.jsEditor.JsEditor && - window.com.wiris.jsEditor.JsEditor.newInstance - ); - } - /** - * Sets the {@link ContentManager.editor} initial content. - */ setInitialContent() { - if (!this.isNewElement) { - this.setMathML(this.mathML); - } - } - /** - * Sets a MathML into {@link ContentManager.editor} instance. - * @param {String} mathml - MathML string. - * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set. - * False by default. - */ setMathML(mathml, focusDisabled) { - // By default focus is enabled. - if (typeof focusDisabled === "undefined") { - focusDisabled = false; - } - // Using setMathML method is not a change produced by the user but for the API - // so we set to false the contentChange property of editorListener. - this.editor.setMathMLWithCallback(mathml, () => { - this.editorListener.setWaitingForChanges(true); - }); - // We need to wait a little until the callback finish. - setTimeout(() => { - this.editorListener.setIsContentChanged(false); - }, 500); - // In some scenarios - like closing modal object - editor mustn't be focused. - if (!focusDisabled) { - this.onFocus(); - } - } - /** - * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by - * {@link ModalDialog.focus}. - */ onFocus() { - if (typeof this.editor !== "undefined" && this.editor != null) { - this.editor.focus(); - // On WordPress integration, the focus gets lost right after setting it. - // To fix this, we enforce another focus some milliseconds after this behaviour. - setTimeout(() => { - this.editor.focus(); - }, 100); - } - } - /** - * Updates the edition area by calling {@link IntegrationModel.updateFormula}. - * Triggered by {@link ModalDialog.submitAction}. - */ submitAction() { - if (!this.editor.isFormulaEmpty()) { - let mathML = this.editor.getMathMLWithSemantics(); - // Add class for custom editors. - if (this.customEditors.getActiveEditor() !== null) { - const { toolbar } = this.customEditors.getActiveEditor(); - mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar); - } else { - // We need - if exists - the editor name from MathML - // class attribute. - Object.keys(this.customEditors.editors).forEach((key) => { - mathML = MathML.removeCustomEditorClassAttribute(mathML, key); - }); - } - const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML); - this.integrationModel.updateFormula(mathmlEntitiesEncoded); - } else { - this.integrationModel.updateFormula(null); - } - this.customEditors.disable(); - this.integrationModel.notifyWindowClosed(); - // Set disabled focus to prevent lost focus. - this.setEmptyMathML(); - this.customEditors.disable(); - } - /** - * Sets an empty MathML as {@link ContentManager.editor} content. - * This will open the MT/CT editor with the hand mode. - * It adds dir rtl in case of it's activated. - */ setEmptyMathML() { - const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS; - const isRTL = this.editor.getEditorModel().isRTL(); - if (isMobile || this.integrationModel.forcedHandMode) { - // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode. - const mathML = `[]`; - this.setMathML(mathML, true); - } else { - // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation. - const mathML = ``; - this.setMathML(mathML, true); - } - } - /** - * Open event. Triggered by {@link ModalDialog.open}. Does the following: - * - Updates the {@link ContentManager.editor} content - * (with an empty MathML or an existing formula), - * - Updates the {@link ContentManager.editor} toolbar. - * - Recovers the the focus. - */ onOpen() { - if (this.isNewElement) { - this.setEmptyMathML(); - } else { - this.setMathML(this.mathML); - } - let toolbar = this.updateToolbar(); - this.onFocus(); - if (this.deviceProperties.isIOS) { - const zoom = document.documentElement.clientWidth / window.innerWidth; - if (zoom !== 1) { - // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed. - this.setKeyboardMode(); - } - } - let trigger = this.dbclick ? "formula" : "button"; - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("OPENED_MTCT_EDITOR", { - toolbar: toolbar, - trigger: trigger, - }); - } catch (error) { - console.error("Error tracking OPENED_MTCT_EDITOR", error); - } - Core.globalListeners.fire("onModalOpen", {}); - if (this.integrationModel.forcedHandMode) { - this.hideHandModeButton(); - // In case we have a keyboard written formula, we still want it to be opened with handMode. - if (this.mathML && !this.mathML.includes('') && !this.isNewElement) { - this.openHandOnKeyboardMathML(this.mathML, this.editor); - } - } - } - /** - * Change Editor in keyboard mode when is loaded - */ setKeyboardMode() { - const wrsEditor = document.getElementsByClassName("wrs_handOpen wrs_disablePalette")[0]; - if (wrsEditor) { - wrsEditor.classList.remove("wrs_handOpen"); - wrsEditor.classList.remove("wrs_disablePalette"); - } else { - setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100); - } - } - /** - * Hides the hand <-> keyboard mode switch. - * - * This method relies completely on the classes used on different HTML elements within the editor itself, meaning - * any change on those classes will make this code stop working properly. - * - * On top of that, some of those classes are changed on runtime (for example, the one that makes some buttons change). - * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it. - * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button. - */ hideHandModeButton(forced = true) { - if (this.handSwitchHidden) { - return; // hand <-> keyboard button already hidden. - } - // "Open hand mode" button takes a little bit to be available. - // This selector gets the hand <-> keyboard mode switch - const handModeButtonSelector = - "div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]"; - // If in "forced mode", we hide the "keyboard button" so the user can't can't change between hand and keyboard modes. - // We use an observer to ensure that the button it hidden as soon as it appears. - if (forced) { - const mutationInstance = new MutationObserver((mutations) => { - const handModeButton = document.querySelector(handModeButtonSelector); - if (handModeButton) { - handModeButton.hidden = true; - this.handSwitchHidden = true; - mutationInstance.disconnect(); - } - }); - mutationInstance.observe(document.body, { - attributes: true, - childList: true, - characterData: true, - subtree: true, - }); - } - } - /** - * It will open any formula written in Keyboard mode with the hand mode with the default hand trace. - * - * @param {String} mathml The original KeyBoard MathML - * @param {Object} editor The editor object. - */ async openHandOnKeyboardMathML(mathml, editor) { - // First, as an editor requirement, we need to update the editor object with the current MathML formula. - // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed. - await new Promise((resolve) => { - editor.setMathMLWithCallback(mathml, resolve); - }); - // We wait until the hand editor object exists. - await this.waitForHand(editor); - // Logic to get the hand traces and open the formula in hand mode. - // This logic comes from the editor. - const handEditor = editor.hand; - editor.handTemporalMathML = editor.getMathML(); - const handCoordinates = editor.editorModel.getHandStrokes(); - handEditor.setStrokes(handCoordinates); - handEditor.fitStrokes(true); - editor.openHand(); - } - /** - * Waits until the hand editor object exists. - * @param {Obect} editor The editor object. - */ async waitForHand(editor) { - while (!editor.hand) { - await new Promise((resolve) => setTimeout(resolve, 100)); - } - } - /** - * Sets the correct toolbar depending if exist other custom toolbars - * at the same time (e.g: Chemistry). - */ updateToolbar() { - this.updateTitle(this.modalDialogInstance); - const customEditor = this.customEditors.getActiveEditor(); - let toolbar; - if (customEditor) { - toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar; - if (this.toolbar == null || this.toolbar !== toolbar) { - this.setToolbar(toolbar); - } - } else { - toolbar = this.getToolbar(); - if (this.toolbar == null || this.toolbar !== toolbar) { - this.setToolbar(toolbar); - this.customEditors.disable(); - } - } - return toolbar; - } - /** - * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled - * sets the custom editor title. Otherwise sets the default title. - */ updateTitle() { - const customEditor = this.customEditors.getActiveEditor(); - if (customEditor) { - this.modalDialogInstance.setTitle(customEditor.title); - } else { - this.modalDialogInstance.setTitle("MathType"); - } - } - /** - * Returns the editor toolbar, depending on the configuration local or server side. - * @returns {String} - Toolbar identifier. - */ getToolbar() { - let toolbar = "general"; - if ("toolbar" in this.editorAttributes) { - ({ toolbar } = this.editorAttributes); - } - // TODO: Change global integration variable for integration custom toolbar. - if (toolbar === "general") { - // eslint-disable-next-line camelcase - toolbar = - typeof _wrs_int_wirisProperties === "undefined" || typeof _wrs_int_wirisProperties.toolbar === "undefined" - ? "general" - : _wrs_int_wirisProperties.toolbar; - } - return toolbar; - } - /** - * Sets the current {@link ContentManager.editor} instance toolbar. - * @param {String} toolbar - The toolbar name. - */ setToolbar(toolbar) { - this.toolbar = toolbar; - this.editor.setParams({ - toolbar: this.toolbar, - }); - } - /** - * Sets the custom headers added on editor requests. - * @returns {Object} headers - key value headers. - */ setCustomHeaders(headers) { - let headersObj = {}; - // We control that we only get String or Object as the input. - if (typeof headers === "object") { - headersObj = headers; - } else if (typeof headers === "string") { - headersObj = Util.convertStringToObject(headers); - } - this.editor.setParams({ - customHeaders: headersObj, - }); - return headersObj; - } - /** - * Returns true if the content of the editor has been changed. The logic of the changes - * is delegated to {@link EditorListener} class. - * @returns {Boolean} True if the editor content has been changed. False otherwise. - */ hasChanges() { - return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged(); - } - /** - * Handle keyboard events detected in modal when elements of this class intervene. - * @param {KeyboardEvent} keyboardEvent - The keyboard event. - */ onKeyDown(keyboardEvent) { - if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) { - if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { - // Code to detect Esc event. - // There should be only one element with class name 'wrs_pressed' at the same time. - let list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed"); - if (list.length === 0) { - list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed"); - if (list.length === 0) { - list = document.getElementsByClassName("wrs_select wrs_pressed"); - if (list.length === 0) { - this.modalDialogInstance.cancelAction(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { - // Code to detect shift Tab event. - if (document.activeElement === this.modalDialogInstance.submitButton) { - // Focus is on OK button. - this.editor.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else if (document.querySelector('[title="Manual"]') === document.activeElement) { - // Focus is on minimize button (_). - this.modalDialogInstance.closeDiv.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else { - if (document.activeElement === this.modalDialogInstance.minimizeDiv) { - // Focus on cancel button. - if (!(this.modalDialogInstance.properties.state === "minimized")) { - this.modalDialogInstance.cancelButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } else if (keyboardEvent.key === "Tab") { - // Code to detect Tab event. - if (document.activeElement === this.modalDialogInstance.cancelButton) { - // Focus is on X button. - this.modalDialogInstance.minimizeDiv.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else if (document.activeElement === this.modalDialogInstance.closeDiv) { - // Focus on help button. - if (!(this.modalDialogInstance.properties.state === "minimized")) { - const element = document.querySelector('[title="Manual"]'); - element.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } else { - // There should be only one element with class name 'wrs_formulaDisplay'. - const element = document.getElementsByClassName("wrs_formulaDisplay")[0]; - if (element.getAttribute("class") === "wrs_formulaDisplay wrs_focused") { - // Focus is on formuladisplay. - this.modalDialogInstance.submitButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } - } - } + class ContentManager { + /** + * @classdesc + * This class represents a modal dialog, managing the following: + * - The insertion of content into the current instance of the {@link ModalDialog} class. + * - The actions to be done once the modal object has been submitted + * (submitAction} method). + * - The update of the content when the {@link ModalDialog} class is also updated, + * for example when ModalDialog is re-opened. + * - The communication between the {@link ModalDialog} class and itself, if the content + * has been changed (hasChanges} method). + * @constructs + * @param {Object} contentManagerAttributes - Object containing all attributes needed to + * create a new instance. + */ constructor(contentManagerAttributes){ + /** + * An object containing MathType editor parameters. See + * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information. + * @type {Object} + */ this.editorAttributes = {}; + if ("editorAttributes" in contentManagerAttributes) { + this.editorAttributes = contentManagerAttributes.editorAttributes; + } else { + throw new Error("ContentManager constructor error: editorAttributes property missed."); + } + /** + * CustomEditors instance. Contains the custom editors. + * @type {CustomEditors} + */ this.customEditors = null; + if ("customEditors" in contentManagerAttributes) { + this.customEditors = contentManagerAttributes.customEditors; + } + /** + * Environment properties. This object contains data about the integration platform. + * @type {Object} + * @property {String} editor - Editor name. Usually the HTML editor. + * @property {String} mode - Save mode. Xml by default. + * @property {String} version - Plugin version. + */ this.environment = {}; + if ("environment" in contentManagerAttributes) { + this.environment = contentManagerAttributes.environment; + } else { + throw new Error("ContentManager constructor error: environment property missed"); + } + /** + * ContentManager language. + * @type {String} + */ this.language = ""; + if ("language" in contentManagerAttributes) { + this.language = contentManagerAttributes.language; + } else { + throw new Error("ContentManager constructor error: language property missed"); + } + /** + * {@link EditorListener} instance. Manages the changes inside the editor. + * @type {EditorListener} + */ this.editorListener = new EditorListener(); + /** + * MathType editor instance. + * @type {JsEditor} + */ this.editor = null; + /** + * Navigator user agent. + * @type {String} + */ this.ua = navigator.userAgent.toLowerCase(); + /** + * Mobile device properties object + * @type {DeviceProperties} + */ this.deviceProperties = {}; + this.deviceProperties.isAndroid = this.ua.indexOf("android") > -1; + this.deviceProperties.isIOS = ContentManager.isIOS(); + /** + * Custom editor toolbar. + * @type {String} + */ this.toolbar = null; + /** + * Custom editor toolbar. + * @type {String} + */ this.dbclick = null; + /** + * Instance of the {@link ModalDialog} class associated with the current + * {@link ContentManager} instance. + * @type {ModalDialog} + */ this.modalDialogInstance = null; + /** + * ContentManager listeners. + * @type {Listeners} + */ this.listeners = new Listeners(); + /** + * MathML associated to the ContentManager instance. + * @type {String} + */ this.mathML = null; + /** + * Indicates if the edited element is a new one or not. + * @type {Boolean} + */ this.isNewElement = true; + /** + * {@link IntegrationModel} instance. Needed to call wrapper methods. + * @type {IntegrationModel} + */ this.integrationModel = null; + } + /** + * Adds a new listener to the current {@link ContentManager} instance. + * @param {Object} listener - The listener to be added. + */ addListener(listener) { + this.listeners.add(listener); + } + /** + * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager} + * instance. + * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance. + */ setIntegrationModel(integrationModel) { + this.integrationModel = integrationModel; + } + /** + * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance. + * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance + */ setModalDialogInstance(modalDialogInstance) { + this.modalDialogInstance = modalDialogInstance; + } + /** + * Inserts the content into the current {@link ModalDialog} instance updating + * the title and inserting the JavaScript editor. + */ insert() { + // Before insert the editor we update the modal object title to avoid weird render display. + this.updateTitle(this.modalDialogInstance); + this.insertEditor(this.modalDialogInstance); + } + /** + * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until + * editor's JavaScript is loaded. + */ insertEditor() { + if (ContentManager.isEditorLoaded()) { + this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes); + this.editor.insertInto(this.modalDialogInstance.contentContainer); + this.editor.focus(); + if (this.modalDialogInstance.rtl) { + this.editor.action("rtl"); + } + // Setting div in rtl in case of it's activated. + if (this.editor.getEditorModel().isRTL()) { + this.editor.element.style.direction = "rtl"; + } + // Editor listener: this object manages the changes logic of editor. + this.editor.getEditorModel().addEditorListener(this.editorListener); + // iOS events. + if (this.modalDialogInstance.deviceProperties.isIOS) { + setTimeout(function() { + // Make sure the modalDialogInstance is available when the timeout is over + // to avoid throw errors and stop execution. + if (this.hasOwnProperty("modalDialogInstance")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins + }, 400); + const formulaDisplayDiv = document.getElementsByClassName("wrs_formulaDisplay")[0]; + Util.addEvent(formulaDisplayDiv, "focus", this.modalDialogInstance.handleOpenedIosSoftkeyboard); + Util.addEvent(formulaDisplayDiv, "blur", this.modalDialogInstance.handleClosedIosSoftkeyboard); + } + // Fire onLoad event. Necessary to set the MathML into the editor + // after is loaded. + this.listeners.fire("onLoad", {}); + } else { + setTimeout(ContentManager.prototype.insertEditor.bind(this), 100); + } + } + /** + * Initializes the current class by loading MathType script. + */ init() { + if (!ContentManager.isEditorLoaded()) { + this.addEditorAsExternalDependency(); + } + } + /** + * Adds script element to the DOM to include editor externally. + */ addEditorAsExternalDependency() { + const script = document.createElement("script"); + script.type = "text/javascript"; + let editorUrl = Configuration.get("editorUrl"); + // We create an object url for parse url string and work more efficiently. + const anchorElement = document.createElement("a"); + ContentManager.setHrefToAnchorElement(anchorElement, editorUrl); + ContentManager.setProtocolToAnchorElement(anchorElement); + editorUrl = ContentManager.getURLFromAnchorElement(anchorElement); + // Load editor URL. We add stats as GET params. + const stats = this.getEditorStats(); + script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`; + document.getElementsByTagName("head")[0].appendChild(script); + } + /** + * Sets the specified url to the anchor element. + * @param {HTMLAnchorElement} anchorElement - Element where set 'url'. + * @param {String} url - URL to set. + */ static setHrefToAnchorElement(anchorElement, url) { + anchorElement.href = url; + } + /** + * Sets the current protocol to the anchor element. + * @param {HTMLAnchorElement} anchorElement - Element where set its protocol. + */ static setProtocolToAnchorElement(anchorElement) { + // Change to https if necessary. + if (window.location.href.indexOf("https://") === 0) { + // It check if browser is https and configuration is http. + // If this is so, we will replace protocol. + if (anchorElement.protocol === "http:") { + anchorElement.protocol = "https:"; + } + } + } + /** + * Returns the url of the anchor element adding the current port + * if it is needed. + * @param {HTMLAnchorElement} anchorElement - Element where extract the url. + * @returns {String} + */ static getURLFromAnchorElement(anchorElement) { + // Check protocol and remove port if it's standard. + const removePort = anchorElement.port === "80" || anchorElement.port === "443" || anchorElement.port === ""; + return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? "" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith("/") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len + } + /** + * Returns object with editor stats. + * + * @typedef {Object} EditorStatsObject + * @property {string} editor - Editor name. + * @property {string} mode - Current configuration for formula save mode. + * @property {string} version - Current plugins version. + * @returns {EditorStatsObject} + */ getEditorStats() { + // Editor stats. Use environment property to set it. + const stats = {}; + if ("editor" in this.environment) { + stats.editor = this.environment.editor; + } else { + stats.editor = "unknown"; + } + if ("mode" in this.environment) { + stats.mode = this.environment.mode; + } else { + stats.mode = Configuration.get("saveMode"); + } + if ("version" in this.environment) { + stats.version = this.environment.version; + } else { + stats.version = Configuration.get("version"); + } + return stats; + } + /** + * Returns true if device is iOS. Otherwise, false. + * @returns {Boolean} + */ static isIOS() { + return [ + "iPad Simulator", + "iPhone Simulator", + "iPod Simulator", + "iPad", + "iPhone", + "iPod" + ].includes(navigator.platform) || // iPad on iOS 13 detection + navigator.userAgent.includes("Mac") && "ontouchend" in document; + } + /** + * Returns true if device is Mobile. Otherwise, false. + * @returns {Boolean} + */ static isMobile() { + return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); + } + /** + * Returns true if editor is loaded. Otherwise, false. + * @returns {Boolean} + */ static isEditorLoaded() { + // To know if editor JavaScript is loaded we need to wait until + // window.com.wiris.jsEditor.JsEditor.newInstance is ready. + return window.com && window.com.wiris && window.com.wiris.jsEditor && window.com.wiris.jsEditor.JsEditor && window.com.wiris.jsEditor.JsEditor.newInstance; + } + /** + * Sets the {@link ContentManager.editor} initial content. + */ setInitialContent() { + if (!this.isNewElement) { + this.setMathML(this.mathML); + } + } + /** + * Sets a MathML into {@link ContentManager.editor} instance. + * @param {String} mathml - MathML string. + * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set. + * False by default. + */ setMathML(mathml, focusDisabled) { + // By default focus is enabled. + if (typeof focusDisabled === "undefined") { + focusDisabled = false; + } + // Using setMathML method is not a change produced by the user but for the API + // so we set to false the contentChange property of editorListener. + this.editor.setMathMLWithCallback(mathml, ()=>{ + this.editorListener.setWaitingForChanges(true); + }); + // We need to wait a little until the callback finish. + setTimeout(()=>{ + this.editorListener.setIsContentChanged(false); + }, 500); + // In some scenarios - like closing modal object - editor mustn't be focused. + if (!focusDisabled) { + this.onFocus(); + } + } + /** + * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by + * {@link ModalDialog.focus}. + */ onFocus() { + if (typeof this.editor !== "undefined" && this.editor != null) { + this.editor.focus(); + // On WordPress integration, the focus gets lost right after setting it. + // To fix this, we enforce another focus some milliseconds after this behaviour. + setTimeout(()=>{ + this.editor.focus(); + }, 100); + } + } + /** + * Updates the edition area by calling {@link IntegrationModel.updateFormula}. + * Triggered by {@link ModalDialog.submitAction}. + */ submitAction() { + if (!this.editor.isFormulaEmpty()) { + let mathML = this.editor.getMathMLWithSemantics(); + // Add class for custom editors. + if (this.customEditors.getActiveEditor() !== null) { + const { toolbar } = this.customEditors.getActiveEditor(); + mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar); + } else { + // We need - if exists - the editor name from MathML + // class attribute. + Object.keys(this.customEditors.editors).forEach((key)=>{ + mathML = MathML.removeCustomEditorClassAttribute(mathML, key); + }); + } + const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML); + this.integrationModel.updateFormula(mathmlEntitiesEncoded); + } else { + this.integrationModel.updateFormula(null); + } + this.customEditors.disable(); + this.integrationModel.notifyWindowClosed(); + // Set disabled focus to prevent lost focus. + this.setEmptyMathML(); + this.customEditors.disable(); + } + /** + * Sets an empty MathML as {@link ContentManager.editor} content. + * This will open the MT/CT editor with the hand mode. + * It adds dir rtl in case of it's activated. + */ setEmptyMathML() { + const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS; + const isRTL = this.editor.getEditorModel().isRTL(); + if (isMobile || this.integrationModel.forcedHandMode) { + // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode. + const mathML = `[]`; + this.setMathML(mathML, true); + } else { + // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation. + const mathML = ``; + this.setMathML(mathML, true); + } + } + /** + * Open event. Triggered by {@link ModalDialog.open}. Does the following: + * - Updates the {@link ContentManager.editor} content + * (with an empty MathML or an existing formula), + * - Updates the {@link ContentManager.editor} toolbar. + * - Recovers the the focus. + */ onOpen() { + if (this.isNewElement) { + this.setEmptyMathML(); + } else { + this.setMathML(this.mathML); + } + let toolbar = this.updateToolbar(); + this.onFocus(); + if (this.deviceProperties.isIOS) { + const zoom = document.documentElement.clientWidth / window.innerWidth; + if (zoom !== 1) { + // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed. + this.setKeyboardMode(); + } + } + let trigger = this.dbclick ? "formula" : "button"; + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("OPENED_MTCT_EDITOR", { + toolbar: toolbar, + trigger: trigger + }); + } catch (error) { + console.error("Error tracking OPENED_MTCT_EDITOR", error); + } + Core.globalListeners.fire("onModalOpen", {}); + if (this.integrationModel.forcedHandMode) { + this.hideHandModeButton(); + // In case we have a keyboard written formula, we still want it to be opened with handMode. + if (this.mathML && !this.mathML.includes('') && !this.isNewElement) { + this.openHandOnKeyboardMathML(this.mathML, this.editor); + } + } + } + /** + * Change Editor in keyboard mode when is loaded + */ setKeyboardMode() { + const wrsEditor = document.getElementsByClassName("wrs_handOpen wrs_disablePalette")[0]; + if (wrsEditor) { + wrsEditor.classList.remove("wrs_handOpen"); + wrsEditor.classList.remove("wrs_disablePalette"); + } else { + setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100); + } + } + /** + * Hides the hand <-> keyboard mode switch. + * + * This method relies completely on the classes used on different HTML elements within the editor itself, meaning + * any change on those classes will make this code stop working properly. + * + * On top of that, some of those classes are changed on runtime (for example, the one that makes some buttons change). + * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it. + * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button. + */ hideHandModeButton(forced = true) { + if (this.handSwitchHidden) { + return; // hand <-> keyboard button already hidden. + } + // "Open hand mode" button takes a little bit to be available. + // This selector gets the hand <-> keyboard mode switch + const handModeButtonSelector = "div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]"; + // If in "forced mode", we hide the "keyboard button" so the user can't can't change between hand and keyboard modes. + // We use an observer to ensure that the button it hidden as soon as it appears. + if (forced) { + const mutationInstance = new MutationObserver((mutations)=>{ + const handModeButton = document.querySelector(handModeButtonSelector); + if (handModeButton) { + handModeButton.hidden = true; + this.handSwitchHidden = true; + mutationInstance.disconnect(); + } + }); + mutationInstance.observe(document.body, { + attributes: true, + childList: true, + characterData: true, + subtree: true + }); + } + } + /** + * It will open any formula written in Keyboard mode with the hand mode with the default hand trace. + * + * @param {String} mathml The original KeyBoard MathML + * @param {Object} editor The editor object. + */ async openHandOnKeyboardMathML(mathml, editor) { + // First, as an editor requirement, we need to update the editor object with the current MathML formula. + // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed. + await new Promise((resolve)=>{ + editor.setMathMLWithCallback(mathml, resolve); + }); + // We wait until the hand editor object exists. + await this.waitForHand(editor); + // Logic to get the hand traces and open the formula in hand mode. + // This logic comes from the editor. + const handEditor = editor.hand; + editor.handTemporalMathML = editor.getMathML(); + const handCoordinates = editor.editorModel.getHandStrokes(); + handEditor.setStrokes(handCoordinates); + handEditor.fitStrokes(true); + editor.openHand(); + } + /** + * Waits until the hand editor object exists. + * @param {Obect} editor The editor object. + */ async waitForHand(editor) { + while(!editor.hand){ + await new Promise((resolve)=>setTimeout(resolve, 100)); + } + } + /** + * Sets the correct toolbar depending if exist other custom toolbars + * at the same time (e.g: Chemistry). + */ updateToolbar() { + this.updateTitle(this.modalDialogInstance); + const customEditor = this.customEditors.getActiveEditor(); + let toolbar; + if (customEditor) { + toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar; + if (this.toolbar == null || this.toolbar !== toolbar) { + this.setToolbar(toolbar); + } + } else { + toolbar = this.getToolbar(); + if (this.toolbar == null || this.toolbar !== toolbar) { + this.setToolbar(toolbar); + this.customEditors.disable(); + } + } + return toolbar; + } + /** + * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled + * sets the custom editor title. Otherwise sets the default title. + */ updateTitle() { + const customEditor = this.customEditors.getActiveEditor(); + if (customEditor) { + this.modalDialogInstance.setTitle(customEditor.title); + } else { + this.modalDialogInstance.setTitle("MathType"); + } + } + /** + * Returns the editor toolbar, depending on the configuration local or server side. + * @returns {String} - Toolbar identifier. + */ getToolbar() { + let toolbar = "general"; + if ("toolbar" in this.editorAttributes) { + ({ toolbar } = this.editorAttributes); + } + // TODO: Change global integration variable for integration custom toolbar. + if (toolbar === "general") { + // eslint-disable-next-line camelcase + toolbar = typeof _wrs_int_wirisProperties === "undefined" || typeof _wrs_int_wirisProperties.toolbar === "undefined" ? "general" : _wrs_int_wirisProperties.toolbar; + } + return toolbar; + } + /** + * Sets the current {@link ContentManager.editor} instance toolbar. + * @param {String} toolbar - The toolbar name. + */ setToolbar(toolbar) { + this.toolbar = toolbar; + this.editor.setParams({ + toolbar: this.toolbar + }); + } + /** + * Sets the custom headers added on editor requests. + * @returns {Object} headers - key value headers. + */ setCustomHeaders(headers) { + let headersObj = {}; + // We control that we only get String or Object as the input. + if (typeof headers === "object") { + headersObj = headers; + } else if (typeof headers === "string") { + headersObj = Util.convertStringToObject(headers); + } + this.editor.setParams({ + customHeaders: headersObj + }); + return headersObj; + } + /** + * Returns true if the content of the editor has been changed. The logic of the changes + * is delegated to {@link EditorListener} class. + * @returns {Boolean} True if the editor content has been changed. False otherwise. + */ hasChanges() { + return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged(); + } + /** + * Handle keyboard events detected in modal when elements of this class intervene. + * @param {KeyboardEvent} keyboardEvent - The keyboard event. + */ onKeyDown(keyboardEvent) { + if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) { + if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { + // Code to detect Esc event. + // There should be only one element with class name 'wrs_pressed' at the same time. + let list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed"); + if (list.length === 0) { + list = document.getElementsByClassName("wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed"); + if (list.length === 0) { + list = document.getElementsByClassName("wrs_select wrs_pressed"); + if (list.length === 0) { + this.modalDialogInstance.cancelAction(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { + // Code to detect shift Tab event. + if (document.activeElement === this.modalDialogInstance.submitButton) { + // Focus is on OK button. + this.editor.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else if (document.querySelector('[title="Manual"]') === document.activeElement) { + // Focus is on minimize button (_). + this.modalDialogInstance.closeDiv.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else { + if (document.activeElement === this.modalDialogInstance.minimizeDiv) { + // Focus on cancel button. + if (!(this.modalDialogInstance.properties.state === "minimized")) { + this.modalDialogInstance.cancelButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } else if (keyboardEvent.key === "Tab") { + // Code to detect Tab event. + if (document.activeElement === this.modalDialogInstance.cancelButton) { + // Focus is on X button. + this.modalDialogInstance.minimizeDiv.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else if (document.activeElement === this.modalDialogInstance.closeDiv) { + // Focus on help button. + if (!(this.modalDialogInstance.properties.state === "minimized")) { + const element = document.querySelector('[title="Manual"]'); + element.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } else { + // There should be only one element with class name 'wrs_formulaDisplay'. + const element = document.getElementsByClassName("wrs_formulaDisplay")[0]; + if (element.getAttribute("class") === "wrs_formulaDisplay wrs_focused") { + // Focus is on formuladisplay. + this.modalDialogInstance.submitButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } + } + } - /** - * A custom editor is MathType editor with a different - * @typedef {Object} CustomEditor - * @property {String} CustomEditor.name - Custom editor name. - * @property {String} CustomEditor.toolbar - Custom editor toolbar. - * @property {String} CustomEditor.icon - Custom editor icon. - * @property {String} CustomEditor.confVariable - Configuration property to manage - * the availability of the custom editor. - * @property {String} CustomEditor.title - Custom editor modal dialog title. - * @property {String} CustomEditor.tooltip - Custom editor icon tooltip. - */ class CustomEditors { - /** - * @classdesc - * This class represents the MathType custom editors manager. - * A custom editor is MathType editor with a custom toolbar. - * This class associates a {@link CustomEditor} to: - * - It's own formulas - * - A custom toolbar - * - An icon to open it from a HTML editor. - * - A tooltip for the icon. - * - A global variable to enable or disable it globally. - * @constructs - */ constructor() { - /** - * The custom editors. - * @type {Array.} - */ this.editors = []; - /** - * The active editor name. - * @type {String} - */ this.activeEditor = "default"; - } - /** - * Adds a {@link CustomEditor} to editors array. - * @param {String} editorName - The editor name. - * @param {CustomEditor} editorParams - The custom editor parameters. - */ addEditor(editorName, editorParams) { - const customEditor = {}; - customEditor.name = editorParams.name; - customEditor.toolbar = editorParams.toolbar; - customEditor.icon = editorParams.icon; - customEditor.confVariable = editorParams.confVariable; - customEditor.title = editorParams.title; - customEditor.tooltip = editorParams.tooltip; - this.editors[editorName] = customEditor; - } - /** - * Enables a {@link CustomEditor}. - * @param {String} customEditorName - The custom editor name. - */ enable(customEditorName) { - this.activeEditor = customEditorName; - } - /** - * Disables a {@link CustomEditor}. - */ disable() { - this.activeEditor = "default"; - } - /** - * Returns the active editor. - * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise. - */ getActiveEditor() { - if (this.activeEditor !== "default") { - return this.editors[this.activeEditor]; - } - return null; - } - } + /** + * A custom editor is MathType editor with a different + * @typedef {Object} CustomEditor + * @property {String} CustomEditor.name - Custom editor name. + * @property {String} CustomEditor.toolbar - Custom editor toolbar. + * @property {String} CustomEditor.icon - Custom editor icon. + * @property {String} CustomEditor.confVariable - Configuration property to manage + * the availability of the custom editor. + * @property {String} CustomEditor.title - Custom editor modal dialog title. + * @property {String} CustomEditor.tooltip - Custom editor icon tooltip. + */ class CustomEditors { + /** + * @classdesc + * This class represents the MathType custom editors manager. + * A custom editor is MathType editor with a custom toolbar. + * This class associates a {@link CustomEditor} to: + * - It's own formulas + * - A custom toolbar + * - An icon to open it from a HTML editor. + * - A tooltip for the icon. + * - A global variable to enable or disable it globally. + * @constructs + */ constructor(){ + /** + * The custom editors. + * @type {Array.} + */ this.editors = []; + /** + * The active editor name. + * @type {String} + */ this.activeEditor = "default"; + } + /** + * Adds a {@link CustomEditor} to editors array. + * @param {String} editorName - The editor name. + * @param {CustomEditor} editorParams - The custom editor parameters. + */ addEditor(editorName, editorParams) { + const customEditor = {}; + customEditor.name = editorParams.name; + customEditor.toolbar = editorParams.toolbar; + customEditor.icon = editorParams.icon; + customEditor.confVariable = editorParams.confVariable; + customEditor.title = editorParams.title; + customEditor.tooltip = editorParams.tooltip; + this.editors[editorName] = customEditor; + } + /** + * Enables a {@link CustomEditor}. + * @param {String} customEditorName - The custom editor name. + */ enable(customEditorName) { + this.activeEditor = customEditorName; + } + /** + * Disables a {@link CustomEditor}. + */ disable() { + this.activeEditor = "default"; + } + /** + * Returns the active editor. + * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise. + */ getActiveEditor() { + if (this.activeEditor !== "default") { + return this.editors[this.activeEditor]; + } + return null; + } + } - /** - * Represents the configuration properties generated from the frontend (JavaScript variables). - * @type {Object} - * @property {string} imageClassName - Default MathType formula image class. - * @property {string} imageClassName - Default MathType CAS image class. - * @ignore - */ const jsProperties = { - imageCustomEditorName: "data-custom-editor", - imageClassName: "Wirisformula", - CASClassName: "Wiriscas", - }; + /** + * Represents the configuration properties generated from the frontend (JavaScript variables). + * @type {Object} + * @property {string} imageClassName - Default MathType formula image class. + * @property {string} imageClassName - Default MathType CAS image class. + * @ignore + */ const jsProperties = { + imageCustomEditorName: "data-custom-editor", + imageClassName: "Wirisformula", + CASClassName: "Wiriscas" + }; - class Event { - /** - * @classdesc - * This class represents a custom event. Events should be fired by the {@link Listener} class. - * - * ```js - * let customEvent = new Event(); - * customEvent.properties = {}; - * - * let listeners = new Listeners(); - * listeners.newListener(eventName, callback); - * - * listeners.fire(eventName, customEvent) * - * ``` - * @constructs - */ constructor() { - /** - * Indicates if the event should be cancelled. - * @type {Boolean} - */ this.cancelled = false; - /** - * Indicates if the event should be prevented. - * @type {Boolean} - */ this.defaultPrevented = false; - } - /** - * Cancels the event. - */ cancel() { - this.cancelled = true; - } - /** - * Prevents the default action. - */ preventDefault() { - this.defaultPrevented = true; - } - } + class Event { + /** + * @classdesc + * This class represents a custom event. Events should be fired by the {@link Listener} class. + * + * ```js + * let customEvent = new Event(); + * customEvent.properties = {}; + * + * let listeners = new Listeners(); + * listeners.newListener(eventName, callback); + * + * listeners.fire(eventName, customEvent) * + * ``` + * @constructs + */ constructor(){ + /** + * Indicates if the event should be cancelled. + * @type {Boolean} + */ this.cancelled = false; + /** + * Indicates if the event should be prevented. + * @type {Boolean} + */ this.defaultPrevented = false; + } + /** + * Cancels the event. + */ cancel() { + this.cancelled = true; + } + /** + * Prevents the default action. + */ preventDefault() { + this.defaultPrevented = true; + } + } - /** + /** */ class PopUpMessage { - /** - * @classdesc - * This class represents a dialog message overlaying a DOM element in order to - * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears - * o canceled. In this last case a callback function should be called. - * @constructs - * @param {Object} popupMessageAttributes - Object containing popup properties. - * @param {HTMLElement} popupMessageAttributes.overlayElement - Element to overlay. - * @param {Object} popupMessageAttributes.callbacks - Contains callback - * methods for close and cancel actions. - * @param {Object} popupMessageAttributes.strings - Contains all the strings needed. - */ constructor(popupMessageAttributes) { - /** - * Element to be overlaid when the popup appears. - */ this.overlayElement = popupMessageAttributes.overlayElement; - this.callbacks = popupMessageAttributes.callbacks; - /** - * HTMLElement element to wrap all HTML elements inside the popupMessage. - */ this.overlayWrapper = this.overlayElement.appendChild(document.createElement("div")); - this.overlayWrapper.setAttribute("class", "wrs_popupmessage_overlay_envolture"); - /** - * HTMLElement to display the popup message, close button and cancel button. - */ this.message = this.overlayWrapper.appendChild(document.createElement("div")); - this.message.id = "wrs_popupmessage"; - this.message.setAttribute("class", "wrs_popupmessage_panel"); - this.message.setAttribute("role", "dialog"); - this.message.setAttribute("aria-describedby", "description_txt"); - const paragraph = document.createElement("p"); - const text = document.createTextNode(popupMessageAttributes.strings.message); - paragraph.appendChild(text); - paragraph.id = "description_txt"; - this.message.appendChild(paragraph); - /** - * HTML element overlaying the overlayElement. - */ const overlay = this.overlayWrapper.appendChild(document.createElement("div")); - overlay.setAttribute("class", "wrs_popupmessage_overlay"); - // We create a overlay that close popup message on click in there - overlay.addEventListener("click", this.cancelAction.bind(this)); - /** - * HTML element containing cancel and close buttons. - */ this.buttonArea = this.message.appendChild(document.createElement("div")); - this.buttonArea.setAttribute("class", "wrs_popupmessage_button_area"); - this.buttonArea.id = "wrs_popup_button_area"; - // Close button arguments. - const buttonSubmitArguments = { - class: "wrs_button_accept", - innerHTML: popupMessageAttributes.strings.submitString, - id: "wrs_popup_accept_button", - // To identifiy the element in automated testing - "data-testid": "mtcteditor-cd-close-button", - }; - /** - * Close button arguments. - */ this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this)); - this.buttonArea.appendChild(this.closeButton); - // Cancel button arguments. - const buttonCancelArguments = { - class: "wrs_button_cancel", - innerHTML: popupMessageAttributes.strings.cancelString, - id: "wrs_popup_cancel_button", - // To identifiy the element in automated testing - "data-testid": "mtcteditor-cd-cancel-button", - }; - /** - * Cancel button. - */ this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this)); - this.buttonArea.appendChild(this.cancelButton); - } - /** - * This method create a button with arguments and return button dom object - * @param {Object} parameters - An object containing id, class and innerHTML button text. - * @param {String} parameters.id - Button id. - * @param {String} parameters.class - Button class name. - * @param {String} parameters.innerHTML - Button innerHTML text. - * @param {Object} callback- Callback method to call on click event. - * @returns {HTMLElement} HTML button. - */ // eslint-disable-next-line class-methods-use-this - createButton(parameters, callback) { - let element = {}; - element = document.createElement("button"); - element.setAttribute("id", parameters.id); - element.setAttribute("class", parameters.class); - element.innerHTML = parameters.innerHTML; - element.addEventListener("click", callback); - if (parameters["data-testid"]) { - element.setAttribute("data-testid", parameters["data-testid"]); - } - return element; - } - /** - * Shows the popupmessage containing a message, and two buttons - * to cancel the action or close the modal dialog. - */ show() { - if (this.overlayWrapper.style.display !== "block") { - // Clear focus with blur for prevent press any key. - document.activeElement.blur(); - this.overlayWrapper.style.display = "block"; - this.closeButton.focus(); - } else { - this.overlayWrapper.style.display = "none"; - // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow - } - } - /** - * This method cancels the popupMessage: the dialog disappears revealing the overlaid element. - * A callback method is called (if defined). For example a method to focus the overlaid element. - */ cancelAction() { - this.overlayWrapper.style.display = "none"; - if (typeof this.callbacks.cancelCallback !== "undefined") { - this.callbacks.cancelCallback(); - // Set temporal image to null to prevent loading - // an existent formula when starting one from scratch. Make focus come back too. - // IntegrationModel.setActionsOnCancelButtons(); - } - } - /** - * This method closes the popupMessage: the dialog disappears and the close callback is called. - * For example to close the overlaid element. - */ closeAction() { - this.cancelAction(); - if (typeof this.callbacks.closeCallback !== "undefined") { - this.callbacks.closeCallback(); - } - IntegrationModel.setActionsOnCancelButtons(); - } - /** - * Handle keyboard events detected in modal when elements of this class intervene. - * @param {KeyboardEvent} keyboardEvent - The keyboard event. - */ onKeyDown(keyboardEvent) { - if (keyboardEvent.key !== undefined) { - // Code to detect Esc event. - if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { - this.cancelAction(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else if (keyboardEvent.key === "Tab") { - // Code to detect Tab event. - if (document.activeElement === this.closeButton) { - this.cancelButton.focus(); - } else { - this.closeButton.focus(); - } - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } - } - } - } + /** + * @classdesc + * This class represents a dialog message overlaying a DOM element in order to + * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears + * o canceled. In this last case a callback function should be called. + * @constructs + * @param {Object} popupMessageAttributes - Object containing popup properties. + * @param {HTMLElement} popupMessageAttributes.overlayElement - Element to overlay. + * @param {Object} popupMessageAttributes.callbacks - Contains callback + * methods for close and cancel actions. + * @param {Object} popupMessageAttributes.strings - Contains all the strings needed. + */ constructor(popupMessageAttributes){ + /** + * Element to be overlaid when the popup appears. + */ this.overlayElement = popupMessageAttributes.overlayElement; + this.callbacks = popupMessageAttributes.callbacks; + /** + * HTMLElement element to wrap all HTML elements inside the popupMessage. + */ this.overlayWrapper = this.overlayElement.appendChild(document.createElement("div")); + this.overlayWrapper.setAttribute("class", "wrs_popupmessage_overlay_envolture"); + /** + * HTMLElement to display the popup message, close button and cancel button. + */ this.message = this.overlayWrapper.appendChild(document.createElement("div")); + this.message.id = "wrs_popupmessage"; + this.message.setAttribute("class", "wrs_popupmessage_panel"); + this.message.setAttribute("role", "dialog"); + this.message.setAttribute("aria-describedby", "description_txt"); + const paragraph = document.createElement("p"); + const text = document.createTextNode(popupMessageAttributes.strings.message); + paragraph.appendChild(text); + paragraph.id = "description_txt"; + this.message.appendChild(paragraph); + /** + * HTML element overlaying the overlayElement. + */ const overlay = this.overlayWrapper.appendChild(document.createElement("div")); + overlay.setAttribute("class", "wrs_popupmessage_overlay"); + // We create a overlay that close popup message on click in there + overlay.addEventListener("click", this.cancelAction.bind(this)); + /** + * HTML element containing cancel and close buttons. + */ this.buttonArea = this.message.appendChild(document.createElement("div")); + this.buttonArea.setAttribute("class", "wrs_popupmessage_button_area"); + this.buttonArea.id = "wrs_popup_button_area"; + // Close button arguments. + const buttonSubmitArguments = { + class: "wrs_button_accept", + innerHTML: popupMessageAttributes.strings.submitString, + id: "wrs_popup_accept_button", + // To identifiy the element in automated testing + "data-testid": "mtcteditor-cd-close-button" + }; + /** + * Close button arguments. + */ this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this)); + this.buttonArea.appendChild(this.closeButton); + // Cancel button arguments. + const buttonCancelArguments = { + class: "wrs_button_cancel", + innerHTML: popupMessageAttributes.strings.cancelString, + id: "wrs_popup_cancel_button", + // To identifiy the element in automated testing + "data-testid": "mtcteditor-cd-cancel-button" + }; + /** + * Cancel button. + */ this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this)); + this.buttonArea.appendChild(this.cancelButton); + } + /** + * This method create a button with arguments and return button dom object + * @param {Object} parameters - An object containing id, class and innerHTML button text. + * @param {String} parameters.id - Button id. + * @param {String} parameters.class - Button class name. + * @param {String} parameters.innerHTML - Button innerHTML text. + * @param {Object} callback- Callback method to call on click event. + * @returns {HTMLElement} HTML button. + */ // eslint-disable-next-line class-methods-use-this + createButton(parameters, callback) { + let element = {}; + element = document.createElement("button"); + element.setAttribute("id", parameters.id); + element.setAttribute("class", parameters.class); + element.innerHTML = parameters.innerHTML; + element.addEventListener("click", callback); + if (parameters["data-testid"]) { + element.setAttribute("data-testid", parameters["data-testid"]); + } + return element; + } + /** + * Shows the popupmessage containing a message, and two buttons + * to cancel the action or close the modal dialog. + */ show() { + if (this.overlayWrapper.style.display !== "block") { + // Clear focus with blur for prevent press any key. + document.activeElement.blur(); + this.overlayWrapper.style.display = "block"; + this.closeButton.focus(); + } else { + this.overlayWrapper.style.display = "none"; + // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow + } + } + /** + * This method cancels the popupMessage: the dialog disappears revealing the overlaid element. + * A callback method is called (if defined). For example a method to focus the overlaid element. + */ cancelAction() { + this.overlayWrapper.style.display = "none"; + if (typeof this.callbacks.cancelCallback !== "undefined") { + this.callbacks.cancelCallback(); + // Set temporal image to null to prevent loading + // an existent formula when starting one from scratch. Make focus come back too. + // IntegrationModel.setActionsOnCancelButtons(); + } + } + /** + * This method closes the popupMessage: the dialog disappears and the close callback is called. + * For example to close the overlaid element. + */ closeAction() { + this.cancelAction(); + if (typeof this.callbacks.closeCallback !== "undefined") { + this.callbacks.closeCallback(); + } + IntegrationModel.setActionsOnCancelButtons(); + } + /** + * Handle keyboard events detected in modal when elements of this class intervene. + * @param {KeyboardEvent} keyboardEvent - The keyboard event. + */ onKeyDown(keyboardEvent) { + if (keyboardEvent.key !== undefined) { + // Code to detect Esc event. + if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { + this.cancelAction(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else if (keyboardEvent.key === "Tab") { + // Code to detect Tab event. + if (document.activeElement === this.closeButton) { + this.cancelButton.focus(); + } else { + this.closeButton.focus(); + } + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } + } + } + } - var closeIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var closeIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var closeHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var closeHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var fullsIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var fullsIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var fullsHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var fullsHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var minIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var minIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var minHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var minHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var minsIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var minsIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var minsHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var minsHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var maxIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var maxIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - var maxHoverIcon = - '\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n'; + var maxHoverIcon = "\n\n \n \n \n image/svg+xml\n \n \n \n \n \n \n \n\n"; - // eslint-disable-next-line max-classes-per-file - /** - * @typedef {Object} DeviceProperties - * @property {String} DeviceProperties.orientation - Indicates of the orientation of the device. - * @property {Boolean} DeviceProperties.isAndroid - True if the device is Android. False otherwise. - * @property {Boolean} DeviceProperties.isIOS - True if the device is iOS. False otherwise. - * @property {Boolean} DeviceProperties.isMobile - True if the device is a mobile one. - * False otherwise. - * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one. - * False otherwise. - */ class ModalDialog { - /** - * @classdesc - * This class represents a modal dialog. The modal dialog admits - * a {@link ContentManager} instance to manage the content of the dialog. - * @constructs - * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes. - */ constructor(modalDialogAttributes) { - this.attributes = modalDialogAttributes; - // Metrics. - const ua = navigator.userAgent.toLowerCase(); - const isAndroid = ua.indexOf("android") > -1; - const isIOS = ContentManager.isIOS(); - this.iosSoftkeyboardOpened = false; - this.iosMeasureUnit = ua.indexOf("crios") === -1 ? "%" : "vh"; - this.iosDivHeight = `100%${this.iosMeasureUnit}`; - const deviceWidth = window.outerWidth; - const deviceHeight = window.outerHeight; - const landscape = deviceWidth > deviceHeight; - const portrait = deviceWidth < deviceHeight; - // TODO: Detect isMobile without using editor metrics. - landscape && this.attributes.height > deviceHeight; - portrait && this.attributes.width > deviceWidth; - const isMobile = ContentManager.isMobile(); - // Obtain number of current instance. - this.instanceId = document.getElementsByClassName("wrs_modal_dialogContainer").length; - // Device object properties. - /** - * @type {DeviceProperties} - */ this.deviceProperties = { - orientation: landscape ? "landscape" : "portrait", - isAndroid, - isIOS, - isMobile, - isDesktop: !isMobile && !isIOS && !isAndroid, - }; - this.properties = { - created: false, - state: "", - previousState: "", - position: { - bottom: 0, - right: 10, - }, - size: { - height: 338, - width: 580, - }, - }; - /** - * Object to keep website's style before change it on lock scroll for mobile devices. - * @type {Object} - * @property {String} bodyStylePosition - Previous body style position. - * @property {String} bodyStyleOverflow - Previous body style overflow. - * @property {String} htmlStyleOverflow - Previous body style overflow. - * @property {String} windowScrollX - Previous window's scroll Y. - * @property {String} windowScrollY - Previous window's scroll X. - */ this.websiteBeforeLockParameters = null; - let attributes = {}; - attributes.class = "wrs_modal_overlay"; - attributes.id = this.getElementId(attributes.class); - this.overlay = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_title_bar"; - attributes.id = this.getElementId(attributes.class); - this.titleBar = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_title"; - attributes.id = this.getElementId(attributes.class); - this.title = Util.createElement("div", attributes); - this.title.innerHTML = "offline"; - attributes = {}; - attributes.class = "wrs_modal_close_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("close"); - attributes.style = {}; - this.closeDiv = Util.createElement("a", attributes); - this.closeDiv.setAttribute("role", "button"); - this.closeDiv.setAttribute("tabindex", 3); - // Apply styles and events after the creation as createElement doesn't process them correctly - let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`; - let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`; - this.closeDiv.setAttribute("style", generalStyle); - this.closeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.closeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identifiy the element in automated testing - this.closeDiv.setAttribute("data-testid", "mtcteditor-close-button"); - attributes = {}; - attributes.class = "wrs_modal_stack_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("exit_fullscreen"); - this.stackDiv = Util.createElement("a", attributes); - this.stackDiv.setAttribute("role", "button"); - this.stackDiv.setAttribute("tabindex", 2); - generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`; - hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`; - this.stackDiv.setAttribute("style", generalStyle); - this.stackDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.stackDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identifiy the element in automated testing - this.stackDiv.setAttribute("data-testid", "mtcteditor-fullscreen-disable-button"); - attributes = {}; - attributes.class = "wrs_modal_maximize_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("fullscreen"); - this.maximizeDiv = Util.createElement("a", attributes); - this.maximizeDiv.setAttribute("role", "button"); - this.maximizeDiv.setAttribute("tabindex", 2); - generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`; - hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`; - this.maximizeDiv.setAttribute("style", generalStyle); - this.maximizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.maximizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identifiy the element in automated testing - this.maximizeDiv.setAttribute("data-testid", "mtcteditor-fullscreen-enable-button"); - attributes = {}; - attributes.class = "wrs_modal_minimize_button"; - attributes.id = this.getElementId(attributes.class); - attributes.title = StringManager.get("minimize"); - this.minimizeDiv = Util.createElement("a", attributes); - this.minimizeDiv.setAttribute("role", "button"); - this.minimizeDiv.setAttribute("tabindex", 1); - generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; - hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // To identify the element in automated testing - this.minimizeDiv.setAttribute("data-testid", "mtcteditor-minimize-button"); - attributes = {}; - attributes.class = "wrs_modal_dialogContainer"; - attributes.id = this.getElementId(attributes.class); - attributes.role = "dialog"; - this.container = Util.createElement("div", attributes); - this.container.setAttribute("aria-labeledby", "wrs_modal_title[0]"); - attributes = {}; - attributes.class = "wrs_modal_wrapper"; - attributes.id = this.getElementId(attributes.class); - this.wrapper = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_content_container"; - attributes.id = this.getElementId(attributes.class); - this.contentContainer = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_controls"; - attributes.id = this.getElementId(attributes.class); - this.controls = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_buttons_container"; - attributes.id = this.getElementId(attributes.class); - this.buttonContainer = Util.createElement("div", attributes); - // Buttons: all button must be created using createSubmitButton method. - this.submitButton = this.createSubmitButton( - { - id: this.getElementId("wrs_modal_button_accept"), - class: "wrs_modal_button_accept", - innerHTML: StringManager.get("accept"), - // To identifiy the element in automated testing - "data-testid": "mtcteditor-insert-button", - }, - this.submitAction.bind(this), - ); - this.cancelButton = this.createSubmitButton( - { - id: this.getElementId("wrs_modal_button_cancel"), - class: "wrs_modal_button_cancel", - innerHTML: StringManager.get("cancel"), - // To identifiy the element in automated testing - "data-testid": "mtcteditor-cancel-button", - }, - this.cancelAction.bind(this), - ); - this.contentManager = null; - // Overlay popup. - const popupStrings = { - cancelString: StringManager.get("cancel"), - submitString: StringManager.get("close"), - message: StringManager.get("close_modal_warning"), - }; - const callbacks = { - closeCallback: () => { - this.close("mtc_close"); - }, - cancelCallback: () => { - this.focus(); - }, - }; - const popupupProperties = { - overlayElement: this.container, - callbacks, - strings: popupStrings, - }; - this.popup = new PopUpMessage(popupupProperties); - /** - * Indicates if directionality of the modal dialog is RTL. false by default. - * @type {Boolean} - */ this.rtl = false; - if ("rtl" in this.attributes) { - this.rtl = this.attributes.rtl; - } - // Event handlers need modal instance context. - this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this); - this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this); - } - /** - * This method sets an ContentManager instance to ModalDialog. ContentManager - * manages the logic of ModalDialog content: submit, update, close and changes. - * @param {ContentManager} contentManager - ContentManager instance. - */ setContentManager(contentManager) { - this.contentManager = contentManager; - } - /** - * Returns the modal contentElement object. - * @returns {ContentManager} the instance of the ContentManager class. - */ getContentManager() { - return this.contentManager; - } - /** - * This method is called when the modal object has been submitted. Calls - * contentElement submitAction method - if exists - and closes the modal - * object. No logic about the content should be placed here, - * contentElement.submitAction is the responsible of the content logic. - */ async submitAction() { - if (typeof this.contentManager.submitAction !== "undefined") { - this.contentManager.submitAction(); - } - await this.close("mtc_insert"); - } - /** - * Performs the cancel action. - * If there are no changes in the content, it closes the modal. - * Otherwise, it shows a pop-up message to confirm the cancel action. - * @returns {Promise} - A promise that resolves when the modal is closed. - */ async cancelAction() { - if (typeof this.contentManager.hasChanges === "undefined" || !this.contentManager.hasChanges()) { - IntegrationModel.setActionsOnCancelButtons(); - await this.close("mtc_close"); - } else { - this.showPopUpMessage(); - } - } - /** - * Returns a button element. - * @param {Object} properties - Input button properties. - * @param {String} properties.class - Input button class. - * @param {String} properties.innerHTML - Input button innerHTML. - * @param {Object} callback - Callback function associated to click event. - * @returns {HTMLButtonElement} The button element. - * - */ // eslint-disable-next-line class-methods-use-this - createSubmitButton(properties, callback) { - class SubmitButton { - constructor() { - this.element = document.createElement("button"); - this.element.id = properties.id; - this.element.className = properties.class; - this.element.innerHTML = properties.innerHTML; - this.element.dataset.testid = properties["data-testid"]; - Util.addEvent(this.element, "click", callback); - } - getElement() { - return this.element; - } - } - return new SubmitButton(properties, callback).getElement(); - } - /** - * Creates the modal window object inserting a contentElement object. - */ create() { - /* Modal Window Structure + // eslint-disable-next-line max-classes-per-file + /** + * @typedef {Object} DeviceProperties + * @property {String} DeviceProperties.orientation - Indicates of the orientation of the device. + * @property {Boolean} DeviceProperties.isAndroid - True if the device is Android. False otherwise. + * @property {Boolean} DeviceProperties.isIOS - True if the device is iOS. False otherwise. + * @property {Boolean} DeviceProperties.isMobile - True if the device is a mobile one. + * False otherwise. + * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one. + * False otherwise. + */ class ModalDialog { + /** + * @classdesc + * This class represents a modal dialog. The modal dialog admits + * a {@link ContentManager} instance to manage the content of the dialog. + * @constructs + * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes. + */ constructor(modalDialogAttributes){ + this.attributes = modalDialogAttributes; + // Metrics. + const ua = navigator.userAgent.toLowerCase(); + const isAndroid = ua.indexOf("android") > -1; + const isIOS = ContentManager.isIOS(); + this.iosSoftkeyboardOpened = false; + this.iosMeasureUnit = ua.indexOf("crios") === -1 ? "%" : "vh"; + this.iosDivHeight = `100%${this.iosMeasureUnit}`; + const deviceWidth = window.outerWidth; + const deviceHeight = window.outerHeight; + const landscape = deviceWidth > deviceHeight; + const portrait = deviceWidth < deviceHeight; + // TODO: Detect isMobile without using editor metrics. + landscape && this.attributes.height > deviceHeight; + portrait && this.attributes.width > deviceWidth; + const isMobile = ContentManager.isMobile(); + // Obtain number of current instance. + this.instanceId = document.getElementsByClassName("wrs_modal_dialogContainer").length; + // Device object properties. + /** + * @type {DeviceProperties} + */ this.deviceProperties = { + orientation: landscape ? "landscape" : "portrait", + isAndroid, + isIOS, + isMobile, + isDesktop: !isMobile && !isIOS && !isAndroid + }; + this.properties = { + created: false, + state: "", + previousState: "", + position: { + bottom: 0, + right: 10 + }, + size: { + height: 338, + width: 580 + } + }; + /** + * Object to keep website's style before change it on lock scroll for mobile devices. + * @type {Object} + * @property {String} bodyStylePosition - Previous body style position. + * @property {String} bodyStyleOverflow - Previous body style overflow. + * @property {String} htmlStyleOverflow - Previous body style overflow. + * @property {String} windowScrollX - Previous window's scroll Y. + * @property {String} windowScrollY - Previous window's scroll X. + */ this.websiteBeforeLockParameters = null; + let attributes = {}; + attributes.class = "wrs_modal_overlay"; + attributes.id = this.getElementId(attributes.class); + this.overlay = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_title_bar"; + attributes.id = this.getElementId(attributes.class); + this.titleBar = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_title"; + attributes.id = this.getElementId(attributes.class); + this.title = Util.createElement("div", attributes); + this.title.innerHTML = "offline"; + attributes = {}; + attributes.class = "wrs_modal_close_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("close"); + attributes.style = {}; + this.closeDiv = Util.createElement("a", attributes); + this.closeDiv.setAttribute("role", "button"); + this.closeDiv.setAttribute("tabindex", 3); + // Apply styles and events after the creation as createElement doesn't process them correctly + let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`; + let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`; + this.closeDiv.setAttribute("style", generalStyle); + this.closeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.closeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // To identifiy the element in automated testing + this.closeDiv.setAttribute("data-testid", "mtcteditor-close-button"); + attributes = {}; + attributes.class = "wrs_modal_stack_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("exit_fullscreen"); + this.stackDiv = Util.createElement("a", attributes); + this.stackDiv.setAttribute("role", "button"); + this.stackDiv.setAttribute("tabindex", 2); + generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`; + hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`; + this.stackDiv.setAttribute("style", generalStyle); + this.stackDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.stackDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // To identifiy the element in automated testing + this.stackDiv.setAttribute("data-testid", "mtcteditor-fullscreen-disable-button"); + attributes = {}; + attributes.class = "wrs_modal_maximize_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("fullscreen"); + this.maximizeDiv = Util.createElement("a", attributes); + this.maximizeDiv.setAttribute("role", "button"); + this.maximizeDiv.setAttribute("tabindex", 2); + generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`; + hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`; + this.maximizeDiv.setAttribute("style", generalStyle); + this.maximizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.maximizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // To identifiy the element in automated testing + this.maximizeDiv.setAttribute("data-testid", "mtcteditor-fullscreen-enable-button"); + attributes = {}; + attributes.class = "wrs_modal_minimize_button"; + attributes.id = this.getElementId(attributes.class); + attributes.title = StringManager.get("minimize"); + this.minimizeDiv = Util.createElement("a", attributes); + this.minimizeDiv.setAttribute("role", "button"); + this.minimizeDiv.setAttribute("tabindex", 1); + generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; + hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // To identify the element in automated testing + this.minimizeDiv.setAttribute("data-testid", "mtcteditor-minimize-button"); + attributes = {}; + attributes.class = "wrs_modal_dialogContainer"; + attributes.id = this.getElementId(attributes.class); + attributes.role = "dialog"; + this.container = Util.createElement("div", attributes); + this.container.setAttribute("aria-labeledby", "wrs_modal_title[0]"); + attributes = {}; + attributes.class = "wrs_modal_wrapper"; + attributes.id = this.getElementId(attributes.class); + this.wrapper = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_content_container"; + attributes.id = this.getElementId(attributes.class); + this.contentContainer = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_controls"; + attributes.id = this.getElementId(attributes.class); + this.controls = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_buttons_container"; + attributes.id = this.getElementId(attributes.class); + this.buttonContainer = Util.createElement("div", attributes); + // Buttons: all button must be created using createSubmitButton method. + this.submitButton = this.createSubmitButton({ + id: this.getElementId("wrs_modal_button_accept"), + class: "wrs_modal_button_accept", + innerHTML: StringManager.get("accept"), + // To identifiy the element in automated testing + "data-testid": "mtcteditor-insert-button" + }, this.submitAction.bind(this)); + this.cancelButton = this.createSubmitButton({ + id: this.getElementId("wrs_modal_button_cancel"), + class: "wrs_modal_button_cancel", + innerHTML: StringManager.get("cancel"), + // To identifiy the element in automated testing + "data-testid": "mtcteditor-cancel-button" + }, this.cancelAction.bind(this)); + this.contentManager = null; + // Overlay popup. + const popupStrings = { + cancelString: StringManager.get("cancel"), + submitString: StringManager.get("close"), + message: StringManager.get("close_modal_warning") + }; + const callbacks = { + closeCallback: ()=>{ + this.close("mtc_close"); + }, + cancelCallback: ()=>{ + this.focus(); + } + }; + const popupupProperties = { + overlayElement: this.container, + callbacks, + strings: popupStrings + }; + this.popup = new PopUpMessage(popupupProperties); + /** + * Indicates if directionality of the modal dialog is RTL. false by default. + * @type {Boolean} + */ this.rtl = false; + if ("rtl" in this.attributes) { + this.rtl = this.attributes.rtl; + } + // Event handlers need modal instance context. + this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this); + this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this); + } + /** + * This method sets an ContentManager instance to ModalDialog. ContentManager + * manages the logic of ModalDialog content: submit, update, close and changes. + * @param {ContentManager} contentManager - ContentManager instance. + */ setContentManager(contentManager) { + this.contentManager = contentManager; + } + /** + * Returns the modal contentElement object. + * @returns {ContentManager} the instance of the ContentManager class. + */ getContentManager() { + return this.contentManager; + } + /** + * This method is called when the modal object has been submitted. Calls + * contentElement submitAction method - if exists - and closes the modal + * object. No logic about the content should be placed here, + * contentElement.submitAction is the responsible of the content logic. + */ async submitAction() { + if (typeof this.contentManager.submitAction !== "undefined") { + this.contentManager.submitAction(); + } + await this.close("mtc_insert"); + } + /** + * Performs the cancel action. + * If there are no changes in the content, it closes the modal. + * Otherwise, it shows a pop-up message to confirm the cancel action. + * @returns {Promise} - A promise that resolves when the modal is closed. + */ async cancelAction() { + if (typeof this.contentManager.hasChanges === "undefined" || !this.contentManager.hasChanges()) { + IntegrationModel.setActionsOnCancelButtons(); + await this.close("mtc_close"); + } else { + this.showPopUpMessage(); + } + } + /** + * Returns a button element. + * @param {Object} properties - Input button properties. + * @param {String} properties.class - Input button class. + * @param {String} properties.innerHTML - Input button innerHTML. + * @param {Object} callback - Callback function associated to click event. + * @returns {HTMLButtonElement} The button element. + * + */ // eslint-disable-next-line class-methods-use-this + createSubmitButton(properties, callback) { + class SubmitButton { + constructor(){ + this.element = document.createElement("button"); + this.element.id = properties.id; + this.element.className = properties.class; + this.element.innerHTML = properties.innerHTML; + this.element.dataset.testid = properties["data-testid"]; + Util.addEvent(this.element, "click", callback); + } + getElement() { + return this.element; + } + } + return new SubmitButton(properties, callback).getElement(); + } + /** + * Creates the modal window object inserting a contentElement object. + */ create() { + /* Modal Window Structure _____________________________________________________________________________________ |wrs_modal_dialog_Container | | _________________________________________________________________________________ | @@ -8168,3353 +7950,3270 @@ | | | |_|_____________ |______________|_| | | | | | |___________________________________________________________________________| | | | |_______________________________________________________________________________| | - |___________________________________________________________________________________| */ this.titleBar.appendChild( - this.closeDiv, - ); - this.titleBar.appendChild(this.stackDiv); - this.titleBar.appendChild(this.maximizeDiv); - this.titleBar.appendChild(this.minimizeDiv); - this.titleBar.appendChild(this.title); - if (this.deviceProperties.isDesktop) { - this.container.appendChild(this.titleBar); - } - this.wrapper.appendChild(this.contentContainer); - this.wrapper.appendChild(this.controls); - this.controls.appendChild(this.buttonContainer); - this.buttonContainer.appendChild(this.submitButton); - this.buttonContainer.appendChild(this.cancelButton); - this.container.appendChild(this.wrapper); - // Check if browser has scrollBar before modal has modified. - this.recalculateScrollBar(); - document.body.appendChild(this.container); - document.body.appendChild(this.overlay); - if (this.deviceProperties.isDesktop) { - // Desktop. - this.createModalWindowDesktop(); - this.createResizeButtons(); - this.addListeners(); - // Maximize window only when the configuration is set and the device is not iOS or Android. - if (Configuration.get("modalWindowFullScreen")) { - this.maximize(); - } - } else if (this.deviceProperties.isAndroid) { - this.createModalWindowAndroid(); - } else if (this.deviceProperties.isIOS) { - this.createModalWindowIos(); - } - if (this.contentManager != null) { - this.contentManager.insert(this); - } - this.properties.open = true; - this.properties.created = true; - // Checks language directionality. - if (this.isRTL()) { - this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`; - this.container.className += " wrs_modal_rtl"; - } - } - /** - * Creates a button in the modal object to resize it. - */ createResizeButtons() { - // This is a definition of Resize Button Bottom-Right. - this.resizerBR = document.createElement("div"); - this.resizerBR.className = "wrs_bottom_right_resizer"; - this.resizerBR.innerHTML = "◢"; - // To identifiy the element in automated testing - this.resizerBR.dataset.testid = "mtcteditor-resize-button-right"; - // This is a definition of Resize Button Top-Left. - this.resizerTL = document.createElement("div"); - this.resizerTL.className = "wrs_bottom_left_resizer"; - // To identifiy the element in automated testing - this.resizerTL.dataset.testid = "mtcteditor-resize-button-left"; - // Append resize buttons to modal. - this.container.appendChild(this.resizerBR); - this.titleBar.appendChild(this.resizerTL); - // Add events to resize on click and drag. - Util.addEvent(this.resizerBR, "mousedown", this.activateResizeStateBR.bind(this)); - Util.addEvent(this.resizerTL, "mousedown", this.activateResizeStateTL.bind(this)); - } - /** - * Initialize variables for Bottom-Right resize button - * @param {MouseEvent} mouseEvent - Mouse event. - */ activateResizeStateBR(mouseEvent) { - this.initializeResizeProperties(mouseEvent, false); - } - /** - * Initialize variables for Top-Left resize button - * @param {MouseEvent} mouseEvent - Mouse event. - */ activateResizeStateTL(mouseEvent) { - this.initializeResizeProperties(mouseEvent, true); - } - /** - * Common method to initialize variables at resize. - * @param {MouseEvent} mouseEvent - Mouse event. - */ initializeResizeProperties(mouseEvent, leftOption) { - // Apply class for disable involuntary select text when drag. - Util.addClass(document.body, "wrs_noselect"); - Util.addClass(this.overlay, "wrs_overlay_active"); - this.resizeDataObject = { - x: this.eventClient(mouseEvent).X, - y: this.eventClient(mouseEvent).Y, - }; - // Save Initial state of modal to compare on drag and obtain the difference. - this.initialWidth = parseInt(this.container.style.width, 10); - this.initialHeight = parseInt(this.container.style.height, 10); - if (!leftOption) { - this.initialRight = parseInt(this.container.style.right, 10); - this.initialBottom = parseInt(this.container.style.bottom, 10); - } else { - this.leftScale = true; - } - if (!this.initialRight) { - this.initialRight = 0; - } - if (!this.initialBottom) { - this.initialBottom = 0; - } - // Disable mouse events on editor when we start to drag modal. - document.body.style["user-select"] = "none"; - } - /** - * This method opens the modal window, restoring the previous state, position and metrics, - * if exists. By default the modal object opens in stack mode. - */ open() { - // Removing close class. - this.removeClass("wrs_closed"); - // Hiding keyboard for mobile devices. - const { isIOS } = this.deviceProperties; - const { isAndroid } = this.deviceProperties; - const { isMobile } = this.deviceProperties; - if (isIOS || isAndroid || isMobile) { - // Restore scale to 1. - this.restoreWebsiteScale(); - this.lockWebsiteScroll(); - // Due to editor wait we need to wait until editor focus. - setTimeout(() => { - this.hideKeyboard(); - }, 400); - } - // New modal window. He need to create the whole object. - if (!this.properties.created) { - this.create(); - } else { - // Previous state closed. Open method can be called even the previous state is open, - // for example updating the content of the modal object. - if (!this.properties.open) { - this.properties.open = true; - // Restoring the previous open state: if the modal object has been closed - // re-open it should preserve the state and the metrics. - if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) { - this.restoreState(); - } - } - // Maximize window only when the configuration is set and the device is not iOs or Android. - if (this.deviceProperties.isDesktop && Configuration.get("modalWindowFullScreen")) { - this.maximize(); - } - // In iOS we need to recalculate the size of the modal object because - // iOS keyboard is a float div which can overlay the modal object. - if (this.deviceProperties.isIOS) { - this.iosSoftkeyboardOpened = false; - this.setContainerHeight(`${100 + this.iosMeasureUnit}`); - } - } - if (!ContentManager.isEditorLoaded()) { - const listener = Listeners.newListener("onLoad", () => { - this.contentManager.onOpen(this); - }); - this.contentManager.addListener(listener); - } else { - this.contentManager.onOpen(this); - } - } - /** - * Closes the modal. - * Removes specific CSS classes, saves modal properties, unlocks website scroll, - * sets the 'open' property to false, and triggers the 'onModalClose' event. - * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger. - * @returns {Promise} A promise that resolves when the modal is closed. - */ async close(trigger) { - this.removeClass("wrs_maximized"); - this.removeClass("wrs_minimized"); - this.removeClass("wrs_stack"); - this.addClass("wrs_closed"); - this.saveModalProperties(); - this.unlockWebsiteScroll(); - this.properties.open = false; - if (trigger) { - try { - await Telemeter.telemeter.track("CLOSED_MTCT_EDITOR", { - toolbar: this.contentManager.toolbar, - trigger: trigger, - }); - } catch (error) { - console.error("Error tracking CLOSED_MTCT_EDITOR", error); - } - } - Core.globalListeners.fire("onModalClose", {}); - } - /** - * Closes modal window and destroys the object. - */ destroy() { - // Close modal window. - this.close(); - // Remove listeners and destroy the object. - this.removeListeners(); - this.overlay.remove(); - this.container.remove(); - // Reset properties to allow open again. - this.properties.created = false; - } - /** - * Sets the website scale to one. - */ // eslint-disable-next-line class-methods-use-this - restoreWebsiteScale() { - let viewportmeta = document.querySelector("meta[name=viewport]"); - // Let the equal symbols in order to search and make meta's final content. - const contentAttrsToUpdate = ["initial-scale=", "minimum-scale=", "maximum-scale="]; - const contentAttrsValuesToUpdate = ["1.0", "1.0", "1.0"]; - const setMetaAttrFunc = (viewportelement, contentAttrs) => { - const contentAttr = viewportelement.getAttribute("content"); - // If it exists, we need to maintain old values and put our values. - if (contentAttr) { - const attrArray = contentAttr.split(","); - let finalContentMeta = ""; - const oldAttrs = []; - for (let i = 0; i < attrArray.length; i += 1) { - let isAttrToUpdate = false; - let j = 0; - while (!isAttrToUpdate && j < contentAttrs.length) { - if (attrArray[i].indexOf(contentAttrs[j])) { - isAttrToUpdate = true; - } - j += 1; - } - if (!isAttrToUpdate) { - oldAttrs.push(attrArray[i]); - } - } - for (let i = 0; i < contentAttrs.length; i += 1) { - const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i]; - finalContentMeta += i === 0 ? attr : `,${attr}`; - } - for (let i = 0; i < oldAttrs.length; i += 1) { - finalContentMeta += `,${oldAttrs[i]}`; - } - viewportelement.setAttribute("content", finalContentMeta); - // It needs to set to empty because setAttribute refresh only when attribute is different. - viewportelement.setAttribute("content", ""); - viewportelement.setAttribute("content", contentAttr); - } else { - viewportelement.setAttribute("content", "initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"); - viewportelement.removeAttribute("content"); - } - }; - if (!viewportmeta) { - viewportmeta = document.createElement("meta"); - document.getElementsByTagName("head")[0].appendChild(viewportmeta); - setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); - viewportmeta.remove(); - } else { - setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); - } - } - /** - * Locks website scroll for mobile devices. - */ lockWebsiteScroll() { - this.websiteBeforeLockParameters = { - bodyStylePosition: document.body.style.position ? document.body.style.position : "", - bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : "", - htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : "", - windowScrollX: window.scrollX, - windowScrollY: window.scrollY, - }; - } - /** - * Unlocks website scroll for mobile devices. - */ unlockWebsiteScroll() { - if (this.websiteBeforeLockParameters) { - document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition; - document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow; - document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow; - const { windowScrollX } = this.websiteBeforeLockParameters; - const { windowScrollY } = this.websiteBeforeLockParameters; - window.scrollTo(windowScrollX, windowScrollY); - this.websiteBeforeLockParameters = null; - } - } - /** - * Util function to known if browser is IE11. - * @returns {Boolean} true if the browser is IE11. false otherwise. - */ // eslint-disable-next-line class-methods-use-this - isIE11() { - if ( - navigator.userAgent.search("Msie/") >= 0 || - navigator.userAgent.search("Trident/") >= 0 || - navigator.userAgent.search("Edge/") >= 0 - ) { - return true; - } - return false; - } - /** - * Returns if the current language type is RTL. - * @return {Boolean} true if current language is RTL. false otherwise. - */ isRTL() { - if (this.attributes.language === "ar" || this.attributes.language === "he") { - return true; - } - return this.rtl; - } - /** - * Adds a class to all modal ModalDialog DOM elements. - * @param {String} className - Class name. - */ addClass(className) { - Util.addClass(this.overlay, className); - Util.addClass(this.titleBar, className); - Util.addClass(this.overlay, className); - Util.addClass(this.container, className); - Util.addClass(this.contentContainer, className); - Util.addClass(this.stackDiv, className); - Util.addClass(this.minimizeDiv, className); - Util.addClass(this.maximizeDiv, className); - Util.addClass(this.wrapper, className); - } - /** - * Remove a class from all modal DOM elements. - * @param {String} className - Class name. - */ removeClass(className) { - Util.removeClass(this.overlay, className); - Util.removeClass(this.titleBar, className); - Util.removeClass(this.overlay, className); - Util.removeClass(this.container, className); - Util.removeClass(this.contentContainer, className); - Util.removeClass(this.stackDiv, className); - Util.removeClass(this.minimizeDiv, className); - Util.removeClass(this.maximizeDiv, className); - Util.removeClass(this.wrapper, className); - } - /** - * Create modal dialog for desktop. - */ createModalWindowDesktop() { - this.addClass("wrs_modal_desktop"); - this.stack(); - } - /** - * Create modal dialog for non android devices. - */ createModalWindowAndroid() { - this.addClass("wrs_modal_android"); - window.addEventListener("resize", this.orientationChangeAndroidSoftkeyboard.bind(this)); - } - /** - * Create modal dialog for iOS devices. - */ createModalWindowIos() { - this.addClass("wrs_modal_ios"); - // Refresh the size when the orientation is changed. - window.addEventListener("resize", this.orientationChangeIosSoftkeyboard.bind(this)); - } - /** - * Restore previous state, position and size of previous stacked modal dialog. - */ restoreState() { - if (this.properties.state === "maximized") { - // Reset states for prevent return to stack state. - this.maximize(); - } else if (this.properties.state === "minimized") { - // Reset states for prevent return to stack state. - this.properties.state = this.properties.previousState; - this.properties.previousState = ""; - this.minimize(); - } else { - this.stack(); - } - } - /** - * Stacks the modal object. - */ stack() { - this.properties.previousState = this.properties.state; - this.properties.state = "stack"; - this.removeClass("wrs_maximized"); - this.minimizeDiv.title = StringManager.get("minimize"); - this.removeClass("wrs_minimized"); - this.addClass("wrs_stack"); - // Change maximize/minimize icon to minimize icon - const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; - const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - this.restoreModalProperties(); - if (typeof this.resizerBR !== "undefined" && typeof this.resizerTL !== "undefined") { - this.setResizeButtonsVisibility(); - } - // Need recalculate position of actual modal because window can was changed in fullscreenmode. - this.recalculateScrollBar(); - this.recalculatePosition(); - this.recalculateScale(); - this.focus(); - } - /** - * Minimizes the modal object. - */ minimize() { - // Saving width, height, top and bottom parameters to restore when opening. - this.saveModalProperties(); - this.title.style.cursor = "pointer"; - if (this.properties.state === "minimized" && this.properties.previousState === "stack") { - this.stack(); - } else if (this.properties.state === "minimized" && this.properties.previousState === "maximized") { - this.maximize(); - } else { - // Setting css to prevent important tag into css style. - this.container.style.height = "30px"; - this.container.style.width = "250px"; - this.container.style.bottom = "0px"; - this.container.style.right = "10px"; - this.removeListeners(); - this.properties.previousState = this.properties.state; - this.properties.state = "minimized"; - this.setResizeButtonsVisibility(); - this.minimizeDiv.title = StringManager.get("maximize"); - if (Util.containsClass(this.overlay, "wrs_stack")) { - this.removeClass("wrs_stack"); - } else { - this.removeClass("wrs_maximized"); - } - this.addClass("wrs_minimized"); - // Change minimize icon to maximize icon - const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`; - const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - } - } - /** - * Maximizes the modal object. - */ maximize() { - // Saving width, height, top and bottom parameters to restore when opening. - this.saveModalProperties(); - if (this.properties.state !== "maximized") { - this.properties.previousState = this.properties.state; - this.properties.state = "maximized"; - } - // Don't permit resize on maximize mode. - this.setResizeButtonsVisibility(); - if (Util.containsClass(this.overlay, "wrs_minimized")) { - this.minimizeDiv.title = StringManager.get("minimize"); - this.removeClass("wrs_minimized"); - } else if (Util.containsClass(this.overlay, "wrs_stack")) { - this.container.style.left = null; - this.container.style.top = null; - this.removeClass("wrs_stack"); - } - this.addClass("wrs_maximized"); - // Change maximize icon to minimize icon - const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; - const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; - this.minimizeDiv.setAttribute("style", generalStyle); - this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); - this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); - // Set size to 80% screen with a max size. - this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10)); - if (this.container.clientHeight > 700) { - this.container.style.height = "700px"; - } - if (this.container.clientWidth > 1200) { - this.container.style.width = "1200px"; - } - // Setting modal position in center on screen. - const { innerHeight } = window; - const { innerWidth } = window; - const { offsetHeight } = this.container; - const { offsetWidth } = this.container; - const bottom = innerHeight / 2 - offsetHeight / 2; - const right = innerWidth / 2 - offsetWidth / 2; - this.setPosition(bottom, right); - this.recalculateScale(); - this.recalculatePosition(); - this.recalculateSize(); - this.focus(); - } - /** - * Expand again the modal object from a minimized state. - */ reExpand() { - if (this.properties.state === "minimized") { - if (this.properties.previousState === "maximized") { - this.maximize(); - } else { - this.stack(); - } - this.title.style.cursor = ""; - } - } - /** - * Sets modal size. - * @param {Number} height - Height of the ModalDialog - * @param {Number} width - Width of the ModalDialog. - */ setSize(height, width) { - this.container.style.height = `${height}px`; - this.container.style.width = `${width}px`; - this.recalculateSize(); - } - /** - * Sets modal position using bottom and right style attributes. - * @param {number} bottom - bottom attribute. - * @param {number} right - right attribute. - */ setPosition(bottom, right) { - this.container.style.bottom = `${bottom}px`; - this.container.style.right = `${right}px`; - } - /** - * Saves position and size parameters of and open ModalDialog. This attributes - * are needed to restore it on re-open. - */ saveModalProperties() { - // Saving values of modal only when modal is in stack state. - if (this.properties.state === "stack") { - this.properties.position.bottom = parseInt(this.container.style.bottom, 10); - this.properties.position.right = parseInt(this.container.style.right, 10); - this.properties.size.width = parseInt(this.container.style.width, 10); - this.properties.size.height = parseInt(this.container.style.height, 10); - } - } - /** - * Restore ModalDialog position and size parameters. - */ restoreModalProperties() { - if (this.properties.state === "stack") { - // Restoring Bottom and Right values from last modal. - this.setPosition(this.properties.position.bottom, this.properties.position.right); - // Restoring Height and Left values from last modal. - this.setSize(this.properties.size.height, this.properties.size.width); - } - } - /** - * Sets the modal dialog initial size. - */ recalculateSize() { - this.wrapper.style.width = `${this.container.clientWidth - 12}px`; - this.wrapper.style.height = `${this.container.clientHeight - 38}px`; - this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`; - } - /** - * Enable or disable visibility of resize buttons in modal window depend on state. - */ setResizeButtonsVisibility() { - if (this.properties.state === "stack") { - this.resizerTL.style.visibility = "visible"; - this.resizerBR.style.visibility = "visible"; - } else { - this.resizerTL.style.visibility = "hidden"; - this.resizerBR.style.visibility = "hidden"; - } - } - /** - * Makes an object draggable adding mouse and touch events. - */ addListeners() { - // Button events (maximize, minimize, stack and close). - this.maximizeDiv.addEventListener("click", this.maximize.bind(this), true); - this.stackDiv.addEventListener("click", this.stack.bind(this), true); - this.minimizeDiv.addEventListener("click", this.minimize.bind(this), true); - this.closeDiv.addEventListener("click", this.cancelAction.bind(this)); - this.maximizeDiv.addEventListener( - "keypress", - function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - } - }, - true, - ); - this.stackDiv.addEventListener( - "keypress", - function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - e.preventDefault(); - } - }, - true, - ); - this.minimizeDiv.addEventListener( - "keypress", - function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - e.preventDefault(); - } - }, - true, - ); - this.closeDiv.addEventListener("keypress", function (e) { - if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { - // Handle enter and space. - e.target.click(); - e.preventDefault(); - } - }); - this.title.addEventListener("click", this.reExpand.bind(this)); - // Overlay events (close). - this.overlay.addEventListener("click", this.cancelAction.bind(this)); - // Mouse events. - Util.addEvent(window, "mousedown", this.startDrag.bind(this)); - Util.addEvent(window, "mouseup", this.stopDrag.bind(this)); - Util.addEvent(window, "mousemove", this.drag.bind(this)); - Util.addEvent(window, "resize", this.onWindowResize.bind(this)); - // Key events. - Util.addEvent(window, "keydown", this.onKeyDown.bind(this)); - } - /** - * Removes draggable events from an object. - */ removeListeners() { - // Mouse events. - Util.removeEvent(window, "mousedown", this.startDrag); - Util.removeEvent(window, "mouseup", this.stopDrag); - Util.removeEvent(window, "mousemove", this.drag); - Util.removeEvent(window, "resize", this.onWindowResize); - // Key events. - Util.removeEvent(window, "keydown", this.onKeyDown); - } - /** - * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists) - * @param {MouseEvent} mouseEvent - Mouse event. - * @return {Object} With the X and Y coordinates. - */ // eslint-disable-next-line class-methods-use-this - eventClient(mouseEvent) { - if (typeof mouseEvent.clientX === "undefined" && mouseEvent.changedTouches) { - const client = { - X: mouseEvent.changedTouches[0].clientX, - Y: mouseEvent.changedTouches[0].clientY, - }; - return client; - } - const client = { - X: mouseEvent.clientX, - Y: mouseEvent.clientY, - }; - return client; - } - /** - * Start drag function: set the object dragDataObject with the draggable - * object offsets coordinates. - * when drag starts (on touchstart or mousedown events). - * @param {MouseEvent} mouseEvent - Touchstart or mousedown event. - */ startDrag(mouseEvent) { - if (this.properties.state === "minimized") { - return; - } - if (mouseEvent.target === this.title) { - if (typeof this.dragDataObject === "undefined" || this.dragDataObject === null) { - // Save first click mouse point on screen. - this.dragDataObject = { - x: this.eventClient(mouseEvent).X, - y: this.eventClient(mouseEvent).Y, - }; - // Reset last drag position when start drag. - this.lastDrag = { - x: "0px", - y: "0px", - }; - // Init right and bottom values for window modal if it isn't exist. - if (this.container.style.right === "") { - this.container.style.right = "0px"; - } - if (this.container.style.bottom === "") { - this.container.style.bottom = "0px"; - } - // Needed for IE11 for apply disabled mouse events on editor because - // internet explorer needs a dynamic object to apply this property. - if (this.isIE11()); - // Apply class for disable involuntary select text when drag. - Util.addClass(document.body, "wrs_noselect"); - Util.addClass(this.overlay, "wrs_overlay_active"); - // Obtain screen limits for prevent overflow. - this.limitWindow = this.getLimitWindow(); - } - } - } - /** - * Updates dragDataObject with the draggable object coordinates when - * the draggable object is being moved. - * @param {MouseEvent} mouseEvent - The mouse event. - */ drag(mouseEvent) { - if (this.dragDataObject) { - mouseEvent.preventDefault(); - // Calculate max and min between actual mouse position and limit of screeen. - // It restric the movement of modal into window. - let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y); - limitY = Math.max(this.limitWindow.maxPointer.y, limitY); - let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x); - limitX = Math.max(this.limitWindow.maxPointer.x, limitX); - // Subtract limit with first position to obtain relative pixels increment - // to the anchor point. - const dragX = `${limitX - this.dragDataObject.x}px`; - const dragY = `${limitY - this.dragDataObject.y}px`; - // Save last valid position of modal before window overflow. - this.lastDrag = { - x: dragX, - y: dragY, - }; - // This move modal with hardware acceleration. - this.container.style.transform = `translate3d(${dragX},${dragY},0)`; - } - if (this.resizeDataObject) { - const { innerWidth } = window; - const { innerHeight } = window; - let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7); - let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7); - if (limitX < 0) { - limitX = 0; - } - if (limitY < 0) { - limitY = 0; - } - let scaleMultiplier; - if (this.leftScale) { - scaleMultiplier = -1; - } else { - scaleMultiplier = 1; - } - this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`; - this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`; - if (!this.leftScale) { - if (this.resizeDataObject.x - limitX - this.initialWidth < -580) { - this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`; - } else { - this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`; - this.container.style.width = "580px"; - } - if (this.resizeDataObject.y - limitY < this.initialHeight - 338) { - this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`; - } else { - this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`; - this.container.style.height = "338px"; - } - } - this.recalculateScale(); - this.recalculatePosition(); - } - } - /** - * Returns the boundaries of actual window to limit modal movement. - * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen. - */ getLimitWindow() { - // Obtain dimensions of window page. - const maxWidth = window.innerWidth; - const maxHeight = window.innerHeight; - // Calculate relative position of mouse point into window. - const { offsetHeight } = this.container; - const contStyleBottom = parseInt(this.container.style.bottom, 10); - const contStyleRight = parseInt(this.container.style.right, 10); - const { pageXOffset } = window; - const dragY = this.dragDataObject.y; - const dragX = this.dragDataObject.x; - const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset)); - const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight; - // Calculate limits with sizes of window, modal and mouse position. - const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY; - const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY); - const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth; - const maxPointerX = this.container.offsetWidth - offSetToolbarX; - const minPointer = { - x: minPointerX, - y: minPointerY, - }; - const maxPointer = { - x: maxPointerX, - y: maxPointerY, - }; - return { - minPointer, - maxPointer, - }; - } - /** - * Returns the scrollbar width size of browser - * @returns {Number} The scrollbar width. - */ // eslint-disable-next-line class-methods-use-this - getScrollBarWidth() { - // Create a paragraph with full width of page. - const inner = document.createElement("p"); - inner.style.width = "100%"; - inner.style.height = "200px"; - // Create a hidden div to compare sizes. - const outer = document.createElement("div"); - outer.style.position = "absolute"; - outer.style.top = "0px"; - outer.style.left = "0px"; - outer.style.visibility = "hidden"; - outer.style.width = "200px"; - outer.style.height = "150px"; - outer.style.overflow = "hidden"; - outer.appendChild(inner); - document.body.appendChild(outer); - const widthOuter = inner.offsetWidth; - // Change type overflow of paragraph for measure scrollbar. - outer.style.overflow = "scroll"; - let widthInner = inner.offsetWidth; - // If measure is the same, we compare with internal div. - if (widthOuter === widthInner) { - widthInner = outer.clientWidth; - } - document.body.removeChild(outer); - return widthOuter - widthInner; - } - /** - * Set the dragDataObject to null. - */ stopDrag() { - // Due to we have multiple events that call this function, we need only to execute - // the next modifiers one time, - // when the user stops to drag and dragDataObject is not null (the object to drag is attached). - if (this.dragDataObject || this.resizeDataObject) { - // If modal doesn't change, it's not necessary to set position with interpolation. - this.container.style.transform = ""; - if (this.dragDataObject) { - this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`; - this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`; - } - // We make focus on editor after drag modal windows to prevent lose focus. - this.focus(); - // Restore mouse events on iframe. - // this.iframe.style['pointer-events'] = 'auto'; - document.body.style["user-select"] = ""; - // Restore static state of iframe if we use Internet Explorer. - if (this.isIE11()); - // Active text select event. - Util.removeClass(document.body, "wrs_noselect"); - Util.removeClass(this.overlay, "wrs_overlay_active"); - } - this.dragDataObject = null; - this.resizeDataObject = null; - this.initialWidth = null; - this.leftScale = null; - } - /** - * Recalculates scale for modal when resize browser window. - */ onWindowResize() { - this.recalculateScrollBar(); - this.recalculatePosition(); - this.recalculateScale(); - } - /** - * Triggers keyboard events: - * - Tab key tab to go to submit button. - * - Esc key to close the modal dialog. - * @param {KeyboardEvent} keyboardEvent - The keyboard event. - */ onKeyDown(keyboardEvent) { - if (keyboardEvent.key !== undefined) { - // Popupmessage is not oppened. - if (this.popup.overlayWrapper.style.display !== "block") { - // Code to detect Esc event - if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { - if (this.properties.open) { - this.contentManager.onKeyDown(keyboardEvent); - } - } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { - // Code to detect shift Tab event. - if (document.activeElement === this.cancelButton) { - this.submitButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else { - this.contentManager.onKeyDown(keyboardEvent); - } - } else if (keyboardEvent.key === "Tab") { - // Code to detect Tab event. - if (document.activeElement === this.submitButton) { - this.cancelButton.focus(); - keyboardEvent.stopPropagation(); - keyboardEvent.preventDefault(); - } else { - this.contentManager.onKeyDown(keyboardEvent); - } - } - } else { - // Popupmessage oppened. - this.popup.onKeyDown(keyboardEvent); - } - } - } - /** - * Recalculating position for modal dialog when the browser is resized. - */ recalculatePosition() { - this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`; - if (parseInt(this.container.style.right, 10) < 0) { - this.container.style.right = "0px"; - } - this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`; - if (parseInt(this.container.style.bottom, 10) < 0) { - this.container.style.bottom = "0px"; - } - } - /** - * Recalculating scale for modal when the browser is resized. - */ recalculateScale() { - let sizeModified = false; - if (parseInt(this.container.style.width, 10) > 580) { - this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`; - sizeModified = true; - } else { - this.container.style.width = "580px"; - sizeModified = true; - } - if (parseInt(this.container.style.height, 10) > 338) { - this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`; - sizeModified = true; - } else { - this.container.style.height = "338px"; - sizeModified = true; - } - if (sizeModified) { - this.recalculateSize(); - } - } - /** - * Recalculating width of browser scroll bar. - */ recalculateScrollBar() { - this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth; - if (this.hasScrollBar) { - this.scrollbarWidth = this.getScrollBarWidth(); - } else { - this.scrollbarWidth = 0; - } - } - /** - * Hide soft keyboards on iOS devices. - */ // eslint-disable-next-line class-methods-use-this - hideKeyboard() { - // iOS keyboard can't be detected or hide directly from JavaScript. - // So, this method simulates that user focus a text input and blur - // the selection. - const inputField = document.createElement("input"); - this.container.appendChild(inputField); - inputField.focus(); - inputField.blur(); - // Is removed to not see it. - inputField.remove(); - } - /** - * Focus to contentManager object. - */ focus() { - if (this.contentManager != null && typeof this.contentManager.onFocus !== "undefined") { - this.contentManager.onFocus(); - } - } - /** - * Returns true when the device is on portrait mode. - */ // eslint-disable-next-line class-methods-use-this - portraitMode() { - return window.innerHeight > window.innerWidth; - } - /** - * Event handler that change container size when IOS soft keyboard is opened. - */ handleOpenedIosSoftkeyboard() { - if ( - !this.iosSoftkeyboardOpened && - this.iosDivHeight != null && - this.iosDivHeight === `100${this.iosMeasureUnit}` - ) { - if (this.portraitMode()) { - this.setContainerHeight(`63${this.iosMeasureUnit}`); - } else { - this.setContainerHeight(`40${this.iosMeasureUnit}`); - } - } - this.iosSoftkeyboardOpened = true; - } - /** - * Event handler that change container size when IOS soft keyboard is closed. - */ handleClosedIosSoftkeyboard() { - this.iosSoftkeyboardOpened = false; - this.setContainerHeight(`100${this.iosMeasureUnit}`); - } - /** - * Change container sizes when orientation is changed on iOS. - */ orientationChangeIosSoftkeyboard() { - if (this.iosSoftkeyboardOpened) { - if (this.portraitMode()) { - this.setContainerHeight(`63${this.iosMeasureUnit}`); - } else { - this.setContainerHeight(`40${this.iosMeasureUnit}`); - } - } else { - this.setContainerHeight(`100${this.iosMeasureUnit}`); - } - } - /** - * Change container sizes when orientation is changed on Android. - */ orientationChangeAndroidSoftkeyboard() { - this.setContainerHeight("100%"); - } - /** - * Set iframe container height. - * @param {Number} height - New height. - */ setContainerHeight(height) { - this.iosDivHeight = height; - this.wrapper.style.height = height; - } - /** - * Check content of editor before close action. - */ showPopUpMessage() { - if (this.properties.state === "minimized") { - this.stack(); - } - this.popup.show(); - } - /** - * Sets the title of the modal dialog. - * @param {String} title - Modal dialog title. - */ setTitle(title) { - this.title.innerHTML = title; - } - /** - * Returns the id of an element, adding the instance number to - * the element class name: - * className --> className[idNumber] - * @param {String} className - The element class name. - * @returns {String} A string appending the instance id to the className. - */ getElementId(className) { - return `${className}[${this.instanceId}]`; - } - } + |___________________________________________________________________________________| */ this.titleBar.appendChild(this.closeDiv); + this.titleBar.appendChild(this.stackDiv); + this.titleBar.appendChild(this.maximizeDiv); + this.titleBar.appendChild(this.minimizeDiv); + this.titleBar.appendChild(this.title); + if (this.deviceProperties.isDesktop) { + this.container.appendChild(this.titleBar); + } + this.wrapper.appendChild(this.contentContainer); + this.wrapper.appendChild(this.controls); + this.controls.appendChild(this.buttonContainer); + this.buttonContainer.appendChild(this.submitButton); + this.buttonContainer.appendChild(this.cancelButton); + this.container.appendChild(this.wrapper); + // Check if browser has scrollBar before modal has modified. + this.recalculateScrollBar(); + document.body.appendChild(this.container); + document.body.appendChild(this.overlay); + if (this.deviceProperties.isDesktop) { + // Desktop. + this.createModalWindowDesktop(); + this.createResizeButtons(); + this.addListeners(); + // Maximize window only when the configuration is set and the device is not iOS or Android. + if (Configuration.get("modalWindowFullScreen")) { + this.maximize(); + } + } else if (this.deviceProperties.isAndroid) { + this.createModalWindowAndroid(); + } else if (this.deviceProperties.isIOS) { + this.createModalWindowIos(); + } + if (this.contentManager != null) { + this.contentManager.insert(this); + } + this.properties.open = true; + this.properties.created = true; + // Checks language directionality. + if (this.isRTL()) { + this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`; + this.container.className += " wrs_modal_rtl"; + } + } + /** + * Creates a button in the modal object to resize it. + */ createResizeButtons() { + // This is a definition of Resize Button Bottom-Right. + this.resizerBR = document.createElement("div"); + this.resizerBR.className = "wrs_bottom_right_resizer"; + this.resizerBR.innerHTML = "◢"; + // To identifiy the element in automated testing + this.resizerBR.dataset.testid = "mtcteditor-resize-button-right"; + // This is a definition of Resize Button Top-Left. + this.resizerTL = document.createElement("div"); + this.resizerTL.className = "wrs_bottom_left_resizer"; + // To identifiy the element in automated testing + this.resizerTL.dataset.testid = "mtcteditor-resize-button-left"; + // Append resize buttons to modal. + this.container.appendChild(this.resizerBR); + this.titleBar.appendChild(this.resizerTL); + // Add events to resize on click and drag. + Util.addEvent(this.resizerBR, "mousedown", this.activateResizeStateBR.bind(this)); + Util.addEvent(this.resizerTL, "mousedown", this.activateResizeStateTL.bind(this)); + } + /** + * Initialize variables for Bottom-Right resize button + * @param {MouseEvent} mouseEvent - Mouse event. + */ activateResizeStateBR(mouseEvent) { + this.initializeResizeProperties(mouseEvent, false); + } + /** + * Initialize variables for Top-Left resize button + * @param {MouseEvent} mouseEvent - Mouse event. + */ activateResizeStateTL(mouseEvent) { + this.initializeResizeProperties(mouseEvent, true); + } + /** + * Common method to initialize variables at resize. + * @param {MouseEvent} mouseEvent - Mouse event. + */ initializeResizeProperties(mouseEvent, leftOption) { + // Apply class for disable involuntary select text when drag. + Util.addClass(document.body, "wrs_noselect"); + Util.addClass(this.overlay, "wrs_overlay_active"); + this.resizeDataObject = { + x: this.eventClient(mouseEvent).X, + y: this.eventClient(mouseEvent).Y + }; + // Save Initial state of modal to compare on drag and obtain the difference. + this.initialWidth = parseInt(this.container.style.width, 10); + this.initialHeight = parseInt(this.container.style.height, 10); + if (!leftOption) { + this.initialRight = parseInt(this.container.style.right, 10); + this.initialBottom = parseInt(this.container.style.bottom, 10); + } else { + this.leftScale = true; + } + if (!this.initialRight) { + this.initialRight = 0; + } + if (!this.initialBottom) { + this.initialBottom = 0; + } + // Disable mouse events on editor when we start to drag modal. + document.body.style["user-select"] = "none"; + } + /** + * This method opens the modal window, restoring the previous state, position and metrics, + * if exists. By default the modal object opens in stack mode. + */ open() { + // Removing close class. + this.removeClass("wrs_closed"); + // Hiding keyboard for mobile devices. + const { isIOS } = this.deviceProperties; + const { isAndroid } = this.deviceProperties; + const { isMobile } = this.deviceProperties; + if (isIOS || isAndroid || isMobile) { + // Restore scale to 1. + this.restoreWebsiteScale(); + this.lockWebsiteScroll(); + // Due to editor wait we need to wait until editor focus. + setTimeout(()=>{ + this.hideKeyboard(); + }, 400); + } + // New modal window. He need to create the whole object. + if (!this.properties.created) { + this.create(); + } else { + // Previous state closed. Open method can be called even the previous state is open, + // for example updating the content of the modal object. + if (!this.properties.open) { + this.properties.open = true; + // Restoring the previous open state: if the modal object has been closed + // re-open it should preserve the state and the metrics. + if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) { + this.restoreState(); + } + } + // Maximize window only when the configuration is set and the device is not iOs or Android. + if (this.deviceProperties.isDesktop && Configuration.get("modalWindowFullScreen")) { + this.maximize(); + } + // In iOS we need to recalculate the size of the modal object because + // iOS keyboard is a float div which can overlay the modal object. + if (this.deviceProperties.isIOS) { + this.iosSoftkeyboardOpened = false; + this.setContainerHeight(`${100 + this.iosMeasureUnit}`); + } + } + if (!ContentManager.isEditorLoaded()) { + const listener = Listeners.newListener("onLoad", ()=>{ + this.contentManager.onOpen(this); + }); + this.contentManager.addListener(listener); + } else { + this.contentManager.onOpen(this); + } + } + /** + * Closes the modal. + * Removes specific CSS classes, saves modal properties, unlocks website scroll, + * sets the 'open' property to false, and triggers the 'onModalClose' event. + * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger. + * @returns {Promise} A promise that resolves when the modal is closed. + */ async close(trigger) { + this.removeClass("wrs_maximized"); + this.removeClass("wrs_minimized"); + this.removeClass("wrs_stack"); + this.addClass("wrs_closed"); + this.saveModalProperties(); + this.unlockWebsiteScroll(); + this.properties.open = false; + if (trigger) { + try { + await Telemeter.telemeter.track("CLOSED_MTCT_EDITOR", { + toolbar: this.contentManager.toolbar, + trigger: trigger + }); + } catch (error) { + console.error("Error tracking CLOSED_MTCT_EDITOR", error); + } + } + Core.globalListeners.fire("onModalClose", {}); + } + /** + * Closes modal window and destroys the object. + */ destroy() { + // Close modal window. + this.close(); + // Remove listeners and destroy the object. + this.removeListeners(); + this.overlay.remove(); + this.container.remove(); + // Reset properties to allow open again. + this.properties.created = false; + } + /** + * Sets the website scale to one. + */ // eslint-disable-next-line class-methods-use-this + restoreWebsiteScale() { + let viewportmeta = document.querySelector("meta[name=viewport]"); + // Let the equal symbols in order to search and make meta's final content. + const contentAttrsToUpdate = [ + "initial-scale=", + "minimum-scale=", + "maximum-scale=" + ]; + const contentAttrsValuesToUpdate = [ + "1.0", + "1.0", + "1.0" + ]; + const setMetaAttrFunc = (viewportelement, contentAttrs)=>{ + const contentAttr = viewportelement.getAttribute("content"); + // If it exists, we need to maintain old values and put our values. + if (contentAttr) { + const attrArray = contentAttr.split(","); + let finalContentMeta = ""; + const oldAttrs = []; + for(let i = 0; i < attrArray.length; i += 1){ + let isAttrToUpdate = false; + let j = 0; + while(!isAttrToUpdate && j < contentAttrs.length){ + if (attrArray[i].indexOf(contentAttrs[j])) { + isAttrToUpdate = true; + } + j += 1; + } + if (!isAttrToUpdate) { + oldAttrs.push(attrArray[i]); + } + } + for(let i = 0; i < contentAttrs.length; i += 1){ + const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i]; + finalContentMeta += i === 0 ? attr : `,${attr}`; + } + for(let i = 0; i < oldAttrs.length; i += 1){ + finalContentMeta += `,${oldAttrs[i]}`; + } + viewportelement.setAttribute("content", finalContentMeta); + // It needs to set to empty because setAttribute refresh only when attribute is different. + viewportelement.setAttribute("content", ""); + viewportelement.setAttribute("content", contentAttr); + } else { + viewportelement.setAttribute("content", "initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"); + viewportelement.removeAttribute("content"); + } + }; + if (!viewportmeta) { + viewportmeta = document.createElement("meta"); + document.getElementsByTagName("head")[0].appendChild(viewportmeta); + setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); + viewportmeta.remove(); + } else { + setMetaAttrFunc(viewportmeta, contentAttrsToUpdate); + } + } + /** + * Locks website scroll for mobile devices. + */ lockWebsiteScroll() { + this.websiteBeforeLockParameters = { + bodyStylePosition: document.body.style.position ? document.body.style.position : "", + bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : "", + htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : "", + windowScrollX: window.scrollX, + windowScrollY: window.scrollY + }; + } + /** + * Unlocks website scroll for mobile devices. + */ unlockWebsiteScroll() { + if (this.websiteBeforeLockParameters) { + document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition; + document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow; + document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow; + const { windowScrollX } = this.websiteBeforeLockParameters; + const { windowScrollY } = this.websiteBeforeLockParameters; + window.scrollTo(windowScrollX, windowScrollY); + this.websiteBeforeLockParameters = null; + } + } + /** + * Util function to known if browser is IE11. + * @returns {Boolean} true if the browser is IE11. false otherwise. + */ // eslint-disable-next-line class-methods-use-this + isIE11() { + if (navigator.userAgent.search("Msie/") >= 0 || navigator.userAgent.search("Trident/") >= 0 || navigator.userAgent.search("Edge/") >= 0) { + return true; + } + return false; + } + /** + * Returns if the current language type is RTL. + * @return {Boolean} true if current language is RTL. false otherwise. + */ isRTL() { + if (this.attributes.language === "ar" || this.attributes.language === "he") { + return true; + } + return this.rtl; + } + /** + * Adds a class to all modal ModalDialog DOM elements. + * @param {String} className - Class name. + */ addClass(className) { + Util.addClass(this.overlay, className); + Util.addClass(this.titleBar, className); + Util.addClass(this.overlay, className); + Util.addClass(this.container, className); + Util.addClass(this.contentContainer, className); + Util.addClass(this.stackDiv, className); + Util.addClass(this.minimizeDiv, className); + Util.addClass(this.maximizeDiv, className); + Util.addClass(this.wrapper, className); + } + /** + * Remove a class from all modal DOM elements. + * @param {String} className - Class name. + */ removeClass(className) { + Util.removeClass(this.overlay, className); + Util.removeClass(this.titleBar, className); + Util.removeClass(this.overlay, className); + Util.removeClass(this.container, className); + Util.removeClass(this.contentContainer, className); + Util.removeClass(this.stackDiv, className); + Util.removeClass(this.minimizeDiv, className); + Util.removeClass(this.maximizeDiv, className); + Util.removeClass(this.wrapper, className); + } + /** + * Create modal dialog for desktop. + */ createModalWindowDesktop() { + this.addClass("wrs_modal_desktop"); + this.stack(); + } + /** + * Create modal dialog for non android devices. + */ createModalWindowAndroid() { + this.addClass("wrs_modal_android"); + window.addEventListener("resize", this.orientationChangeAndroidSoftkeyboard.bind(this)); + } + /** + * Create modal dialog for iOS devices. + */ createModalWindowIos() { + this.addClass("wrs_modal_ios"); + // Refresh the size when the orientation is changed. + window.addEventListener("resize", this.orientationChangeIosSoftkeyboard.bind(this)); + } + /** + * Restore previous state, position and size of previous stacked modal dialog. + */ restoreState() { + if (this.properties.state === "maximized") { + // Reset states for prevent return to stack state. + this.maximize(); + } else if (this.properties.state === "minimized") { + // Reset states for prevent return to stack state. + this.properties.state = this.properties.previousState; + this.properties.previousState = ""; + this.minimize(); + } else { + this.stack(); + } + } + /** + * Stacks the modal object. + */ stack() { + this.properties.previousState = this.properties.state; + this.properties.state = "stack"; + this.removeClass("wrs_maximized"); + this.minimizeDiv.title = StringManager.get("minimize"); + this.removeClass("wrs_minimized"); + this.addClass("wrs_stack"); + // Change maximize/minimize icon to minimize icon + const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; + const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + this.restoreModalProperties(); + if (typeof this.resizerBR !== "undefined" && typeof this.resizerTL !== "undefined") { + this.setResizeButtonsVisibility(); + } + // Need recalculate position of actual modal because window can was changed in fullscreenmode. + this.recalculateScrollBar(); + this.recalculatePosition(); + this.recalculateScale(); + this.focus(); + } + /** + * Minimizes the modal object. + */ minimize() { + // Saving width, height, top and bottom parameters to restore when opening. + this.saveModalProperties(); + this.title.style.cursor = "pointer"; + if (this.properties.state === "minimized" && this.properties.previousState === "stack") { + this.stack(); + } else if (this.properties.state === "minimized" && this.properties.previousState === "maximized") { + this.maximize(); + } else { + // Setting css to prevent important tag into css style. + this.container.style.height = "30px"; + this.container.style.width = "250px"; + this.container.style.bottom = "0px"; + this.container.style.right = "10px"; + this.removeListeners(); + this.properties.previousState = this.properties.state; + this.properties.state = "minimized"; + this.setResizeButtonsVisibility(); + this.minimizeDiv.title = StringManager.get("maximize"); + if (Util.containsClass(this.overlay, "wrs_stack")) { + this.removeClass("wrs_stack"); + } else { + this.removeClass("wrs_maximized"); + } + this.addClass("wrs_minimized"); + // Change minimize icon to maximize icon + const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`; + const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + } + } + /** + * Maximizes the modal object. + */ maximize() { + // Saving width, height, top and bottom parameters to restore when opening. + this.saveModalProperties(); + if (this.properties.state !== "maximized") { + this.properties.previousState = this.properties.state; + this.properties.state = "maximized"; + } + // Don't permit resize on maximize mode. + this.setResizeButtonsVisibility(); + if (Util.containsClass(this.overlay, "wrs_minimized")) { + this.minimizeDiv.title = StringManager.get("minimize"); + this.removeClass("wrs_minimized"); + } else if (Util.containsClass(this.overlay, "wrs_stack")) { + this.container.style.left = null; + this.container.style.top = null; + this.removeClass("wrs_stack"); + } + this.addClass("wrs_maximized"); + // Change maximize icon to minimize icon + const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`; + const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`; + this.minimizeDiv.setAttribute("style", generalStyle); + this.minimizeDiv.setAttribute("onmouseover", `this.style = "${hoverStyle}";`); + this.minimizeDiv.setAttribute("onmouseout", `this.style = "${generalStyle}";`); + // Set size to 80% screen with a max size. + this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10)); + if (this.container.clientHeight > 700) { + this.container.style.height = "700px"; + } + if (this.container.clientWidth > 1200) { + this.container.style.width = "1200px"; + } + // Setting modal position in center on screen. + const { innerHeight } = window; + const { innerWidth } = window; + const { offsetHeight } = this.container; + const { offsetWidth } = this.container; + const bottom = innerHeight / 2 - offsetHeight / 2; + const right = innerWidth / 2 - offsetWidth / 2; + this.setPosition(bottom, right); + this.recalculateScale(); + this.recalculatePosition(); + this.recalculateSize(); + this.focus(); + } + /** + * Expand again the modal object from a minimized state. + */ reExpand() { + if (this.properties.state === "minimized") { + if (this.properties.previousState === "maximized") { + this.maximize(); + } else { + this.stack(); + } + this.title.style.cursor = ""; + } + } + /** + * Sets modal size. + * @param {Number} height - Height of the ModalDialog + * @param {Number} width - Width of the ModalDialog. + */ setSize(height, width) { + this.container.style.height = `${height}px`; + this.container.style.width = `${width}px`; + this.recalculateSize(); + } + /** + * Sets modal position using bottom and right style attributes. + * @param {number} bottom - bottom attribute. + * @param {number} right - right attribute. + */ setPosition(bottom, right) { + this.container.style.bottom = `${bottom}px`; + this.container.style.right = `${right}px`; + } + /** + * Saves position and size parameters of and open ModalDialog. This attributes + * are needed to restore it on re-open. + */ saveModalProperties() { + // Saving values of modal only when modal is in stack state. + if (this.properties.state === "stack") { + this.properties.position.bottom = parseInt(this.container.style.bottom, 10); + this.properties.position.right = parseInt(this.container.style.right, 10); + this.properties.size.width = parseInt(this.container.style.width, 10); + this.properties.size.height = parseInt(this.container.style.height, 10); + } + } + /** + * Restore ModalDialog position and size parameters. + */ restoreModalProperties() { + if (this.properties.state === "stack") { + // Restoring Bottom and Right values from last modal. + this.setPosition(this.properties.position.bottom, this.properties.position.right); + // Restoring Height and Left values from last modal. + this.setSize(this.properties.size.height, this.properties.size.width); + } + } + /** + * Sets the modal dialog initial size. + */ recalculateSize() { + this.wrapper.style.width = `${this.container.clientWidth - 12}px`; + this.wrapper.style.height = `${this.container.clientHeight - 38}px`; + this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`; + } + /** + * Enable or disable visibility of resize buttons in modal window depend on state. + */ setResizeButtonsVisibility() { + if (this.properties.state === "stack") { + this.resizerTL.style.visibility = "visible"; + this.resizerBR.style.visibility = "visible"; + } else { + this.resizerTL.style.visibility = "hidden"; + this.resizerBR.style.visibility = "hidden"; + } + } + /** + * Makes an object draggable adding mouse and touch events. + */ addListeners() { + // Button events (maximize, minimize, stack and close). + this.maximizeDiv.addEventListener("click", this.maximize.bind(this), true); + this.stackDiv.addEventListener("click", this.stack.bind(this), true); + this.minimizeDiv.addEventListener("click", this.minimize.bind(this), true); + this.closeDiv.addEventListener("click", this.cancelAction.bind(this)); + this.maximizeDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + } + }, true); + this.stackDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + e.preventDefault(); + } + }, true); + this.minimizeDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + e.preventDefault(); + } + }, true); + this.closeDiv.addEventListener("keypress", function(e) { + if (e.key === "Enter" || e.key === " " || e.keyCode === 13 || e.keyCode === 32) { + // Handle enter and space. + e.target.click(); + e.preventDefault(); + } + }); + this.title.addEventListener("click", this.reExpand.bind(this)); + // Overlay events (close). + this.overlay.addEventListener("click", this.cancelAction.bind(this)); + // Mouse events. + Util.addEvent(window, "mousedown", this.startDrag.bind(this)); + Util.addEvent(window, "mouseup", this.stopDrag.bind(this)); + Util.addEvent(window, "mousemove", this.drag.bind(this)); + Util.addEvent(window, "resize", this.onWindowResize.bind(this)); + // Key events. + Util.addEvent(window, "keydown", this.onKeyDown.bind(this)); + } + /** + * Removes draggable events from an object. + */ removeListeners() { + // Mouse events. + Util.removeEvent(window, "mousedown", this.startDrag); + Util.removeEvent(window, "mouseup", this.stopDrag); + Util.removeEvent(window, "mousemove", this.drag); + Util.removeEvent(window, "resize", this.onWindowResize); + // Key events. + Util.removeEvent(window, "keydown", this.onKeyDown); + } + /** + * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists) + * @param {MouseEvent} mouseEvent - Mouse event. + * @return {Object} With the X and Y coordinates. + */ // eslint-disable-next-line class-methods-use-this + eventClient(mouseEvent) { + if (typeof mouseEvent.clientX === "undefined" && mouseEvent.changedTouches) { + const client = { + X: mouseEvent.changedTouches[0].clientX, + Y: mouseEvent.changedTouches[0].clientY + }; + return client; + } + const client = { + X: mouseEvent.clientX, + Y: mouseEvent.clientY + }; + return client; + } + /** + * Start drag function: set the object dragDataObject with the draggable + * object offsets coordinates. + * when drag starts (on touchstart or mousedown events). + * @param {MouseEvent} mouseEvent - Touchstart or mousedown event. + */ startDrag(mouseEvent) { + if (this.properties.state === "minimized") { + return; + } + if (mouseEvent.target === this.title) { + if (typeof this.dragDataObject === "undefined" || this.dragDataObject === null) { + // Save first click mouse point on screen. + this.dragDataObject = { + x: this.eventClient(mouseEvent).X, + y: this.eventClient(mouseEvent).Y + }; + // Reset last drag position when start drag. + this.lastDrag = { + x: "0px", + y: "0px" + }; + // Init right and bottom values for window modal if it isn't exist. + if (this.container.style.right === "") { + this.container.style.right = "0px"; + } + if (this.container.style.bottom === "") { + this.container.style.bottom = "0px"; + } + // Needed for IE11 for apply disabled mouse events on editor because + // internet explorer needs a dynamic object to apply this property. + if (this.isIE11()) ; + // Apply class for disable involuntary select text when drag. + Util.addClass(document.body, "wrs_noselect"); + Util.addClass(this.overlay, "wrs_overlay_active"); + // Obtain screen limits for prevent overflow. + this.limitWindow = this.getLimitWindow(); + } + } + } + /** + * Updates dragDataObject with the draggable object coordinates when + * the draggable object is being moved. + * @param {MouseEvent} mouseEvent - The mouse event. + */ drag(mouseEvent) { + if (this.dragDataObject) { + mouseEvent.preventDefault(); + // Calculate max and min between actual mouse position and limit of screeen. + // It restric the movement of modal into window. + let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y); + limitY = Math.max(this.limitWindow.maxPointer.y, limitY); + let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x); + limitX = Math.max(this.limitWindow.maxPointer.x, limitX); + // Subtract limit with first position to obtain relative pixels increment + // to the anchor point. + const dragX = `${limitX - this.dragDataObject.x}px`; + const dragY = `${limitY - this.dragDataObject.y}px`; + // Save last valid position of modal before window overflow. + this.lastDrag = { + x: dragX, + y: dragY + }; + // This move modal with hardware acceleration. + this.container.style.transform = `translate3d(${dragX},${dragY},0)`; + } + if (this.resizeDataObject) { + const { innerWidth } = window; + const { innerHeight } = window; + let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7); + let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7); + if (limitX < 0) { + limitX = 0; + } + if (limitY < 0) { + limitY = 0; + } + let scaleMultiplier; + if (this.leftScale) { + scaleMultiplier = -1; + } else { + scaleMultiplier = 1; + } + this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`; + this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`; + if (!this.leftScale) { + if (this.resizeDataObject.x - limitX - this.initialWidth < -580) { + this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`; + } else { + this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`; + this.container.style.width = "580px"; + } + if (this.resizeDataObject.y - limitY < this.initialHeight - 338) { + this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`; + } else { + this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`; + this.container.style.height = "338px"; + } + } + this.recalculateScale(); + this.recalculatePosition(); + } + } + /** + * Returns the boundaries of actual window to limit modal movement. + * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen. + */ getLimitWindow() { + // Obtain dimensions of window page. + const maxWidth = window.innerWidth; + const maxHeight = window.innerHeight; + // Calculate relative position of mouse point into window. + const { offsetHeight } = this.container; + const contStyleBottom = parseInt(this.container.style.bottom, 10); + const contStyleRight = parseInt(this.container.style.right, 10); + const { pageXOffset } = window; + const dragY = this.dragDataObject.y; + const dragX = this.dragDataObject.x; + const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset)); + const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight; + // Calculate limits with sizes of window, modal and mouse position. + const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY; + const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY); + const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth; + const maxPointerX = this.container.offsetWidth - offSetToolbarX; + const minPointer = { + x: minPointerX, + y: minPointerY + }; + const maxPointer = { + x: maxPointerX, + y: maxPointerY + }; + return { + minPointer, + maxPointer + }; + } + /** + * Returns the scrollbar width size of browser + * @returns {Number} The scrollbar width. + */ // eslint-disable-next-line class-methods-use-this + getScrollBarWidth() { + // Create a paragraph with full width of page. + const inner = document.createElement("p"); + inner.style.width = "100%"; + inner.style.height = "200px"; + // Create a hidden div to compare sizes. + const outer = document.createElement("div"); + outer.style.position = "absolute"; + outer.style.top = "0px"; + outer.style.left = "0px"; + outer.style.visibility = "hidden"; + outer.style.width = "200px"; + outer.style.height = "150px"; + outer.style.overflow = "hidden"; + outer.appendChild(inner); + document.body.appendChild(outer); + const widthOuter = inner.offsetWidth; + // Change type overflow of paragraph for measure scrollbar. + outer.style.overflow = "scroll"; + let widthInner = inner.offsetWidth; + // If measure is the same, we compare with internal div. + if (widthOuter === widthInner) { + widthInner = outer.clientWidth; + } + document.body.removeChild(outer); + return widthOuter - widthInner; + } + /** + * Set the dragDataObject to null. + */ stopDrag() { + // Due to we have multiple events that call this function, we need only to execute + // the next modifiers one time, + // when the user stops to drag and dragDataObject is not null (the object to drag is attached). + if (this.dragDataObject || this.resizeDataObject) { + // If modal doesn't change, it's not necessary to set position with interpolation. + this.container.style.transform = ""; + if (this.dragDataObject) { + this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`; + this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`; + } + // We make focus on editor after drag modal windows to prevent lose focus. + this.focus(); + // Restore mouse events on iframe. + // this.iframe.style['pointer-events'] = 'auto'; + document.body.style["user-select"] = ""; + // Restore static state of iframe if we use Internet Explorer. + if (this.isIE11()) ; + // Active text select event. + Util.removeClass(document.body, "wrs_noselect"); + Util.removeClass(this.overlay, "wrs_overlay_active"); + } + this.dragDataObject = null; + this.resizeDataObject = null; + this.initialWidth = null; + this.leftScale = null; + } + /** + * Recalculates scale for modal when resize browser window. + */ onWindowResize() { + this.recalculateScrollBar(); + this.recalculatePosition(); + this.recalculateScale(); + } + /** + * Triggers keyboard events: + * - Tab key tab to go to submit button. + * - Esc key to close the modal dialog. + * @param {KeyboardEvent} keyboardEvent - The keyboard event. + */ onKeyDown(keyboardEvent) { + if (keyboardEvent.key !== undefined) { + // Popupmessage is not oppened. + if (this.popup.overlayWrapper.style.display !== "block") { + // Code to detect Esc event + if (keyboardEvent.key === "Escape" || keyboardEvent.key === "Esc") { + if (this.properties.open) { + this.contentManager.onKeyDown(keyboardEvent); + } + } else if (keyboardEvent.shiftKey && keyboardEvent.key === "Tab") { + // Code to detect shift Tab event. + if (document.activeElement === this.cancelButton) { + this.submitButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else { + this.contentManager.onKeyDown(keyboardEvent); + } + } else if (keyboardEvent.key === "Tab") { + // Code to detect Tab event. + if (document.activeElement === this.submitButton) { + this.cancelButton.focus(); + keyboardEvent.stopPropagation(); + keyboardEvent.preventDefault(); + } else { + this.contentManager.onKeyDown(keyboardEvent); + } + } + } else { + // Popupmessage oppened. + this.popup.onKeyDown(keyboardEvent); + } + } + } + /** + * Recalculating position for modal dialog when the browser is resized. + */ recalculatePosition() { + this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`; + if (parseInt(this.container.style.right, 10) < 0) { + this.container.style.right = "0px"; + } + this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`; + if (parseInt(this.container.style.bottom, 10) < 0) { + this.container.style.bottom = "0px"; + } + } + /** + * Recalculating scale for modal when the browser is resized. + */ recalculateScale() { + let sizeModified = false; + if (parseInt(this.container.style.width, 10) > 580) { + this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`; + sizeModified = true; + } else { + this.container.style.width = "580px"; + sizeModified = true; + } + if (parseInt(this.container.style.height, 10) > 338) { + this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`; + sizeModified = true; + } else { + this.container.style.height = "338px"; + sizeModified = true; + } + if (sizeModified) { + this.recalculateSize(); + } + } + /** + * Recalculating width of browser scroll bar. + */ recalculateScrollBar() { + this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth; + if (this.hasScrollBar) { + this.scrollbarWidth = this.getScrollBarWidth(); + } else { + this.scrollbarWidth = 0; + } + } + /** + * Hide soft keyboards on iOS devices. + */ // eslint-disable-next-line class-methods-use-this + hideKeyboard() { + // iOS keyboard can't be detected or hide directly from JavaScript. + // So, this method simulates that user focus a text input and blur + // the selection. + const inputField = document.createElement("input"); + this.container.appendChild(inputField); + inputField.focus(); + inputField.blur(); + // Is removed to not see it. + inputField.remove(); + } + /** + * Focus to contentManager object. + */ focus() { + if (this.contentManager != null && typeof this.contentManager.onFocus !== "undefined") { + this.contentManager.onFocus(); + } + } + /** + * Returns true when the device is on portrait mode. + */ // eslint-disable-next-line class-methods-use-this + portraitMode() { + return window.innerHeight > window.innerWidth; + } + /** + * Event handler that change container size when IOS soft keyboard is opened. + */ handleOpenedIosSoftkeyboard() { + if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) { + if (this.portraitMode()) { + this.setContainerHeight(`63${this.iosMeasureUnit}`); + } else { + this.setContainerHeight(`40${this.iosMeasureUnit}`); + } + } + this.iosSoftkeyboardOpened = true; + } + /** + * Event handler that change container size when IOS soft keyboard is closed. + */ handleClosedIosSoftkeyboard() { + this.iosSoftkeyboardOpened = false; + this.setContainerHeight(`100${this.iosMeasureUnit}`); + } + /** + * Change container sizes when orientation is changed on iOS. + */ orientationChangeIosSoftkeyboard() { + if (this.iosSoftkeyboardOpened) { + if (this.portraitMode()) { + this.setContainerHeight(`63${this.iosMeasureUnit}`); + } else { + this.setContainerHeight(`40${this.iosMeasureUnit}`); + } + } else { + this.setContainerHeight(`100${this.iosMeasureUnit}`); + } + } + /** + * Change container sizes when orientation is changed on Android. + */ orientationChangeAndroidSoftkeyboard() { + this.setContainerHeight("100%"); + } + /** + * Set iframe container height. + * @param {Number} height - New height. + */ setContainerHeight(height) { + this.iosDivHeight = height; + this.wrapper.style.height = height; + } + /** + * Check content of editor before close action. + */ showPopUpMessage() { + if (this.properties.state === "minimized") { + this.stack(); + } + this.popup.show(); + } + /** + * Sets the title of the modal dialog. + * @param {String} title - Modal dialog title. + */ setTitle(title) { + this.title.innerHTML = title; + } + /** + * Returns the id of an element, adding the instance number to + * the element class name: + * className --> className[idNumber] + * @param {String} className - The element class name. + * @returns {String} A string appending the instance id to the className. + */ getElementId(className) { + return `${className}[${this.instanceId}]`; + } + } - // Polyfills. - /*! http://mths.be/codepointat v0.1.0 by @mathias */ if (!String.prototype.codePointAt) { - (function () { - var codePointAt = function (position) { - if (this == null) { - throw TypeError(); - } - var string = String(this); - var size = string.length; - // `ToInteger` - var index = position ? Number(position) : 0; - if (index != index) { - // better `isNaN` - index = 0; - } - // Account for out-of-bounds indices: - if (index < 0 || index >= size) { - return undefined; - } - // Get the first code unit - var first = string.charCodeAt(index); - var second; - if ( - // check if it’s the start of a surrogate pair - first >= 0xd800 && - first <= 0xdbff && // high surrogate - size > index + 1 // there is a next code unit - ) { - second = string.charCodeAt(index + 1); - if (second >= 0xdc00 && second <= 0xdfff) { - // low surrogate - // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae - return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000; - } - } - return first; - }; - if (Object.defineProperty) { - Object.defineProperty(String.prototype, "codePointAt", { - value: codePointAt, - configurable: true, - writable: true, - }); - } else { - String.prototype.codePointAt = codePointAt; - } - })(); - } - // Object.assign polyfill. - if (typeof Object.assign != "function") { - // Must be writable: true, enumerable: false, configurable: true - Object.defineProperty(Object, "assign", { - value: function assign(target, varArgs) { - if (target == null) { - // TypeError if undefined or null - throw new TypeError("Cannot convert undefined or null to object"); - } - var to = Object(target); - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; - if (nextSource != null) { - // Skip over if undefined or null - for (var nextKey in nextSource) { - // Avoid bugs when hasOwnProperty is shadowed - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - to[nextKey] = nextSource[nextKey]; - } - } - } - } - return to; - }, - writable: true, - configurable: true, - }); - } - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - if (!Array.prototype.includes) { - Object.defineProperty(Array.prototype, "includes", { - value: function (searchElement, fromIndex) { - if (this == null) { - throw new TypeError('"this" s null or is not defined'); - } - // 1. Let O be ? ToObject(this value). - var o = Object(this); - // 2. Let len be ? ToLength(? Get(O, "length")). - var len = o.length >>> 0; - // 3. if len is 0, return false. - if (len === 0) { - return false; - } - // 4. Let n be ? ToInteger(fromIndex). - // (if fromIndex is undefinedo, this step generates the value 0.) - var n = fromIndex | 0; - // 5. if n ≥ 0, then - // a. Let k be n. - // 6. Else n < 0, - // a. Let k be len + n. - // b. if k < 0, let k be 0. - var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - function sameValueZero(x, y) { - return x === y || (typeof x === "number" && typeof y === "number" && isNaN(x) && isNaN(y)); - } - // 7. Repeat while k < len - while (k < len) { - // a. let element k be the result of ? Get(O, ! ToString(k)). - // b. if SameValueZero(searchElement, elementK) is true, return true. - if (sameValueZero(o[k], searchElement)) { - return true; - } - // c. Increase k by 1. - k++; - } - // 8. Return false - return false; - }, - }); - } - if (!String.prototype.includes) { - String.prototype.includes = function (search, start) { - if (search instanceof RegExp) { - throw TypeError("first argument must not be a RegExp"); - } - if (start === undefined) { - start = 0; - } - return this.indexOf(search, start) !== -1; - }; - } - if (!String.prototype.startsWith) { - Object.defineProperty(String.prototype, "startsWith", { - value: function (search, rawPos) { - var pos = rawPos > 0 ? rawPos | 0 : 0; - return this.substring(pos, pos + search.length) === search; - }, - }); - } + // Polyfills. + /*! http://mths.be/codepointat v0.1.0 by @mathias */ if (!String.prototype.codePointAt) { + (function() { + var codePointAt = function(position) { + if (this == null) { + throw TypeError(); + } + var string = String(this); + var size = string.length; + // `ToInteger` + var index = position ? Number(position) : 0; + if (index != index) { + // better `isNaN` + index = 0; + } + // Account for out-of-bounds indices: + if (index < 0 || index >= size) { + return undefined; + } + // Get the first code unit + var first = string.charCodeAt(index); + var second; + if (// check if it’s the start of a surrogate pair + first >= 0xd800 && first <= 0xdbff && // high surrogate + size > index + 1 // there is a next code unit + ) { + second = string.charCodeAt(index + 1); + if (second >= 0xdc00 && second <= 0xdfff) { + // low surrogate + // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000; + } + } + return first; + }; + if (Object.defineProperty) { + Object.defineProperty(String.prototype, "codePointAt", { + value: codePointAt, + configurable: true, + writable: true + }); + } else { + String.prototype.codePointAt = codePointAt; + } + })(); + } + // Object.assign polyfill. + if (typeof Object.assign != "function") { + // Must be writable: true, enumerable: false, configurable: true + Object.defineProperty(Object, "assign", { + value: function assign(target, varArgs) { + if (target == null) { + // TypeError if undefined or null + throw new TypeError("Cannot convert undefined or null to object"); + } + var to = Object(target); + for(var index = 1; index < arguments.length; index++){ + var nextSource = arguments[index]; + if (nextSource != null) { + // Skip over if undefined or null + for(var nextKey in nextSource){ + // Avoid bugs when hasOwnProperty is shadowed + if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { + to[nextKey] = nextSource[nextKey]; + } + } + } + } + return to; + }, + writable: true, + configurable: true + }); + } + // https://tc39.github.io/ecma262/#sec-array.prototype.includes + if (!Array.prototype.includes) { + Object.defineProperty(Array.prototype, "includes", { + value: function(searchElement, fromIndex) { + if (this == null) { + throw new TypeError('"this" s null or is not defined'); + } + // 1. Let O be ? ToObject(this value). + var o = Object(this); + // 2. Let len be ? ToLength(? Get(O, "length")). + var len = o.length >>> 0; + // 3. if len is 0, return false. + if (len === 0) { + return false; + } + // 4. Let n be ? ToInteger(fromIndex). + // (if fromIndex is undefinedo, this step generates the value 0.) + var n = fromIndex | 0; + // 5. if n ≥ 0, then + // a. Let k be n. + // 6. Else n < 0, + // a. Let k be len + n. + // b. if k < 0, let k be 0. + var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); + function sameValueZero(x, y) { + return x === y || typeof x === "number" && typeof y === "number" && isNaN(x) && isNaN(y); + } + // 7. Repeat while k < len + while(k < len){ + // a. let element k be the result of ? Get(O, ! ToString(k)). + // b. if SameValueZero(searchElement, elementK) is true, return true. + if (sameValueZero(o[k], searchElement)) { + return true; + } + // c. Increase k by 1. + k++; + } + // 8. Return false + return false; + } + }); + } + if (!String.prototype.includes) { + String.prototype.includes = function(search, start) { + if (search instanceof RegExp) { + throw TypeError("first argument must not be a RegExp"); + } + if (start === undefined) { + start = 0; + } + return this.indexOf(search, start) !== -1; + }; + } + if (!String.prototype.startsWith) { + Object.defineProperty(String.prototype, "startsWith", { + value: function(search, rawPos) { + var pos = rawPos > 0 ? rawPos | 0 : 0; + return this.substring(pos, pos + search.length) === search; + } + }); + } - /** - * @typedef {Object} CoreProperties - * @property {ServiceProviderProperties} serviceProviderProperties - * - The ServiceProvider class properties. * - */ class Core { - /** - * @classdesc - * This class represents MathType integration Core, managing the following: - * - Integration initialization. - * - Event managing. - * - Insertion of formulas into the edit area. - * ```js - * let core = new Core(); - * core.addListener(listener); - * core.language = 'en'; - * - * // Initializing Core class. - * core.init(configurationService); - * ``` - * @constructs - * Core constructor. - * @param {CoreProperties} - */ constructor(coreProperties) { - /** - * Language. Needed for accessibility and locales. 'en' by default. - * @type {String} - */ this.language = "en"; - /** - * Edit mode, 'images' by default. Admits the following values: - * - images - * - latex - * @type {String} - */ this.editMode = "images"; - /** - * Modal dialog instance. - * @type {ModalDialog} - */ this.modalDialog = null; - /** - * The instance of {@link CustomEditors}. By default - * the only custom editor is the Chemistry editor. - * @type {CustomEditors} - */ this.customEditors = new CustomEditors(); - /** - * Chemistry editor. - * @type {CustomEditor} - */ const chemEditorParams = { - name: "Chemistry", - toolbar: "chemistry", - icon: "chem.png", - confVariable: "chemEnabled", - title: "ChemType", - tooltip: "Insert a chemistry formula - ChemType", - }; - this.customEditors.addEditor("chemistry", chemEditorParams); - /** - * Environment properties. This object contains data about the integration platform. - * @typedef IntegrationEnvironment - * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor. - * @property {String} IntegrationEnvironment.mode - Integration save mode. - * @property {String} IntegrationEnvironment.version - Integration version. - * - */ /** - * The environment properties object. - * @type {IntegrationEnvironment} - */ this.environment = {}; - /** - * @typedef EditionProperties - * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one. - * False otherwise. - * @property {HTMLImageElement} editionProperties.temporalImage- The image element. - * Null if the formula is new. - * @property {Range} editionProperties.latexRange - Tha range that contains the LaTeX formula. - * @property {Range} editionProperties.range - The range that contains the image element. - * @property {String} editionProperties.editMode - The edition mode. 'images' by default. - */ /** - * The properties of the current edition process. - * @type {EditionProperties} - */ this.editionProperties = {}; - this.editionProperties.isNewElement = true; - this.editionProperties.temporalImage = null; - this.editionProperties.latexRange = null; - this.editionProperties.range = null; - this.editionProperties.editionStartTime = null; - /** - * The {@link IntegrationModel} instance. - * @type {IntegrationModel} - */ this.integrationModel = null; - /** - * The {@link ContentManager} instance. - * @type {ContentManager} - */ this.contentManager = null; - /** - * The current browser. - * @type {String} - */ this.browser = (() => { - const ua = navigator.userAgent; - let browser = "none"; - if (ua.search("Edge/") >= 0) { - browser = "EDGE"; - } else if (ua.search("Chrome/") >= 0) { - browser = "CHROME"; - } else if (ua.search("Trident/") >= 0) { - browser = "IE"; - } else if (ua.search("Firefox/") >= 0) { - browser = "FIREFOX"; - } else if (ua.search("Safari/") >= 0) { - browser = "SAFARI"; - } - return browser; - })(); - /** - * Plugin listeners. - * @type {Array.} - */ this.listeners = new Listeners(); - /** - * Service provider properties. - * @type {ServiceProviderProperties} - */ this.serviceProviderProperties = {}; - if ("serviceProviderProperties" in coreProperties) { - this.serviceProviderProperties = coreProperties.serviceProviderProperties; - } else { - throw new Error("serviceProviderProperties property missing."); - } - } - /** - * Static property. - * Core listeners. - * @private - * @type {Listeners} - */ static get globalListeners() { - return Core._globalListeners; - } - /** - * Static property setter. - * Set core listeners. - * @param {Listeners} value - The property value. - * @ignore - */ static set globalListeners(value) { - Core._globalListeners = value; - } - /** - * Core state. Says if it was loaded previously. - * True when Core.init was called. Otherwise, false. - * @private - * @type {Boolean} - */ static get initialized() { - return Core._initialized; - } - /** - * Core state. Says if it was loaded previously. - * @param {Boolean} value - True to say that Core.init was called. Otherwise, false. - * @ignore - */ static set initialized(value) { - Core._initialized = value; - } - /** - * Sets the {@link Core.integrationModel} property. - * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property. - */ setIntegrationModel(integrationModel) { - this.integrationModel = integrationModel; - } - /** - * Sets the {@link Core.environment} property. - * @param {IntegrationEnvironment} integrationEnvironment - - * The {@link IntegrationEnvironment} object. - */ setEnvironment(integrationEnvironment) { - if ("editor" in integrationEnvironment) { - this.environment.editor = integrationEnvironment.editor; - } - if ("mode" in integrationEnvironment) { - this.environment.mode = integrationEnvironment.mode; - } - if ("version" in integrationEnvironment) { - this.environment.version = integrationEnvironment.version; - } - } - /** - * Sets the custom headers added on editor requests if contentManager isn't undefined. - * @returns {Object} headers - key value headers. - */ setHeaders(headers) { - const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers; - Configuration.set("customHeaders", headerObject); - } - /** - * Returns the current {@link ModalDialog} instance. - * @returns {ModalDialog} The current {@link ModalDialog} instance. - */ getModalDialog() { - return this.modalDialog; - } - /** - * Inits the {@link Core} class, doing the following: - * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON. - * - Updates {@link Configuration} class with the previous configuration properties. - * - Updates the {@link ServiceProvider} class using the configuration service path as reference. - * - Loads language strings. - * - Fires onLoad event. - * @param {Object} serviceParameters - Service parameters. - */ init() { - if (!Core.initialized) { - const serviceProviderListener = Listeners.newListener("onInit", () => { - const jsConfiguration = ServiceProvider.getService("configurationjs", "", "get"); - const jsonConfiguration = JSON.parse(jsConfiguration); - Configuration.addConfiguration(jsonConfiguration); - // Adding JavaScript (not backend) configuration variables. - Configuration.addConfiguration(jsProperties); - // Fire 'onLoad' event: - // All integration must listen this event in order to know if the plugin - // has been properly loaded. - StringManager.language = this.language; - this.listeners.fire("onLoad", {}); - }); - ServiceProvider.addListener(serviceProviderListener); - ServiceProvider.init(this.serviceProviderProperties); - Core.initialized = true; - } else { - // Case when there are more than two editor instances. - // After the first editor all the other editors don't need to load any file or service. - this.listeners.fire("onLoad", {}); - } - } - /** - * Adds a {@link Listener} to the current instance of the {@link Core} class. - * @param {Listener} listener - The listener object. - */ addListener(listener) { - this.listeners.add(listener); - } - /** - * Adds the global {@link Listener} instance to {@link Core} class. - * @param {Listener} listener - The event listener to be added. - * @static - */ static addGlobalListener(listener) { - Core.globalListeners.add(listener); - } - beforeUpdateFormula(mathml, wirisProperties) { - /** - * This event is fired before updating the formula. - * @type {Object} - * @property {String} mathml - MathML to be transformed. - * @property {String} editMode - Edit mode. - * @property {Object} wirisProperties - Extra attributes for the formula. - * @property {String} language - Formula language. - */ const beforeUpdateEvent = new Event(); - beforeUpdateEvent.mathml = mathml; - // Cloning wirisProperties object - // We don't want wirisProperties object modified. - beforeUpdateEvent.wirisProperties = {}; - if (wirisProperties != null) { - Object.keys(wirisProperties).forEach((attr) => { - beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr]; - }); - } - // Read only. - beforeUpdateEvent.language = this.language; - beforeUpdateEvent.editMode = this.editMode; - if (this.listeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { - return {}; - } - if (Core.globalListeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { - return {}; - } - return { - mathml: beforeUpdateEvent.mathml, - wirisProperties: beforeUpdateEvent.wirisProperties, - }; - } - /** - * Converts a MathML into it's correspondent image and inserts the image is - * inserted in a HTMLElement target by creating - * a new image or updating an existing one. - * @param {HTMLElement} focusElement - The HTMLElement to be focused after the insertion. - * @param {Window} windowTarget - The window element where the editable content is. - * @param {String} mathml - The MathML. - * @param {Array.} wirisProperties - The extra attributes for the formula. - * @returns {ReturnObject} - Object with the information of the node or latex to insert. - */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - /** - * It is the object with the information of the node or latex to insert. - * @typedef ReturnObject - * @property {Node} [node] - The DOM node to insert. - * @property {String} [latex] - The latex to insert. - */ const returnObject = {}; - if (!mathml) { - this.insertElementOnSelection(null, focusElement, windowTarget); - } else if (this.editMode === "latex") { - returnObject.latex = Latex.getLatexFromMathML(mathml); - // this.integrationModel.getNonLatexNode is an integration wrapper - // to have special behaviours for nonLatex. - // Not all the integrations have special behaviours for nonLatex. - if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) { - const afterUpdateEvent = new Event(); - afterUpdateEvent.editMode = this.editMode; - afterUpdateEvent.windowTarget = windowTarget; - afterUpdateEvent.focusElement = focusElement; - afterUpdateEvent.latex = returnObject.latex; - this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml); - } else { - returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); - } - this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); - } else { - returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language); - this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); - } - return returnObject; - } - afterUpdateFormula(focusElement, windowTarget, node, latex) { - /** - * This event is fired after update the formula. - * @type {Event} - * @param {String} editMode - edit mode. - * @param {Object} windowTarget - target window. - * @param {Object} focusElement - target element to be focused after update. - * @param {String} latex - LaTeX generated by the formula (editMode=latex). - * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise). - */ const afterUpdateEvent = new Event(); - afterUpdateEvent.editMode = this.editMode; - afterUpdateEvent.windowTarget = windowTarget; - afterUpdateEvent.focusElement = focusElement; - afterUpdateEvent.node = node; - afterUpdateEvent.latex = latex; - if (this.listeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { - return {}; - } - if (Core.globalListeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { - return {}; - } - return {}; - } - /** - * Sets the caret after a given Node and set the focus to the owner document. - * @param {Node} node - The Node element. - */ placeCaretAfterNode(node) { - if (node === null) return; - this.integrationModel.getSelection(); - const nodeDocument = node.ownerDocument; - if (typeof nodeDocument.getSelection !== "undefined" && !!node.parentElement) { - const range = nodeDocument.createRange(); - range.setStartAfter(node); - range.collapse(true); - const selection = nodeDocument.getSelection(); - selection.removeAllRanges(); - selection.addRange(range); - nodeDocument.body.focus(); - } - } - /** - * Replaces a Selection object with an HTMLElement. - * @param {HTMLElement} element - The HTMLElement to replace the selection. - * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace. - * @param {Window} windowTarget - The window target. - */ insertElementOnSelection(element, focusElement, windowTarget) { - let mathmlOrigin = null; - if (this.editionProperties.isNewElement) { - if (element) { - if (focusElement.type === "textarea") { - Util.updateTextArea(focusElement, element.textContent); - } else if (document.selection && document.getSelection === 0) { - let range = windowTarget.document.selection.createRange(); - windowTarget.document.execCommand("InsertImage", false, element.src); - if (!("parentElement" in range)) { - windowTarget.document.execCommand("delete", false); - range = windowTarget.document.selection.createRange(); - windowTarget.document.execCommand("InsertImage", false, element.src); - } - if ("parentElement" in range) { - const temporalObject = range.parentElement(); - if (temporalObject.nodeName.toUpperCase() === "IMG") { - temporalObject.parentNode.replaceChild(element, temporalObject); - } else { - // IE9 fix: parentNode() does not return the IMG node, - // returns the parent DIV node. In IE < 9, pasteHTML does not work well. - range.pasteHTML(Util.createObjectCode(element)); - } - } - } else { - let range = null; - // In IE is needed keep the range due to after focus the modal window - // it can't be retrieved the last selection. - if (this.editionProperties.range) { - ({ range } = this.editionProperties); - this.editionProperties.range = null; - } else { - const editorSelection = this.integrationModel.getSelection(); - range = editorSelection.getRangeAt(0); - } - // Delete if something was surrounded. - range.deleteContents(); - let node = range.startContainer; - const position = range.startOffset; - if (node.nodeType === 3) { - // TEXT_NODE. - node = node.splitText(position); - node.parentNode.insertBefore(element, node); - } else if (node.nodeType === 1) { - // ELEMENT_NODE. - node.insertBefore(element, node.childNodes[position]); - } - this.placeCaretAfterNode(element); - } - } else if (focusElement.type === "textarea") { - focusElement.focus(); - } else { - const editorSelection = this.integrationModel.getSelection(); - editorSelection.removeAllRanges(); - if (this.editionProperties.range) { - const { range } = this.editionProperties; - this.editionProperties.range = null; - editorSelection.addRange(range); - } - } - } else if (this.editionProperties.latexRange) { - if (document.selection && document.getSelection === 0) { - this.editionProperties.isNewElement = true; - this.editionProperties.latexRange.select(); - this.insertElementOnSelection(element, focusElement, windowTarget); - } else { - this.editionProperties.latexRange.deleteContents(); - this.editionProperties.latexRange.insertNode(element); - this.placeCaretAfterNode(element); - } - } else if (focusElement.type === "textarea") { - let item; - // Wrapper for some integrations that can have special behaviours to show latex. - if (typeof this.integrationModel.getSelectedItem !== "undefined") { - item = this.integrationModel.getSelectedItem(focusElement, false); - } else { - item = Util.getSelectedItemOnTextarea(focusElement); - } - Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition); - } else { - mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml; - if (element && element.nodeName.toLowerCase() === "img") { - // Editor empty, formula has been erased on edit. - // There are editors (e.g: CKEditor) that put attributes in images. - // We don't allow that behaviour in our images. - Image.removeImgDataAttributes(this.editionProperties.temporalImage); - // Clone is needed to maintain event references to temporalImage. - Image.clone(element, this.editionProperties.temporalImage); - } else { - this.editionProperties.temporalImage.remove(); - } - this.placeCaretAfterNode(this.editionProperties.temporalImage); - } - // Build the telemeter payload separated to delete null/undefined entries. - const mathml = element?.dataset?.mathml; - let payload = { - mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, - mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, - elapsed_time: Date.now() - this.editionProperties.editionStartTime, - editor_origin: null, - toolbar: this.modalDialog.contentManager.toolbar, - size: mathml?.length, - }; - // Remove the desired null keys. - Object.keys(payload).forEach((key) => { - if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; - }); - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("INSERTED_FORMULA", { - ...payload, - }); - } catch (error) { - console.error("Error tracking INSERTED_FORMULA", error); - } - } - /** - * Opens a modal dialog containing MathType editor.. - * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted. - * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise. - */ openModalDialog(target, isIframe) { - // Count the time since the editor is open - this.editionProperties.editionStartTime = Date.now(); - // Textarea elements don't have normal document ranges. It only accepts latex edit. - this.editMode = "images"; - // In IE is needed keep the range due to after focus the modal window - // it can't be retrieved the last selection. - try { - if (isIframe) { - // Is needed focus the target first. - target.contentWindow.focus(); - const selection = target.contentWindow.getSelection(); - this.editionProperties.range = selection.getRangeAt(0); - } else { - // Is needed focus the target first. - target.focus(); - const selection = getSelection(); - this.editionProperties.range = selection.getRangeAt(0); - } - } catch (e) { - this.editionProperties.range = null; - } - if (isIframe === undefined) { - isIframe = true; - } - this.editionProperties.latexRange = null; - if (target) { - let selectedItem; - if (typeof this.integrationModel.getSelectedItem !== "undefined") { - selectedItem = this.integrationModel.getSelectedItem(target, isIframe); - } else { - selectedItem = Util.getSelectedItem(target, isIframe); - } - // Check LaTeX if and only if the node is a text node (nodeType==3). - if (selectedItem) { - // Case when image was selected and button pressed. - if ( - !selectedItem.caretPosition && - Util.containsClass(selectedItem.node, Configuration.get("imageClassName")) - ) { - this.editionProperties.temporalImage = selectedItem.node; - this.editionProperties.isNewElement = false; - } else if (selectedItem.node.nodeType === 3) { - // If it's a text node means that editor is working with LaTeX. - if (this.integrationModel.getMathmlFromTextNode) { - // If integration has this function it isn't set range due to we don't - // know if it will be put into a textarea as a text or image. - const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition); - if (mathml) { - this.editMode = "latex"; - this.editionProperties.isNewElement = false; - this.editionProperties.temporalImage = document.createElement("img"); - this.editionProperties.temporalImage.setAttribute( - Configuration.get("imageMathmlAttribute"), - MathML.safeXmlEncode(mathml), - ); - } - } else { - const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition); - if (latexResult) { - const mathml = Latex.getMathMLFromLatex(latexResult.latex); - this.editMode = "latex"; - this.editionProperties.isNewElement = false; - this.editionProperties.temporalImage = document.createElement("img"); - this.editionProperties.temporalImage.setAttribute( - Configuration.get("imageMathmlAttribute"), - MathML.safeXmlEncode(mathml), - ); - const windowTarget = isIframe ? target.contentWindow : window; - if (target.tagName.toLowerCase() !== "textarea") { - if (document.selection) { - let leftOffset = 0; - let previousNode = latexResult.startNode.previousSibling; - while (previousNode) { - leftOffset += Util.getNodeLength(previousNode); - previousNode = previousNode.previousSibling; - } - this.editionProperties.latexRange = windowTarget.document.selection.createRange(); - this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode); - this.editionProperties.latexRange.move("character", leftOffset + latexResult.startPosition); - this.editionProperties.latexRange.moveEnd("character", latexResult.latex.length + 4); // Plus 4 for the '$$' characters. - } else { - this.editionProperties.latexRange = windowTarget.document.createRange(); - this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition); - this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition); - } - } - } - } - } - } else if (target.tagName.toLowerCase() === "textarea") { - // By default editMode is 'images', but when target is a textarea it needs to be 'latex'. - this.editMode = "latex"; - } - } - // Setting an object with the editor parameters. - // Editor parameters can be customized in several ways: - // 1 - editorAttributes: Contains the default editor attributes, - // usually the metrics in a comma separated string. Always exists. - // 2 - editorParameters: Object containing custom editor parameters. - // These parameters are defined in the backend. So they affects all integration instances. - // The backend send the default editor attributes in a coma separated - // with the following structure: key1=value1,key2=value2... - const defaultEditorAttributesArray = Configuration.get("editorAttributes").split(", "); - const defaultEditorAttributes = {}; - for (let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1) { - const tempAttribute = defaultEditorAttributesArray[i].split("="); - const key = tempAttribute[0]; - const value = tempAttribute[1]; - defaultEditorAttributes[key] = value; - } - // Custom editor parameters. - const editorAttributes = { - language: this.language, - }; - // Editor parameters in backend, usually configuration.ini. - const serverEditorParameters = Configuration.get("editorParameters"); - // Editor parameters through JavaScript configuration. - const clientEditorParameters = this.integrationModel.editorParameters; - Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters); - Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters); - // Now, update backwards: if user has set a custom language, pass that back to core properties - this.language = editorAttributes.language; - StringManager.language = this.language; - editorAttributes.rtl = this.integrationModel.rtl; - const customHeaders = Configuration.get("customHeaders"); - // This is not being used in the code, we are keeping it just in case it's needed. - // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend. - editorAttributes.customHeaders = - typeof customHeaders === "string" ? Util.convertStringToObject(customHeaders) : customHeaders; - const contentManagerAttributes = {}; - contentManagerAttributes.editorAttributes = editorAttributes; - contentManagerAttributes.language = this.language; - contentManagerAttributes.customEditors = this.customEditors; - contentManagerAttributes.environment = this.environment; - if (this.modalDialog == null) { - this.modalDialog = new ModalDialog(editorAttributes); - this.contentManager = new ContentManager(contentManagerAttributes); - // When an instance of ContentManager is created we need to wait until - // the ContentManager is ready by listening 'onLoad' event. - const listener = Listeners.newListener("onLoad", () => { - this.contentManager.dbclick = this.editionProperties.dbclick; - this.contentManager.isNewElement = this.editionProperties.isNewElement; - if (this.editionProperties.temporalImage != null) { - const mathML = MathML.safeXmlDecode( - this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute")), - ); - this.contentManager.mathML = mathML; - } - }); - this.contentManager.addListener(listener); - this.contentManager.init(); - this.modalDialog.setContentManager(this.contentManager); - this.contentManager.setModalDialogInstance(this.modalDialog); - } else { - this.contentManager.dbclick = this.editionProperties.dbclick; - this.contentManager.isNewElement = this.editionProperties.isNewElement; - if (this.editionProperties.temporalImage != null) { - const mathML = MathML.safeXmlDecode( - this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute")), - ); - this.contentManager.mathML = mathML; - } - } - this.contentManager.setIntegrationModel(this.integrationModel); - this.modalDialog.open(); - } - /** - * Returns the {@link CustomEditors} instance. - * @return {CustomEditors} The current {@link CustomEditors} instance. - */ getCustomEditors() { - return this.customEditors; - } - } - /** - * Core static listeners. - * @type {Listeners} - * @private - */ Core._globalListeners = new Listeners(); - /** - * Resources state. Says if they were loaded or not. - * @type {Boolean} - * @private - */ Core._initialized = false; + /** + * @typedef {Object} CoreProperties + * @property {ServiceProviderProperties} serviceProviderProperties + * - The ServiceProvider class properties. * + */ class Core { + /** + * @classdesc + * This class represents MathType integration Core, managing the following: + * - Integration initialization. + * - Event managing. + * - Insertion of formulas into the edit area. + * ```js + * let core = new Core(); + * core.addListener(listener); + * core.language = 'en'; + * + * // Initializing Core class. + * core.init(configurationService); + * ``` + * @constructs + * Core constructor. + * @param {CoreProperties} + */ constructor(coreProperties){ + /** + * Language. Needed for accessibility and locales. 'en' by default. + * @type {String} + */ this.language = "en"; + /** + * Edit mode, 'images' by default. Admits the following values: + * - images + * - latex + * @type {String} + */ this.editMode = "images"; + /** + * Modal dialog instance. + * @type {ModalDialog} + */ this.modalDialog = null; + /** + * The instance of {@link CustomEditors}. By default + * the only custom editor is the Chemistry editor. + * @type {CustomEditors} + */ this.customEditors = new CustomEditors(); + /** + * Chemistry editor. + * @type {CustomEditor} + */ const chemEditorParams = { + name: "Chemistry", + toolbar: "chemistry", + icon: "chem.png", + confVariable: "chemEnabled", + title: "ChemType", + tooltip: "Insert a chemistry formula - ChemType" + }; + this.customEditors.addEditor("chemistry", chemEditorParams); + /** + * Environment properties. This object contains data about the integration platform. + * @typedef IntegrationEnvironment + * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor. + * @property {String} IntegrationEnvironment.mode - Integration save mode. + * @property {String} IntegrationEnvironment.version - Integration version. + * + */ /** + * The environment properties object. + * @type {IntegrationEnvironment} + */ this.environment = {}; + /** + * @typedef EditionProperties + * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one. + * False otherwise. + * @property {HTMLImageElement} editionProperties.temporalImage- The image element. + * Null if the formula is new. + * @property {Range} editionProperties.latexRange - Tha range that contains the LaTeX formula. + * @property {Range} editionProperties.range - The range that contains the image element. + * @property {String} editionProperties.editMode - The edition mode. 'images' by default. + */ /** + * The properties of the current edition process. + * @type {EditionProperties} + */ this.editionProperties = {}; + this.editionProperties.isNewElement = true; + this.editionProperties.temporalImage = null; + this.editionProperties.latexRange = null; + this.editionProperties.range = null; + this.editionProperties.editionStartTime = null; + /** + * The {@link IntegrationModel} instance. + * @type {IntegrationModel} + */ this.integrationModel = null; + /** + * The {@link ContentManager} instance. + * @type {ContentManager} + */ this.contentManager = null; + /** + * The current browser. + * @type {String} + */ this.browser = (()=>{ + const ua = navigator.userAgent; + let browser = "none"; + if (ua.search("Edge/") >= 0) { + browser = "EDGE"; + } else if (ua.search("Chrome/") >= 0) { + browser = "CHROME"; + } else if (ua.search("Trident/") >= 0) { + browser = "IE"; + } else if (ua.search("Firefox/") >= 0) { + browser = "FIREFOX"; + } else if (ua.search("Safari/") >= 0) { + browser = "SAFARI"; + } + return browser; + })(); + /** + * Plugin listeners. + * @type {Array.} + */ this.listeners = new Listeners(); + /** + * Service provider properties. + * @type {ServiceProviderProperties} + */ this.serviceProviderProperties = {}; + if ("serviceProviderProperties" in coreProperties) { + this.serviceProviderProperties = coreProperties.serviceProviderProperties; + } else { + throw new Error("serviceProviderProperties property missing."); + } + } + /** + * Static property. + * Core listeners. + * @private + * @type {Listeners} + */ static get globalListeners() { + return Core._globalListeners; + } + /** + * Static property setter. + * Set core listeners. + * @param {Listeners} value - The property value. + * @ignore + */ static set globalListeners(value) { + Core._globalListeners = value; + } + /** + * Core state. Says if it was loaded previously. + * True when Core.init was called. Otherwise, false. + * @private + * @type {Boolean} + */ static get initialized() { + return Core._initialized; + } + /** + * Core state. Says if it was loaded previously. + * @param {Boolean} value - True to say that Core.init was called. Otherwise, false. + * @ignore + */ static set initialized(value) { + Core._initialized = value; + } + /** + * Sets the {@link Core.integrationModel} property. + * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property. + */ setIntegrationModel(integrationModel) { + this.integrationModel = integrationModel; + } + /** + * Sets the {@link Core.environment} property. + * @param {IntegrationEnvironment} integrationEnvironment - + * The {@link IntegrationEnvironment} object. + */ setEnvironment(integrationEnvironment) { + if ("editor" in integrationEnvironment) { + this.environment.editor = integrationEnvironment.editor; + } + if ("mode" in integrationEnvironment) { + this.environment.mode = integrationEnvironment.mode; + } + if ("version" in integrationEnvironment) { + this.environment.version = integrationEnvironment.version; + } + } + /** + * Sets the custom headers added on editor requests if contentManager isn't undefined. + * @returns {Object} headers - key value headers. + */ setHeaders(headers) { + const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers; + Configuration.set("customHeaders", headerObject); + } + /** + * Returns the current {@link ModalDialog} instance. + * @returns {ModalDialog} The current {@link ModalDialog} instance. + */ getModalDialog() { + return this.modalDialog; + } + /** + * Inits the {@link Core} class, doing the following: + * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON. + * - Updates {@link Configuration} class with the previous configuration properties. + * - Updates the {@link ServiceProvider} class using the configuration service path as reference. + * - Loads language strings. + * - Fires onLoad event. + * @param {Object} serviceParameters - Service parameters. + */ init() { + if (!Core.initialized) { + const serviceProviderListener = Listeners.newListener("onInit", ()=>{ + const jsConfiguration = ServiceProvider.getService("configurationjs", "", "get"); + const jsonConfiguration = JSON.parse(jsConfiguration); + Configuration.addConfiguration(jsonConfiguration); + // Adding JavaScript (not backend) configuration variables. + Configuration.addConfiguration(jsProperties); + // Fire 'onLoad' event: + // All integration must listen this event in order to know if the plugin + // has been properly loaded. + StringManager.language = this.language; + this.listeners.fire("onLoad", {}); + }); + ServiceProvider.addListener(serviceProviderListener); + ServiceProvider.init(this.serviceProviderProperties); + Core.initialized = true; + } else { + // Case when there are more than two editor instances. + // After the first editor all the other editors don't need to load any file or service. + this.listeners.fire("onLoad", {}); + } + } + /** + * Adds a {@link Listener} to the current instance of the {@link Core} class. + * @param {Listener} listener - The listener object. + */ addListener(listener) { + this.listeners.add(listener); + } + /** + * Adds the global {@link Listener} instance to {@link Core} class. + * @param {Listener} listener - The event listener to be added. + * @static + */ static addGlobalListener(listener) { + Core.globalListeners.add(listener); + } + beforeUpdateFormula(mathml, wirisProperties) { + /** + * This event is fired before updating the formula. + * @type {Object} + * @property {String} mathml - MathML to be transformed. + * @property {String} editMode - Edit mode. + * @property {Object} wirisProperties - Extra attributes for the formula. + * @property {String} language - Formula language. + */ const beforeUpdateEvent = new Event(); + beforeUpdateEvent.mathml = mathml; + // Cloning wirisProperties object + // We don't want wirisProperties object modified. + beforeUpdateEvent.wirisProperties = {}; + if (wirisProperties != null) { + Object.keys(wirisProperties).forEach((attr)=>{ + beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr]; + }); + } + // Read only. + beforeUpdateEvent.language = this.language; + beforeUpdateEvent.editMode = this.editMode; + if (this.listeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { + return {}; + } + if (Core.globalListeners.fire("onBeforeFormulaInsertion", beforeUpdateEvent)) { + return {}; + } + return { + mathml: beforeUpdateEvent.mathml, + wirisProperties: beforeUpdateEvent.wirisProperties + }; + } + /** + * Converts a MathML into it's correspondent image and inserts the image is + * inserted in a HTMLElement target by creating + * a new image or updating an existing one. + * @param {HTMLElement} focusElement - The HTMLElement to be focused after the insertion. + * @param {Window} windowTarget - The window element where the editable content is. + * @param {String} mathml - The MathML. + * @param {Array.} wirisProperties - The extra attributes for the formula. + * @returns {ReturnObject} - Object with the information of the node or latex to insert. + */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { + /** + * It is the object with the information of the node or latex to insert. + * @typedef ReturnObject + * @property {Node} [node] - The DOM node to insert. + * @property {String} [latex] - The latex to insert. + */ const returnObject = {}; + if (!mathml) { + this.insertElementOnSelection(null, focusElement, windowTarget); + } else if (this.editMode === "latex") { + returnObject.latex = Latex.getLatexFromMathML(mathml); + // this.integrationModel.getNonLatexNode is an integration wrapper + // to have special behaviours for nonLatex. + // Not all the integrations have special behaviours for nonLatex. + if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) { + const afterUpdateEvent = new Event(); + afterUpdateEvent.editMode = this.editMode; + afterUpdateEvent.windowTarget = windowTarget; + afterUpdateEvent.focusElement = focusElement; + afterUpdateEvent.latex = returnObject.latex; + this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml); + } else { + returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); + } + this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); + } else { + returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language); + this.insertElementOnSelection(returnObject.node, focusElement, windowTarget); + } + return returnObject; + } + afterUpdateFormula(focusElement, windowTarget, node, latex) { + /** + * This event is fired after update the formula. + * @type {Event} + * @param {String} editMode - edit mode. + * @param {Object} windowTarget - target window. + * @param {Object} focusElement - target element to be focused after update. + * @param {String} latex - LaTeX generated by the formula (editMode=latex). + * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise). + */ const afterUpdateEvent = new Event(); + afterUpdateEvent.editMode = this.editMode; + afterUpdateEvent.windowTarget = windowTarget; + afterUpdateEvent.focusElement = focusElement; + afterUpdateEvent.node = node; + afterUpdateEvent.latex = latex; + if (this.listeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { + return {}; + } + if (Core.globalListeners.fire("onAfterFormulaInsertion", afterUpdateEvent)) { + return {}; + } + return {}; + } + /** + * Sets the caret after a given Node and set the focus to the owner document. + * @param {Node} node - The Node element. + */ placeCaretAfterNode(node) { + if (node === null) return; + this.integrationModel.getSelection(); + const nodeDocument = node.ownerDocument; + if (typeof nodeDocument.getSelection !== "undefined" && !!node.parentElement) { + const range = nodeDocument.createRange(); + range.setStartAfter(node); + range.collapse(true); + const selection = nodeDocument.getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + nodeDocument.body.focus(); + } + } + /** + * Replaces a Selection object with an HTMLElement. + * @param {HTMLElement} element - The HTMLElement to replace the selection. + * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace. + * @param {Window} windowTarget - The window target. + */ insertElementOnSelection(element, focusElement, windowTarget) { + let mathmlOrigin = null; + if (this.editionProperties.isNewElement) { + if (element) { + if (focusElement.type === "textarea") { + Util.updateTextArea(focusElement, element.textContent); + } else if (document.selection && document.getSelection === 0) { + let range = windowTarget.document.selection.createRange(); + windowTarget.document.execCommand("InsertImage", false, element.src); + if (!("parentElement" in range)) { + windowTarget.document.execCommand("delete", false); + range = windowTarget.document.selection.createRange(); + windowTarget.document.execCommand("InsertImage", false, element.src); + } + if ("parentElement" in range) { + const temporalObject = range.parentElement(); + if (temporalObject.nodeName.toUpperCase() === "IMG") { + temporalObject.parentNode.replaceChild(element, temporalObject); + } else { + // IE9 fix: parentNode() does not return the IMG node, + // returns the parent DIV node. In IE < 9, pasteHTML does not work well. + range.pasteHTML(Util.createObjectCode(element)); + } + } + } else { + let range = null; + // In IE is needed keep the range due to after focus the modal window + // it can't be retrieved the last selection. + if (this.editionProperties.range) { + ({ range } = this.editionProperties); + this.editionProperties.range = null; + } else { + const editorSelection = this.integrationModel.getSelection(); + range = editorSelection.getRangeAt(0); + } + // Delete if something was surrounded. + range.deleteContents(); + let node = range.startContainer; + const position = range.startOffset; + if (node.nodeType === 3) { + // TEXT_NODE. + node = node.splitText(position); + node.parentNode.insertBefore(element, node); + } else if (node.nodeType === 1) { + // ELEMENT_NODE. + node.insertBefore(element, node.childNodes[position]); + } + this.placeCaretAfterNode(element); + } + } else if (focusElement.type === "textarea") { + focusElement.focus(); + } else { + const editorSelection = this.integrationModel.getSelection(); + editorSelection.removeAllRanges(); + if (this.editionProperties.range) { + const { range } = this.editionProperties; + this.editionProperties.range = null; + editorSelection.addRange(range); + } + } + } else if (this.editionProperties.latexRange) { + if (document.selection && document.getSelection === 0) { + this.editionProperties.isNewElement = true; + this.editionProperties.latexRange.select(); + this.insertElementOnSelection(element, focusElement, windowTarget); + } else { + this.editionProperties.latexRange.deleteContents(); + this.editionProperties.latexRange.insertNode(element); + this.placeCaretAfterNode(element); + } + } else if (focusElement.type === "textarea") { + let item; + // Wrapper for some integrations that can have special behaviours to show latex. + if (typeof this.integrationModel.getSelectedItem !== "undefined") { + item = this.integrationModel.getSelectedItem(focusElement, false); + } else { + item = Util.getSelectedItemOnTextarea(focusElement); + } + Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition); + } else { + mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml; + if (element && element.nodeName.toLowerCase() === "img") { + // Editor empty, formula has been erased on edit. + // There are editors (e.g: CKEditor) that put attributes in images. + // We don't allow that behaviour in our images. + Image.removeImgDataAttributes(this.editionProperties.temporalImage); + // Clone is needed to maintain event references to temporalImage. + Image.clone(element, this.editionProperties.temporalImage); + } else { + this.editionProperties.temporalImage.remove(); + } + this.placeCaretAfterNode(this.editionProperties.temporalImage); + } + // Build the telemeter payload separated to delete null/undefined entries. + const mathml = element?.dataset?.mathml; + let payload = { + mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, + mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, + elapsed_time: Date.now() - this.editionProperties.editionStartTime, + editor_origin: null, + toolbar: this.modalDialog.contentManager.toolbar, + size: mathml?.length + }; + // Remove the desired null keys. + Object.keys(payload).forEach((key)=>{ + if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; + }); + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("INSERTED_FORMULA", { + ...payload + }); + } catch (error) { + console.error("Error tracking INSERTED_FORMULA", error); + } + } + /** + * Opens a modal dialog containing MathType editor.. + * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted. + * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise. + */ openModalDialog(target, isIframe) { + // Count the time since the editor is open + this.editionProperties.editionStartTime = Date.now(); + // Textarea elements don't have normal document ranges. It only accepts latex edit. + this.editMode = "images"; + // In IE is needed keep the range due to after focus the modal window + // it can't be retrieved the last selection. + try { + if (isIframe) { + // Is needed focus the target first. + target.contentWindow.focus(); + const selection = target.contentWindow.getSelection(); + this.editionProperties.range = selection.getRangeAt(0); + } else { + // Is needed focus the target first. + target.focus(); + const selection = getSelection(); + this.editionProperties.range = selection.getRangeAt(0); + } + } catch (e) { + this.editionProperties.range = null; + } + if (isIframe === undefined) { + isIframe = true; + } + this.editionProperties.latexRange = null; + if (target) { + let selectedItem; + if (typeof this.integrationModel.getSelectedItem !== "undefined") { + selectedItem = this.integrationModel.getSelectedItem(target, isIframe); + } else { + selectedItem = Util.getSelectedItem(target, isIframe); + } + // Check LaTeX if and only if the node is a text node (nodeType==3). + if (selectedItem) { + // Case when image was selected and button pressed. + if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get("imageClassName"))) { + this.editionProperties.temporalImage = selectedItem.node; + this.editionProperties.isNewElement = false; + } else if (selectedItem.node.nodeType === 3) { + // If it's a text node means that editor is working with LaTeX. + if (this.integrationModel.getMathmlFromTextNode) { + // If integration has this function it isn't set range due to we don't + // know if it will be put into a textarea as a text or image. + const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition); + if (mathml) { + this.editMode = "latex"; + this.editionProperties.isNewElement = false; + this.editionProperties.temporalImage = document.createElement("img"); + this.editionProperties.temporalImage.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + } + } else { + const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition); + if (latexResult) { + const mathml = Latex.getMathMLFromLatex(latexResult.latex); + this.editMode = "latex"; + this.editionProperties.isNewElement = false; + this.editionProperties.temporalImage = document.createElement("img"); + this.editionProperties.temporalImage.setAttribute(Configuration.get("imageMathmlAttribute"), MathML.safeXmlEncode(mathml)); + const windowTarget = isIframe ? target.contentWindow : window; + if (target.tagName.toLowerCase() !== "textarea") { + if (document.selection) { + let leftOffset = 0; + let previousNode = latexResult.startNode.previousSibling; + while(previousNode){ + leftOffset += Util.getNodeLength(previousNode); + previousNode = previousNode.previousSibling; + } + this.editionProperties.latexRange = windowTarget.document.selection.createRange(); + this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode); + this.editionProperties.latexRange.move("character", leftOffset + latexResult.startPosition); + this.editionProperties.latexRange.moveEnd("character", latexResult.latex.length + 4); // Plus 4 for the '$$' characters. + } else { + this.editionProperties.latexRange = windowTarget.document.createRange(); + this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition); + this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition); + } + } + } + } + } + } else if (target.tagName.toLowerCase() === "textarea") { + // By default editMode is 'images', but when target is a textarea it needs to be 'latex'. + this.editMode = "latex"; + } + } + // Setting an object with the editor parameters. + // Editor parameters can be customized in several ways: + // 1 - editorAttributes: Contains the default editor attributes, + // usually the metrics in a comma separated string. Always exists. + // 2 - editorParameters: Object containing custom editor parameters. + // These parameters are defined in the backend. So they affects all integration instances. + // The backend send the default editor attributes in a coma separated + // with the following structure: key1=value1,key2=value2... + const defaultEditorAttributesArray = Configuration.get("editorAttributes").split(", "); + const defaultEditorAttributes = {}; + for(let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1){ + const tempAttribute = defaultEditorAttributesArray[i].split("="); + const key = tempAttribute[0]; + const value = tempAttribute[1]; + defaultEditorAttributes[key] = value; + } + // Custom editor parameters. + const editorAttributes = { + language: this.language + }; + // Editor parameters in backend, usually configuration.ini. + const serverEditorParameters = Configuration.get("editorParameters"); + // Editor parameters through JavaScript configuration. + const clientEditorParameters = this.integrationModel.editorParameters; + Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters); + Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters); + // Now, update backwards: if user has set a custom language, pass that back to core properties + this.language = editorAttributes.language; + StringManager.language = this.language; + editorAttributes.rtl = this.integrationModel.rtl; + const customHeaders = Configuration.get("customHeaders"); + // This is not being used in the code, we are keeping it just in case it's needed. + // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend. + editorAttributes.customHeaders = typeof customHeaders === "string" ? Util.convertStringToObject(customHeaders) : customHeaders; + const contentManagerAttributes = {}; + contentManagerAttributes.editorAttributes = editorAttributes; + contentManagerAttributes.language = this.language; + contentManagerAttributes.customEditors = this.customEditors; + contentManagerAttributes.environment = this.environment; + if (this.modalDialog == null) { + this.modalDialog = new ModalDialog(editorAttributes); + this.contentManager = new ContentManager(contentManagerAttributes); + // When an instance of ContentManager is created we need to wait until + // the ContentManager is ready by listening 'onLoad' event. + const listener = Listeners.newListener("onLoad", ()=>{ + this.contentManager.dbclick = this.editionProperties.dbclick; + this.contentManager.isNewElement = this.editionProperties.isNewElement; + if (this.editionProperties.temporalImage != null) { + const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute"))); + this.contentManager.mathML = mathML; + } + }); + this.contentManager.addListener(listener); + this.contentManager.init(); + this.modalDialog.setContentManager(this.contentManager); + this.contentManager.setModalDialogInstance(this.modalDialog); + } else { + this.contentManager.dbclick = this.editionProperties.dbclick; + this.contentManager.isNewElement = this.editionProperties.isNewElement; + if (this.editionProperties.temporalImage != null) { + const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get("imageMathmlAttribute"))); + this.contentManager.mathML = mathML; + } + } + this.contentManager.setIntegrationModel(this.integrationModel); + this.modalDialog.open(); + } + /** + * Returns the {@link CustomEditors} instance. + * @return {CustomEditors} The current {@link CustomEditors} instance. + */ getCustomEditors() { + return this.customEditors; + } + } + /** + * Core static listeners. + * @type {Listeners} + * @private + */ Core._globalListeners = new Listeners(); + /** + * Resources state. Says if they were loaded or not. + * @type {Boolean} + * @private + */ Core._initialized = false; - var warnIcon = - '\n\n\n'; + var warnIcon = "\n\n\n"; - // eslint-disable-next-line no-unused-vars, import/named - /** - * @typedef {Object} IntegrationModelProperties - * @property {string} configurationService - Configuration service path. - * This parameter is needed to determine all services paths. - * @property {HTMLElement} integrationModelProperties.target - HTML target. - * @property {string} integrationModelProperties.scriptName - Integration script name. - * Usually the name of the integration script. - * @property {Object} integrationModelProperties.environment - integration environment properties. - * @property {Object} [integrationModelProperties.callbackMethodArguments] - object containing - * callback method arguments. - * @property {string} [integrationModelProperties.version] - integration version number. - * @property {Object} [integrationModelProperties.editorObject] - object containing - * the integration editor instance. - * @property {boolean} [integrationModelProperties.rtl] - true if the editor is in RTL mode. - * false otherwise. - * @property {ServiceProviderProperties} [integrationModelProperties.serviceProviderProperties] - * - The service parameters. - * @property {Object} [integrationModelProperties.integrationParameters] - * - Overwritten integration parameters. - */ class IntegrationModel { - /** - * @classdesc - * This class represents an integration model, allowing the integration script to - * communicate with Core class. Each integration must extend this class. - * @constructs - * @param {IntegrationModelProperties} integrationModelProperties - */ constructor(integrationModelProperties) { - /** - * Language. Needed for accessibility and locales. English by default. - */ this.language = "en"; - /** - * Service parameters - * @type {ServiceProviderProperties} - */ this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {}; - /** - * Configuration service path. The integration service is needed by Core class to - * load all the backend configuration into the frontend and also to create the paths - * of all services (all services lives in the same route). Mandatory property. - */ this.configurationService = ""; - if ("configurationService" in integrationModelProperties) { - this.serviceProviderProperties.URI = integrationModelProperties.configurationService; - console.warn("Deprecated property configurationService. Use serviceParameters on instead.", [ - integrationModelProperties.configurationService, - ]); - } - /** - * Plugin version. Needed to stats and caching. - * @type {string} - */ this.version = "version" in integrationModelProperties ? integrationModelProperties.version : ""; - /** - * DOM target in which the plugin works. Needed to associate events, insert formulas, etc. - * Mandatory property. - */ this.target = null; - if ("target" in integrationModelProperties) { - this.target = integrationModelProperties.target; - } else { - throw new Error("IntegrationModel constructor error: target property missed."); - } - /** - * Integration script name. Needed to know the plugin path. - */ if ("scriptName" in integrationModelProperties) { - this.scriptName = integrationModelProperties.scriptName; - } - /** - * Object containing the arguments needed by the callback function. - */ this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {}; - /** - * Contains information about the integration environment: - * like the name of the editor, the version, etc. - */ this.environment = integrationModelProperties.environment ?? {}; - /** - * Indicates if the DOM target is - or not - and iframe. - */ this.isIframe = false; - if (this.target != null) { - this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; - } - /** - * Instance of the integration editor object. Usually the entry point to access the API - * of a HTML editor. - */ this.editorObject = integrationModelProperties.editorObject ?? null; - /** - * Specifies if the direction of the text is RTL. false by default. - */ this.rtl = integrationModelProperties.rtl ?? false; - /** - * Specifies if the integration model exposes the locale strings. false by default. - */ this.managesLanguage = integrationModelProperties.managesLanguage ?? false; - /** - * Specify if editor will open in hand mode only - */ this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false; - /** - * Indicates if an image is selected. Needed to resize the image to the original size in case - * the image is resized. - * @type {boolean} - */ this.temporalImageResizing = false; - /** - * The Core class instance associated to the integration model. - * @type {Core} - */ this.core = null; - /** - * Integration model listeners. - * @type {Listeners} - */ this.listeners = new Listeners(); - // Parameters overwrite. - if ("integrationParameters" in integrationModelProperties) { - IntegrationModel.integrationParameters.forEach((parameter) => { - if (parameter in integrationModelProperties.integrationParameters) { - // Don't add empty parameters. - const value = integrationModelProperties.integrationParameters[parameter]; - if (Object.keys(value).length !== 0) { - this[parameter] = value; - } - } - }); - } - } - /** - * Init function. Usually called from the integration side once the core.js file is loaded. - */ init() { - // Check if language is an object and select the property necessary - this.language = this.getLanguage(); - // We need to wait until Core class is loaded ('onLoad' event) before - // call the callback method. - const listener = Listeners.newListener("onLoad", () => { - this.callbackFunction(this.callbackMethodArguments); - }); - // Backwards compatibility. - if (this.serviceProviderProperties.URI.indexOf("configuration") !== -1) { - const uri = this.serviceProviderProperties.URI; - const server = ServiceProvider.getServerLanguageFromService(uri); - this.serviceProviderProperties.server = server; - const configurationIndex = this.serviceProviderProperties.URI.indexOf("configuration"); - const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex); - this.serviceProviderProperties.URI = subsTring; - } - let serviceParametersURI = this.serviceProviderProperties.URI; - serviceParametersURI = - serviceParametersURI.indexOf("/") === 0 || serviceParametersURI.indexOf("http") === 0 - ? serviceParametersURI - : Util.concatenateUrl(this.getPath(), serviceParametersURI); - this.serviceProviderProperties.URI = serviceParametersURI; - const coreProperties = {}; - coreProperties.serviceProviderProperties = this.serviceProviderProperties; - this.setCore(new Core(coreProperties)); - this.core.addListener(listener); - this.core.language = this.language; - // Initializing Core class. - this.core.init(); - // TODO: Move to Core constructor. - this.core.setEnvironment(this.environment); - // No internet connection modal. - let attributes = {}; - attributes.class = attributes.id = "wrs_modal_offline"; - this.offlineModal = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_content_offline"; - this.offlineModalContent = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_offline_close"; - this.offlineModalClose = Util.createElement("span", attributes); - this.offlineModalClose.innerHTML = "×"; - attributes = {}; - attributes.class = "wrs_modal_offline_warn"; - this.offlineModalWarn = Util.createElement("span", attributes); - let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`; - this.offlineModalWarn.setAttribute("style", generalStyle); - attributes = {}; - attributes.class = "wrs_modal_offline_text_container"; - this.offlineModalMessage = Util.createElement("div", attributes); - attributes = {}; - attributes.class = "wrs_modal_offline_text_warn"; - this.offlineModalMessage1 = Util.createElement("p", attributes); - this.offlineModalMessage1.innerHTML = "You are not online!"; - attributes = {}; - attributes.class = "wrs_modal_offline_text"; - this.offlineModalMessage2 = Util.createElement("p", attributes); - this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`; - //Append offline modal elements - this.offlineModalContent.appendChild(this.offlineModalClose); - this.offlineModalMessage.appendChild(this.offlineModalMessage1); - this.offlineModalMessage.appendChild(this.offlineModalMessage2); - this.offlineModalContent.appendChild(this.offlineModalMessage); - this.offlineModalContent.appendChild(this.offlineModalWarn); - this.offlineModal.appendChild(this.offlineModalContent); - document.body.appendChild(this.offlineModal); - let modal = document.getElementById("wrs_modal_offline"); - this.offlineModalClose.addEventListener("click", function () { - modal.style.display = "none"; - }); - // Store editor name for telemetry purposes. - let editorName = this.environment.editor; - editorName = editorName.slice(0, -1); // Remove version number from editors - if (editorName.includes("TinyMCE")) editorName = "TinyMCE"; // Remove version from Tinymce editor. - if (editorName.includes("Generic")) editorName = "Generic"; // Remove version from Generic editor. - let solutionTelemeter = editorName; - // If moodle, add information to hosts and solution. - let isMoodle = !!(typeof M === "object" && M !== null), - lms; - if (isMoodle) { - solutionTelemeter = "Moodle"; - lms = { - nam: "moodle", - fam: "lms", - ver: this.environment.moodleVersion, - category: this.environment.moodleCourseCategory, - course: this.environment.moodleCourseName, - }; - if (!editorName.includes("TinyMCE")) { - editorName = "Atto"; - } - } - // Get the OS and its version. - let OSData = this.getOS(); - // Get the broswer and its version. - let broswerData = this.getBrowser(); - // Create list of hosts to send to telemetry. - let hosts = [ - { - nam: broswerData.detectedBrowser, - fam: "browser", - ver: broswerData.versionBrowser, - }, - { - nam: editorName.toLowerCase(), - fam: "html-editor", - ver: this.environment.editorVersion, - }, - { - nam: OSData.detectedOS, - fam: "os", - ver: OSData.versionOS, - }, - { - nam: window.location.hostname, - fam: "domain", - }, - lms, - ]; - // Filter hosts to remove empty objects and empty keys. - hosts = hosts.filter(function (element) { - if (element) Object.keys(element).forEach((key) => (element[key] === "unknown" ? delete element[key] : {})); - return element !== undefined; - }); - // Initialize telemeter - Telemeter.init({ - solution: { - name: "MathType for " + solutionTelemeter, - version: this.version, - }, - hosts: hosts, - config: { - test: false, - debug: false, - dry_run: false, - api_key: "eda2ce9b-0e8a-46f2-acdd-c228a615314e", - }, - url: undefined, - }); - } - /** - * Returns the Browser name and its version. - * @return {array} - detectedBrowser = Operating System name. - * versionBrowser = Operating System version. - */ getBrowser() { - // default value for OS just in case nothing is detected - let detectedBrowser = "unknown", - versionBrowser = "unknown"; - let userAgent = window.navigator.userAgent; - if (/Brave/.test(userAgent)) { - detectedBrowser = "brave"; - if (userAgent.indexOf("Brave/")) { - let start = userAgent.indexOf("Brave") + 6; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } - } else if (userAgent.indexOf("Edg/") !== -1) { - detectedBrowser = "edge_chromium"; - let start = userAgent.indexOf("Edg/") + 4; - versionBrowser = userAgent - .substring(start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Edg/.test(userAgent)) { - detectedBrowser = "edge"; - let start = userAgent.indexOf("Edg") + 3; - start = start + userAgent.substring(start).indexOf("/"); - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) { - detectedBrowser = "firefox"; - let start = userAgent.indexOf("Firefox"); - start = start === -1 ? userAgent.indexOf("FxiOS") : start; - start = start + userAgent.substring(start).indexOf("/") + 1; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent.substring(start, end + start).replace("_", "."); - } else if (/OPR/.test(userAgent)) { - detectedBrowser = "opera"; - let start = userAgent.indexOf("OPR/") + 4; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) { - detectedBrowser = "chrome"; - let start = userAgent.indexOf("Chrome"); - start = start === -1 ? userAgent.indexOf("CriOS") : start; - start = start + userAgent.substring(start).indexOf("/") + 1; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent.substring(start, end + start).replace("_", "."); - } else if (/Safari/.test(userAgent)) { - detectedBrowser = "safari"; - let start = userAgent.indexOf("Version/"); - start = start + userAgent.substring(start).indexOf("/") + 1; - let end = userAgent.substring(start).indexOf(" "); - end = end === -1 ? userAgent.lastIndexOf("") : end; - versionBrowser = userAgent.substring(start, end + start).replace("_", "."); - } - return { - detectedBrowser, - versionBrowser, - }; - } - /** - * Returns the operating system and its version. - * @return {array} - detectedOS = Operating System name. - * versionOS = Operating System version. - */ getOS() { - // default value for OS just in case nothing is detected - let detectedOS = "unknown", - versionOS = "unknown"; - // Retrieve properties to easily detect the OS - let userAgent = window.navigator.userAgent, - platform = window.navigator.platform, - macosPlatforms = ["Macintosh", "MacIntel", "MacPPC", "Mac68K"], - windowsPlatforms = ["Win32", "Win64", "Windows", "WinCE"], - iosPlatforms = ["iPhone", "iPad", "iPod"]; - // Find OS and their respective versions - if (macosPlatforms.indexOf(platform) !== -1) { - detectedOS = "macos"; - if (userAgent.indexOf("OS X") !== -1) { - let start = userAgent.indexOf("OS X") + 5; - let end = userAgent.substring(start).indexOf(" "); - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } - } else if (iosPlatforms.indexOf(platform) !== -1) { - detectedOS = "ios"; - if (userAgent.indexOf("OS ") !== -1) { - let start = userAgent.indexOf("OS ") + 3; - let end = userAgent.substring(start).indexOf(")"); - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } - } else if (windowsPlatforms.indexOf(platform) !== -1) { - detectedOS = "windows"; - let start = userAgent.indexOf("Windows"); - let end = userAgent.substring(start).indexOf(";"); - if (end === -1) { - end = userAgent.substring(start).indexOf(")"); - } - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/Android/.test(userAgent)) { - detectedOS = "android"; - let start = userAgent.indexOf("Android"); - let end = userAgent.substring(start).indexOf(";"); - if (end === -1) { - end = userAgent.substring(start).indexOf(")"); - } - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (/CrOS/.test(userAgent)) { - detectedOS = "chromeos"; - let start = userAgent.indexOf("CrOS ") + 5; - start = start + userAgent.substring(start).indexOf(" "); - let end = userAgent.substring(start).indexOf(")"); - versionOS = userAgent - .substring(start, end + start) - .replace("_", ".") - .replace(/[^\d.-]/g, ""); - } else if (detectedOS === "unknown" && /Linux/.test(platform)) { - detectedOS = "linux"; - } - return { - detectedOS, - versionOS, - }; - } - /** - * Returns the absolute path of the integration script. - * @return {string} - Absolute path for the integration script. - */ getPath() { - if (typeof this.scriptName === "undefined") { - throw new Error("scriptName property needed for getPath."); - } - const col = document.getElementsByTagName("script"); - let path = ""; - for (let i = 0; i < col.length; i += 1) { - const j = col[i].src.lastIndexOf(this.scriptName); - if (j >= 0) { - path = col[i].src.substr(0, j - 1); - } - } - return path; - } - /** - * Returns integration model plugin version - * @param {string} - Plugin version - */ getVersion() { - return this.version; - } - /** - * Sets the language property. - * @param {string} language - language code. - */ setLanguage(language) { - this.language = language; - } - /** - * Sets a Core instance. - * @param {Core} core - instance of Core class. - */ setCore(core) { - this.core = core; - core.setIntegrationModel(this); - } - /** - * Returns the Core instance. - * @returns {Core} instance of Core class. - */ getCore() { - return this.core; - } - /** - * Sets the object target and updates the iframe property. - * @param {HTMLElement} target - target object. - */ setTarget(target) { - this.target = target; - this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; - } - /** - * Sets the editor object. - * @param {Object} editorObject - The editor object. - */ setEditorObject(editorObject) { - this.editorObject = editorObject; - } - /** - * Opens formula editor to editing a new formula. Can be overwritten in order to make some - * actions from integration part before the formula is edited. - */ openNewFormulaEditor() { - if (window.navigator.onLine) { - this.core.editionProperties.dbclick = false; - this.core.editionProperties.isNewElement = true; - this.core.openModalDialog(this.target, this.isIframe); - } else { - let modal = document.getElementById("wrs_modal_offline"); - modal.style.display = "block"; - } - } - /** - * Opens formula editor to editing an existing formula. Can be overwritten in order to make some - * actions from integration part before the formula is edited. - */ openExistingFormulaEditor() { - if (window.navigator.onLine) { - this.core.editionProperties.isNewElement = false; - this.core.openModalDialog(this.target, this.isIframe); - } else { - let modal = document.getElementById("wrs_modal_offline"); - modal.style.display = "block"; - } - } - /** - * Wrapper to Core.updateFormula method. - * Transform a MathML into a image formula. - * Then the image formula is inserted in the specified target, creating a new image (new formula) - * or updating an existing one. - * @param {string} mathml - MathML to generate the formula. - * @param {string} editMode - Edit Mode (LaTeX or images). - */ updateFormula(mathml) { - if (this.editorParameters) { - mathml = com.wiris.editor.util.EditorUtils.addAnnotation( - mathml, - "application/vnd.wiris.mtweb-params+json", - JSON.stringify(this.editorParameters), - ); - } - let focusElement; - let windowTarget; - const wirisProperties = null; - if (this.isIframe) { - focusElement = this.target.contentWindow; - windowTarget = this.target.contentWindow; - } else { - focusElement = this.target; - windowTarget = window; - } - let obj = this.core.beforeUpdateFormula(mathml, wirisProperties); - if (!obj) { - return ""; - } - obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties); - if (!obj) { - return ""; - } - return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex); - } - /** - * Wrapper to Core.insertFormula method. - * Inserts the formula in the specified target, creating - * a new image (new formula) or updating an existing one. - * @param {string} mathml - MathML to generate the formula. - * @param {string} editMode - Edit Mode (LaTeX or images). - * @returns {ReturnObject} - Object with the information of the node or latex to insert. - */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties); - // Delete temporal image when inserted - this.core.editionProperties.temporalImage = null; - return obj; - } - /** - * Returns the target selection. - * @returns {Selection} target selection. - */ getSelection() { - if (this.isIframe) { - this.target.contentWindow.focus(); - return this.target.contentWindow.getSelection(); - } - this.target.focus(); - return window.getSelection(); - } - /** - * Add events to formulas in the DOM target. The events added are the following: - * - doubleClickHandler: handles Double-click event on formulas by opening an editor - * to edit them. - * - mouseDownHandler: handles mouse down event on formulas by saving the size of the formula - * in case the the formula is resized. - * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size - * in case the formula is resized. - */ addEvents() { - const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target; - Util.addElementEvents( - eventTarget, - (element, event) => { - this.doubleClickHandler(element, event); - // Avoid creating the double click listener more than once for each element. - event.stopImmediatePropagation(); - }, - (element, event) => { - this.mousedownHandler(element, event); - }, - (element, event) => { - this.mouseupHandler(element, event); - }, - ); - } - /** - * Remove events to formulas in the DOM target. - */ removeEvents() { - const eventTarget = - this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target; - if (!eventTarget) { - return; - } - Util.removeElementEvents(eventTarget); - } - /** - * Remove events, modals and set this.editorObject to null in order to prevent memory leaks. - */ destroy() { - this.removeEvents(); - // Destroy modal dialog if exists. - if (this.core.modalDialog) { - this.core.modalDialog.destroy(); - } - // Remove offline modal dialog if exists. - if (this.offlineModal) { - this.offlineModal.remove(); - } - this.editorObject = null; - } - /** - * Handles a Double-click on the target element. Opens an editor - * to re-edit the double-clicked formula. - * @param {HTMLElement} element - DOM object target. - */ doubleClickHandler(element) { - this.core.editionProperties.dbclick = true; - if (element.nodeName.toLowerCase() === "img") { - this.core.getCustomEditors().disable(); - const customEditorAttributeName = Configuration.get("imageCustomEditorName"); - if (element.hasAttribute(customEditorAttributeName)) { - const customEditor = element.getAttribute(customEditorAttributeName); - this.core.getCustomEditors().enable(customEditor); - } - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - this.core.editionProperties.temporalImage = element; - this.core.editionProperties.isNewElement = true; - this.openExistingFormulaEditor(); - } - } - } - /** - * Handles a mouse up event on the target element. Restores the image size to avoid - * resizing formulas. - */ mouseupHandler() { - if (this.temporalImageResizing) { - setTimeout(() => { - Image.fixAfterResize(this.temporalImageResizing); - }, 10); - } - } - /** - * Handles a mouse down event on the target element. Saves the formula size to avoid - * resizing formulas. - * @param {HTMLElement} element - target element. - */ mousedownHandler(element) { - if (element.nodeName.toLowerCase() === "img") { - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - this.temporalImageResizing = element; - } - } - } - /** - * Returns the integration language. By default the browser agent. This method - * should be overwritten to obtain the integration language, for example using the - * plugin API of an HTML editor. - * @returns {string} integration language. - */ getLanguage() { - return this.getBrowserLanguage(); - } - /** - * Returns the browser language. - * @returns {string} the browser language. - */ // eslint-disable-next-line class-methods-use-this - getBrowserLanguage() { - let language = "en"; - if (navigator.userLanguage) { - language = navigator.userLanguage.substring(0, 2); - } else if (navigator.language) { - language = navigator.language.substring(0, 2); - } else { - language = "en"; - } - return language; - } - /** - * This function is called once the {@link Core} is loaded. IntegrationModel class - * will fire this method when {@link Core} 'onLoad' event is fired. - * This method should content all the logic to init - * the integration. - */ callbackFunction() { - // It's needed to wait until the integration target is ready. The event is fired - // from the integration side. - const listener = Listeners.newListener("onTargetReady", () => { - this.addEvents(this.target); - }); - this.listeners.add(listener); - } - /** - * Function called when the content submits an action. - */ // eslint-disable-next-line class-methods-use-this - notifyWindowClosed() { - // Nothing. - } - /** - * Wrapper. - * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js - * in order to get mathml from a text node that can contain normal LaTeX or other chosen text. - * @param {string} textNode - text node to extract the MathML. - * @param {int} caretPosition - caret position inside the text node. - * @returns {string} MathML inside the text node. - */ // eslint-disable-next-line class-methods-use-this, no-unused-vars - getMathmlFromTextNode(textNode, caretPosition) {} - /** - * Wrapper - * It fills wrs event object of nonLatex with the desired data. - * @param {Object} event - event object. - * @param {Object} window dom window object. - * @param {string} mathml valid mathml. - */ // eslint-disable-next-line class-methods-use-this, no-unused-vars - fillNonLatexNode(event, window1, mathml) {} - /** + // eslint-disable-next-line no-unused-vars, import/named + /** + * @typedef {Object} IntegrationModelProperties + * @property {string} configurationService - Configuration service path. + * This parameter is needed to determine all services paths. + * @property {HTMLElement} integrationModelProperties.target - HTML target. + * @property {string} integrationModelProperties.scriptName - Integration script name. + * Usually the name of the integration script. + * @property {Object} integrationModelProperties.environment - integration environment properties. + * @property {Object} [integrationModelProperties.callbackMethodArguments] - object containing + * callback method arguments. + * @property {string} [integrationModelProperties.version] - integration version number. + * @property {Object} [integrationModelProperties.editorObject] - object containing + * the integration editor instance. + * @property {boolean} [integrationModelProperties.rtl] - true if the editor is in RTL mode. + * false otherwise. + * @property {ServiceProviderProperties} [integrationModelProperties.serviceProviderProperties] + * - The service parameters. + * @property {Object} [integrationModelProperties.integrationParameters] + * - Overwritten integration parameters. + */ class IntegrationModel { + /** + * @classdesc + * This class represents an integration model, allowing the integration script to + * communicate with Core class. Each integration must extend this class. + * @constructs + * @param {IntegrationModelProperties} integrationModelProperties + */ constructor(integrationModelProperties){ + /** + * Language. Needed for accessibility and locales. English by default. + */ this.language = "en"; + /** + * Service parameters + * @type {ServiceProviderProperties} + */ this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {}; + /** + * Configuration service path. The integration service is needed by Core class to + * load all the backend configuration into the frontend and also to create the paths + * of all services (all services lives in the same route). Mandatory property. + */ this.configurationService = ""; + if ("configurationService" in integrationModelProperties) { + this.serviceProviderProperties.URI = integrationModelProperties.configurationService; + console.warn("Deprecated property configurationService. Use serviceParameters on instead.", [ + integrationModelProperties.configurationService + ]); + } + /** + * Plugin version. Needed to stats and caching. + * @type {string} + */ this.version = "version" in integrationModelProperties ? integrationModelProperties.version : ""; + /** + * DOM target in which the plugin works. Needed to associate events, insert formulas, etc. + * Mandatory property. + */ this.target = null; + if ("target" in integrationModelProperties) { + this.target = integrationModelProperties.target; + } else { + throw new Error("IntegrationModel constructor error: target property missed."); + } + /** + * Integration script name. Needed to know the plugin path. + */ if ("scriptName" in integrationModelProperties) { + this.scriptName = integrationModelProperties.scriptName; + } + /** + * Object containing the arguments needed by the callback function. + */ this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {}; + /** + * Contains information about the integration environment: + * like the name of the editor, the version, etc. + */ this.environment = integrationModelProperties.environment ?? {}; + /** + * Indicates if the DOM target is - or not - and iframe. + */ this.isIframe = false; + if (this.target != null) { + this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; + } + /** + * Instance of the integration editor object. Usually the entry point to access the API + * of a HTML editor. + */ this.editorObject = integrationModelProperties.editorObject ?? null; + /** + * Specifies if the direction of the text is RTL. false by default. + */ this.rtl = integrationModelProperties.rtl ?? false; + /** + * Specifies if the integration model exposes the locale strings. false by default. + */ this.managesLanguage = integrationModelProperties.managesLanguage ?? false; + /** + * Specify if editor will open in hand mode only + */ this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false; + /** + * Indicates if an image is selected. Needed to resize the image to the original size in case + * the image is resized. + * @type {boolean} + */ this.temporalImageResizing = false; + /** + * The Core class instance associated to the integration model. + * @type {Core} + */ this.core = null; + /** + * Integration model listeners. + * @type {Listeners} + */ this.listeners = new Listeners(); + // Parameters overwrite. + if ("integrationParameters" in integrationModelProperties) { + IntegrationModel.integrationParameters.forEach((parameter)=>{ + if (parameter in integrationModelProperties.integrationParameters) { + // Don't add empty parameters. + const value = integrationModelProperties.integrationParameters[parameter]; + if (Object.keys(value).length !== 0) { + this[parameter] = value; + } + } + }); + } + } + /** + * Init function. Usually called from the integration side once the core.js file is loaded. + */ init() { + // Check if language is an object and select the property necessary + this.language = this.getLanguage(); + // We need to wait until Core class is loaded ('onLoad' event) before + // call the callback method. + const listener = Listeners.newListener("onLoad", ()=>{ + this.callbackFunction(this.callbackMethodArguments); + }); + // Backwards compatibility. + if (this.serviceProviderProperties.URI.indexOf("configuration") !== -1) { + const uri = this.serviceProviderProperties.URI; + const server = ServiceProvider.getServerLanguageFromService(uri); + this.serviceProviderProperties.server = server; + const configurationIndex = this.serviceProviderProperties.URI.indexOf("configuration"); + const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex); + this.serviceProviderProperties.URI = subsTring; + } + let serviceParametersURI = this.serviceProviderProperties.URI; + serviceParametersURI = serviceParametersURI.indexOf("/") === 0 || serviceParametersURI.indexOf("http") === 0 ? serviceParametersURI : Util.concatenateUrl(this.getPath(), serviceParametersURI); + this.serviceProviderProperties.URI = serviceParametersURI; + const coreProperties = {}; + coreProperties.serviceProviderProperties = this.serviceProviderProperties; + this.setCore(new Core(coreProperties)); + this.core.addListener(listener); + this.core.language = this.language; + // Initializing Core class. + this.core.init(); + // TODO: Move to Core constructor. + this.core.setEnvironment(this.environment); + // No internet connection modal. + let attributes = {}; + attributes.class = attributes.id = "wrs_modal_offline"; + this.offlineModal = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_content_offline"; + this.offlineModalContent = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_offline_close"; + this.offlineModalClose = Util.createElement("span", attributes); + this.offlineModalClose.innerHTML = "×"; + attributes = {}; + attributes.class = "wrs_modal_offline_warn"; + this.offlineModalWarn = Util.createElement("span", attributes); + let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`; + this.offlineModalWarn.setAttribute("style", generalStyle); + attributes = {}; + attributes.class = "wrs_modal_offline_text_container"; + this.offlineModalMessage = Util.createElement("div", attributes); + attributes = {}; + attributes.class = "wrs_modal_offline_text_warn"; + this.offlineModalMessage1 = Util.createElement("p", attributes); + this.offlineModalMessage1.innerHTML = "You are not online!"; + attributes = {}; + attributes.class = "wrs_modal_offline_text"; + this.offlineModalMessage2 = Util.createElement("p", attributes); + this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`; + //Append offline modal elements + this.offlineModalContent.appendChild(this.offlineModalClose); + this.offlineModalMessage.appendChild(this.offlineModalMessage1); + this.offlineModalMessage.appendChild(this.offlineModalMessage2); + this.offlineModalContent.appendChild(this.offlineModalMessage); + this.offlineModalContent.appendChild(this.offlineModalWarn); + this.offlineModal.appendChild(this.offlineModalContent); + document.body.appendChild(this.offlineModal); + let modal = document.getElementById("wrs_modal_offline"); + this.offlineModalClose.addEventListener("click", function() { + modal.style.display = "none"; + }); + // Store editor name for telemetry purposes. + let editorName = this.environment.editor; + editorName = editorName.slice(0, -1); // Remove version number from editors + if (editorName.includes("TinyMCE")) editorName = "TinyMCE"; // Remove version from Tinymce editor. + if (editorName.includes("Generic")) editorName = "Generic"; // Remove version from Generic editor. + let solutionTelemeter = editorName; + // If moodle, add information to hosts and solution. + let isMoodle = !!(typeof M === "object" && M !== null), lms; + if (isMoodle) { + solutionTelemeter = "Moodle"; + lms = { + nam: "moodle", + fam: "lms", + ver: this.environment.moodleVersion, + category: this.environment.moodleCourseCategory, + course: this.environment.moodleCourseName + }; + if (!editorName.includes("TinyMCE")) { + editorName = "Atto"; + } + } + // Get the OS and its version. + let OSData = this.getOS(); + // Get the broswer and its version. + let broswerData = this.getBrowser(); + // Create list of hosts to send to telemetry. + let hosts = [ + { + nam: broswerData.detectedBrowser, + fam: "browser", + ver: broswerData.versionBrowser + }, + { + nam: editorName.toLowerCase(), + fam: "html-editor", + ver: this.environment.editorVersion + }, + { + nam: OSData.detectedOS, + fam: "os", + ver: OSData.versionOS + }, + { + nam: window.location.hostname, + fam: "domain" + }, + lms + ]; + // Filter hosts to remove empty objects and empty keys. + hosts = hosts.filter(function(element) { + if (element) Object.keys(element).forEach((key)=>element[key] === "unknown" ? delete element[key] : {}); + return element !== undefined; + }); + // Initialize telemeter + Telemeter.init({ + solution: { + name: "MathType for " + solutionTelemeter, + version: this.version + }, + hosts: hosts, + config: { + test: false, + debug: false, + dry_run: false, + api_key: "eda2ce9b-0e8a-46f2-acdd-c228a615314e" + }, + url: undefined + }); + } + /** + * Returns the Browser name and its version. + * @return {array} - detectedBrowser = Operating System name. + * versionBrowser = Operating System version. + */ getBrowser() { + // default value for OS just in case nothing is detected + let detectedBrowser = "unknown", versionBrowser = "unknown"; + let userAgent = window.navigator.userAgent; + if (/Brave/.test(userAgent)) { + detectedBrowser = "brave"; + if (userAgent.indexOf("Brave/")) { + let start = userAgent.indexOf("Brave") + 6; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } + } else if (userAgent.indexOf("Edg/") !== -1) { + detectedBrowser = "edge_chromium"; + let start = userAgent.indexOf("Edg/") + 4; + versionBrowser = userAgent.substring(start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Edg/.test(userAgent)) { + detectedBrowser = "edge"; + let start = userAgent.indexOf("Edg") + 3; + start = start + userAgent.substring(start).indexOf("/"); + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) { + detectedBrowser = "firefox"; + let start = userAgent.indexOf("Firefox"); + start = start === -1 ? userAgent.indexOf("FxiOS") : start; + start = start + userAgent.substring(start).indexOf("/") + 1; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + } else if (/OPR/.test(userAgent)) { + detectedBrowser = "opera"; + let start = userAgent.indexOf("OPR/") + 4; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) { + detectedBrowser = "chrome"; + let start = userAgent.indexOf("Chrome"); + start = start === -1 ? userAgent.indexOf("CriOS") : start; + start = start + userAgent.substring(start).indexOf("/") + 1; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + } else if (/Safari/.test(userAgent)) { + detectedBrowser = "safari"; + let start = userAgent.indexOf("Version/"); + start = start + userAgent.substring(start).indexOf("/") + 1; + let end = userAgent.substring(start).indexOf(" "); + end = end === -1 ? userAgent.lastIndexOf("") : end; + versionBrowser = userAgent.substring(start, end + start).replace("_", "."); + } + return { + detectedBrowser, + versionBrowser + }; + } + /** + * Returns the operating system and its version. + * @return {array} - detectedOS = Operating System name. + * versionOS = Operating System version. + */ getOS() { + // default value for OS just in case nothing is detected + let detectedOS = "unknown", versionOS = "unknown"; + // Retrieve properties to easily detect the OS + let userAgent = window.navigator.userAgent, platform = window.navigator.platform, macosPlatforms = [ + "Macintosh", + "MacIntel", + "MacPPC", + "Mac68K" + ], windowsPlatforms = [ + "Win32", + "Win64", + "Windows", + "WinCE" + ], iosPlatforms = [ + "iPhone", + "iPad", + "iPod" + ]; + // Find OS and their respective versions + if (macosPlatforms.indexOf(platform) !== -1) { + detectedOS = "macos"; + if (userAgent.indexOf("OS X") !== -1) { + let start = userAgent.indexOf("OS X") + 5; + let end = userAgent.substring(start).indexOf(" "); + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } + } else if (iosPlatforms.indexOf(platform) !== -1) { + detectedOS = "ios"; + if (userAgent.indexOf("OS ") !== -1) { + let start = userAgent.indexOf("OS ") + 3; + let end = userAgent.substring(start).indexOf(")"); + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } + } else if (windowsPlatforms.indexOf(platform) !== -1) { + detectedOS = "windows"; + let start = userAgent.indexOf("Windows"); + let end = userAgent.substring(start).indexOf(";"); + if (end === -1) { + end = userAgent.substring(start).indexOf(")"); + } + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/Android/.test(userAgent)) { + detectedOS = "android"; + let start = userAgent.indexOf("Android"); + let end = userAgent.substring(start).indexOf(";"); + if (end === -1) { + end = userAgent.substring(start).indexOf(")"); + } + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (/CrOS/.test(userAgent)) { + detectedOS = "chromeos"; + let start = userAgent.indexOf("CrOS ") + 5; + start = start + userAgent.substring(start).indexOf(" "); + let end = userAgent.substring(start).indexOf(")"); + versionOS = userAgent.substring(start, end + start).replace("_", ".").replace(/[^\d.-]/g, ""); + } else if (detectedOS === "unknown" && /Linux/.test(platform)) { + detectedOS = "linux"; + } + return { + detectedOS, + versionOS + }; + } + /** + * Returns the absolute path of the integration script. + * @return {string} - Absolute path for the integration script. + */ getPath() { + if (typeof this.scriptName === "undefined") { + throw new Error("scriptName property needed for getPath."); + } + const col = document.getElementsByTagName("script"); + let path = ""; + for(let i = 0; i < col.length; i += 1){ + const j = col[i].src.lastIndexOf(this.scriptName); + if (j >= 0) { + path = col[i].src.substr(0, j - 1); + } + } + return path; + } + /** + * Returns integration model plugin version + * @param {string} - Plugin version + */ getVersion() { + return this.version; + } + /** + * Sets the language property. + * @param {string} language - language code. + */ setLanguage(language) { + this.language = language; + } + /** + * Sets a Core instance. + * @param {Core} core - instance of Core class. + */ setCore(core) { + this.core = core; + core.setIntegrationModel(this); + } + /** + * Returns the Core instance. + * @returns {Core} instance of Core class. + */ getCore() { + return this.core; + } + /** + * Sets the object target and updates the iframe property. + * @param {HTMLElement} target - target object. + */ setTarget(target) { + this.target = target; + this.isIframe = this.target.tagName.toUpperCase() === "IFRAME"; + } + /** + * Sets the editor object. + * @param {Object} editorObject - The editor object. + */ setEditorObject(editorObject) { + this.editorObject = editorObject; + } + /** + * Opens formula editor to editing a new formula. Can be overwritten in order to make some + * actions from integration part before the formula is edited. + */ openNewFormulaEditor() { + if (window.navigator.onLine) { + this.core.editionProperties.dbclick = false; + this.core.editionProperties.isNewElement = true; + this.core.openModalDialog(this.target, this.isIframe); + } else { + let modal = document.getElementById("wrs_modal_offline"); + modal.style.display = "block"; + } + } + /** + * Opens formula editor to editing an existing formula. Can be overwritten in order to make some + * actions from integration part before the formula is edited. + */ openExistingFormulaEditor() { + if (window.navigator.onLine) { + this.core.editionProperties.isNewElement = false; + this.core.openModalDialog(this.target, this.isIframe); + } else { + let modal = document.getElementById("wrs_modal_offline"); + modal.style.display = "block"; + } + } + /** + * Wrapper to Core.updateFormula method. + * Transform a MathML into a image formula. + * Then the image formula is inserted in the specified target, creating a new image (new formula) + * or updating an existing one. + * @param {string} mathml - MathML to generate the formula. + * @param {string} editMode - Edit Mode (LaTeX or images). + */ updateFormula(mathml) { + if (this.editorParameters) { + mathml = com.wiris.editor.util.EditorUtils.addAnnotation(mathml, "application/vnd.wiris.mtweb-params+json", JSON.stringify(this.editorParameters)); + } + let focusElement; + let windowTarget; + const wirisProperties = null; + if (this.isIframe) { + focusElement = this.target.contentWindow; + windowTarget = this.target.contentWindow; + } else { + focusElement = this.target; + windowTarget = window; + } + let obj = this.core.beforeUpdateFormula(mathml, wirisProperties); + if (!obj) { + return ""; + } + obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties); + if (!obj) { + return ""; + } + return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex); + } + /** + * Wrapper to Core.insertFormula method. + * Inserts the formula in the specified target, creating + * a new image (new formula) or updating an existing one. + * @param {string} mathml - MathML to generate the formula. + * @param {string} editMode - Edit Mode (LaTeX or images). + * @returns {ReturnObject} - Object with the information of the node or latex to insert. + */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { + const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties); + // Delete temporal image when inserted + this.core.editionProperties.temporalImage = null; + return obj; + } + /** + * Returns the target selection. + * @returns {Selection} target selection. + */ getSelection() { + if (this.isIframe) { + this.target.contentWindow.focus(); + return this.target.contentWindow.getSelection(); + } + this.target.focus(); + return window.getSelection(); + } + /** + * Add events to formulas in the DOM target. The events added are the following: + * - doubleClickHandler: handles Double-click event on formulas by opening an editor + * to edit them. + * - mouseDownHandler: handles mouse down event on formulas by saving the size of the formula + * in case the the formula is resized. + * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size + * in case the formula is resized. + */ addEvents() { + const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target; + Util.addElementEvents(eventTarget, (element, event)=>{ + this.doubleClickHandler(element, event); + // Avoid creating the double click listener more than once for each element. + event.stopImmediatePropagation(); + }, (element, event)=>{ + this.mousedownHandler(element, event); + }, (element, event)=>{ + this.mouseupHandler(element, event); + }); + } + /** + * Remove events to formulas in the DOM target. + */ removeEvents() { + const eventTarget = this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target; + if (!eventTarget) { + return; + } + Util.removeElementEvents(eventTarget); + } + /** + * Remove events, modals and set this.editorObject to null in order to prevent memory leaks. + */ destroy() { + this.removeEvents(); + // Destroy modal dialog if exists. + if (this.core.modalDialog) { + this.core.modalDialog.destroy(); + } + // Remove offline modal dialog if exists. + if (this.offlineModal) { + this.offlineModal.remove(); + } + this.editorObject = null; + } + /** + * Handles a Double-click on the target element. Opens an editor + * to re-edit the double-clicked formula. + * @param {HTMLElement} element - DOM object target. + */ doubleClickHandler(element) { + this.core.editionProperties.dbclick = true; + if (element.nodeName.toLowerCase() === "img") { + this.core.getCustomEditors().disable(); + const customEditorAttributeName = Configuration.get("imageCustomEditorName"); + if (element.hasAttribute(customEditorAttributeName)) { + const customEditor = element.getAttribute(customEditorAttributeName); + this.core.getCustomEditors().enable(customEditor); + } + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + this.core.editionProperties.temporalImage = element; + this.core.editionProperties.isNewElement = true; + this.openExistingFormulaEditor(); + } + } + } + /** + * Handles a mouse up event on the target element. Restores the image size to avoid + * resizing formulas. + */ mouseupHandler() { + if (this.temporalImageResizing) { + setTimeout(()=>{ + Image.fixAfterResize(this.temporalImageResizing); + }, 10); + } + } + /** + * Handles a mouse down event on the target element. Saves the formula size to avoid + * resizing formulas. + * @param {HTMLElement} element - target element. + */ mousedownHandler(element) { + if (element.nodeName.toLowerCase() === "img") { + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + this.temporalImageResizing = element; + } + } + } + /** + * Returns the integration language. By default the browser agent. This method + * should be overwritten to obtain the integration language, for example using the + * plugin API of an HTML editor. + * @returns {string} integration language. + */ getLanguage() { + return this.getBrowserLanguage(); + } + /** + * Returns the browser language. + * @returns {string} the browser language. + */ // eslint-disable-next-line class-methods-use-this + getBrowserLanguage() { + let language = "en"; + if (navigator.userLanguage) { + language = navigator.userLanguage.substring(0, 2); + } else if (navigator.language) { + language = navigator.language.substring(0, 2); + } else { + language = "en"; + } + return language; + } + /** + * This function is called once the {@link Core} is loaded. IntegrationModel class + * will fire this method when {@link Core} 'onLoad' event is fired. + * This method should content all the logic to init + * the integration. + */ callbackFunction() { + // It's needed to wait until the integration target is ready. The event is fired + // from the integration side. + const listener = Listeners.newListener("onTargetReady", ()=>{ + this.addEvents(this.target); + }); + this.listeners.add(listener); + } + /** + * Function called when the content submits an action. + */ // eslint-disable-next-line class-methods-use-this + notifyWindowClosed() { + // Nothing. + } + /** + * Wrapper. + * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js + * in order to get mathml from a text node that can contain normal LaTeX or other chosen text. + * @param {string} textNode - text node to extract the MathML. + * @param {int} caretPosition - caret position inside the text node. + * @returns {string} MathML inside the text node. + */ // eslint-disable-next-line class-methods-use-this, no-unused-vars + getMathmlFromTextNode(textNode, caretPosition) {} + /** + * Wrapper + * It fills wrs event object of nonLatex with the desired data. + * @param {Object} event - event object. + * @param {Object} window dom window object. + * @param {string} mathml valid mathml. + */ // eslint-disable-next-line class-methods-use-this, no-unused-vars + fillNonLatexNode(event, window1, mathml) {} + /** Wrapper. * Returns selected item from the target. * @param {HTMLElement} target - target element * @param {boolean} iframe */ // eslint-disable-next-line class-methods-use-this, no-unused-vars - getSelectedItem(target, isIframe) {} - // Set temporal image to null and make focus come back. - static setActionsOnCancelButtons() { - // Make focus come back on the previous place it was when click cancel button - const currentInstance = WirisPlugin.currentInstance; - const editorSelection = currentInstance.getSelection(); - editorSelection.removeAllRanges(); - if (currentInstance.core.editionProperties.range) { - const { range } = currentInstance.core.editionProperties; - currentInstance.core.editionProperties.range = null; - editorSelection.addRange(range); - if (range.startOffset !== range.endOffset) { - currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage); - } - } - // eslint-disable-next-line no-undef - if (WirisPlugin.currentInstance) { - WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line - } - } - } - // To know if the integration that extends this class implements - // wrapper methods, they are set as undefined. - IntegrationModel.prototype.getMathmlFromTextNode = undefined; - IntegrationModel.prototype.fillNonLatexNode = undefined; - IntegrationModel.prototype.getSelectedItem = undefined; - /** - * An object containing a list with the overwritable class constructor properties. - * @type {Object} - */ IntegrationModel.integrationParameters = ["serviceProviderProperties", "editorParameters"]; + getSelectedItem(target, isIframe) {} + // Set temporal image to null and make focus come back. + static setActionsOnCancelButtons() { + // Make focus come back on the previous place it was when click cancel button + const currentInstance = WirisPlugin.currentInstance; + const editorSelection = currentInstance.getSelection(); + editorSelection.removeAllRanges(); + if (currentInstance.core.editionProperties.range) { + const { range } = currentInstance.core.editionProperties; + currentInstance.core.editionProperties.range = null; + editorSelection.addRange(range); + if (range.startOffset !== range.endOffset) { + currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage); + } + } + // eslint-disable-next-line no-undef + if (WirisPlugin.currentInstance) { + WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line + } + } + } + // To know if the integration that extends this class implements + // wrapper methods, they are set as undefined. + IntegrationModel.prototype.getMathmlFromTextNode = undefined; + IntegrationModel.prototype.fillNonLatexNode = undefined; + IntegrationModel.prototype.getSelectedItem = undefined; + /** + * An object containing a list with the overwritable class constructor properties. + * @type {Object} + */ IntegrationModel.integrationParameters = [ + "serviceProviderProperties", + "editorParameters" + ]; - /** - * This class represents the MathType integration for CKEditor5. - * @extends {IntegrationModel} - */ class CKEditor5Integration extends IntegrationModel { - constructor(ckeditorIntegrationModelProperties) { - const editor = ckeditorIntegrationModelProperties.editorObject; - if (typeof editor.config !== "undefined" && typeof editor.config.get("mathTypeParameters") !== "undefined") { - ckeditorIntegrationModelProperties.integrationParameters = editor.config.get("mathTypeParameters"); - } - /** - * CKEditor5 Integration. - * - * @param {integrationModelProperties} integrationModelAttributes - */ super(ckeditorIntegrationModelProperties); - /** - * Folder name used for the integration inside CKEditor plugins folder. - */ this.integrationFolderName = "ckeditor_wiris"; - } - /** - * @inheritdoc - * @returns {string} - The CKEditor instance language. - * @override - */ getLanguage() { - // Returns the CKEDitor instance language taking into account that the language can be an object. - // Try to get editorParameters.language, fail silently otherwise - try { - return this.editorParameters.language; - } catch (e) {} - const languageObject = this.editorObject.config.get("language"); - if (languageObject != null) { - if (typeof languageObject === "object") { - // eslint-disable-next-line no-prototype-builtins - if (languageObject.hasOwnProperty("ui")) { - return languageObject.ui; - } - return languageObject; - } - return languageObject; - } - return super.getLanguage(); - } - /** - * Adds callbacks to the following CKEditor listeners: - * - 'focus' - updates the current instance. - * - 'contentDom' - adds 'doubleclick' callback. - * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas. - * - 'setData' - parses the data converting MathML into images. - * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications. - * - 'getData' - parses the data converting images into selected save mode (MathML by default). - * - 'mode' - recalculates the active element. - */ addEditorListeners() { - const editor = this.editorObject; - if (typeof editor.config.wirislistenersdisabled === "undefined" || !editor.config.wirislistenersdisabled) { - this.checkElement(); - } - } - /** - * Checks the current container and assign events in case that it doesn't have them. - * CKEditor replaces several times the element element during its execution, - * so we must assign the events again to editor element. - */ checkElement() { - const editor = this.editorObject; - const newElement = editor.sourceElement; - // If the element wasn't treated, add the events. - if (!newElement.wirisActive) { - this.setTarget(newElement); - this.addEvents(); - // Set the element as treated - newElement.wirisActive = true; - } - } - /** - * @inheritdoc - * @param {HTMLElement} element - HTMLElement target. - * @param {MouseEvent} event - event which trigger the handler. - */ doubleClickHandler(element, event) { - this.core.editionProperties.dbclick = true; - if (this.editorObject.isReadOnly === false) { - if (element.nodeName.toLowerCase() === "img") { - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - // Some plugins (image2, image) open a dialog on Double-click. On formulas - // doubleclick event ends here. - if (typeof event.stopPropagation !== "undefined") { - // old I.E compatibility. - event.stopPropagation(); - } else { - event.returnValue = false; - } - this.core.getCustomEditors().disable(); - const customEditorAttr = element.getAttribute(Configuration.get("imageCustomEditorName")); - if (customEditorAttr) { - this.core.getCustomEditors().enable(customEditorAttr); - } - this.core.editionProperties.temporalImage = element; - this.openExistingFormulaEditor(); - } - } - } - } - /** @inheritdoc */ static getCorePath() { - return null; // TODO - } - /** @inheritdoc */ callbackFunction() { - super.callbackFunction(); - this.addEditorListeners(); - } - openNewFormulaEditor() { - // Store the editor selection as it will be lost upon opening the modal - this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; - return super.openNewFormulaEditor(); - } - /** - * Replaces old formula with new MathML or inserts it in caret position if new - * @param {String} mathml MathML to update old one or insert - * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image - */ insertMathml(mathml) { - // This returns the value returned by the callback function (writer => {...}) - return this.editorObject.model.change((writer) => { - const core = this.getCore(); - const selection = this.editorObject.model.document.selection; - const modelElementNew = writer.createElement("mathml", { - formula: mathml, - ...Object.fromEntries(selection.getAttributes()), - }); - // Obtain the DOM object corresponding to the formula - if (core.editionProperties.isNewElement) { - // Don't bother inserting anything at all if the MathML is empty. - if (!mathml) return; - const viewSelection = - this.core.editionProperties.selection || this.editorObject.editing.view.document.selection; - const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition()); - this.editorObject.model.insertObject(modelElementNew, modelPosition); - // Remove selection - if (!viewSelection.isCollapsed) { - for (const range of viewSelection.getRanges()) { - writer.remove(this.editorObject.editing.mapper.toModelRange(range)); - } - } - // Set carret after the formula - const position = this.editorObject.model.createPositionAfter(modelElementNew); - writer.setSelection(position); - } else { - const img = core.editionProperties.temporalImage; - const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent; - const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement); - // Insert the new and remove the old one - const position = this.editorObject.model.createPositionBefore(modelElementOld); - // If the given MathML is empty, don't insert a new formula. - if (mathml) { - this.editorObject.model.insertObject(modelElementNew, position); - } - writer.remove(modelElementOld); - } - // eslint-disable-next-line consistent-return - return modelElementNew; - }); - } - /** - * Finds the text node corresponding to given DOM text element. - * @param {element} viewElement Element to find corresponding text node of. - * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist. - */ findText(viewElement) { - // eslint-disable-line consistent-return - // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down - let pivot = viewElement; - let element; - while (!element) { - element = this.editorObject.editing.mapper.toModelElement( - this.editorObject.editing.view.domConverter.domToView(pivot), - ); - pivot = pivot.parentElement; - } - // Navigate through all the subtree under `pivot` in order to find the correct text node - const range = this.editorObject.model.createRangeIn(element); - const descendants = Array.from(range.getItems()); - for (const node of descendants) { - let viewElementData = viewElement.data; - if (viewElement.nodeType === 3) { - // Remove invisible white spaces - viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), ""); - } - if (node.is("textProxy") && node.data === viewElementData.replace(String.fromCharCode(160), " ")) { - return node.textNode; - } - } - } - /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - // eslint-disable-line no-unused-vars - const returnObject = {}; - let mathmlOrigin; - if (!mathml) { - this.insertMathml(""); - } else if (this.core.editMode === "latex") { - returnObject.latex = Latex.getLatexFromMathML(mathml); - returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); - this.editorObject.model.change((writer) => { - const { latexRange } = this.core.editionProperties; - const startNode = this.findText(latexRange.startContainer); - const endNode = this.findText(latexRange.endContainer); - let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset); - let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset); - let range = writer.createRange(startPosition, endPosition); - // When Latex is next to image/formula. - if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) { - // Get the position of the latex to be replaced. - let latexEdited = - "$$" + - Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + - "$$"; - let data = latexRange.startContainer.data; - // Remove invisible characters. - data = data.replaceAll(String.fromCharCode(8288), ""); - // Get to the start of the latex we are editing. - let offset = data.indexOf(latexEdited); - let dataOffset = data.substring(offset); - let second$ = dataOffset.substring(2).indexOf("$$") + 4; - let substring = dataOffset.substr(0, second$); - data = data.replace(substring, ""); - if (!data) { - startPosition = writer.createPositionBefore(startNode); - range = startNode; - } else { - startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset); - endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset); - range = writer.createRange(startPosition, endPosition); - } - } - writer.remove(range); - writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition); - }); - } else { - mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml; - try { - returnObject.node = this.editorObject.editing.view.domConverter.viewToDom( - this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), - windowTarget.document, - ); - } catch (e) { - const x = e.toString(); - if (x.includes("CKEditorError: Cannot read property 'parent' of undefined")) { - this.core.modalDialog.cancelAction(); - } - } - } - // Build the telemeter payload separated to delete null/undefined entries. - let payload = { - mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, - mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, - elapsed_time: Date.now() - this.core.editionProperties.editionStartTime, - editor_origin: null, - toolbar: this.core.modalDialog.contentManager.toolbar, - size: mathml?.length, - }; - // Remove desired null keys. - Object.keys(payload).forEach((key) => { - if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; - }); - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("INSERTED_FORMULA", { - ...payload, - }); - } catch (error) { - console.error("Error tracking INSERTED_FORMULA", error); - } - /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula. + /** + * This class represents the MathType integration for CKEditor5. + * @extends {IntegrationModel} + */ class CKEditor5Integration extends IntegrationModel { + constructor(ckeditorIntegrationModelProperties){ + const editor = ckeditorIntegrationModelProperties.editorObject; + if (typeof editor.config !== "undefined" && typeof editor.config.get("mathTypeParameters") !== "undefined") { + ckeditorIntegrationModelProperties.integrationParameters = editor.config.get("mathTypeParameters"); + } + /** + * CKEditor5 Integration. + * + * @param {integrationModelProperties} integrationModelAttributes + */ super(ckeditorIntegrationModelProperties); + /** + * Folder name used for the integration inside CKEditor plugins folder. + */ this.integrationFolderName = "ckeditor_wiris"; + } + /** + * @inheritdoc + * @returns {string} - The CKEditor instance language. + * @override + */ getLanguage() { + // Returns the CKEDitor instance language taking into account that the language can be an object. + // Try to get editorParameters.language, fail silently otherwise + try { + return this.editorParameters.language; + } catch (e) {} + const languageObject = this.editorObject.config.get("language"); + if (languageObject != null) { + if (typeof languageObject === "object") { + // eslint-disable-next-line no-prototype-builtins + if (languageObject.hasOwnProperty("ui")) { + return languageObject.ui; + } + return languageObject; + } + return languageObject; + } + return super.getLanguage(); + } + /** + * Adds callbacks to the following CKEditor listeners: + * - 'focus' - updates the current instance. + * - 'contentDom' - adds 'doubleclick' callback. + * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas. + * - 'setData' - parses the data converting MathML into images. + * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications. + * - 'getData' - parses the data converting images into selected save mode (MathML by default). + * - 'mode' - recalculates the active element. + */ addEditorListeners() { + const editor = this.editorObject; + if (typeof editor.config.wirislistenersdisabled === "undefined" || !editor.config.wirislistenersdisabled) { + this.checkElement(); + } + } + /** + * Checks the current container and assign events in case that it doesn't have them. + * CKEditor replaces several times the element element during its execution, + * so we must assign the events again to editor element. + */ checkElement() { + const editor = this.editorObject; + const newElement = editor.sourceElement; + // If the element wasn't treated, add the events. + if (!newElement.wirisActive) { + this.setTarget(newElement); + this.addEvents(); + // Set the element as treated + newElement.wirisActive = true; + } + } + /** + * @inheritdoc + * @param {HTMLElement} element - HTMLElement target. + * @param {MouseEvent} event - event which trigger the handler. + */ doubleClickHandler(element, event) { + this.core.editionProperties.dbclick = true; + if (this.editorObject.isReadOnly === false) { + if (element.nodeName.toLowerCase() === "img") { + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + // Some plugins (image2, image) open a dialog on Double-click. On formulas + // doubleclick event ends here. + if (typeof event.stopPropagation !== "undefined") { + // old I.E compatibility. + event.stopPropagation(); + } else { + event.returnValue = false; + } + this.core.getCustomEditors().disable(); + const customEditorAttr = element.getAttribute(Configuration.get("imageCustomEditorName")); + if (customEditorAttr) { + this.core.getCustomEditors().enable(customEditorAttr); + } + this.core.editionProperties.temporalImage = element; + this.openExistingFormulaEditor(); + } + } + } + } + /** @inheritdoc */ static getCorePath() { + return null; // TODO + } + /** @inheritdoc */ callbackFunction() { + super.callbackFunction(); + this.addEditorListeners(); + } + openNewFormulaEditor() { + // Store the editor selection as it will be lost upon opening the modal + this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; + // Focus on the selected editor when multiple editor instances are present + WirisPlugin.currentInstance = this; + return super.openNewFormulaEditor(); + } + /** + * Replaces old formula with new MathML or inserts it in caret position if new + * @param {String} mathml MathML to update old one or insert + * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image + */ insertMathml(mathml) { + // This returns the value returned by the callback function (writer => {...}) + return this.editorObject.model.change((writer)=>{ + const core = this.getCore(); + const selection = this.editorObject.model.document.selection; + const modelElementNew = writer.createElement("mathml", { + formula: mathml, + ...Object.fromEntries(selection.getAttributes()) + }); + // Obtain the DOM object corresponding to the formula + if (core.editionProperties.isNewElement) { + // Don't bother inserting anything at all if the MathML is empty. + if (!mathml) return; + const viewSelection = this.core.editionProperties.selection || this.editorObject.editing.view.document.selection; + const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition()); + this.editorObject.model.insertObject(modelElementNew, modelPosition); + // Remove selection + if (!viewSelection.isCollapsed) { + for (const range of viewSelection.getRanges()){ + writer.remove(this.editorObject.editing.mapper.toModelRange(range)); + } + } + // Set carret after the formula + const position = this.editorObject.model.createPositionAfter(modelElementNew); + writer.setSelection(position); + } else { + const img = core.editionProperties.temporalImage; + const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent; + const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement); + // Insert the new and remove the old one + const position = this.editorObject.model.createPositionBefore(modelElementOld); + // If the given MathML is empty, don't insert a new formula. + if (mathml) { + this.editorObject.model.insertObject(modelElementNew, position); + } + writer.remove(modelElementOld); + } + // eslint-disable-next-line consistent-return + return modelElementNew; + }); + } + /** + * Finds the text node corresponding to given DOM text element. + * @param {element} viewElement Element to find corresponding text node of. + * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist. + */ findText(viewElement) { + // eslint-disable-line consistent-return + // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down + let pivot = viewElement; + let element; + while(!element){ + element = this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(pivot)); + pivot = pivot.parentElement; + } + // Navigate through all the subtree under `pivot` in order to find the correct text node + const range = this.editorObject.model.createRangeIn(element); + const descendants = Array.from(range.getItems()); + for (const node of descendants){ + let viewElementData = viewElement.data; + if (viewElement.nodeType === 3) { + // Remove invisible white spaces + viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), ""); + } + if (node.is("textProxy") && node.data === viewElementData.replace(String.fromCharCode(160), " ")) { + return node.textNode; + } + } + } + /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { + // eslint-disable-line no-unused-vars + const returnObject = {}; + let mathmlOrigin; + if (!mathml) { + this.insertMathml(""); + } else if (this.core.editMode === "latex") { + returnObject.latex = Latex.getLatexFromMathML(mathml); + returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); + this.editorObject.model.change((writer)=>{ + const { latexRange } = this.core.editionProperties; + const startNode = this.findText(latexRange.startContainer); + const endNode = this.findText(latexRange.endContainer); + let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset); + let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset); + let range = writer.createRange(startPosition, endPosition); + // When Latex is next to image/formula. + if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) { + // Get the position of the latex to be replaced. + let latexEdited = "$$" + Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + "$$"; + let data = latexRange.startContainer.data; + // Remove invisible characters. + data = data.replaceAll(String.fromCharCode(8288), ""); + // Get to the start of the latex we are editing. + let offset = data.indexOf(latexEdited); + let dataOffset = data.substring(offset); + let second$ = dataOffset.substring(2).indexOf("$$") + 4; + let substring = dataOffset.substr(0, second$); + data = data.replace(substring, ""); + if (!data) { + startPosition = writer.createPositionBefore(startNode); + range = startNode; + } else { + startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset); + endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset); + range = writer.createRange(startPosition, endPosition); + } + } + writer.remove(range); + writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition); + }); + } else { + mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml; + try { + returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), windowTarget.document); + } catch (e) { + const x = e.toString(); + if (x.includes("CKEditorError: Cannot read property 'parent' of undefined")) { + this.core.modalDialog.cancelAction(); + } + } + } + // Build the telemeter payload separated to delete null/undefined entries. + let payload = { + mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, + mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, + elapsed_time: Date.now() - this.core.editionProperties.editionStartTime, + editor_origin: null, + toolbar: this.core.modalDialog.contentManager.toolbar, + size: mathml?.length + }; + // Remove desired null keys. + Object.keys(payload).forEach((key)=>{ + if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; + }); + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("INSERTED_FORMULA", { + ...payload + }); + } catch (error) { + console.error("Error tracking INSERTED_FORMULA", error); + } + /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula. We probably should add it here as well, but we should look further into how */ // this.editorObject.fire('change'); - // Remove temporal image of inserted formula - this.core.editionProperties.temporalImage = null; - return returnObject; - } - /** - * Function called when the content submits an action. - */ notifyWindowClosed() { - this.editorObject.editing.view.focus(); - } - } + // Remove temporal image of inserted formula + this.core.editionProperties.temporalImage = null; + return returnObject; + } + /** + * Function called when the content submits an action. + */ notifyWindowClosed() { + this.editorObject.editing.view.focus(); + } + } - /** - * Command for opening the MathType editor - */ class MathTypeCommand extends ckeditor5.Command { - execute(options = {}) { - // Check we get a valid integration - // eslint-disable-next-line no-prototype-builtins - if (!options.hasOwnProperty("integration") || !(options.integration instanceof CKEditor5Integration)) { - throw 'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'; - } - // Save the integration instance as a property of the command. - this.integration = options.integration; - // Set custom editor or disable it - this.setEditor(); - // Open the editor - this.openEditor(); - } - /** - * Sets the appropriate custom editor, if any, or disables them. - */ setEditor() { - // It's possible that a custom editor was last used. - // We need to disable it to avoid wrong behaviors. - this.integration.core.getCustomEditors().disable(); - } - /** - * Checks whether we are editing an existing formula or a new one and opens the editor. - */ openEditor() { - this.integration.core.editionProperties.dbclick = false; - const image = this._getSelectedImage(); - if ( - typeof image !== "undefined" && - image !== null && - image.classList.contains(WirisPlugin.Configuration.get("imageClassName")) - ) { - this.integration.core.editionProperties.temporalImage = image; - this.integration.openExistingFormulaEditor(); - } else { - this.integration.openNewFormulaEditor(); - } - } - /** - * Gets the currently selected formula image - * @returns {Element} selected image, if any, undefined otherwise - */ _getSelectedImage() { - const { selection } = this.editor.editing.view.document; - // If we can not extract the formula, fall back to default behavior. - if (selection.isCollapsed || selection.rangeCount !== 1) { - return; - } - // Look for the wrapping the formula and then for the inside - const range = selection.getFirstRange(); - let image; - for (const span of range) { - if (span.item.name !== "span") { - return; - } - image = span.item.getChild(0); - break; - } - if (!image) { - return; - } - // eslint-disable-next-line consistent-return - return this.editor.editing.view.domConverter.mapViewToDom(image); - } - } - /** - * Command for opening the ChemType editor - */ class ChemTypeCommand extends MathTypeCommand { - setEditor() { - this.integration.core.getCustomEditors().enable("chemistry"); - } - } + /** + * Command for opening the MathType editor + */ class MathTypeCommand extends ckeditor5.Command { + execute(options = {}) { + // Check we get a valid integration + // eslint-disable-next-line no-prototype-builtins + if (!options.hasOwnProperty("integration") || !(options.integration instanceof CKEditor5Integration)) { + throw 'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'; + } + // Save the integration instance as a property of the command. + this.integration = options.integration; + // Set custom editor or disable it + this.setEditor(); + // Open the editor + this.openEditor(); + } + /** + * Sets the appropriate custom editor, if any, or disables them. + */ setEditor() { + // It's possible that a custom editor was last used. + // We need to disable it to avoid wrong behaviors. + this.integration.core.getCustomEditors().disable(); + } + /** + * Checks whether we are editing an existing formula or a new one and opens the editor. + */ openEditor() { + this.integration.core.editionProperties.dbclick = false; + const image = this._getSelectedImage(); + if (typeof image !== "undefined" && image !== null && image.classList.contains(WirisPlugin.Configuration.get("imageClassName"))) { + this.integration.core.editionProperties.temporalImage = image; + this.integration.openExistingFormulaEditor(); + } else { + this.integration.openNewFormulaEditor(); + } + } + /** + * Gets the currently selected formula image + * @returns {Element} selected image, if any, undefined otherwise + */ _getSelectedImage() { + const { selection } = this.editor.editing.view.document; + // If we can not extract the formula, fall back to default behavior. + if (selection.isCollapsed || selection.rangeCount !== 1) { + return; + } + // Look for the wrapping the formula and then for the inside + const range = selection.getFirstRange(); + let image; + for (const span of range){ + if (span.item.name !== "span") { + return; + } + image = span.item.getChild(0); + break; + } + if (!image) { + return; + } + // eslint-disable-next-line consistent-return + return this.editor.editing.view.domConverter.mapViewToDom(image); + } + } + /** + * Command for opening the ChemType editor + */ class ChemTypeCommand extends MathTypeCommand { + setEditor() { + this.integration.core.getCustomEditors().enable("chemistry"); + } + } - var mathIcon = - '\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n'; + var mathIcon = "\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n"; - var chemIcon = - '\n\n\n\n\n\n'; + var chemIcon = "\n\n\n\n\n\n"; - var name = "@wiris/mathtype-ckeditor5"; - var version = "8.9.2"; - var description = "MathType Web for CKEditor5 editor"; - var keywords = [ - "chem", - "chemistry", - "chemtype", - "ckeditor", - "ckeditor5", - "editor", - "equation", - "latex", - "math", - "mathml", - "maths", - "mathtype", - "wiris", - ]; - var repository = "https://github.com/wiris/html-integrations/tree/stable/packages/mathtype-ckeditor5"; - var homepage = "https://www.wiris.com/"; - var bugs = { - email: "support@wiris.com", - }; - var license = "MIT"; - var author = "WIRIS Team (http://www.wiris.com)"; - var files = ["dist", "src", "icons", "theme", "lang"]; - var main = "src/plugin.js"; - var type = "module"; - var exports$1 = { - ".": "./src/plugin.js", - "./dist/*.css": "./dist/*.css", - "./dist/*": "./dist/*", - "./src/*": "./src/*", - "./theme/*": "./theme/*", - "./package.json": "./package.json", - }; - var scripts = { - build: "node ./scripts/build-dist.mjs", - "build:dist": "node ./scripts/build-dist.mjs", - prepare: "npm run build:dist", - }; - var dependencies = { - "@wiris/mathtype-html-integration-devkit": "1.17.3", - }; - var devDependencies = { - "@ckeditor/ckeditor5-dev-build-tools": "^40.2.0", - ckeditor5: ">=42.0.0", - }; - var peerDependencies = { - ckeditor5: ">=42.0.0", - }; - var packageInfo = { - name: name, - version: version, - description: description, - keywords: keywords, - repository: repository, - homepage: homepage, - bugs: bugs, - license: license, - author: author, - files: files, - main: main, - type: type, - exports: exports$1, - scripts: scripts, - dependencies: dependencies, - devDependencies: devDependencies, - peerDependencies: peerDependencies, - }; + var name = "@wiris/mathtype-ckeditor5"; + var version = "8.10.0"; + var description = "MathType Web for CKEditor5 editor"; + var keywords = [ + "chem", + "chemistry", + "chemtype", + "ckeditor", + "ckeditor5", + "editor", + "equation", + "latex", + "math", + "mathml", + "maths", + "mathtype", + "wiris" + ]; + var repository = "https://github.com/wiris/html-integrations/tree/stable/packages/mathtype-ckeditor5"; + var homepage = "https://www.wiris.com/"; + var bugs = { + email: "support@wiris.com" + }; + var license = "MIT"; + var author = "WIRIS Team (http://www.wiris.com)"; + var files = [ + "dist", + "src", + "icons", + "theme", + "lang" + ]; + var main = "src/plugin.js"; + var type = "module"; + var exports$1 = { + ".": "./src/plugin.js", + "./dist/*": "./dist/*", + "./browser/*": null, + "./src/*": "./src/*", + "./theme/*": "./theme/*", + "./package.json": "./package.json" + }; + var scripts = { + build: "node ./scripts/build-dist.mjs", + "build:dist": "node ./scripts/build-dist.mjs", + prepare: "npm run build:dist" + }; + var dependencies = { + "@wiris/mathtype-html-integration-devkit": "1.17.3" + }; + var devDependencies = { + "@ckeditor/ckeditor5-dev-build-tools": "^42.0.0", + ckeditor5: ">=43.0.0" + }; + var peerDependencies = { + ckeditor5: ">=43.0.0" + }; + var packageInfo = { + name: name, + version: version, + description: description, + keywords: keywords, + repository: repository, + homepage: homepage, + bugs: bugs, + license: license, + author: author, + files: files, + main: main, + type: type, + exports: exports$1, + scripts: scripts, + dependencies: dependencies, + devDependencies: devDependencies, + peerDependencies: peerDependencies + }; - // CKEditor imports - let currentInstance = null; // eslint-disable-line import/no-mutable-exports - class MathType extends ckeditor5.Plugin { - static get requires() { - return [ckeditor5.Widget]; - } - static get pluginName() { - return "MathType"; - } - init() { - // Create the MathType API Integration object - const integration = this._addIntegration(); - currentInstance = integration; - // Add the MathType and ChemType commands to the editor - this._addCommands(); - // Add the buttons for MathType and ChemType - this._addViews(integration); - // Registers the element in the schema - this._addSchema(); - // Add the downcast and upcast converters - this._addConverters(integration); - // Expose the WirisPlugin variable to the window - this._exposeWiris(); - } - /** - * Inherited from Plugin class: Executed when CKEditor5 is destroyed - */ destroy() { - // eslint-disable-line class-methods-use-this - currentInstance.destroy(); - } - /** - * Create the MathType API Integration object - * @returns {CKEditor5Integration} the integration object - */ _addIntegration() { - const { editor } = this; - /** - * Integration model constructor attributes. - * @type {integrationModelProperties} - */ const integrationProperties = {}; - integrationProperties.environment = {}; - integrationProperties.environment.editor = "CKEditor5"; - integrationProperties.environment.editorVersion = "5.x"; - integrationProperties.version = packageInfo.version; - integrationProperties.editorObject = editor; - integrationProperties.serviceProviderProperties = {}; - integrationProperties.serviceProviderProperties.URI = "https://www.wiris.net/demo/plugins/app"; - integrationProperties.serviceProviderProperties.server = "java"; - integrationProperties.target = editor.sourceElement; - integrationProperties.scriptName = "bundle.js"; - integrationProperties.managesLanguage = true; - // etc - // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element. - // To avoid a wrong behaviour, this integration only starts if the workspace container exists. - let integration; - if (integrationProperties.target) { - // Instance of the integration associated to this editor instance - integration = new CKEditor5Integration(integrationProperties); - integration.init(); - integration.listeners.fire("onTargetReady", {}); - integration.checkElement(); - this.listenTo( - editor.editing.view.document, - "click", - (evt, data) => { - // Is Double-click - if (data.domEvent.detail === 2) { - integration.doubleClickHandler(data.domTarget, data.domEvent); - evt.stop(); - } - }, - { - priority: "highest", - }, - ); - } - return integration; - } - /** - * Add the MathType and ChemType commands to the editor - */ _addCommands() { - const { editor } = this; - // Add command to open the formula editor - editor.commands.add("MathType", new MathTypeCommand(editor)); - // Add command to open the chemistry formula editor - editor.commands.add("ChemType", new ChemTypeCommand(editor)); - } - /** - * Add the buttons for MathType and ChemType - * @param {CKEditor5Integration} integration the integration object - */ _addViews(integration) { - const { editor } = this; - // Check if MathType editor is enabled - if (Configuration.get("editorEnabled")) { - // Add button for the formula editor - editor.ui.componentFactory.add("MathType", (locale) => { - const view = new ckeditor5.ButtonView(locale); - // View is enabled iff command is enabled - view.bind("isEnabled").to(editor.commands.get("MathType"), "isEnabled"); - view.set({ - label: StringManager.get("insert_math", integration.getLanguage()), - icon: mathIcon, - tooltip: true, - }); - // Callback executed once the image is clicked. - view.on("execute", () => { - editor.execute("MathType", { - integration, - }); - }); - return view; - }); - } - // Check if ChemType editor is enabled - if (Configuration.get("chemEnabled")) { - // Add button for the chemistry formula editor - editor.ui.componentFactory.add("ChemType", (locale) => { - const view = new ckeditor5.ButtonView(locale); - // View is enabled iff command is enabled - view.bind("isEnabled").to(editor.commands.get("ChemType"), "isEnabled"); - view.set({ - label: StringManager.get("insert_chem", integration.getLanguage()), - icon: chemIcon, - tooltip: true, - }); - // Callback executed once the image is clicked. - view.on("execute", () => { - editor.execute("ChemType", { - integration, - }); - }); - return view; - }); - } - // Observer for the Double-click event - editor.editing.view.addObserver(ckeditor5.ClickObserver); - } - /** - * Registers the element in the schema - */ _addSchema() { - const { schema } = this.editor.model; - schema.register("mathml", { - inheritAllFrom: "$inlineObject", - allowAttributes: ["formula"], - }); - } - /** - * Add the downcast and upcast converters - */ _addConverters(integration) { - const { editor } = this; - // Editing view -> Model - editor.conversion.for("upcast").elementToElement({ - view: { - name: "span", - classes: "ck-math-widget", - }, - model: (viewElement, { writer: modelWriter }) => { - const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute("data-mathml")); - return modelWriter.createElement("mathml", { - formula, - }); - }, - }); - // Data view -> Model - editor.data.upcastDispatcher.on("element:math", (evt, data, conversionApi) => { - const { consumable, writer } = conversionApi; - const { viewItem } = data; - // When element was already consumed then skip it. - if ( - !consumable.test(viewItem, { - name: true, - }) - ) { - return; - } - // If we encounter any with a LaTeX annotation inside, - // convert it into a "$$...$$" string. - const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define - // Get the formula of the (which is all its children). - const processor = new ckeditor5.XmlDataProcessor(editor.editing.view.document); - // Only god knows why the following line makes viewItem lose all of its children, - // so we obtain isLatex before doing this because we need viewItem's children for that. - const upcastWriter = new ckeditor5.UpcastWriter(editor.editing.view.document); - const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren()); - // and obtain the attributes of too! - const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}="${value}"`).join(""); - // We process the document fragment - let formula = processor.toData(viewDocumentFragment) || ""; - // And obtain the complete formula - formula = Util.htmlSanitize(`${formula}`); - // Replaces the < & > characters to its HTMLEntity to avoid render issues. - formula = formula.replaceAll('"<"', '"<"').replaceAll('">"', '">"').replaceAll("><<", "><<"); - /* Model node that contains what's going to actually be inserted. This can be either: + // CKEditor imports + let currentInstance = null; // eslint-disable-line import/no-mutable-exports + class MathType extends ckeditor5.Plugin { + static get requires() { + return [ + ckeditor5.Widget + ]; + } + static get pluginName() { + return "MathType"; + } + init() { + // Create the MathType API Integration object + const integration = this._addIntegration(); + currentInstance = integration; + // Add the MathType and ChemType commands to the editor + this._addCommands(); + // Add the buttons for MathType and ChemType + this._addViews(integration); + // Registers the element in the schema + this._addSchema(); + // Add the downcast and upcast converters + this._addConverters(integration); + // Expose the WirisPlugin variable to the window + this._exposeWiris(); + } + /** + * Inherited from Plugin class: Executed when CKEditor5 is destroyed + */ destroy() { + // eslint-disable-line class-methods-use-this + currentInstance.destroy(); + } + /** + * Create the MathType API Integration object + * @returns {CKEditor5Integration} the integration object + */ _addIntegration() { + const { editor } = this; + /** + * Integration model constructor attributes. + * @type {integrationModelProperties} + */ const integrationProperties = {}; + integrationProperties.environment = {}; + integrationProperties.environment.editor = "CKEditor5"; + integrationProperties.environment.editorVersion = "5.x"; + integrationProperties.version = packageInfo.version; + integrationProperties.editorObject = editor; + integrationProperties.serviceProviderProperties = {}; + integrationProperties.serviceProviderProperties.URI = "https://www.wiris.net/demo/plugins/app"; + integrationProperties.serviceProviderProperties.server = "java"; + integrationProperties.target = editor.sourceElement; + integrationProperties.scriptName = "bundle.js"; + integrationProperties.managesLanguage = true; + // etc + // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element. + // To avoid a wrong behaviour, this integration only starts if the workspace container exists. + let integration; + if (integrationProperties.target) { + // Instance of the integration associated to this editor instance + integration = new CKEditor5Integration(integrationProperties); + integration.init(); + integration.listeners.fire("onTargetReady", {}); + integration.checkElement(); + this.listenTo(editor.editing.view.document, "click", (evt, data)=>{ + // Is Double-click + if (data.domEvent.detail === 2) { + integration.doubleClickHandler(data.domTarget, data.domEvent); + evt.stop(); + } + }, { + priority: "highest" + }); + } + return integration; + } + /** + * Add the MathType and ChemType commands to the editor + */ _addCommands() { + const { editor } = this; + // Add command to open the formula editor + editor.commands.add("MathType", new MathTypeCommand(editor)); + // Add command to open the chemistry formula editor + editor.commands.add("ChemType", new ChemTypeCommand(editor)); + } + /** + * Add the buttons for MathType and ChemType + * @param {CKEditor5Integration} integration the integration object + */ _addViews(integration) { + const { editor } = this; + // Check if MathType editor is enabled + if (Configuration.get("editorEnabled")) { + // Add button for the formula editor + editor.ui.componentFactory.add("MathType", (locale)=>{ + const view = new ckeditor5.ButtonView(locale); + // View is enabled iff command is enabled + view.bind("isEnabled").to(editor.commands.get("MathType"), "isEnabled"); + view.set({ + label: StringManager.get("insert_math", integration.getLanguage()), + icon: mathIcon, + tooltip: true + }); + // Callback executed once the image is clicked. + view.on("execute", ()=>{ + editor.execute("MathType", { + integration + }); + }); + return view; + }); + } + // Check if ChemType editor is enabled + if (Configuration.get("chemEnabled")) { + // Add button for the chemistry formula editor + editor.ui.componentFactory.add("ChemType", (locale)=>{ + const view = new ckeditor5.ButtonView(locale); + // View is enabled iff command is enabled + view.bind("isEnabled").to(editor.commands.get("ChemType"), "isEnabled"); + view.set({ + label: StringManager.get("insert_chem", integration.getLanguage()), + icon: chemIcon, + tooltip: true + }); + // Callback executed once the image is clicked. + view.on("execute", ()=>{ + editor.execute("ChemType", { + integration + }); + }); + return view; + }); + } + // Observer for the Double-click event + editor.editing.view.addObserver(ckeditor5.ClickObserver); + } + /** + * Registers the element in the schema + */ _addSchema() { + const { schema } = this.editor.model; + schema.register("mathml", { + inheritAllFrom: "$inlineObject", + allowAttributes: [ + "formula" + ] + }); + } + /** + * Add the downcast and upcast converters + */ _addConverters(integration) { + const { editor } = this; + // Editing view -> Model + editor.conversion.for("upcast").elementToElement({ + view: { + name: "span", + classes: "ck-math-widget" + }, + model: (viewElement, { writer: modelWriter })=>{ + const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute("data-mathml")); + return modelWriter.createElement("mathml", { + formula + }); + } + }); + // Data view -> Model + editor.data.upcastDispatcher.on("element:math", (evt, data, conversionApi)=>{ + const { consumable, writer } = conversionApi; + const { viewItem } = data; + // When element was already consumed then skip it. + if (!consumable.test(viewItem, { + name: true + })) { + return; + } + // If we encounter any with a LaTeX annotation inside, + // convert it into a "$$...$$" string. + const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define + // Get the formula of the (which is all its children). + const processor = new ckeditor5.XmlDataProcessor(editor.editing.view.document); + // Only god knows why the following line makes viewItem lose all of its children, + // so we obtain isLatex before doing this because we need viewItem's children for that. + const upcastWriter = new ckeditor5.UpcastWriter(editor.editing.view.document); + const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren()); + // and obtain the attributes of too! + const mathAttributes = [ + ...viewItem.getAttributes() + ].map(([key, value])=>` ${key}="${value}"`).join(""); + // We process the document fragment + let formula = processor.toData(viewDocumentFragment) || ""; + // And obtain the complete formula + formula = Util.htmlSanitize(`${formula}`); + // Replaces the < & > characters to its HTMLEntity to avoid render issues. + formula = formula.replaceAll('"<"', '"<"').replaceAll('">"', '">"').replaceAll("><<", "><<"); + /* Model node that contains what's going to actually be inserted. This can be either: - A element with a formula attribute set to the given formula, or - - If the original had a LaTeX annotation, then the annotation surrounded by "$$...$$" */ const modelNode = - isLatex - ? writer.createText(Parser.initParse(formula, integration.getLanguage())) - : writer.createElement("mathml", { - formula, - }); - // Find allowed parent for element that we are going to insert. - // If current parent does not allow to insert element but one of the ancestors does - // then split nodes to allowed parent. - const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor); - // When there is no split result it means that we can't insert element to model tree, so let's skip it. - if (!splitResult) { - return; - } - // Insert element on allowed position. - conversionApi.writer.insert(modelNode, splitResult.position); - // Consume appropriate value from consumable values list. - consumable.consume(viewItem, { - name: true, - }); - const parts = conversionApi.getSplitParts(modelNode); - // Set conversion result range. - data.modelRange = writer.createRange( - conversionApi.writer.createPositionBefore(modelNode), - conversionApi.writer.createPositionAfter(parts[parts.length - 1]), - ); - // Now we need to check where the `modelCursor` should be. - if (splitResult.cursorParent) { - // If we split parent to insert our element then we want to continue conversion in the new part of the split parent. - // - // before: foo[] - // after: foo[] - data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0); - } else { - // Otherwise just continue after inserted element. - data.modelCursor = data.modelRange.end; - } - }); - /** - * Whether the given view element has a LaTeX annotation element. - * @param {*} math - * @returns {bool} - */ function mathIsLatex(math) { - const semantics = math.getChild(0); - if (!semantics || semantics.name !== "semantics") return false; - for (const child of semantics.getChildren()) { - if (child.name === "annotation" && child.getAttribute("encoding") === "LaTeX") { - return true; - } - } - return false; - } - function createViewWidget(modelItem, { writer: viewWriter }) { - const widgetElement = viewWriter.createContainerElement("span", { - class: "ck-math-widget", - }); - const mathUIElement = createViewImage(modelItem, { - writer: viewWriter, - }); // eslint-disable-line no-use-before-define - if (mathUIElement) { - viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement); - } - return ckeditor5.toWidget(widgetElement, viewWriter); - } - function createViewImage(modelItem, { writer: viewWriter }) { - const htmlDataProcessor = new ckeditor5.HtmlDataProcessor(viewWriter.document); - const mathString = modelItem.getAttribute("formula").replaceAll('ref="<"', 'ref="<"'); - const imgHtml = Parser.initParse(mathString, integration.getLanguage()); - const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0); - /* Although we use the HtmlDataProcessor to obtain the attributes, + - If the original had a LaTeX annotation, then the annotation surrounded by "$$...$$" */ const modelNode = isLatex ? writer.createText(Parser.initParse(formula, integration.getLanguage())) : writer.createElement("mathml", { + formula + }); + // Find allowed parent for element that we are going to insert. + // If current parent does not allow to insert element but one of the ancestors does + // then split nodes to allowed parent. + const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor); + // When there is no split result it means that we can't insert element to model tree, so let's skip it. + if (!splitResult) { + return; + } + // Insert element on allowed position. + conversionApi.writer.insert(modelNode, splitResult.position); + // Consume appropriate value from consumable values list. + consumable.consume(viewItem, { + name: true + }); + const parts = conversionApi.getSplitParts(modelNode); + // Set conversion result range. + data.modelRange = writer.createRange(conversionApi.writer.createPositionBefore(modelNode), conversionApi.writer.createPositionAfter(parts[parts.length - 1])); + // Now we need to check where the `modelCursor` should be. + if (splitResult.cursorParent) { + // If we split parent to insert our element then we want to continue conversion in the new part of the split parent. + // + // before: foo[] + // after: foo[] + data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0); + } else { + // Otherwise just continue after inserted element. + data.modelCursor = data.modelRange.end; + } + }); + /** + * Whether the given view element has a LaTeX annotation element. + * @param {*} math + * @returns {bool} + */ function mathIsLatex(math) { + const semantics = math.getChild(0); + if (!semantics || semantics.name !== "semantics") return false; + for (const child of semantics.getChildren()){ + if (child.name === "annotation" && child.getAttribute("encoding") === "LaTeX") { + return true; + } + } + return false; + } + function createViewWidget(modelItem, { writer: viewWriter }) { + const widgetElement = viewWriter.createContainerElement("span", { + class: "ck-math-widget" + }); + const mathUIElement = createViewImage(modelItem, { + writer: viewWriter + }); // eslint-disable-line no-use-before-define + if (mathUIElement) { + viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement); + } + return ckeditor5.toWidget(widgetElement, viewWriter); + } + function createViewImage(modelItem, { writer: viewWriter }) { + const htmlDataProcessor = new ckeditor5.HtmlDataProcessor(viewWriter.document); + const mathString = modelItem.getAttribute("formula").replaceAll('ref="<"', 'ref="<"'); + const imgHtml = Parser.initParse(mathString, integration.getLanguage()); + const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0); + /* Although we use the HtmlDataProcessor to obtain the attributes, we must create a new EmptyElement which is independent of the DataProcessor being used by this editor instance */ if (imgElement) { - return viewWriter.createEmptyElement("img", imgElement.getAttributes(), { - renderUnsafeAttributes: ["src"], - }); - } - return null; - } - // Model -> Editing view - editor.conversion.for("editingDowncast").elementToElement({ - model: "mathml", - view: createViewWidget, - }); - // Model -> Data view - editor.conversion.for("dataDowncast").elementToElement({ - model: "mathml", - view: createDataString, - }); - /** - * Makes a copy of the given view node. - * @param {module:engine/view/node~Node} sourceNode Node to copy. - * @returns {module:engine/view/node~Node} Copy of the node. - */ function clone(viewWriter, sourceNode) { - if (sourceNode.is("text")) { - return viewWriter.createText(sourceNode.data); - } - if (sourceNode.is("element")) { - if (sourceNode.is("emptyElement")) { - return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes()); - } - const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes()); - for (const child of sourceNode.getChildren()) { - viewWriter.insert(viewWriter.createPositionAt(element, "end"), clone(viewWriter, child)); - } - return element; - } - throw new Exception("Given node has unsupported type."); // eslint-disable-line no-undef - } - function createDataString(modelItem, { writer: viewWriter }) { - const htmlDataProcessor = new ckeditor5.HtmlDataProcessor(viewWriter.document); - let mathString = Parser.endParseSaveMode(modelItem.getAttribute("formula")); - const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0); - return clone(viewWriter, sourceMathElement); - } - // This stops the view selection getting into the s and messing up caret movement - editor.editing.mapper.on( - "viewToModelPosition", - ckeditor5.viewToModelPositionOutsideModelElement(editor.model, (viewElement) => - viewElement.hasClass("ck-math-widget"), - ), - ); - // Keep a reference to the original get and set function. - editor.data; - /** - * Hack to transform $$latex$$ into in editor.getData()'s output. - */ editor.data.on( - "get", - (e) => { - let output = e.return; - // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any. - // For text or latex formulas, it returns the original output. - e.return = MathML.removeSemantics(output, "application/json"); - }, - { - priority: "low", - }, - ); - /** - * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData(). - */ editor.data.on( - "set", - (e, args) => { - // Retrieve the data to be set on the CKEditor. - let modifiedData = args[0]; - // Regex to find all mathml formulas. - const regexp = //gm; - // Get all MathML formulas and store them in an array. - // Using the conditional operator on data.main because the data parameter has different types depending on: - // editor.data.set can be used directly or by the source editing plugin. - // With the source editor plugin, data is an object with the key `main` which contains the source code string. - // When using the editor.data.set method, the data is a string with the content to be set to the editor. - let formulas = Object.values(modifiedData)[0] - ? [...Object.values(modifiedData)[0].matchAll(regexp)] - : [...modifiedData.matchAll(regexp)]; - // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation. - formulas.forEach((formula) => { - let mathml = formula[0]; - if (mathml.includes('encoding="LaTeX"')) { - // LaTeX found. - let latex = "$$$" + Latex.getLatexFromMathML(mathml) + "$$$"; // We add $$$ instead of $$ because the replace function ignores one $. - modifiedData = modifiedData.replace(mathml, latex); - } - }); - args[0] = modifiedData; - }, - { - priority: "high", - }, - ); - } - /** - * Expose the WirisPlugin variable to the window - */ // eslint-disable-next-line class-methods-use-this - _exposeWiris() { - window.WirisPlugin = { - Core, - Parser, - Image, - MathML, - Util, - Configuration, - Listeners, - IntegrationModel, - currentInstance, - Latex, - }; - } - } + return viewWriter.createEmptyElement("img", imgElement.getAttributes(), { + renderUnsafeAttributes: [ + "src" + ] + }); + } + return null; + } + // Model -> Editing view + editor.conversion.for("editingDowncast").elementToElement({ + model: "mathml", + view: createViewWidget + }); + // Model -> Data view + editor.conversion.for("dataDowncast").elementToElement({ + model: "mathml", + view: createDataString + }); + /** + * Makes a copy of the given view node. + * @param {module:engine/view/node~Node} sourceNode Node to copy. + * @returns {module:engine/view/node~Node} Copy of the node. + */ function clone(viewWriter, sourceNode) { + if (sourceNode.is("text")) { + return viewWriter.createText(sourceNode.data); + } + if (sourceNode.is("element")) { + if (sourceNode.is("emptyElement")) { + return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes()); + } + const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes()); + for (const child of sourceNode.getChildren()){ + viewWriter.insert(viewWriter.createPositionAt(element, "end"), clone(viewWriter, child)); + } + return element; + } + throw new Exception("Given node has unsupported type."); // eslint-disable-line no-undef + } + function createDataString(modelItem, { writer: viewWriter }) { + const htmlDataProcessor = new ckeditor5.HtmlDataProcessor(viewWriter.document); + let mathString = Parser.endParseSaveMode(modelItem.getAttribute("formula")); + const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0); + return clone(viewWriter, sourceMathElement); + } + // This stops the view selection getting into the s and messing up caret movement + editor.editing.mapper.on("viewToModelPosition", ckeditor5.viewToModelPositionOutsideModelElement(editor.model, (viewElement)=>viewElement.hasClass("ck-math-widget"))); + // Keep a reference to the original get and set function. + editor.data; + /** + * Hack to transform $$latex$$ into in editor.getData()'s output. + */ editor.data.on("get", (e)=>{ + let output = e.return; + // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any. + // For text or latex formulas, it returns the original output. + e.return = MathML.removeSemantics(output, "application/json"); + }, { + priority: "low" + }); + /** + * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData(). + */ editor.data.on("set", (e, args)=>{ + // Retrieve the data to be set on the CKEditor. + let modifiedData = args[0]; + // Regex to find all mathml formulas. + const regexp = //gm; + // Get all MathML formulas and store them in an array. + // Using the conditional operator on data.main because the data parameter has different types depending on: + // editor.data.set can be used directly or by the source editing plugin. + // With the source editor plugin, data is an object with the key `main` which contains the source code string. + // When using the editor.data.set method, the data is a string with the content to be set to the editor. + let formulas = Object.values(modifiedData)[0] ? [ + ...Object.values(modifiedData)[0].matchAll(regexp) + ] : [ + ...modifiedData.matchAll(regexp) + ]; + // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation. + formulas.forEach((formula)=>{ + let mathml = formula[0]; + if (mathml.includes('encoding="LaTeX"')) { + // LaTeX found. + let latex = "$$$" + Latex.getLatexFromMathML(mathml) + "$$$"; // We add $$$ instead of $$ because the replace function ignores one $. + modifiedData = modifiedData.replace(mathml, latex); + } + }); + args[0] = modifiedData; + }, { + priority: "high" + }); + } + /** + * Expose the WirisPlugin variable to the window + */ // eslint-disable-next-line class-methods-use-this + _exposeWiris() { + window.WirisPlugin = { + Core, + Parser, + Image, + MathML, + Util, + Configuration, + Listeners, + IntegrationModel, + currentInstance, + Latex + }; + } + } + + return MathType; - return MathType; -}); +})); //# sourceMappingURL=index.umd.js.map diff --git a/packages/ckeditor5/dist/browser/index.umd.js.map b/packages/ckeditor5/dist/browser/index.umd.js.map index 1b06d9279..a47e80422 100644 --- a/packages/ckeditor5/dist/browser/index.umd.js.map +++ b/packages/ckeditor5/dist/browser/index.umd.js.map @@ -1,24 +1 @@ -{ - "version": 3, - "file": "index.umd.js", - "sources": [ - "index.js" - ], - "sourcesContent": [ - "import { Command, Plugin } from 'ckeditor5';\nimport { ButtonView } from 'ckeditor5';\nimport { ClickObserver, XmlDataProcessor, UpcastWriter, HtmlDataProcessor } from 'ckeditor5';\nimport { Widget, viewToModelPositionOutsideModelElement, toWidget } from 'ckeditor5';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar purify = {exports: {}};\n\n(function(module, exports) {\n (function(global, factory) {\n module.exports = factory() ;\n })(commonjsGlobal, function() {\n const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object;\n let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\n let { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n /**\n\t * Creates a new function that calls the given function with a specified thisArg and arguments.\n\t *\n\t * @param {Function} func - The function to be wrapped and called.\n\t * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n\t */ function unapply(func) {\n return function(thisArg) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n /**\n\t * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n\t *\n\t * @param {Function} func - The constructor function to be wrapped and called.\n\t * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n\t */ function unconstruct(func) {\n return function() {\n for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n /**\n\t * Add properties to a lookup table\n\t *\n\t * @param {Object} set - The set to which elements will be added.\n\t * @param {Array} array - The array containing elements to be added to the set.\n\t * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n\t * @returns {Object} The modified set with added elements.\n\t */ function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while(l--){\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n /**\n\t * Clean up an array to harden against CSPP\n\t *\n\t * @param {Array} array - The array to be cleaned.\n\t * @returns {Array} The cleaned version of the array\n\t */ function cleanArray(array) {\n for(let index = 0; index < array.length; index++){\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n /**\n\t * Shallow clone an object\n\t *\n\t * @param {Object} object - The object to be cloned.\n\t * @returns {Object} A new object that copies the original.\n\t */ function clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)){\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n /**\n\t * This method automatically checks if the prop is function or getter and behaves accordingly.\n\t *\n\t * @param {Object} object - The object to look up the getter function in its prototype chain.\n\t * @param {String} prop - The property name for which to find the getter function.\n\t * @returns {Function} The getter function found in the prototype chain or a fallback function.\n\t */ function lookupGetter(object, prop) {\n while(object !== null){\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n }\n const html$1 = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr'\n ]);\n // SVG\n const svg$1 = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern'\n ]);\n const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence'\n ]);\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use'\n ]);\n const mathMl$1 = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts'\n ]);\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none'\n ]);\n const text = freeze([\n '#text'\n ]);\n const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n 'slot'\n ]);\n const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan'\n ]);\n const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns'\n ]);\n const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink'\n ]);\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n var EXPRESSIONS = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n /**\n\t * Creates a no-op policy for internal use only.\n\t * Don't export this function outside this module!\n\t * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n\t * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n\t * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n\t * are not supported or creating the policy failed).\n\t */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML (html) {\n return html;\n },\n createScriptURL (scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n let window1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = (root)=>createDOMPurify(root);\n /**\n\t * Version label, exposed for easier checks\n\t * if DOMPurify is up to date or not\n\t */ DOMPurify.version = '3.1.5';\n /**\n\t * Array of elements that DOMPurify removed during sanitation.\n\t * Empty if nothing was removed.\n\t */ DOMPurify.removed = [];\n if (!window1 || !window1.document || window1.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let { document } = window1;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window1.NamedNodeMap || window1.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window1;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document;\n const { importNode } = originalDocument;\n let hooks = {};\n /**\n\t * Expose whether this browser supports running the full DOMPurify.\n\t */ DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, CUSTOM_ELEMENT } = EXPRESSIONS;\n let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS;\n /**\n\t * We consider the elements and attributes below to be safe. Ideally\n\t * don't add any new ones but feel free to remove unwanted ones.\n\t */ /* allowed element names */ let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...html$1,\n ...svg$1,\n ...svgFilters,\n ...mathMl$1,\n ...text\n ]);\n /* Allowed attribute names */ let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...html,\n ...svg,\n ...mathMl,\n ...xml\n ]);\n /*\n\t * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n\t * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n\t * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n\t * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n\t */ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n\t * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n\t * This means, DOMPurify removes data attributes, mustaches and ERB\n\t */ let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n\t * This means, DOMPurify removes comments when containing risky content.\n\t */ let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n\t * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n\t * string (or a TrustedHTML object if Trusted Types are supported).\n\t * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n\t */ let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n\t * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n\t * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n\t * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n\t */ let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n\t * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n\t *\n\t * HTML/DOM spec rules that enable DOM Clobbering:\n\t * - Named Access on Window (§7.3.3)\n\t * - DOM Tree Accessors (§3.1.5)\n\t * - Form Element Parent-Child Relations (§4.10.3)\n\t * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n\t * - HTMLCollection (§4.2.10.2)\n\t *\n\t * Namespace isolation is implemented by prefixing `id` and `name` attributes\n\t * with a constant string, i.e., `user-content-`\n\t */ let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */ let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n\t * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp'\n ]);\n /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track'\n ]);\n /* Attributes safe for values like \"javascript:\" */ let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns'\n ]);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */ let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [\n MATHML_NAMESPACE,\n SVG_NAMESPACE,\n HTML_NAMESPACE\n ], stringToString);\n /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = [\n 'application/xhtml+xml',\n 'text/html'\n ];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */ let CONFIG = null;\n /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n\t * _parseConfig\n\t *\n\t * @param {Object} cfg optional config literal\n\t */ // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */ cfg = clone(cfg);\n PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */ ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */ if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */ if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, [\n 'html',\n 'head',\n 'body'\n ]);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, [\n 'tbody'\n ]);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext'\n ]);\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'annotation-xml'\n ]);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script'\n ]);\n /* Keep track of all possible SVG and MathML tags\n\t * so that we can perform the namespace checks\n\t * correctly. */ const ALL_SVG_TAGS = addToSet({}, [\n ...svg$1,\n ...svgFilters,\n ...svgDisallowed\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...mathMl$1,\n ...mathMlDisallowed\n ]);\n /**\n\t * @param {Element} element a DOM element whose namespace is being checked\n\t * @returns {boolean} Return false if the element has a\n\t * namespace that a spec-compliant parser would never\n\t * return. Return true otherwise.\n\t */ const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n\t * _forceRemove\n\t *\n\t * @param {Node} node a DOM node\n\t */ const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n node.parentNode.removeChild(node);\n } catch (_) {\n node.remove();\n }\n };\n /**\n\t * _removeAttribute\n\t *\n\t * @param {String} name an Attribute name\n\t * @param {Node} node a DOM node\n\t */ const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n\t * _initDocument\n\t *\n\t * @param {String} dirty a string of dirty markup\n\t * @return {Document} a DOM, filled with the dirty markup\n\t */ const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */ let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n\t * Use the DOMParser API by default, fallback later if needs be\n\t * DOMParser not work for svg when has multiple root element.\n\t */ if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n\t * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n\t *\n\t * @param {Node} root The root element or node to start traversing on.\n\t * @return {NodeIterator} The created NodeIterator\n\t */ const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n\t * _isClobbered\n\t *\n\t * @param {Node} elm element to check for clobbering attacks\n\t * @return {Boolean} true if clobbered, false if safe\n\t */ const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n /**\n\t * Checks whether the given object is a DOM node.\n\t *\n\t * @param {Node} object object to check whether it's a DOM node\n\t * @return {Boolean} true is object is a DOM node\n\t */ const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n /**\n\t * _executeHook\n\t * Execute user configurable hooks\n\t *\n\t * @param {String} entryPoint Name of the hook's entry point\n\t * @param {Node} currentNode node to work on with the hook\n\t * @param {Object} data additional hook parameters\n\t */ const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], (hook)=>{\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n /**\n\t * _sanitizeElements\n\t *\n\t * @protect nodeName\n\t * @protect textContent\n\t * @protect removeChild\n\t *\n\t * @param {Node} currentNode to check for permission to exist\n\t * @return {Boolean} true if node was killed, false if left alive\n\t */ const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */ _executeHook('beforeSanitizeElements', currentNode, null);\n /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */ _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */ if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any ocurrence of processing instructions */ if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for(let i = childCount - 1; i >= 0; --i){\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */ if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */ if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */ content = currentNode.textContent;\n arrayForEach([\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR\n ], (expr)=>{\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */ _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n /**\n\t * _isValidAttribute\n\t *\n\t * @param {string} lcTag Lowercase tag name of containing element.\n\t * @param {string} lcName Lowercase attribute name.\n\t * @param {string} value Attribute value.\n\t * @return {Boolean} Returns true if `value` is valid, otherwise false.\n\t */ // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */ if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n\t (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n\t XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n\t We don't need to check the value; it's always URI safe. */ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ;\n else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ;\n else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (// First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ;\n else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */ } else if (URI_SAFE_ATTRIBUTES[lcName]) ;\n else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ;\n else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ;\n else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ;\n else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n\t * _isBasicCustomElement\n\t * checks if at least one dash is included in tagName, and it's not the first char\n\t * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n\t *\n\t * @param {string} tagName name of the tag of the node to sanitize\n\t * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n\t */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n\t * _sanitizeAttributes\n\t *\n\t * @protect attributes\n\t * @protect nodeName\n\t * @protect removeAttribute\n\t * @protect setAttribute\n\t *\n\t * @param {Node} currentNode to sanitize\n\t */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */ _executeHook('beforeSanitizeAttributes', currentNode, null);\n const { attributes } = currentNode;\n /* Check if we have attributes; if not we might have a text node */ if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */ while(l--){\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n /* Execute a hook if present */ hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Remove attribute */ _removeAttribute(name, currentNode);\n /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) {\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue with comments inside attributes */ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) {\n arrayForEach([\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR\n ], (expr)=>{\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n /* Full DOM Clobbering protection via namespace isolation,\n\t * Prefix id and name attributes with `user-content-`\n\t */ if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Handle attributes that require Trusted Types */ if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ;\n else {\n switch(trustedTypes.getAttributeType(lcTag, lcName)){\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */ try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */ currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n /* Execute a hook if present */ _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n /**\n\t * _sanitizeShadowDOM\n\t *\n\t * @param {DocumentFragment} fragment to iterate over recursively\n\t */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */ _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while(shadowNode = shadowIterator.nextNode()){\n /* Execute a hook if present */ _executeHook('uponSanitizeShadowNode', shadowNode, null);\n /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) {\n continue;\n }\n /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode);\n }\n /* Execute a hook if present */ _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n /**\n\t * Sanitize\n\t * Public method providing core sanitation functionality\n\t *\n\t * @param {String|Node} dirty string or DOM node\n\t * @param {Object} cfg object\n\t */ // eslint-disable-next-line complexity\n DOMPurify.sanitize = function(dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n\t DO NOT return early, as this will return the wrong type if\n\t the user has requested a DOM object rather than a string */ IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */ if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */ if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */ DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n\t elements being stripped by the parser */ body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */ body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */ body = _initDocument(dirty);\n /* Check we have a DOM node from the data */ if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */ while(currentNode = nodeIterator.nextNode()){\n /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) {\n continue;\n }\n /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode);\n }\n /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */ if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while(body.firstChild){\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n\t AdoptNode() is not used because internal state is not reset\n\t (e.g. the past names map of a HTMLFormElement), this is safe\n\t in theory but we would rather not risk another attack vector.\n\t The state that is cloned by importNode() is explicitly defined\n\t by the specs.\n\t */ returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */ if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) {\n arrayForEach([\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR\n ], (expr)=>{\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n /**\n\t * Public method to set the configuration once\n\t * setConfig\n\t *\n\t * @param {Object} cfg configuration object\n\t */ DOMPurify.setConfig = function() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n /**\n\t * Public method to remove the configuration\n\t * clearConfig\n\t *\n\t */ DOMPurify.clearConfig = function() {\n CONFIG = null;\n SET_CONFIG = false;\n };\n /**\n\t * Public method to check if an attribute value is valid.\n\t * Uses last set config, if any. Otherwise, uses config defaults.\n\t * isValidAttribute\n\t *\n\t * @param {String} tag Tag name of containing element.\n\t * @param {String} attr Attribute name.\n\t * @param {String} value Attribute value.\n\t * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n\t */ DOMPurify.isValidAttribute = function(tag, attr, value) {\n /* Initialize shared config vars if necessary. */ if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n /**\n\t * AddHook\n\t * Public method to add DOMPurify hooks\n\t *\n\t * @param {String} entryPoint entry point for the hook to add\n\t * @param {Function} hookFunction function to execute\n\t */ DOMPurify.addHook = function(entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n /**\n\t * RemoveHook\n\t * Public method to remove a DOMPurify hook at a given entryPoint\n\t * (pops it from the stack of hooks if more are present)\n\t *\n\t * @param {String} entryPoint entry point for the hook to remove\n\t * @return {Function} removed(popped) hook\n\t */ DOMPurify.removeHook = function(entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n /**\n\t * RemoveHooks\n\t * Public method to remove all DOMPurify hooks at a given entryPoint\n\t *\n\t * @param {String} entryPoint entry point for the hooks to remove\n\t */ DOMPurify.removeHooks = function(entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n /**\n\t * RemoveAllHooks\n\t * Public method to remove all DOMPurify hooks\n\t */ DOMPurify.removeAllHooks = function() {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n return purify;\n });\n\n})(purify);\nvar purifyExports = purify.exports;\n\n/**\n * This class represents all the constants needed in a MathType integration among different classes.\n * If a constant should be used across different classes should be defined using attribute\n * accessors.\n */ class Constants {\n /**\n * Safe XML entities.\n * @type {Object}\n */ static get safeXmlCharactersEntities() {\n return {\n tagOpener: \"«\",\n tagCloser: \"»\",\n doubleQuote: \"¨\",\n realDoubleQuote: \""\"\n };\n }\n /**\n * Blackboard invalid safe characters.\n * @type {Object}\n */ static get safeBadBlackboardCharacters() {\n return {\n ltElement: \"«mo»<«/mo»\",\n gtElement: \"«mo»>«/mo»\",\n ampElement: \"«mo»&«/mo»\"\n };\n }\n /**\n * Blackboard valid safe characters.\n * @type{Object}\n */ static get safeGoodBlackboardCharacters() {\n return {\n ltElement: \"«mo»§lt;«/mo»\",\n gtElement: \"«mo»§gt;«/mo»\",\n ampElement: \"«mo»§amp;«/mo»\"\n };\n }\n /**\n * Standard XML special characters.\n * @type {Object}\n */ static get xmlCharacters() {\n return {\n id: \"xmlCharacters\",\n tagOpener: \"<\",\n tagCloser: \">\",\n doubleQuote: '\"',\n ampersand: \"&\",\n quote: \"'\"\n };\n }\n /**\n * Safe XML special characters. This characters are used instead the standard\n * the standard to parse the MathML if safeXML save mode is enable. Each XML\n * special character have a UTF-8 representation.\n * @type {Object}\n */ static get safeXmlCharacters() {\n return {\n id: \"safeXmlCharacters\",\n tagOpener: \"«\",\n tagCloser: \"»\",\n doubleQuote: \"¨\",\n ampersand: \"§\",\n quote: \"`\",\n realDoubleQuote: \"¨\"\n };\n }\n}\n\n/**\n * @classdesc\n * This class represents a class to manage MathML objects.\n */ class MathML {\n /**\n * Checks if the mathml at position i is inside an HTML attribute or not.\n * @param {string} content - a string containing MathML code.\n * @param {number} i - search index.\n * @return {boolean} true if is inside an HTML attribute. false otherwise.\n */ static isMathmlInAttribute(content, i) {\n // Regex =\n // '^[\\'\"][\\\\s]*=[\\\\s]*[\\\\w-]+([\\\\s]*(\"[^\"]*\"|\\'[^\\']*\\')[\\\\s]*\n // =[\\\\s]*[\\\\w-]+[\\\\s]*)*[\\\\s]+gmi<';\n const mathAtt = \"['\\\"][\\\\s]*=[\\\\s]*[\\\\w-]+\"; // \"=att OR '=att\n const attContent = \"\\\"[^\\\"]*\\\"|'[^']*'\"; // \"blabla\" OR 'blabla'\n const att = `[\\\\s]*(${attContent})[\\\\s]*=[\\\\s]*[\\\\w-]+[\\\\s]*`; // \"blabla\"=att OR 'blabla'=att\n const atts = `('${att}')*`; // \"blabla\"=att1 \"blabla\"=att2\n const regex = `^${mathAtt}${atts}[\\\\s]+gmi<`; // \"=att \"blabla\"=att1 \"blabla\"=att2 gmi< .\n const expression = new RegExp(regex);\n const actualContent = content.substring(0, i);\n const reversed = actualContent.split(\"\").reverse().join(\"\");\n const exists = expression.test(reversed);\n return exists;\n }\n /**\n * Decodes an encoded MathML with standard XML tags.\n * We use these entities because IE doesn't support html entities\n * on its attributes sometimes. Yes, sometimes.\n * @param {string} input - string to be decoded.\n * @return {string} decoded string.\n */ static safeXmlDecode(input) {\n let { tagOpener } = Constants.safeXmlCharactersEntities;\n let { tagCloser } = Constants.safeXmlCharactersEntities;\n let { doubleQuote } = Constants.safeXmlCharactersEntities;\n let { realDoubleQuote } = Constants.safeXmlCharactersEntities;\n // Decoding entities.\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n // Added to fix problem due to import from 1.9.x.\n input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote);\n // Blackboard.\n const { ltElement } = Constants.safeBadBlackboardCharacters;\n const { gtElement } = Constants.safeBadBlackboardCharacters;\n const { ampElement } = Constants.safeBadBlackboardCharacters;\n if (\"_wrs_blackboard\" in window && window._wrs_blackboard) {\n input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement);\n input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement);\n input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement);\n }\n ({ tagOpener } = Constants.safeXmlCharacters);\n ({ tagCloser } = Constants.safeXmlCharacters);\n ({ doubleQuote } = Constants.safeXmlCharacters);\n ({ realDoubleQuote } = Constants.safeXmlCharacters);\n const { ampersand } = Constants.safeXmlCharacters;\n const { quote } = Constants.safeXmlCharacters;\n // Decoding characters.\n input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.xmlCharacters.ampersand);\n input = input.split(quote).join(Constants.xmlCharacters.quote);\n // We are replacing $ by & when its part of an entity for retro-compatibility.\n // Now, the standard is replace § by &.\n let returnValue = \"\";\n let currentEntity = null;\n for(let i = 0; i < input.length; i += 1){\n const character = input.charAt(i);\n if (currentEntity == null) {\n if (character === \"$\") {\n currentEntity = \"\";\n } else {\n returnValue += character;\n }\n } else if (character === \";\") {\n returnValue += `&${currentEntity}`;\n currentEntity = null;\n } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) {\n // Character is part of an entity.\n currentEntity += character;\n } else {\n returnValue += `$${currentEntity}`; // Is not an entity.\n currentEntity = null;\n i -= 1; // Parse again the current character.\n }\n }\n return returnValue;\n }\n /**\n * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags.\n * We use these entities because IE doesn't support html entities on its attributes sometimes.\n * @param {string} input - input string to be encoded\n * @returns {string} encoded string.\n */ static safeXmlEncode(input) {\n const { tagOpener } = Constants.xmlCharacters;\n const { tagCloser } = Constants.xmlCharacters;\n const { doubleQuote } = Constants.xmlCharacters;\n const { ampersand } = Constants.xmlCharacters;\n const { quote } = Constants.xmlCharacters;\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand);\n input = input.split(quote).join(Constants.safeXmlCharacters.quote);\n return input;\n }\n /**\n * Converts special symbols (> 128) to entities and replaces all textual\n * entities by its number entities.\n * @param {string} mathml - MathML string containing - or not - special symbols\n * @returns {string} MathML with all textual entities replaced.\n */ static mathMLEntities(mathml) {\n let toReturn = \"\";\n for(let i = 0; i < mathml.length; i += 1){\n const character = mathml.charAt(i);\n // Parsing > 128 characters.\n if (mathml.codePointAt(i) > 128) {\n toReturn += `&#${mathml.codePointAt(i)};`;\n // For UTF-32 characters we need to move the index one position.\n if (mathml.codePointAt(i) > 0xffff) {\n i += 1;\n }\n } else if (character === \"&\") {\n const end = mathml.indexOf(\";\", i + 1);\n if (end >= 0) {\n const container = document.createElement(\"span\");\n container.innerHTML = mathml.substring(i, end + 1);\n toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`;\n i = end;\n } else {\n toReturn += character;\n }\n } else {\n toReturn += character;\n }\n }\n return toReturn;\n }\n /**\n * Add a custom editor name with the prefix wrs_ to a MathML class attribute.\n * @param {string} mathml - a MathML string created with a custom editor, like chemistry.\n * @param {string} customEditor - custom editor name.\n * @returns {string} MathML string with his class containing the editor toolbar string.\n */ static addCustomEditorClassAttribute(mathml, customEditor) {\n let toReturn = \"\";\n const start = mathml.indexOf(\"\");\n if (mathml.indexOf(\"class\") === -1) {\n // Adding custom editor type.\n toReturn = `${mathml.substr(start, end)} class=\"wrs_${customEditor}\">`;\n toReturn += mathml.substr(end + 1, mathml.length);\n return toReturn;\n }\n }\n return mathml;\n }\n /**\n * Remove a custom editor name from the MathML class attribute.\n * @param {string} mathml - a MathML string.\n * @param {string} customEditor - custom editor name.\n * @returns {string} The input MathML without customEditor name in his class.\n */ static removeCustomEditorClassAttribute(mathml, customEditor) {\n // Discard MathML without the specified class.\n if (mathml.indexOf(\"class\") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) {\n return mathml;\n }\n // Trivial case: class attribute value equal to editor name. Then\n // class attribute is removed.\n // First try to remove it with a space before if there is one\n // Otherwise without the space\n if (mathml.indexOf(` class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(` class=\"wrs_${customEditor}\"`, \"\");\n } else if (mathml.indexOf(`class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(`class=\"wrs_${customEditor}\"`, \"\");\n }\n // Non Trivial case: class attribute contains editor name.\n return mathml.replace(`wrs_${customEditor}`, \"\");\n }\n /**\n * Adds annotation tag in MathML element.\n * @param {String} mathml - valid MathML.\n * @param {String} content - value to put inside annotation tag.\n * @param {String} annotationEncoding - annotation encoding.\n * @returns {String} - 'mathml' with an annotation that contains\n * 'content' and encoding 'encoding'.\n */ static addAnnotation(mathml, content, annotationEncoding) {\n // If contains annotation, also contains semantics tag.\n const containsAnnotation = mathml.indexOf(\"\");\n mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`;\n } else if (MathML.isEmpty(mathml)) {\n const endIndexInline = mathml.indexOf(\"/>\");\n const endIndexNonInline = mathml.indexOf(\">\");\n const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline;\n mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`;\n } else {\n const beginMathMLContent = mathml.indexOf(\">\") + 1;\n const endMathmlContent = mathml.lastIndexOf(\"\");\n const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent);\n mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len\n }\n return mathmlWithAnnotation;\n }\n /**\n * Removes specific annotation tag in MathML element.\n * In case of remove the unique annotation, also is removed semantics tag.\n * @param {String} mathml - valid MathML.\n * @param {String} annotationEncoding - annotation encoding to remove.\n * @returns {String} - 'mathml' without the annotation encoding specified.\n */ static removeAnnotation(mathml, annotationEncoding) {\n let mathmlWithoutAnnotation = mathml;\n const openAnnotationTag = ``;\n const closeAnnotationTag = \"\";\n const startAnnotationIndex = mathml.indexOf(openAnnotationTag);\n if (startAnnotationIndex !== -1) {\n let differentAnnotationFound = false;\n let differentAnnotationIndex = mathml.indexOf(\"\\s*?()?/gm;\n // If `mrow` is found right after the `annotation` ending tag, it's removed as well\n // alongside `semantics` closing tag and the whole `annotation` tag and its contents.\n const semanticsEndingTagRegex = /(<\\/mrow>)?\\s*/gm;\n return mathml.replace(semanticsStartingTagRegex, \"\").replace(semanticsEndingTagRegex, \"\");\n }\n /**\n * Transforms all xml mathml occurrences that contain semantics to the same\n * xml mathml occurrences without semantics.\n * @param {string} text - string that can contain xml mathml occurrences.\n * @param {Constants} [characters] - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * xmlCharacters by default.\n * @returns {string} - 'text' with all xml mathml occurrences without annotation tag.\n */ static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) {\n const mathTagStart = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const mathTagEndline = `/${characters.tagCloser}`;\n const { tagCloser } = characters;\n const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`;\n const annotationTagStart = `${characters.tagOpener}annotation encoding=`;\n let output = \"\";\n let start = text.indexOf(mathTagStart);\n let end = 0;\n while(start !== -1){\n output += text.substring(end, start);\n // MathML can be written as '' or ''.\n const mathTagEndIndex = text.indexOf(mathTagEnd, start);\n const mathTagEndlineIndex = text.indexOf(mathTagEndline, start);\n const firstTagCloser = text.indexOf(tagCloser, start);\n if (mathTagEndIndex !== -1) {\n end = mathTagEndIndex;\n } else if (mathTagEndlineIndex === firstTagCloser - 1) {\n end = mathTagEndlineIndex;\n }\n const semanticsIndex = text.indexOf(semanticsTagStart, start);\n if (semanticsIndex !== -1) {\n const mmlTagStart = text.substring(start, semanticsIndex);\n const annotationIndex = text.indexOf(annotationTagStart, start);\n if (annotationIndex !== -1) {\n const startIndex = semanticsIndex + semanticsTagStart.length;\n const mmlContent = text.substring(startIndex, annotationIndex);\n output += mmlTagStart + mmlContent + mathTagEnd;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n end += mathTagEnd.length;\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n }\n output += text.substring(end, text.length);\n return output;\n }\n /**\n * Returns true if a MathML contains a certain class.\n * @param {string} mathML - input MathML.\n * @param {string} className - className.\n * @returns {boolean} true if the input MathML contains the input class.\n * false otherwise.\n * @static\n */ static containClass(mathML, className) {\n const classIndex = mathML.indexOf(\"class\");\n if (classIndex === -1) {\n return false;\n }\n const classTagEndIndex = mathML.indexOf(\">\", classIndex);\n const classTag = mathML.substring(classIndex, classTagEndIndex);\n if (classTag.indexOf(className) !== -1) {\n return true;\n }\n return false;\n }\n /**\n * Returns true if mathml is empty. Otherwise, false.\n * @param {string} mathml - valid MathML with standard XML tags.\n * @returns {boolean} - true if mathml is empty. Otherwise, false.\n */ static isEmpty(mathml) {\n // MathML can have the shape or ''.\n const closeTag = \">\";\n const closeTagInline = \"/>\";\n const firstCloseTagIndex = mathml.indexOf(closeTag);\n const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline);\n let empty = false;\n // MathML is always empty in the second shape.\n if (firstCloseTagInlineIndex !== -1) {\n if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) {\n empty = true;\n }\n }\n // MathML is always empty in the first shape when there aren't elements\n // between math tags.\n if (!empty) {\n const mathTagEndRegex = new RegExp(\"\");\n const mathTagEndArray = mathTagEndRegex.exec(mathml);\n if (mathTagEndArray) {\n empty = firstCloseTagIndex + 1 === mathTagEndArray.index;\n }\n }\n return empty;\n }\n /**\n * Encodes html entities inside properties.\n * @param {String} mathml - valid MathML with standard XML tags.\n * @returns {String} - 'mathml' with property entities encoded.\n */ static encodeProperties(mathml) {\n // Search all the properties.\n const regex = /\\w+=\".*?\"/g;\n // Encode html entities.\n const replacer = (match)=>{\n // It has the shape:\n // .\n const quoteIndex = match.indexOf('\"');\n const propertyValue = match.substring(quoteIndex + 1, match.length - 1);\n const propertyValueEncoded = Util.htmlEntities(propertyValue);\n const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}\"`;\n return matchEncoded;\n };\n const mathmlEncoded = mathml.replace(regex, replacer);\n return mathmlEncoded;\n }\n}\n\n/**\n * This class represents the configuration class.\n * Usually used to retrieve configuration properties generated in the backend into the frontend.\n */ class Configuration {\n /**\n * Adds a properties object to {@link Configuration.properties}.\n * @param {Object} properties - properties to append to current properties.\n */ static addConfiguration(properties) {\n Object.assign(Configuration.properties, properties);\n }\n /**\n * Static property.\n * The configuration properties object.\n * @private\n * @type {Object}\n */ static get properties() {\n return Configuration._properties;\n }\n /**\n * Static property setter.\n * Set configuration properties.\n * @param {Object} value - The property value.\n * @ignore\n */ static set properties(value) {\n Configuration._properties = value;\n }\n /**\n * Returns the value of a property key.\n * @param {String} key - Property key\n * @returns {String} Property value\n */ static get(key) {\n if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) {\n // Backwards compatibility.\n if (Object.prototype.hasOwnProperty.call(Configuration.properties, \"_wrs_conf_\")) {\n return Configuration.properties[`_wrs_conf_${key}`];\n }\n return false;\n }\n return Configuration.properties[key];\n }\n /**\n * Adds a new property to Configuration class.\n * @param {String} key - Property key.\n * @param {Object} value - Property value.\n */ static set(key, value) {\n Configuration.properties[key] = value;\n }\n /**\n * Updates a property object value with new values.\n * @param {String} key - The property key to be updated.\n * @param {Object} propertyValue - Object containing the new values.\n */ static update(key, propertyValue) {\n if (!Configuration.get(key)) {\n Configuration.set(key, propertyValue);\n } else {\n const updateProperty = Object.assign(Configuration.get(key), propertyValue);\n Configuration.set(key, updateProperty);\n }\n }\n}\n/**\n * Static properties object. Stores all configuration properties.\n * Needed to attribute accessors.\n * @private\n * @type {Object}\n */ Configuration._properties = {};\n\nclass TextCache {\n /**\n * @classdesc\n * This class represent a client-side text cache class. Contains pairs of\n * strings (key/value) which can be retrieved in any moment. Usually used\n * to store AJAX responses for text services like mathml2latex\n * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class).\n * @constructs\n */ constructor(){\n /**\n * Cache array property storing the cache entries.\n * @type {Array.}\n */ this.cache = [];\n }\n /**\n * This method populates a key/value pair into the {@link this.cache} property.\n * @param {String} key - Cache key, usually the service string parameter.\n * @param {String} value - Cache value, usually the service response.\n */ populate(key, value) {\n this.cache[key] = value;\n }\n /**\n * Returns the cache value associated to certain cache key.\n * @param {String} key - Cache key, usually the service string parameter.\n * @return {String} value - Cache value, if exists. False otherwise.\n */ get(key) {\n if (Object.prototype.hasOwnProperty.call(this.cache, key)) {\n return this.cache[key];\n }\n return false;\n }\n}\n\n/**\n * This object represents a custom listener.\n * @typedef {Object} Listener\n * @property {String} Listener.eventName - The listener name.\n * @property {Function} Listener.callback - The listener callback function.\n */ class Listeners {\n /**\n * @classdesc\n * This class represents a custom listeners manager.\n * @constructs\n */ constructor(){\n /**\n * Array containing all custom listeners.\n * @type {Object[]}\n */ this.listeners = [];\n }\n /**\n * Add a listener to Listener class.\n * @param {Object} listener - A listener object.\n */ add(listener) {\n this.listeners.push(listener);\n }\n /**\n * Fires MathType event listeners\n * @param {String} eventName - event name\n * @param {Event} event - event object.\n * @return {boolean} false if event has been prevented. true otherwise.\n */ fire(eventName, event) {\n for(let i = 0; i < this.listeners.length && !event.cancelled; i += 1){\n if (this.listeners[i].eventName === eventName) {\n // Calling listener.\n this.listeners[i].callback(event);\n }\n }\n return event.defaultPrevented;\n }\n /**\n * Creates a new listener object.\n * @param {string} eventName - Event name.\n * @param {Object} callback - Callback function.\n * @returns {object} the listener object.\n */ static newListener(eventName, callback) {\n const listener = {};\n listener.eventName = eventName;\n listener.callback = callback;\n return listener;\n }\n}\n\n/**\n * @typedef {Object} ServiceProviderProperties\n * @property {String} URI - Service URI.\n * @property {String} server - Service server language.\n */ /**\n * @classdesc\n * Class representing a serviceProvider. A serviceProvider is a class containing\n * an arbitrary number of services with the correspondent path.\n */ class ServiceProvider {\n /**\n * Returns Service Provider listeners.\n * @type {Listeners}\n */ static get listeners() {\n return ServiceProvider._listeners;\n }\n /**\n * Adds a {@link Listener} instance to {@link ServiceProvider} class.\n * @param {Listener} listener - Instance of {@link Listener}.\n */ static addListener(listener) {\n ServiceProvider.listeners.add(listener);\n }\n /**\n * Fires events in Service Provider.\n * @param {String} eventName - Event name.\n * @param {Event} event - Event object.\n */ static fireEvent(eventName, event) {\n ServiceProvider.listeners.fire(eventName, event);\n }\n /**\n * Service parameters.\n * @type {ServiceProviderProperties}\n *\n */ static get parameters() {\n return ServiceProvider._parameters;\n }\n /**\n * Service parameters.\n * @private\n * @type {ServiceProviderProperties}\n */ static set parameters(parameters) {\n ServiceProvider._parameters = parameters;\n }\n /**\n * Static property.\n * Return service provider paths.\n * @private\n * @type {String}\n */ static get servicePaths() {\n return ServiceProvider._servicePaths;\n }\n /**\n * Static property setter.\n * Set service paths.\n * @param {String} value - The property value.\n * @ignore\n */ static set servicePaths(value) {\n ServiceProvider._servicePaths = value;\n }\n /**\n * Adds a new service to the ServiceProvider.\n * @param {String} service - Service name.\n * @param {String} path - Service path.\n * @static\n */ static setServicePath(service, path) {\n ServiceProvider.servicePaths[service] = path;\n }\n /**\n * Returns the service path for a certain service.\n * @param {String} serviceName - Service name.\n * @returns {String} The service path.\n * @static\n */ static getServicePath(serviceName) {\n return ServiceProvider.servicePaths[serviceName];\n }\n /**\n * Static property.\n * Service provider integration path.\n * @type {String}\n */ static get integrationPath() {\n return ServiceProvider._integrationPath;\n }\n /**\n * Static property setter.\n * Set service provider integration path.\n * @param {String} value - The property value.\n * @ignore\n */ static set integrationPath(value) {\n ServiceProvider._integrationPath = value;\n }\n /**\n * Returns the server URL in the form protocol://serverName:serverPort.\n * @return {String} The client side server path.\n */ static getServerURL() {\n const url = window.location.href;\n const arr = url.split(\"/\");\n const result = `${arr[0]}//${arr[2]}`;\n return result;\n }\n /**\n * Inits {@link this} class. Uses {@link this.integrationPath} as\n * base path to generate all backend services paths.\n * @param {Object} parameters - Function parameters.\n * @param {String} parameters.integrationPath - Service path.\n */ static init(parameters) {\n ServiceProvider.parameters = parameters;\n // Services path (tech dependant).\n let configurationURI = ServiceProvider.createServiceURI(\"configurationjs\");\n let createImageURI = ServiceProvider.createServiceURI(\"createimage\");\n let showImageURI = ServiceProvider.createServiceURI(\"showimage\");\n let getMathMLURI = ServiceProvider.createServiceURI(\"getmathml\");\n let serviceURI = ServiceProvider.createServiceURI(\"service\");\n // Some backend integrations (like Java o Ruby) have an absolute backend path,\n // for example: /app/service. For them we calculate the absolute URL path, i.e\n // protocol://domain:port/app/service\n if (ServiceProvider.parameters.URI.indexOf(\"/\") === 0) {\n const serverPath = ServiceProvider.getServerURL();\n configurationURI = serverPath + configurationURI;\n showImageURI = serverPath + showImageURI;\n createImageURI = serverPath + createImageURI;\n getMathMLURI = serverPath + getMathMLURI;\n serviceURI = serverPath + serviceURI;\n }\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n ServiceProvider.setServicePath(\"showimage\", showImageURI);\n ServiceProvider.setServicePath(\"createimage\", createImageURI);\n ServiceProvider.setServicePath(\"service\", serviceURI);\n ServiceProvider.setServicePath(\"getmathml\", getMathMLURI);\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n ServiceProvider.listeners.fire(\"onInit\", {});\n }\n /**\n * Gets the content from an URL.\n * @param {String} url - Target URL.\n * @param {Object} [postVariables] - Object containing post variables.\n * null if a GET query should be done.\n * @returns {String} Content of the target URL.\n * @private\n * @static\n */ static getUrl(url, postVariables) {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n const httpRequest = Util.createHttpRequest();\n if (httpRequest) {\n if (typeof postVariables === \"undefined\" || typeof postVariables === \"undefined\") {\n httpRequest.open(\"GET\", url, false);\n } else if (url.substr(0, 1) === \"/\" || url.substr(0, 7) === \"http://\" || url.substr(0, 8) === \"https://\") {\n httpRequest.open(\"POST\", url, false);\n } else {\n httpRequest.open(\"POST\", currentPath + url, false);\n }\n let header = Configuration.get(\"customHeaders\");\n if (header) {\n if (typeof header === \"string\") {\n header = Util.convertStringToObject(header);\n }\n Object.entries(header).forEach(([key, val])=>httpRequest.setRequestHeader(key, val));\n }\n if (typeof postVariables !== \"undefined\" && postVariables) {\n httpRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n httpRequest.send(Util.httpBuildQuery(postVariables));\n } else {\n httpRequest.send(null);\n }\n return httpRequest.responseText;\n }\n return \"\";\n }\n /**\n * Returns the response text of a certain service.\n * @param {String} service - Service name.\n * @param {String} postVariables - Post variables.\n * @param {Boolean} get - True if the request is GET instead of POST. false otherwise.\n * @returns {String} Service response text.\n */ static getService(service, postVariables, get) {\n let response;\n if (get === true) {\n const getVariables = postVariables ? `?${postVariables}` : \"\";\n const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`;\n response = ServiceProvider.getUrl(serviceUrl);\n } else {\n const serviceUrl = ServiceProvider.getServicePath(service);\n response = ServiceProvider.getUrl(serviceUrl, postVariables);\n }\n return response;\n }\n /**\n * Returns the server language of a certain service. The possible values\n * are: php, aspx, java and ruby.\n * This method has backward compatibility purposes.\n * @param {String} service - The configuration service.\n * @returns {String} - The server technology associated with the configuration service.\n */ static getServerLanguageFromService(service) {\n if (service.indexOf(\".php\") !== -1) {\n return \"php\";\n }\n if (service.indexOf(\".aspx\") !== -1) {\n return \"aspx\";\n }\n if (service.indexOf(\"wirispluginengine\") !== -1) {\n return \"ruby\";\n }\n return \"java\";\n }\n /**\n * Returns the URI associated with a certain service.\n * @param {String} service - The service name.\n * @return {String} The service path.\n */ static createServiceURI(service) {\n const extension = ServiceProvider.serverExtension();\n return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension;\n }\n static serverExtension() {\n if (ServiceProvider.parameters.server.indexOf(\"php\") !== -1) {\n return \".php\";\n }\n if (ServiceProvider.parameters.server.indexOf(\"aspx\") !== -1) {\n return \".aspx\";\n }\n return \"\";\n }\n}\n/**\n * @property {String} service - The service name.\n * @property {String} path - The service path.\n * @static\n */ ServiceProvider._servicePaths = {};\n/**\n * The integration path. Contains the path of the configuration service.\n * Used to define the path for all services.\n * @type {String}\n * @private\n */ ServiceProvider._integrationPath = \"\";\n/**\n * ServiceProvider static listeners.\n * @type {Listeners}\n * @private\n */ ServiceProvider._listeners = new Listeners();\n/**\n * Service provider parameters.\n * @type {ServiceProviderParameters}\n */ ServiceProvider._parameters = {};\n\n/**\n * @classdesc\n * This class represents a LaTeX parser. Manages the services which allows to convert\n * LaTeX into MathML and MathML into LaTeX.\n */ class Latex {\n /**\n * Static property.\n * Return latex cache.\n * @private\n * @type {Cache}\n */ static get cache() {\n return Latex._cache;\n }\n /**\n * Static property setter.\n * Set latex cache.\n * @param {Cache} value - The property value.\n * @ignore\n */ static set cache(value) {\n Latex._cache = value;\n }\n /**\n * Converts MathML to LaTeX by calling mathml2latex service. For text services\n * we call a text service with the param mathml2latex.\n * @param {String} mathml - MathML String.\n * @return {String} LaTeX string generated by the MathML argument.\n */ static getLatexFromMathML(mathml) {\n const mathmlWithoutSemantics = MathML.removeSemantics(mathml);\n /**\n * @type {TextCache}\n */ const { cache } = Latex;\n const data = {\n service: \"mathml2latex\",\n mml: mathmlWithoutSemantics\n };\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n // TODO: Error handling.\n let latex = \"\";\n if (jsonResponse.status === \"ok\") {\n latex = jsonResponse.result.text;\n const latexHtmlEntitiesEncoded = Util.htmlEntities(latex);\n // Inserting LaTeX semantics.\n const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, \"LaTeX\");\n cache.populate(latex, mathmlWithSemantics);\n }\n return latex;\n }\n /**\n * Converts LaTeX to MathML by calling latex2mathml service. For text services\n * we call a text service with the param latex2mathml.\n * @param {String} latex - String containing a LaTeX formula.\n * @param {Boolean} includeLatexOnSemantics\n * - If true LaTeX would me included into MathML semantics.\n * @return {String} MathML string generated by the LaTeX argument.\n */ static getMathMLFromLatex(latex, includeLatexOnSemantics) {\n /**\n * @type {TextCache}\n */ const latexCache = Latex.cache;\n if (Latex.cache.get(latex)) {\n return Latex.cache.get(latex);\n }\n const data = {\n service: \"latex2mathml\",\n latex\n };\n if (includeLatexOnSemantics) {\n data.saveLatex = \"\";\n }\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n let output;\n if (jsonResponse.status === \"ok\") {\n let mathml = jsonResponse.result.text;\n mathml = mathml.split(\"\\r\").join(\"\").split(\"\\n\").join(\" \");\n // Populate LatexCache.\n if (mathml.indexOf(\"semantics\") === -1 && mathml.indexOf(\"annotation\") === -1) {\n const content = Util.htmlEntities(latex);\n mathml = MathML.addAnnotation(mathml, content, \"LaTeX\");\n output = mathml;\n } else {\n output = mathml;\n }\n if (!latexCache.get(latex)) {\n latexCache.populate(latex, mathml);\n }\n } else {\n output = `$$${latex}$$`;\n }\n return output;\n }\n /**\n * Converts all occurrences of MathML code to LaTeX.\n * The MathML code should containing to be converted.\n * @param {String} content - A string containing MathML valid code.\n * @param {Object} characters - An object containing special characters.\n * @return {String} A string containing all MathML annotated occurrences\n * replaced by the corresponding LaTeX code.\n */ static parseMathmlToLatex(content, characters) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`;\n const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n let mathml;\n let startAnnotation;\n let closeAnnotation;\n while(start !== -1){\n output += content.substring(end, start);\n end = content.indexOf(mathTagEnd, start);\n if (end === -1) {\n end = content.length - 1;\n } else {\n end += mathTagEnd.length;\n }\n mathml = content.substring(start, end);\n startAnnotation = mathml.indexOf(openTarget);\n if (startAnnotation !== -1) {\n startAnnotation += openTarget.length;\n closeAnnotation = mathml.indexOf(closeTarget);\n let latex = mathml.substring(startAnnotation, closeAnnotation);\n if (characters === Constants.safeXmlCharacters) {\n latex = MathML.safeXmlDecode(latex);\n }\n output += `$$${latex}$$`;\n // Populate latex into cache.\n Latex.cache.populate(latex, mathml);\n } else {\n output += mathml;\n }\n start = content.indexOf(mathTagBegin, end);\n }\n output += content.substring(end, content.length);\n return output;\n }\n /**\n * Extracts the latex of a determined position in a text.\n * @param {Node} textNode - textNode to extract the LaTeX\n * @param {Number} caretPosition - Starting position to find LaTeX.\n * @param {Object} latexTags - Optional parameter representing tags between latex is inserted.\n * It has the 'open' attribute for the open tag and the 'close' attribute for the close tag.\n * \"$$\" by default.\n * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found.\n * @static\n */ static getLatexFromTextNode(textNode, caretPosition, latexTags) {\n // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument).\n // Tags used for LaTeX formulas.\n const defaultLatexTags = {\n open: \"$$\",\n close: \"$$\"\n };\n // latexTags is an optional parameter. If is not set, use default latexTags.\n if (typeof latexTags === \"undefined\" || latexTags == null) {\n latexTags = defaultLatexTags;\n }\n // Looking for the first textNode.\n let startNode = textNode;\n while(startNode.previousSibling && startNode.previousSibling.nodeType === 3){\n // TEXT_NODE.\n startNode = startNode.previousSibling;\n }\n /**\n * Returns the next latex position and node from a specific node and position.\n * @param {Node} currentNode - Node where searching latex.\n * @param {Number} currentPosition - Current position inside the currentNode.\n * @param {Object} latexTagsToUse - Tags used at latex beginning and latex final.\n * \"$$\" by default.\n * @param {Boolean} tag - Tag containing the current search.\n * @returns {Object} Object containing the current node and the position.\n */ function getNextLatexPosition(currentNode, currentPosition, tag) {\n let position = currentNode.nodeValue.indexOf(tag, currentPosition);\n while(position === -1){\n currentNode = currentNode.nextSibling;\n if (!currentNode) {\n // TEXT_NODE.\n return null; // Not found.\n }\n position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1;\n }\n return {\n node: currentNode,\n position\n };\n }\n /**\n * Determines if a node is previous, or not, to a second one.\n * @param {Node} node - Start node.\n * @param {Number} position - Start node position.\n * @param {Node} endNode - End node.\n * @param {Number} endPosition - End node position.\n * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise.\n */ function isPrevious(node, position, endNode, endPosition) {\n if (node === endNode) {\n return position <= endPosition;\n }\n while(node && node !== endNode){\n node = node.nextSibling;\n }\n return node === endNode;\n }\n let start;\n let end = {\n node: startNode,\n position: 0\n };\n // Is supposed that open and close tags has the same length.\n const tagLength = latexTags.open.length;\n do {\n start = getNextLatexPosition(end.node, end.position, latexTags.open);\n if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) {\n return null;\n }\n end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close);\n if (end == null) {\n return null;\n }\n end.position += tagLength;\n }while (isPrevious(end.node, end.position, textNode, caretPosition))\n // Isolating latex.\n let latex;\n if (start.node === end.node) {\n latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength);\n } else {\n const index = start.position + tagLength;\n latex = start.node.nodeValue.substring(index, start.node.nodeValue.length);\n let currentNode = start.node;\n do {\n currentNode = currentNode.nextSibling;\n if (currentNode === end.node) {\n latex += end.node.nodeValue.substring(0, end.position - tagLength);\n } else {\n latex += currentNode.nodeValue ? currentNode.nodeValue : \"\";\n }\n }while (currentNode !== end.node)\n }\n return {\n latex,\n startNode: start.node,\n startPosition: start.position,\n endNode: end.node,\n endPosition: end.position\n };\n }\n}\n/**\n * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string.\n * @type {Cache}\n * @static\n */ Latex._cache = new TextCache();\n\nvar ar = {\n\tlatex: \"LaTeX\",\n\tcancel: \"إلغاء\",\n\taccept: \"إدراج\",\n\tmanual: \"الدليل\",\n\tinsert_math: \"إدراج صيغة رياضية - MathType\",\n\tinsert_chem: \"إدراج صيغة كيميائية - ChemType\",\n\tminimize: \"تصغير\",\n\tmaximize: \"تكبير\",\n\tfullscreen: \"ملء الشاشة\",\n\texit_fullscreen: \"الخروج من ملء الشاشة\",\n\tclose: \"إغلاق\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"نافذة MathType مشروطة\",\n\tclose_modal_warning: \"هل تريد المغادرة بالتأكيد؟ ستُفقد التغييرات التي أجريتها.\",\n\tlatex_name_label: \"صيغة Latex\",\n\tbrowser_no_compatible: \"المستعرض غير متوافق مع تقنية AJAX. الرجاء استخدام أحدث إصدار من Mozilla Firefox.\",\n\terror_convert_accessibility: \"حدث خطأ أثناء التحويل من MathML إلى نص قابل للاستخدام.\",\n\texception_cross_site: \"البرمجة النصية للمواقع المشتركة مسموح بها لـ HTTP فقط.\",\n\texception_high_surrogate: \"المركّب المرتفع غير متبوع بمركّب منخفض في fixedCharCodeAt()‎\",\n\texception_string_length: \"سلسلة غير صالحة. يجب أن يكون الطول من مضاعفات العدد 4\",\n\texception_key_nonobject: \"Object.keys مستدعاة على غير كائن\",\n\texception_null_or_undefined: \" هذا فارغ أو غير محدد\",\n\texception_not_function: \" ليست دالة\",\n\texception_invalid_date_format: \"تنسيق تاريخ غير صالح: \",\n\texception_casting: \"لا يمكن الصياغة \",\n\texception_casting_to: \" إلى \"\n};\nvar ca = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancel·lar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir fórmula matemàtica - MathType\",\n\tinsert_chem: \"Inserir fórmula química - ChemType\",\n\tminimize: \"Minimitza\",\n\tmaximize: \"Maximitza\",\n\tfullscreen: \"Pantalla completa\",\n\texit_fullscreen: \"Sortir de la pantalla complera\",\n\tclose: \"Tanca\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \" Finestra modal de MathType\",\n\tclose_modal_warning: \"N'estàs segur que vols sortir? Es perdran els canvis que has fet.\",\n\tlatex_name_label: \"Fórmula en Latex\",\n\tbrowser_no_compatible: \"El teu navegador no és compatible amb AJAX. Si us plau, usa la darrera versió de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Error en convertir de MathML a text accessible.\",\n\texception_cross_site: \"Els scripts de llocs creuats només estan permesos per HTTP.\",\n\texception_high_surrogate: \"Subrogat alt no seguit de subrogat baix a fixedCharCodeAt()\",\n\texception_string_length: \"Cadena invàlida. La longitud ha de ser un múltiple de 4\",\n\texception_key_nonobject: \"Object.keys anomenat a non-object\",\n\texception_null_or_undefined: \" això és null o no definit\",\n\texception_not_function: \" no és una funció\",\n\texception_invalid_date_format: \"Format de data invàlid : \",\n\texception_casting: \"No es pot emetre \",\n\texception_casting_to: \" a \"\n};\nvar cs = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Storno\",\n\taccept: \"Vložit\",\n\tmanual: \"Příručka\",\n\tinsert_math: \"Vložit matematický vzorec - MathType\",\n\tinsert_chem: \"Vložení chemického vzorce – ChemType\",\n\tminimize: \"Minimalizovat\",\n\tmaximize: \"Maximalizovat\",\n\tfullscreen: \"Celá obrazovka\",\n\texit_fullscreen: \"Opustit režim celé obrazovky\",\n\tclose: \"Zavřít\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modální okno MathType\",\n\tclose_modal_warning: \"Opravdu chcete okno zavřít? Provedené změny budou ztraceny.\",\n\tlatex_name_label: \"Vzorec v LaTeXu\",\n\tbrowser_no_compatible: \"Váš prohlížeč nepodporuje technologii AJAX. Použijte nejnovější verzi prohlížeče Mozilla Firefox.\",\n\terror_convert_accessibility: \"Při převodu kódu MathML na čitelný text došlo k chybě.\",\n\texception_cross_site: \"Skriptování mezi více servery je povoleno jen v HTTP.\",\n\texception_high_surrogate: \"Ve funkci fixedCharCodeAt() nenásleduje po první části kódu znaku druhá část\",\n\texception_string_length: \"Neplatný řetězec. Délka musí být násobkem 4.\",\n\texception_key_nonobject: \"Funkce Object.keys byla použita pro prvek, který není objektem\",\n\texception_null_or_undefined: \" hodnota je null nebo není definovaná\",\n\texception_not_function: \" není funkce\",\n\texception_invalid_date_format: \"Neplatný formát data: \",\n\texception_casting: \"Nelze přetypovat \",\n\texception_casting_to: \" na \"\n};\nvar da = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annuller\",\n\taccept: \"Indsæt\",\n\tmanual: \"Brugervejledning\",\n\tinsert_math: \"Indsæt matematisk formel - MathType\",\n\tinsert_chem: \"Indsæt en kemisk formel - ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fuld skærm\",\n\texit_fullscreen: \"Afslut Fuld skærm\",\n\tclose: \"Luk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType-modalvindue\",\n\tclose_modal_warning: \"Er du sikker på, du vil lukke? Dine ændringer går tabt.\",\n\tlatex_name_label: \"LaTex-formel\",\n\tbrowser_no_compatible: \"Din browser er ikke kompatibel med AJAX-teknologi. Brug den nyeste version af Mozilla Firefox.\",\n\terror_convert_accessibility: \"Fejl under konvertering fra MathML til tilgængelig tekst.\",\n\texception_cross_site: \"Scripts på tværs af websteder er kun tilladt for HTTP.\",\n\texception_high_surrogate: \"Et højt erstatningstegn er ikke fulgt af et lavt erstatningstegn i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Længden skal være et multiplum af 4\",\n\texception_key_nonobject: \"Object.keys kaldet ved ikke-objekt\",\n\texception_null_or_undefined: \" dette er nul eller ikke defineret\",\n\texception_not_function: \" er ikke en funktion\",\n\texception_invalid_date_format: \"Ugyldigt datoformat: \",\n\texception_casting: \"Kan ikke beregne \",\n\texception_casting_to: \" til \"\n};\nvar de = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Abbrechen\",\n\taccept: \"Einfügen\",\n\tmanual: \"Handbuch\",\n\tinsert_math: \"Mathematische Formel einfügen - MathType\",\n\tinsert_chem: \"Eine chemische Formel einfügen – ChemType\",\n\tminimize: \"Verkleinern\",\n\tmaximize: \"Vergrößern\",\n\tfullscreen: \"Vollbild\",\n\texit_fullscreen: \"Vollbild schließen\",\n\tclose: \"Schließen\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modales MathType-Fenster\",\n\tclose_modal_warning: \"Bist du sicher, dass du das Programm verlassen willst? Alle vorgenommenen Änderungen gehen damit verloren.\",\n\tlatex_name_label: \"Latex-Formel\",\n\tbrowser_no_compatible: \"Dein Browser ist nicht mit der AJAX-Technologie kompatibel. Verwende bitte die neueste Version von Mozilla Firefox.\",\n\terror_convert_accessibility: \"Fehler beim Konvertieren von MathML in barrierefreien Text.\",\n\texception_cross_site: \"Cross-Site-Scripting ist nur bei HTTP zulässig.\",\n\texception_high_surrogate: \"Hoher Ersatz bei bei festerZeichenkodierungbei() nicht von niedrigem Ersatz befolgt.\",\n\texception_string_length: \"Ungültige Zeichenfolge. Länge muss ein Vielfaches von 4 sein.\",\n\texception_key_nonobject: \"Object.keys wurde für ein Nicht-Objekt aufgerufen.\",\n\texception_null_or_undefined: \" Das ist Null oder nicht definiert.\",\n\texception_not_function: \" ist keine Funktion\",\n\texception_invalid_date_format: \"Ungültiges Datumsformat: \",\n\texception_casting: \"Umwandlung nicht möglich \",\n\texception_casting_to: \" zu \"\n};\nvar el = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Άκυρο\",\n\taccept: \"Εισαγωγή\",\n\tmanual: \"Χειροκίνητα\",\n\tinsert_math: \"Εισαγωγή μαθηματικού τύπου - MathType\",\n\tinsert_chem: \"Εισαγωγή χημικού τύπου - ChemType\",\n\tminimize: \"Ελαχιστοποίηση\",\n\tmaximize: \"Μεγιστοποίηση\",\n\tfullscreen: \"Πλήρης οθόνη\",\n\texit_fullscreen: \"Έξοδος από πλήρη οθόνη\",\n\tclose: \"Κλείσιμο\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Τροπικό παράθυρο MathType\",\n\tclose_modal_warning: \"Επιθυμείτε σίγουρα αποχώρηση; Θα χαθούν οι αλλαγές που έχετε κάνει.\",\n\tlatex_name_label: \"Τύπος LaTeX\",\n\tbrowser_no_compatible: \"Το πρόγραμμα περιήγησής σας δεν είναι συμβατό με την τεχνολογία AJAX. Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Mozilla Firefox.\",\n\terror_convert_accessibility: \"Σφάλμα κατά τη μετατροπή από MathML σε προσβάσιμο κείμενο.\",\n\texception_cross_site: \"Το XSS (Cross site scripting) επιτρέπεται μόνο για HTTP.\",\n\texception_high_surrogate: \"Το υψηλό υποκατάστατο δεν ακολουθείται από χαμηλό υποκατάστατο στο fixedCharCodeAt()\",\n\texception_string_length: \"Μη έγκυρη συμβολοσειρά. Το μήκος πρέπει να είναι πολλαπλάσιο του 4\",\n\texception_key_nonobject: \"Έγινε κλήση του Object.keys σε μη αντικείμενο\",\n\texception_null_or_undefined: \" αυτό είναι μηδενικό ή δεν έχει οριστεί\",\n\texception_not_function: \" δεν είναι συνάρτηση\",\n\texception_invalid_date_format: \"Μη έγκυρη μορφή ημερομηνίας: \",\n\texception_casting: \"Δεν είναι δυνατή η μετατροπή \",\n\texception_casting_to: \" σε \"\n};\nvar en = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancel\",\n\taccept: \"Insert\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Insert a math equation - MathType\",\n\tinsert_chem: \"Insert a chemistry formula - ChemType\",\n\tminimize: \"Minimize\",\n\tmaximize: \"Maximize\",\n\tfullscreen: \"Full-screen\",\n\texit_fullscreen: \"Exit full-screen\",\n\tclose: \"Close\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modal window\",\n\tclose_modal_warning: \"Are you sure you want to leave? The changes you made will be lost.\",\n\tlatex_name_label: \"Latex Formula\",\n\tbrowser_no_compatible: \"Your browser is not compatible with AJAX technology. Please, use the latest version of Mozilla Firefox.\",\n\terror_convert_accessibility: \"Error converting from MathML to accessible text.\",\n\texception_cross_site: \"Cross site scripting is only allowed for HTTP.\",\n\texception_high_surrogate: \"High surrogate not followed by low surrogate in fixedCharCodeAt()\",\n\texception_string_length: \"Invalid string. Length must be a multiple of 4\",\n\texception_key_nonobject: \"Object.keys called on non-object\",\n\texception_null_or_undefined: \" this is null or not defined\",\n\texception_not_function: \" is not a function\",\n\texception_invalid_date_format: \"Invalid date format : \",\n\texception_casting: \"Cannot cast \",\n\texception_casting_to: \" to \"\n};\nvar es = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Insertar\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Insertar fórmula matemática - MathType\",\n\tinsert_chem: \"Insertar fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Pantalla completa\",\n\texit_fullscreen: \"Salir de pantalla completa\",\n\tclose: \"Cerrar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Ventana modal de MathType\",\n\tclose_modal_warning: \"Seguro que quieres cerrar? Los cambios que has hecho se perderán\",\n\tlatex_name_label: \"Formula en Latex\",\n\tbrowser_no_compatible: \"Tu navegador no es complatible con AJAX. Por favor, usa la última version de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Error conviertiendo una fórmula MathML a texto accesible.\",\n\texception_cross_site: \"Cross site scripting solo está permitido para HTTP.\",\n\texception_high_surrogate: \"Subrogado alto no seguido por subrogado bajo en fixedCharCodeAt()\",\n\texception_string_length: \"Cadena no válida. La longitud debe ser múltiplo de 4\",\n\texception_key_nonobject: \"Object.keys called on non-object\",\n\texception_null_or_undefined: \" esto es null o no definido\",\n\texception_not_function: \" no es una función\",\n\texception_invalid_date_format: \"Formato de fecha inválido: \",\n\texception_casting: \"No se puede emitir\",\n\texception_casting_to: \" a \"\n};\nvar et = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Loobu\",\n\taccept: \"Lisa\",\n\tmanual: \"Käsiraamat\",\n\tinsert_math: \"Lisa matemaatiline valem – WIRIS\",\n\tinsert_chem: \"Lisa keemiline valem – ChemType\",\n\tminimize: \"Minimeeri\",\n\tmaximize: \"Maksimeeri\",\n\tfullscreen: \"Täiskuva\",\n\texit_fullscreen: \"Välju täiskuvalt\",\n\tclose: \"Sule\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType'i modaalaken\",\n\tclose_modal_warning: \"Kas soovite kindlasti lahkuda? Tehtud muudatused lähevad kaduma.\",\n\tlatex_name_label: \"Latexi valem\",\n\tbrowser_no_compatible: \"Teie brauser ei ühildu AJAXi tehnoloogiaga. Palun kasutage Mozilla Firefoxi uusimat versiooni.\",\n\terror_convert_accessibility: \"Tõrge teisendamisel MathML-ist muudetavaks tekstiks.\",\n\texception_cross_site: \"Ristskriptimine on lubatud ainult HTTP kasutamisel.\",\n\texception_high_surrogate: \"Funktsioonis fixedCharCodeAt() ei järgne kõrgemale asendusliikmele madalam asendusliige.\",\n\texception_string_length: \"Vigane string. Pikkus peab olema 4 kordne.\",\n\texception_key_nonobject: \"Protseduur Object.keys kutsuti mitteobjekti korral.\",\n\texception_null_or_undefined: \" see on null või määramata\",\n\texception_not_function: \" ei ole funktsioon\",\n\texception_invalid_date_format: \"Sobimatu kuupäeva kuju: \",\n\texception_casting: \"Esitamine ei õnnestu \",\n\texception_casting_to: \" – \"\n};\nvar eu = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Ezeztatu\",\n\taccept: \"Txertatu\",\n\tmanual: \"Gida\",\n\tinsert_math: \"Txertatu matematikako formula - MathType\",\n\tinsert_chem: \"Txertatu formula kimiko bat - ChemType\",\n\tminimize: \"Ikonotu\",\n\tmaximize: \"Maximizatu\",\n\tfullscreen: \"Pantaila osoa\",\n\texit_fullscreen: \"Irten pantaila osotik\",\n\tclose: \"Itxi\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType leiho modala\",\n\tclose_modal_warning: \"Ziur irten nahi duzula? Egiten dituzun aldaketak galdu egingo dira.\",\n\tlatex_name_label: \"LaTex Formula\",\n\tbrowser_no_compatible: \"Zure arakatzailea ez da bateragarria AJAX teknologiarekin. Erabili Mozilla Firefoxen azken bertsioa.\",\n\terror_convert_accessibility: \"Errorea MathMLtik testu irisgarrira bihurtzean.\",\n\texception_cross_site: \"Gune arteko scriptak HTTPrako soilik onartzen dira.\",\n\texception_high_surrogate: \"Ordezko baxuak ez dio ordezko altuari jarraitzen, hemen: fixedCharCodeAt()\",\n\texception_string_length: \"Kate baliogabea. Luzerak 4ren multiploa izan behar du\",\n\texception_key_nonobject: \"Object.keys deitu zaio objektua ez den zerbaiti\",\n\texception_null_or_undefined: \" nulua edo definitu gabea da\",\n\texception_not_function: \" ez da funtzio bat\",\n\texception_invalid_date_format: \"Data-formatu baliogabea : \",\n\texception_casting: \"Ezin da igorri \",\n\texception_casting_to: \" honi \"\n};\nvar fi = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Peruuta\",\n\taccept: \"Lisää\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Liitä matemaattinen kaava - MathType\",\n\tinsert_chem: \"Lisää kemian kaava - ChemType\",\n\tminimize: \"Pienennä\",\n\tmaximize: \"Suurenna\",\n\tfullscreen: \"Koko ruutu\",\n\texit_fullscreen: \"Poistu koko ruudun tilasta\",\n\tclose: \"Sulje\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathTypen modaalinen ikkuna\",\n\tclose_modal_warning: \"Oletko varma, että haluat poistua? Menetät tekemäsi muutokset.\",\n\tlatex_name_label: \"Latex-kaava\",\n\tbrowser_no_compatible: \"Selaimesi ei tue AJAX-tekniikkaa. Ole hyvä ja käytä uusinta Firefox-versiota.\",\n\terror_convert_accessibility: \"Virhe muunnettaessa MathML:stä tekstiksi.\",\n\texception_cross_site: \"Cross site scripting sallitaan vain HTTP:llä.\",\n\texception_high_surrogate: \"fixedCharCodeAt(): yläsijaismerkkiä ei seurannut alasijaismerkki\",\n\texception_string_length: \"Epäkelpo merkkijono. Pituuden on oltava 4:n kerrannainen\",\n\texception_key_nonobject: \"Object.keys kutsui muuta kuin oliota\",\n\texception_null_or_undefined: \" tämä on null tai ei määritelty\",\n\texception_not_function: \" ei ole funktio\",\n\texception_invalid_date_format: \"Virheellinen päivämäärämuoto : \",\n\texception_casting: \"Ei voida muuntaa tyyppiä \",\n\texception_casting_to: \" tyyppiin \"\n};\nvar fr = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annuler\",\n\taccept: \"Insérer\",\n\tmanual: \"Manuel\",\n\tinsert_math: \"Insérer une formule mathématique - MathType\",\n\tinsert_chem: \"Insérer une formule chimique - ChemType\",\n\tminimize: \"Minimiser\",\n\tmaximize: \"Maximiser\",\n\tfullscreen: \"Plein écran\",\n\texit_fullscreen: \"Quitter le plein écran\",\n\tclose: \"Fermer\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Fenêtre modale MathType\",\n\tclose_modal_warning: \"Confirmez-vous vouloir fermer ? Les changements effectués seront perdus.\",\n\tlatex_name_label: \"Formule LaTeX\",\n\tbrowser_no_compatible: \"Votre navigateur n’est pas compatible avec la technologie AJAX. Veuillez utiliser la dernière version de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Une erreur de conversion du format MathML en texte accessible est survenue.\",\n\texception_cross_site: \"Le cross-site scripting n’est autorisé que pour HTTP.\",\n\texception_high_surrogate: \"Substitut élevé non suivi d’un substitut inférieur dans fixedCharCodeAt()\",\n\texception_string_length: \"Chaîne non valide. Longueur limitée aux multiples de 4\",\n\texception_key_nonobject: \"Object.keys appelé sur un non-objet\",\n\texception_null_or_undefined: \" nul ou non défini\",\n\texception_not_function: \" n’est pas une fonction\",\n\texception_invalid_date_format: \"Format de date non valide : \",\n\texception_casting: \"Impossible de convertir \",\n\texception_casting_to: \" sur \"\n};\nvar gl = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir unha fórmula matemática - MathType\",\n\tinsert_chem: \"Inserir unha fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Pantalla completa\",\n\texit_fullscreen: \"Saír da pantalla completa\",\n\tclose: \"Pechar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Ventá modal de MathType\",\n\tclose_modal_warning: \"Seguro que quere saír? Perderanse os cambios realizados.\",\n\tlatex_name_label: \"Fórmula Latex\",\n\tbrowser_no_compatible: \"O seu explorador non é compatible coa tecnoloxía AJAX. Use a versión máis recente de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Erro ao converter de MathML a texto accesible.\",\n\texception_cross_site: \"Os scripts de sitios só se permiten para HTTP.\",\n\texception_high_surrogate: \"Suplente superior non seguido por suplente inferior en fixedCharCodeAt()\",\n\texception_string_length: \"Cadea non válida. A lonxitude debe ser un múltiplo de 4\",\n\texception_key_nonobject: \"Claves de obxecto chamadas en non obxecto\",\n\texception_null_or_undefined: \" nulo ou non definido\",\n\texception_not_function: \" non é unha función\",\n\texception_invalid_date_format: \"Formato de data non válido: \",\n\texception_casting: \"Non se pode converter \",\n\texception_casting_to: \" a \"\n};\nvar he = {\n\tlatex: \"LaTeX\",\n\tcancel: \"ביטול\",\n\taccept: \"עדכון\",\n\tmanual: \"ידני\",\n\tinsert_math: \"הוספת נוסחה מתמטית - MathType\",\n\tinsert_chem: \"הוספת כתיבה כימית - ChemType\",\n\tminimize: \"מזערי\",\n\tmaximize: \"מרבי\",\n\tfullscreen: \"מסך מלא\",\n\texit_fullscreen: \"יציאה ממצב מסך מלא\",\n\tclose: \"סגירה\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"חלון מודאלי של MathType\",\n\tclose_modal_warning: \"האם לצאת? שינויים אשר בוצעו ימחקו.\",\n\tlatex_name_label: \"נוסחת Latex\",\n\tbrowser_no_compatible: \"הדפדפן שלך אינו תואם לטכנולוגיית AJAX. יש להשתמש בגרסה העדכנית ביותר של Mozilla Firefox.\",\n\terror_convert_accessibility: \"שגיאה בהמרה מ-MathML לטקסט נגיש.\",\n\texception_cross_site: \"סקריפטינג חוצה-אתרים מורשה עבור HTTP בלבד.\",\n\texception_high_surrogate: \"ערך ממלא מקום גבוה אינו מופיע אחרי ערך ממלא מקום נמוך ב-fixedCharCodeAt()‎\",\n\texception_string_length: \"מחרוזת לא חוקית. האורך חייב להיות כפולה של 4\",\n\texception_key_nonobject: \"בוצעה קריאה אל Object.keys ברכיב שאינו אובייקט\",\n\texception_null_or_undefined: \" הוא Null או לא מוגדר\",\n\texception_not_function: \"איננה פונקציה\",\n\texception_invalid_date_format: \"תסדיר תאריך אינו תקין : \",\n\texception_casting: \"לא ניתן להמיר \",\n\texception_casting_to: \" ל \"\n};\nvar hr = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Poništi\",\n\taccept: \"Umetni\",\n\tmanual: \"Priručnik\",\n\tinsert_math: \"Umetnite matematičku formulu - MathType\",\n\tinsert_chem: \"Umetnite kemijsku formulu - ChemType\",\n\tminimize: \"Minimiziraj\",\n\tmaximize: \"Maksimiziraj\",\n\tfullscreen: \"Cijeli zaslon\",\n\texit_fullscreen: \"Izlaz iz prikaza na cijelom zaslonu\",\n\tclose: \"Zatvori\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modalni prozor\",\n\tclose_modal_warning: \"Sigurno želite zatvoriti? Izgubit će se unesene promjene.\",\n\tlatex_name_label: \"Latex formula\",\n\tbrowser_no_compatible: \"Vaš preglednik nije kompatibilan s AJAX tehnologijom. Upotrijebite najnoviju verziju Mozilla Firefoxa.\",\n\terror_convert_accessibility: \"Pogreška konverzije iz MathML-a u dostupni tekst.\",\n\texception_cross_site: \"Skriptiranje na različitim web-mjestima dopušteno je samo za HTTP.\",\n\texception_high_surrogate: \"Iza visoke zamjene ne slijedi niska zamjena u fixedCharCodeAt()\",\n\texception_string_length: \"Nevažeći niz. Duljina mora biti višekratnik broja 4\",\n\texception_key_nonobject: \"Object.keys pozvano na ne-objekt\",\n\texception_null_or_undefined: \" ovo je nula ili nije definirano\",\n\texception_not_function: \" nije funkcija\",\n\texception_invalid_date_format: \"Nevažeći format datuma : \",\n\texception_casting: \"Ne može se poslati \",\n\texception_casting_to: \" na \"\n};\nvar hu = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Mégsem\",\n\taccept: \"Beszúrás\",\n\tmanual: \"Kézikönyv\",\n\tinsert_math: \"Matematikai képlet beszúrása - MathType\",\n\tinsert_chem: \"Kémiai képet beillesztése - ChemType\",\n\tminimize: \"Kis méret\",\n\tmaximize: \"Nagy méret\",\n\tfullscreen: \"Teljes képernyő\",\n\texit_fullscreen: \"Teljes képernyő elhagyása\",\n\tclose: \"Bezárás\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modális ablak\",\n\tclose_modal_warning: \"Biztosan kilép? A módosítások el fognak veszni.\",\n\tlatex_name_label: \"Latex képlet\",\n\tbrowser_no_compatible: \"A böngészője nem kompatibilis az AJAX technológiával. Használja a Mozilla Firefox legújabb verzióját.\",\n\terror_convert_accessibility: \"Hiba lépett fel a MathML szöveggé történő konvertálása során.\",\n\texception_cross_site: \"Az oldalak közti scriptelés csak HTTP esetén engedélyezett.\",\n\texception_high_surrogate: \"A magas helyettesítő karaktert nem alacsony helyettesítő karakter követi a fixedCharCodeAt() esetében\",\n\texception_string_length: \"Érvénytelen karakterlánc. A hossznak a 4 többszörösének kell lennie\",\n\texception_key_nonobject: \"Az Object.keys egy nem objektumra került meghívásra\",\n\texception_null_or_undefined: \" null vagy nem definiált\",\n\texception_not_function: \" nem függvény\",\n\texception_invalid_date_format: \"Érvénytelen dátumformátum: \",\n\texception_casting: \"Nem alkalmazható \",\n\texception_casting_to: \" erre \"\n};\nvar id = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Membatalkan\",\n\taccept: \"Masukkan\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Masukkan rumus matematika - MathType\",\n\tinsert_chem: \"Masukkan rumus kimia - ChemType\",\n\tminimize: \"Minikan\",\n\tmaximize: \"Perbesar\",\n\tfullscreen: \"Layar penuh\",\n\texit_fullscreen: \"Keluar layar penuh\",\n\tclose: \"Tutup\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Jendela modal MathType\",\n\tclose_modal_warning: \"Anda yakin ingin keluar? Anda akan kehilangan perubahan yang Anda buat.\",\n\tlatex_name_label: \"Rumus Latex\",\n\tbrowser_no_compatible: \"Penjelajah Anda tidak kompatibel dengan teknologi AJAX. Harap gunakan Mozilla Firefox versi terbaru.\",\n\terror_convert_accessibility: \"Kesalahan konversi dari MathML menjadi teks yang dapat diakses.\",\n\texception_cross_site: \"Skrip lintas situs hanya diizinkan untuk HTTP.\",\n\texception_high_surrogate: \"Pengganti tinggi tidak diikuti oleh pengganti rendah di fixedCharCodeAt()\",\n\texception_string_length: \"String tidak valid. Panjang harus kelipatan 4\",\n\texception_key_nonobject: \"Object.keys meminta nonobjek\",\n\texception_null_or_undefined: \" ini tidak berlaku atau tidak didefinisikan\",\n\texception_not_function: \" bukan sebuah fungsi\",\n\texception_invalid_date_format: \"Format tanggal tidak valid : \",\n\texception_casting: \"Tidak dapat mentransmisikan \",\n\texception_casting_to: \" untuk \"\n};\nvar it = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annulla\",\n\taccept: \"Inserisci\",\n\tmanual: \"Manuale\",\n\tinsert_math: \"Inserisci una formula matematica - MathType\",\n\tinsert_chem: \"Inserisci una formula chimica - ChemType\",\n\tminimize: \"Riduci a icona\",\n\tmaximize: \"Ingrandisci\",\n\tfullscreen: \"Schermo intero\",\n\texit_fullscreen: \"Esci da schermo intero\",\n\tclose: \"Chiudi\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Finestra modale di MathType\",\n\tclose_modal_warning: \"Confermi di voler uscire? Le modifiche effettuate andranno perse.\",\n\tlatex_name_label: \"Formula LaTeX\",\n\tbrowser_no_compatible: \"Il tuo browser non è compatibile con la tecnologia AJAX. Utilizza la versione più recente di Mozilla Firefox.\",\n\terror_convert_accessibility: \"Errore durante la conversione da MathML in testo accessibile.\",\n\texception_cross_site: \"Lo scripting tra siti è consentito solo per HTTP.\",\n\texception_high_surrogate: \"Surrogato alto non seguito da surrogato basso in fixedCharCodeAt()\",\n\texception_string_length: \"Stringa non valida. La lunghezza deve essere un multiplo di 4\",\n\texception_key_nonobject: \"Metodo Object.keys richiamato in un elemento non oggetto\",\n\texception_null_or_undefined: \" questo è un valore null o non definito\",\n\texception_not_function: \" non è una funzione\",\n\texception_invalid_date_format: \"Formato di data non valido: \",\n\texception_casting: \"Impossibile eseguire il cast \",\n\texception_casting_to: \" a \"\n};\nvar ja = {\n\tlatex: \"LaTeX\",\n\tcancel: \"キャンセル\",\n\taccept: \"挿入\",\n\tmanual: \"マニュアル\",\n\tinsert_math: \"数式を挿入 - MathType\",\n\tinsert_chem: \"化学式を挿入 - ChemType\",\n\tminimize: \"最小化\",\n\tmaximize: \"最大化\",\n\tfullscreen: \"全画面表示\",\n\texit_fullscreen: \"全画面表示を解除\",\n\tclose: \"閉じる\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType モードウィンドウ\",\n\tclose_modal_warning: \"このページから移動してもよろしいですか?変更内容は失われます。\",\n\tlatex_name_label: \"LaTeX 数式\",\n\tbrowser_no_compatible: \"お使いのブラウザは、AJAX 技術と互換性がありません。Mozilla Firefox の最新バージョンをご使用ください。\",\n\terror_convert_accessibility: \"MathML からアクセシブルなテキストへの変換中にエラーが発生しました。\",\n\texception_cross_site: \"クロスサイトスクリプティングは、HTTP のみに許可されています。\",\n\texception_high_surrogate: \"fixedCharCodeAt()で上位サロゲートの後に下位サロゲートがありません\",\n\texception_string_length: \"無効な文字列です。長さは4の倍数である必要があります\",\n\texception_key_nonobject: \"Object.keys が非オブジェクトで呼び出されました\",\n\texception_null_or_undefined: \" null であるか、定義されていません\",\n\texception_not_function: \" は関数ではありません\",\n\texception_invalid_date_format: \"無効な日付形式: \",\n\texception_casting: \"次にキャスト \",\n\texception_casting_to: \" できません \"\n};\nvar ko = {\n\tlatex: \"LaTeX\",\n\tcancel: \"취소\",\n\taccept: \"삽입\",\n\tmanual: \"설명서\",\n\tinsert_math: \"수학 공식 삽입 - MathType\",\n\tinsert_chem: \"화학 공식 입력하기 - ChemType\",\n\tminimize: \"최소화\",\n\tmaximize: \"최대화\",\n\tfullscreen: \"전체 화면\",\n\texit_fullscreen: \"전체 화면 나가기\",\n\tclose: \"닫기\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType 모달 창\",\n\tclose_modal_warning: \"정말로 나가시겠습니까? 변경 사항이 손실됩니다.\",\n\tlatex_name_label: \"Latex 공식\",\n\tbrowser_no_compatible: \"사용자의 브라우저는 AJAX 기술과 호환되지 않습니다. Mozilla Firefox 최신 버전을 사용하십시오.\",\n\terror_convert_accessibility: \"MathML로부터 접근 가능한 텍스트로 오류 변환.\",\n\texception_cross_site: \"사이트 교차 스크립팅은 HTTP 환경에서만 사용할 수 있습니다.\",\n\texception_high_surrogate: \"fixedCharCodeAt()에서는 상위 서러게이트 뒤에 하위 서러게이트가 붙지 않습니다\",\n\texception_string_length: \"유효하지 않은 스트링입니다. 길이는 4의 배수여야 합니다\",\n\texception_key_nonobject: \"Object.keys가 non-object를 요청하였습니다\",\n\texception_null_or_undefined: \" Null값이거나 정의되지 않았습니다\",\n\texception_not_function: \" 함수가 아닙니다\",\n\texception_invalid_date_format: \"유효하지 않은 날짜 포맷 : \",\n\texception_casting: \"캐스팅할 수 없습니다 \",\n\texception_casting_to: \" (으)로 \"\n};\nvar nl = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annuleren\",\n\tinsert_chem: \"Een scheikundige formule invoegen - ChemType\",\n\tminimize: \"Minimaliseer\",\n\tmaximize: \"Maximaliseer\",\n\tfullscreen: \"Schermvullend\",\n\texit_fullscreen: \"Verlaat volledig scherm\",\n\tclose: \"Sluit\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modaal venster MathType\",\n\tclose_modal_warning: \"Weet je zeker dat je de app wilt sluiten? De gemaakte wijzigingen gaan verloren.\",\n\tlatex_name_label: \"LaTeX-formule\",\n\tbrowser_no_compatible: \"Je browser is niet compatibel met AJAX-technologie. Gebruik de meest recente versie van Mozilla Firefox.\",\n\terror_convert_accessibility: \"Fout bij conversie van MathML naar toegankelijke tekst.\",\n\texception_cross_site: \"Cross-site scripting is alleen toegestaan voor HTTP.\",\n\texception_high_surrogate: \"Hoog surrogaat niet gevolgd door laag surrogaat in fixedCharCodeAt()\",\n\texception_string_length: \"Ongeldige tekenreeks. Lengte moet een veelvoud van 4 zijn\",\n\texception_key_nonobject: \"Object.keys opgeroepen voor niet-object\",\n\texception_null_or_undefined: \" dit is nul of niet gedefinieerd\",\n\texception_not_function: \" is geen functie\",\n\texception_invalid_date_format: \"Ongeldige datumnotatie: \",\n\texception_casting: \"Kan niet weergeven \",\n\texception_casting_to: \" op \"\n};\nvar no = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Set inn\",\n\tmanual: \"Håndbok\",\n\tinsert_math: \"Sett inn matematikkformel - MathType\",\n\tinsert_chem: \"Set inn ein kjemisk formel – ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fullskjerm\",\n\texit_fullscreen: \"Avslutt fullskjerm\",\n\tclose: \"Lukk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modalt MathType-vindu\",\n\tclose_modal_warning: \"Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.\",\n\tlatex_name_label: \"LaTeX-formel\",\n\tbrowser_no_compatible: \"Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Feil under konvertering frå MathML til tilgjengeleg tekst.\",\n\texception_cross_site: \"Skripting på tvers av nettstadar er bere tillaten med HTTP.\",\n\texception_high_surrogate: \"Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Lengda må vera deleleg på 4\",\n\texception_key_nonobject: \"Object.keys kalla på eit ikkje-objekt\",\n\texception_null_or_undefined: \" dette er null eller ikkje definert\",\n\texception_not_function: \" er ikkje ein funksjon\",\n\texception_invalid_date_format: \"Ugyldig datoformat: \",\n\texception_casting: \"Kan ikkje bruka casting \",\n\texception_casting_to: \" til \"\n};\nvar nb = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Insert\",\n\tmanual: \"Håndbok\",\n\tinsert_math: \"Sett inn matematikkformel - MathType\",\n\tinsert_chem: \"Sett inn en kjemisk formel – ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fullskjerm\",\n\texit_fullscreen: \"Avslutt fullskjerm\",\n\tclose: \"Lukk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modalt MathType-vindu\",\n\tclose_modal_warning: \"Er du sikker på at du vil gå ut? Endringene du har gjort, vil gå tapt.\",\n\tlatex_name_label: \"LaTeX-formel\",\n\tbrowser_no_compatible: \"Nettleseren er ikke kompatibel med AJAX-teknologien. Bruk den nyeste versjonen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Feil under konvertering fra MathML til tilgjengelig tekst.\",\n\texception_cross_site: \"Skripting på tvers av nettsteder er bare tillatt med HTTP.\",\n\texception_high_surrogate: \"Høyt surrogat etterfølges ikke av lavt surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Lengden må være delelig på 4\",\n\texception_key_nonobject: \"Object.keys kalte på et ikke-objekt\",\n\texception_null_or_undefined: \" dette er null eller ikke definert\",\n\texception_not_function: \" er ikke en funksjon\",\n\texception_invalid_date_format: \"Ugyldig datoformat: \",\n\texception_casting: \"Kan ikke bruke casting \",\n\texception_casting_to: \" til \"\n};\nvar nn = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Set inn\",\n\tmanual: \"Håndbok\",\n\tinsert_math: \"Sett inn matematikkformel - MathType\",\n\tinsert_chem: \"Set inn ein kjemisk formel – ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fullskjerm\",\n\texit_fullscreen: \"Avslutt fullskjerm\",\n\tclose: \"Lukk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modalt MathType-vindu\",\n\tclose_modal_warning: \"Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.\",\n\tlatex_name_label: \"LaTeX-formel\",\n\tbrowser_no_compatible: \"Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Feil under konvertering frå MathML til tilgjengeleg tekst.\",\n\texception_cross_site: \"Skripting på tvers av nettstadar er bere tillaten med HTTP.\",\n\texception_high_surrogate: \"Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Lengda må vera deleleg på 4\",\n\texception_key_nonobject: \"Object.keys kalla på eit ikkje-objekt\",\n\texception_null_or_undefined: \" dette er null eller ikkje definert\",\n\texception_not_function: \" er ikkje ein funksjon\",\n\texception_invalid_date_format: \"Ugyldig datoformat: \",\n\texception_casting: \"Kan ikkje bruka casting \",\n\texception_casting_to: \" til \"\n};\nvar pl = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Anuluj\",\n\taccept: \"Wstaw\",\n\tmanual: \"Instrukcja\",\n\tinsert_math: \"Wstaw formułę matematyczną - MathType\",\n\tinsert_chem: \"Wstaw wzór chemiczny — ChemType\",\n\tminimize: \"Minimalizuj\",\n\tmaximize: \"Maksymalizuj\",\n\tfullscreen: \"Pełny ekran\",\n\texit_fullscreen: \"Opuść tryb pełnoekranowy\",\n\tclose: \"Zamknij\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Okno modalne MathType\",\n\tclose_modal_warning: \"Czy na pewno chcesz zamknąć? Wprowadzone zmiany zostaną utracone.\",\n\tlatex_name_label: \"Wzór Latex\",\n\tbrowser_no_compatible: \"Twoja przeglądarka jest niezgodna z technologią AJAX Użyj najnowszej wersji Mozilla Firefox.\",\n\terror_convert_accessibility: \"Błąd podczas konwertowania z formatu MathML na dostępny tekst.\",\n\texception_cross_site: \"Krzyżowanie skryptów witryny jest dozwolone tylko dla HTTP.\",\n\texception_high_surrogate: \"Brak niskiego surogatu po wysokim surogacie w fixedCharCodeAt()\",\n\texception_string_length: \"Niewłaściwy ciąg znaków. Długość musi być wielokrotnością liczby 4.\",\n\texception_key_nonobject: \"Argumentem wywołanej funkcji Object.key nie jest obiekt.\",\n\texception_null_or_undefined: \" jest zerowy lub niezdefiniowany\",\n\texception_not_function: \" nie jest funkcją\",\n\texception_invalid_date_format: \"Nieprawidłowy format daty: \",\n\texception_casting: \"Nie można rzutować \",\n\texception_casting_to: \" na \"\n};\nvar pt = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir fórmula matemática - MathType\",\n\tinsert_chem: \"Inserir uma fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Ecrã completo\",\n\texit_fullscreen: \"Sair do ecrã completo\",\n\tclose: \"Fechar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Janela modal do MathType\",\n\tclose_modal_warning: \"Pretende sair? As alterações efetuadas serão perdidas.\",\n\tlatex_name_label: \"Fórmula Latex\",\n\tbrowser_no_compatible: \"O seu navegador não é compatível com a tecnologia AJAX. Utilize a versão mais recente do Mozilla Firefox.\",\n\terror_convert_accessibility: \"Erro ao converter de MathML para texto acessível.\",\n\texception_cross_site: \"O processamento de scripts em vários sites só é permitido para HTTP.\",\n\texception_high_surrogate: \"Substituto alto não seguido por um substituto baixo em fixedCharCodeAt()\",\n\texception_string_length: \"Cadeia inválida. O comprimento tem de ser um múltiplo de 4\",\n\texception_key_nonobject: \"Object.keys chamou um não-objeto\",\n\texception_null_or_undefined: \" é nulo ou não está definido\",\n\texception_not_function: \" não é uma função\",\n\texception_invalid_date_format: \"Formato de data inválido: \",\n\texception_casting: \"Não é possível adicionar \",\n\texception_casting_to: \" até \"\n};\nvar pt_br = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir fórmula matemática - MathType\",\n\tinsert_chem: \"Insira uma fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Tela cheia\",\n\texit_fullscreen: \"Sair de tela cheia\",\n\tclose: \"Fechar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Janela modal do MathType\",\n\tclose_modal_warning: \"Tem certeza de que deseja sair? Todas as alterações serão perdidas.\",\n\tlatex_name_label: \"Fórmula LaTeX\",\n\tbrowser_no_compatible: \"O navegador não é compatível com a tecnologia AJAX. Use a versão mais recente do Mozilla Firefox.\",\n\terror_convert_accessibility: \"Erro ao converter de MathML para texto acessível.\",\n\texception_cross_site: \"O uso de scripts entre sites só é permitido para HTTP.\",\n\texception_high_surrogate: \"High surrogate não seguido de low surrogate em fixedCharCodeAt()\",\n\texception_string_length: \"String inválida. O comprimento deve ser um múltiplo de 4\",\n\texception_key_nonobject: \"Object.keys chamados em não objeto\",\n\texception_null_or_undefined: \" isto é nulo ou não definido\",\n\texception_not_function: \" não é uma função\",\n\texception_invalid_date_format: \"Formato de data inválido: \",\n\texception_casting: \"Não é possível transmitir \",\n\texception_casting_to: \" para \"\n};\nvar ro = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Anulare\",\n\taccept: \"Inserați\",\n\tmanual: \"Ghid\",\n\tinsert_math: \"Inserați o formulă matematică - MathType\",\n\tinsert_chem: \"Inserați o formulă chimică - ChemType\",\n\tminimize: \"Minimizați\",\n\tmaximize: \"Maximizați\",\n\tfullscreen: \"Afișați pe tot ecranul\",\n\texit_fullscreen: \"Opriți afișarea pe tot ecranul\",\n\tclose: \"Închideți\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Fereastră modală MathType\",\n\tclose_modal_warning: \"Sigur doriți să ieșiți? Modificările realizate se vor pierde.\",\n\tlatex_name_label: \"Formulă Latex\",\n\tbrowser_no_compatible: \"Browserul dvs. nu este compatibil cu tehnologia AJAX. Utilizați cea mai recentă versiune de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Eroare la convertirea din MathML în text accesibil.\",\n\texception_cross_site: \"Scriptarea între site‑uri este permisă doar pentru HTTP.\",\n\texception_high_surrogate: \"Surogatul superior nu este urmat de un surogat inferior în fixedCharCodeAt()\",\n\texception_string_length: \"Șir nevalid. Lungimea trebuie să fie multiplu de 4\",\n\texception_key_nonobject: \"Object.keys a apelat un non-obiect\",\n\texception_null_or_undefined: \" este null sau nu este definit\",\n\texception_not_function: \" nu este funcție\",\n\texception_invalid_date_format: \"Format de dată nevalid: \",\n\texception_casting: \"nu se poate difuza \",\n\texception_casting_to: \" către \"\n};\nvar ru = {\n\tlatex: \"LaTeX\",\n\tcancel: \"отмена\",\n\taccept: \"Вставка\",\n\tmanual: \"вручную\",\n\tinsert_math: \"Вставить математическую формулу: WIRIS\",\n\tinsert_chem: \"Вставить химическую формулу — ChemType\",\n\tminimize: \"Свернуть\",\n\tmaximize: \"Развернуть\",\n\tfullscreen: \"На весь экран\",\n\texit_fullscreen: \"Выйти из полноэкранного режима\",\n\tclose: \"Закрыть\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Режимное окно MathType\",\n\tclose_modal_warning: \"Вы уверены, что хотите выйти? Все внесенные изменения будут утрачены.\",\n\tlatex_name_label: \"Формула Latex\",\n\tbrowser_no_compatible: \"Ваш браузер несовместим с технологией AJAX. Используйте последнюю версию Mozilla Firefox.\",\n\terror_convert_accessibility: \"При преобразовании формулы в текст допустимого формата произошла ошибка.\",\n\texception_cross_site: \"Межсайтовые сценарии доступны только для HTTP.\",\n\texception_high_surrogate: \"Младший символ-заместитель не сопровождает старший символ-заместитель в исправленном методе CharCodeAt()\",\n\texception_string_length: \"Недопустимая строка. Длинна должна быть кратной 4.\",\n\texception_key_nonobject: \"Метод Object.keys вызван не для объекта\",\n\texception_null_or_undefined: \" значение пустое или не определено\",\n\texception_not_function: \" не функция\",\n\texception_invalid_date_format: \"Недопустимый формат даты: \",\n\texception_casting: \"Не удается привести \",\n\texception_casting_to: \" к \"\n};\nvar sv = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Infoga\",\n\tmanual: \"Bruksanvisning\",\n\tinsert_math: \"Infoga matematisk formel - MathType\",\n\tinsert_chem: \"Infoga en kemiformel – ChemType\",\n\tminimize: \"Minimera\",\n\tmaximize: \"Maximera\",\n\tfullscreen: \"Helskärm\",\n\texit_fullscreen: \"Stäng helskärm\",\n\tclose: \"Stäng\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modulfönster\",\n\tclose_modal_warning: \"Vill du avsluta? Inga ändringar kommer att sparas.\",\n\tlatex_name_label: \"Latex-formel\",\n\tbrowser_no_compatible: \"Din webbläsare är inte kompatibel med AJAX-teknik. Använd den senaste versionen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Det uppstod ett fel vid konvertering från MathML till åtkomlig text.\",\n\texception_cross_site: \"Skriptkörning över flera sajter är endast tillåtet för HTTP.\",\n\texception_high_surrogate: \"Hög surrogat följs inte av låg surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ogiltig sträng. Längden måste vara en multipel av 4\",\n\texception_key_nonobject: \"Object.keys anropade icke-objekt\",\n\texception_null_or_undefined: \" det är null eller inte definierat\",\n\texception_not_function: \" är inte en funktion\",\n\texception_invalid_date_format: \"Ogiltigt datumformat: \",\n\texception_casting: \"Går inte att konvertera \",\n\texception_casting_to: \" till \"\n};\nvar tr = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Vazgeç\",\n\taccept: \"Ekle\",\n\tmanual: \"Kılavuz\",\n\tinsert_math: \"Matematik formülü ekle - MathType\",\n\tinsert_chem: \"Kimya formülü ekleyin - ChemType\",\n\tminimize: \"Simge Durumuna Küçült\",\n\tmaximize: \"Ekranı Kapla\",\n\tfullscreen: \"Tam Ekran\",\n\texit_fullscreen: \"Tam Ekrandan Çık\",\n\tclose: \"Kapat\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType kalıcı penceresi\",\n\tclose_modal_warning: \"Çıkmak istediğinizden emin misiniz? Yaptığınız değişiklikler kaybolacak.\",\n\tlatex_name_label: \"Latex Formülü\",\n\tbrowser_no_compatible: \"Tarayıcınız AJAX teknolojisiyle uyumlu değil. Lütfen en güncel Mozilla Firefox sürümünü kullanın.\",\n\terror_convert_accessibility: \"MathML biçiminden erişilebilir metne dönüştürme hatası.\",\n\texception_cross_site: \"Siteler arası komut dosyası yazma işlemine yalnızca HTTP için izin verilir.\",\n\texception_high_surrogate: \"fixedCharCodeAt() fonksiyonunda üst vekilin ardından alt vekil gelmiyor\",\n\texception_string_length: \"Geçersiz dizgi. Uzunluk, 4'ün katlarından biri olmalıdır\",\n\texception_key_nonobject: \"Nesne olmayan öğe üzerinde Object.keys çağrıldı\",\n\texception_null_or_undefined: \" bu değer boş veya tanımlanmamış\",\n\texception_not_function: \" bir fonksiyon değil\",\n\texception_invalid_date_format: \"Geçersiz tarih biçimi: \",\n\texception_casting: \"Tür dönüştürülemiyor \",\n\texception_casting_to: \" hedef: \"\n};\nvar zh = {\n\tlatex: \"LaTeX\",\n\tcancel: \"取消\",\n\taccept: \"插入\",\n\tmanual: \"手册\",\n\tinsert_math: \"插入数学公式 - MathType\",\n\tinsert_chem: \"插入化学分子式 - ChemType\",\n\tminimize: \"最小化\",\n\tmaximize: \"最大化\",\n\tfullscreen: \"全屏幕\",\n\texit_fullscreen: \"退出全屏幕\",\n\tclose: \"关闭\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType 模式窗口\",\n\tclose_modal_warning: \"您确定要离开吗?您所做的修改将丢失。\",\n\tlatex_name_label: \"Latex 分子式\",\n\tbrowser_no_compatible: \"您的浏览器不兼容 AJAX 技术。请使用最新版 Mozilla Firefox。\",\n\terror_convert_accessibility: \"将 MathML 转换为可访问文本时出错。\",\n\texception_cross_site: \"仅 HTTP 允许跨站脚本。\",\n\texception_high_surrogate: \"fixedCharCodeAt() 中的高位代理之后未跟随低位代理\",\n\texception_string_length: \"无效字符串。长度必须是 4 的倍数\",\n\texception_key_nonobject: \"非对象调用了 Object.keys\",\n\texception_null_or_undefined: \" 该值为空或未定义\",\n\texception_not_function: \" 不是一个函数\",\n\texception_invalid_date_format: \"无效日期格式: \",\n\texception_casting: \"无法转换 \",\n\texception_casting_to: \" 为 \"\n};\nvar translations = {\n\tar: ar,\n\tca: ca,\n\tcs: cs,\n\tda: da,\n\tde: de,\n\tel: el,\n\ten: en,\n\tes: es,\n\tet: et,\n\teu: eu,\n\tfi: fi,\n\tfr: fr,\n\tgl: gl,\n\the: he,\n\thr: hr,\n\thu: hu,\n\tid: id,\n\tit: it,\n\tja: ja,\n\tko: ko,\n\tnl: nl,\n\tno: no,\n\tnb: nb,\n\tnn: nn,\n\tpl: pl,\n\tpt: pt,\n\tpt_br: pt_br,\n\tro: ro,\n\tru: ru,\n\tsv: sv,\n\ttr: tr,\n\tzh: zh,\n\t\"\": {\n}\n};\n\n/**\n * This class represents a string manager. It's used to load localized strings.\n */ class StringManager {\n constructor(){\n throw new Error(\"Static class StringManager can not be instantiated.\");\n }\n /**\n * Returns the associated value of certain string key. If the associated value\n * doesn't exits returns the original key.\n * @param {string} key - string key\n * @param {string} lang - DEFAULT = null. Specify the language to translate the string\n * @returns {string} correspondent value. If doesn't exists original key.\n */ static get(key, lang) {\n // Default language definition\n let { language } = this;\n // If parameter language, use it\n if (lang) {\n language = lang;\n }\n // Cut down on strings. e.g. en_US -> en\n if (language && language.length > 2) {\n language = language.slice(0, 2);\n }\n // Check if we support the language\n if (!this.strings.hasOwnProperty(language)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown language ${language} set in StringManager.`);\n language = \"en\";\n }\n // Check if the key is supported in the given language\n if (!this.strings[language].hasOwnProperty(key)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown key ${key} for language ${language} in StringManager.`);\n return key;\n }\n return this.strings[language][key];\n }\n}\n/**\n * Dictionary of dictionaries:\n * Key: language code\n * Value: Key: id of the string\n * Value: translation of the string\n */ StringManager.strings = translations;\n/**\n * Language of the translations; English by default\n */ StringManager.language = \"en\";\n\n/**\n * This class represents an utility class.\n */ class Util {\n /**\n * Fires an event in a target.\n * @param {EventTarget} eventTarget - target where event should be fired.\n * @param {string} eventName event to fire.\n * @static\n */ static fireEvent(eventTarget, eventName) {\n if (document.createEvent) {\n const eventObject = document.createEvent(\"HTMLEvents\");\n eventObject.initEvent(eventName, true, true);\n return !eventTarget.dispatchEvent(eventObject);\n }\n const eventObject = document.createEventObject();\n return eventTarget.fireEvent(`on${eventName}`, eventObject);\n }\n /**\n * Cross-browser addEventListener/attachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - callback function.\n * @static\n */ static addEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.addEventListener) {\n eventTarget.addEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.attachEvent) {\n // Backwards compatibility.\n eventTarget.attachEvent(`on${eventName}`, callBackFunction);\n }\n }\n /**\n * Cross-browser removeEventListener/detachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - function to remove from the event target.\n * @static\n */ static removeEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.removeEventListener) {\n eventTarget.removeEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.detachEvent) {\n eventTarget.detachEvent(`on${eventName}`, callBackFunction);\n }\n }\n /**\n * Adds the a callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @param {Function} doubleClickHandler - function to run when on dblclick event.\n * @param {Function} mousedownHandler - function to run when on mousedown event.\n * @param {Function} mouseupHandler - function to run when on mouseup event.\n * @static\n */ static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) {\n if (doubleClickHandler) {\n this.callbackDblclick = (event)=>{\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n doubleClickHandler(element, realEvent);\n };\n Util.addEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n }\n if (mousedownHandler) {\n this.callbackMousedown = (event)=>{\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mousedownHandler(element, realEvent);\n };\n Util.addEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n }\n if (mouseupHandler) {\n this.callbackMouseup = (event)=>{\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mouseupHandler(element, realEvent);\n };\n // Chrome doesn't trigger this event for eventTarget if we release the mouse button\n // while the mouse is outside the editor text field.\n // This is a workaround: we trigger the event independently of where the mouse\n // is when we release its button.\n Util.addEvent(document, \"mouseup\", this.callbackMouseup);\n Util.addEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n }\n /**\n * Remove all callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @static\n */ static removeElementEvents(eventTarget) {\n Util.removeEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n Util.removeEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n Util.removeEvent(document, \"mouseup\", this.callbackMouseup);\n Util.removeEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n /**\n * Adds a class name to a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */ static addClass(element, className) {\n if (!Util.containsClass(element, className)) {\n element.className += ` ${className}`;\n }\n }\n /**\n * Checks if a HTMLElement contains a certain class.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the className.\n * @returns {boolean} true if the HTMLElement contains the class name. false otherwise.\n * @static\n */ static containsClass(element, className) {\n if (element == null || !(\"className\" in element)) {\n return false;\n }\n const currentClasses = element.className.split(\" \");\n for(let i = currentClasses.length - 1; i >= 0; i -= 1){\n if (currentClasses[i] === className) {\n return true;\n }\n }\n return false;\n }\n /**\n * Remove a certain class for a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */ static removeClass(element, className) {\n let newClassName = \"\";\n const classes = element.className.split(\" \");\n for(let i = 0; i < classes.length; i += 1){\n if (classes[i] !== className) {\n newClassName += `${classes[i]} `;\n }\n }\n element.className = newClassName.trim();\n }\n /**\n * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's\n * used to parse old applets.\n * @param {string} text - string containing safeXml characters\n * @returns {string} a string with safeXml characters parsed.\n * @static\n */ static convertOldXmlinitialtextAttribute(text) {\n // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x.\n // This could be removed in future.\n const val = \"value=\";\n const xitpos = text.indexOf(\"xmlinitialtext\");\n const valpos = text.indexOf(val, xitpos);\n const quote = text.charAt(valpos + val.length);\n const startquote = valpos + val.length + 1;\n const endquote = text.indexOf(quote, startquote);\n const value = text.substring(startquote, endquote);\n let newvalue = value.split(\"«\").join(\"§lt;\");\n newvalue = newvalue.split(\"»\").join(\"§gt;\");\n newvalue = newvalue.split(\"&\").join(\"§\");\n newvalue = newvalue.split(\"¨\").join(\"§quot;\");\n text = text.split(value).join(newvalue);\n return text;\n }\n /**\n * Convert a string representation of key-value pairs to an object.\n * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2'\n * @returns {Object} - Object containing the key-value pairs\n */ static convertStringToObject(keyValueString) {\n if (!keyValueString || typeof keyValueString !== \"string\") {\n return {};\n }\n return keyValueString.split(\",\").map((pair)=>pair.trim().split(\"=\")).reduce((resultObject, [key, value])=>{\n if (key && value) {\n resultObject[key] = value;\n }\n return resultObject;\n }, {});\n }\n /**\n * Cross-browser solution for creating new elements.\n * @param {string} tagName - tag name of the wished element.\n * @param {Object} attributes - an object where each key is a wished\n * attribute name and each value is its value.\n * @param {Object} [creator] - if supplied, this function will use\n * the \"createElement\" method from this param. Otherwise\n * document will be used as creator.\n * @returns {Element} The DOM element with the specified attributes assigned.\n * @static\n */ static createElement(tagName, attributes, creator) {\n if (attributes === undefined) {\n attributes = {};\n }\n if (creator === undefined) {\n creator = document;\n }\n let element;\n /*\n * Internet Explorer fix:\n * If you create a new object dynamically, you can't set a non-standard attribute.\n * For example, you can't set the \"src\" attribute on an \"applet\" object.\n * Other browsers will throw an exception and will run the standard code.\n */ try {\n let html = `<${tagName}`;\n Object.keys(attributes).forEach((attributeName)=>{\n html += ` ${attributeName}=\"${Util.htmlEntities(attributes[attributeName])}\"`;\n });\n html += \">\";\n element = creator.createElement(html);\n } catch (e) {\n element = creator.createElement(tagName);\n Object.keys(attributes).forEach((attributeName)=>{\n element.setAttribute(attributeName, attributes[attributeName]);\n });\n }\n return element;\n }\n /**\n * Creates new HTML from it's HTML code as string.\n * @param {string} objectCode - html code\n * @returns {Element} the HTML element.\n * @static\n */ static createObject(objectCode, creator) {\n if (creator === undefined) {\n creator = document;\n }\n // Internet Explorer can't include \"param\" tag when is setting an innerHTML property.\n objectCode = objectCode.split(\"\").join(\"\").split(\"\").join(\"\");\n objectCode = objectCode.split(\"\").join(\"
\").split(\"\").join(\"
\");\n const container = Util.createElement(\"div\", {}, creator);\n container.innerHTML = objectCode;\n function recursiveParamsFix(object) {\n if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisParam\") {\n const attributesParsed = {};\n for(let i = 0; i < object.attributes.length; i += 1){\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n const param = Util.createElement(\"param\", attributesParsed, creator);\n // IE fix.\n if (param.NAME) {\n param.name = param.NAME;\n param.value = param.VALUE;\n }\n param.removeAttribute(\"wirisObject\");\n object.parentNode.replaceChild(param, object);\n } else if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisApplet\") {\n const attributesParsed = {};\n for(let i = 0; i < object.attributes.length; i += 1){\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n const applet = Util.createElement(\"applet\", attributesParsed, creator);\n applet.removeAttribute(\"wirisObject\");\n for(let i = 0; i < object.childNodes.length; i += 1){\n recursiveParamsFix(object.childNodes[i]);\n if (object.childNodes[i].nodeName.toLowerCase() === \"param\") {\n applet.appendChild(object.childNodes[i]);\n i -= 1; // When we insert the object child into the applet, object loses one child.\n }\n }\n object.parentNode.replaceChild(applet, object);\n } else {\n for(let i = 0; i < object.childNodes.length; i += 1){\n recursiveParamsFix(object.childNodes[i]);\n }\n }\n }\n recursiveParamsFix(container);\n return container.firstChild;\n }\n /**\n * Converts an Element to its HTML code.\n * @param {Element} element - entry element.\n * @return {string} the HTML code of the input element.\n * @static\n */ static createObjectCode(element) {\n // In case that the image was not created, the object can be null or undefined.\n if (typeof element === \"undefined\" || element === null) {\n return null;\n }\n if (element.nodeType === 1) {\n // ELEMENT_NODE.\n let output = `<${element.tagName}`;\n for(let i = 0; i < element.attributes.length; i += 1){\n if (element.attributes[i].specified) {\n output += ` ${element.attributes[i].name}=\"${Util.htmlEntities(element.attributes[i].value)}\"`;\n }\n }\n if (element.childNodes.length > 0) {\n output += \">\";\n for(let i = 0; i < element.childNodes.length; i += 1){\n output += Util.createObject(element.childNodes[i]);\n }\n output += ``;\n } else if (element.nodeName === \"DIV\" || element.nodeName === \"SCRIPT\") {\n output += `>`;\n } else {\n output += \"/>\";\n }\n return output;\n }\n if (element.nodeType === 3) {\n // TEXT_NODE.\n return Util.htmlEntities(element.nodeValue);\n }\n return \"\";\n }\n /**\n * Concatenates two URL paths.\n * @param {string} path1 - first URL path\n * @param {string} path2 - second URL path\n * @returns {string} new URL.\n */ static concatenateUrl(path1, path2) {\n let separator = \"\";\n if (path1.indexOf(\"/\") !== path1.length && path2.indexOf(\"/\") !== 0) {\n separator = \"/\";\n }\n return (path1 + separator + path2).replace(/([^:]\\/)\\/+/g, \"$1\");\n }\n /**\n * Parses a text and replaces all HTML special characters by their correspondent entities.\n * @param {string} input - text to be parsed.\n * @returns {string} the input text with all their special characters replaced by their entities.\n * @static\n */ static htmlEntities(input) {\n return input.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\");\n }\n /**\n * Sanitize HTML to prevent XSS injections.\n * @param {string} html - html to be sanitize.\n * @returns {string} html sanitized.\n * @static\n */ static htmlSanitize(html) {\n let annotationRegex = /\\/;\n // Get all the annotation content including the tags.\n let annotation = html.match(annotationRegex);\n // Sanitize html code without removing our supported MathML tags and attributes.\n html = purifyExports.sanitize(html, {\n ADD_TAGS: [\n \"semantics\",\n \"annotation\",\n \"mstack\",\n \"msline\",\n \"msrow\"\n ],\n ADD_ATTR: [\n \"linebreak\",\n \"charalign\",\n \"stackalign\"\n ]\n });\n // Readd old annotation content.\n return html.replace(annotationRegex, annotation);\n }\n /**\n * Parses a text and replaces all the HTML entities by their characters.\n * @param {string} input - text to be parsed\n * @returns {string} the input text with all their entities replaced by characters.\n * @static\n */ static htmlEntitiesDecode(input) {\n // Textarea element decodes when inner html is set.\n const textarea = document.createElement(\"textarea\");\n textarea.innerHTML = input;\n return textarea.value;\n }\n /**\n * Returns a cross-browser http request.\n * @return {object} httpRequest request object.\n * @returns {XMLHttpRequest|ActiveXObject} the proper request object.\n */ static createHttpRequest() {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n if (currentPath.substr(0, 7) === \"file://\") {\n throw StringManager.get(\"exception_cross_site\");\n }\n if (typeof XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n }\n try {\n return new ActiveXObject(\"Msxml2.XMLHTTP\");\n } catch (e) {\n try {\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (oc) {\n return null;\n }\n }\n }\n /**\n * Converts a hash to a HTTP query.\n * @param {Object[]} properties - a key/value object.\n * @returns {string} a HTTP query containing all the key value pairs with\n * all the special characters replaced by their entities.\n * @static\n */ static httpBuildQuery(properties) {\n let result = \"\";\n Object.keys(properties).forEach((i)=>{\n if (properties[i] != null) {\n result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`;\n }\n });\n // Deleting last '&' empty character.\n if (result.substring(result.length - 1) === \"&\") {\n result = result.substring(0, result.length - 1);\n }\n return result;\n }\n /**\n * Convert a hash to string sorting keys to get a deterministic output\n * @param {Object[]} hash - a key/value object.\n * @returns {string} a string with the form key1=value1...keyn=valuen\n * @static\n */ static propertiesToString(hash) {\n // 1. Sort keys. We sort the keys because we want a deterministic output.\n const keys = [];\n Object.keys(hash).forEach((key)=>{\n if (Object.prototype.hasOwnProperty.call(hash, key)) {\n keys.push(key);\n }\n });\n const n = keys.length;\n for(let i = 0; i < n; i += 1){\n for(let j = i + 1; j < n; j += 1){\n const s1 = keys[i];\n const s2 = keys[j];\n if (Util.compareStrings(s1, s2) > 0) {\n // Swap.\n keys[i] = s2;\n keys[j] = s1;\n }\n }\n }\n // 2. Generate output.\n let output = \"\";\n for(let i = 0; i < n; i += 1){\n const key = keys[i];\n output += key;\n output += \"=\";\n let value = hash[key];\n value = value.replace(\"\\\\\", \"\\\\\\\\\");\n value = value.replace(\"\\n\", \"\\\\n\");\n value = value.replace(\"\\r\", \"\\\\r\");\n value = value.replace(\"\\t\", \"\\\\t\");\n output += value;\n output += \"\\n\";\n }\n return output;\n }\n /**\n * Compare two strings using charCodeAt method\n * @param {string} a - first string to compare.\n * @param {string} b - second string to compare.\n * @returns {number} the difference between a and b\n * @static\n */ static compareStrings(a, b) {\n let i;\n const an = a.length;\n const bn = b.length;\n const n = an > bn ? bn : an;\n for(i = 0; i < n; i += 1){\n const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i);\n if (c !== 0) {\n return c;\n }\n }\n return a.length - b.length;\n }\n /**\n * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters.\n * @param {string} string - input string\n * @param {number} idx - an integer greater than or equal to 0\n * and less than the length of the string\n * @returns {number} an integer representing the UTF-16 code of the string at the given index.\n * @static\n */ static fixedCharCodeAt(string, idx) {\n idx = idx || 0;\n const code = string.charCodeAt(idx);\n let hi;\n let low;\n /* High surrogate (could change last hex to 0xDB7F to treat high\n private surrogates as single characters) */ if (code >= 0xd800 && code <= 0xdbff) {\n hi = code;\n low = string.charCodeAt(idx + 1);\n if (Number.isNaN(low)) {\n throw StringManager.get(\"exception_high_surrogate\");\n }\n return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000;\n }\n if (code >= 0xdc00 && code <= 0xdfff) {\n // Low surrogate.\n /* We return false to allow loops to skip this iteration since should have\n already handled high surrogate above in the previous iteration. */ return false;\n }\n return code;\n }\n /**\n * Returns an URL with it's query params converted into array.\n * @param {string} url - input URL.\n * @returns {Object[]} an array containing all URL query params.\n * @static\n */ static urlToAssArray(url) {\n let i;\n i = url.indexOf(\"?\");\n if (i > 0) {\n const query = url.substring(i + 1);\n const ss = query.split(\"&\");\n const h = {};\n for(i = 0; i < ss.length; i += 1){\n const s = ss[i];\n const kv = s.split(\"=\");\n if (kv.length > 1) {\n h[kv[0]] = decodeURIComponent(kv[1].replace(/\\+/g, \" \"));\n }\n }\n return h;\n }\n return {};\n }\n /**\n * Returns an encoded URL by replacing each instance of certain characters by\n * one, two, three or four escape sequences using encodeURIComponent method.\n * !'()* . will not be encoded.\n *\n * @param {string} clearString - URL string to be encoded\n * @returns {string} URL with it's special characters replaced.\n * @static\n */ static urlEncode(clearString) {\n let output = \"\";\n // Method encodeURIComponent doesn't encode !'()*~ .\n output = encodeURIComponent(clearString);\n return output;\n }\n // TODO: To parser?\n /**\n * Converts the HTML of a image into the output code that WIRIS must return.\n * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula)\n * or the Wiriscas attribute of a WIRIS applet.\n * @param {string} imgCode - the html code from a formula or a CAS image.\n * @param {boolean} convertToXml - true if the image should be converted to XML.\n * @param {boolean} convertToSafeXml - true if the image should be converted to safeXML.\n * @returns {string} the XML or safeXML of a WIRIS image.\n * @static\n */ static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) {\n const imgObject = Util.createObject(imgCode);\n if (imgObject) {\n if (imgObject.className === Configuration.get(\"imageClassName\") || imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"))) {\n if (!convertToXml) {\n return imgCode;\n }\n const dataMathML = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n // To handle annotations, first we need the MathML in XML.\n let mathML = MathML.safeXmlDecode(dataMathML);\n if (!Configuration.get(\"saveHandTraces\")) {\n mathML = MathML.removeAnnotation(mathML, \"application/json\");\n }\n if (mathML == null) {\n mathML = imgObject.getAttribute(\"alt\");\n }\n if (convertToSafeXml) {\n const safeMathML = MathML.safeXmlEncode(mathML);\n return safeMathML;\n }\n return mathML;\n }\n }\n return imgCode;\n }\n /**\n * Gets the node length in characters.\n * @param {Node} node - HTML node.\n * @returns {number} node length.\n * @static\n */ static getNodeLength(node) {\n const staticNodeLengths = {\n IMG: 1,\n BR: 1\n };\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return node.nodeValue.length;\n }\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n let length = staticNodeLengths[node.nodeName.toUpperCase()];\n if (length === undefined) {\n length = 0;\n }\n for(let i = 0; i < node.childNodes.length; i += 1){\n length += Util.getNodeLength(node.childNodes[i]);\n }\n return length;\n }\n return 0;\n }\n /**\n * Gets a selected node or text from an editable HTMLElement.\n * If the caret is on a text node, concatenates it with all the previous and next text nodes.\n * @param {HTMLElement} target - the editable HTMLElement.\n * @param {boolean} isIframe - specifies if the target is an iframe or not\n * @param {boolean} forceGetSelection - if true, ignores IE system to get\n * the current selection and uses window.getSelection()\n * @returns {object} an object with the 'node' key set if the item is an\n * element or the keys 'node' and 'caretPosition' if the element is text.\n * @static\n */ static getSelectedItem(target, isIframe, forceGetSelection) {\n let windowTarget;\n if (isIframe) {\n windowTarget = target.contentWindow;\n windowTarget.focus();\n } else {\n windowTarget = window;\n target.focus();\n }\n if (document.selection && !forceGetSelection) {\n const range = windowTarget.document.selection.createRange();\n if (range.parentElement) {\n if (range.htmlText.length > 0) {\n if (range.text.length === 0) {\n return Util.getSelectedItem(target, isIframe, true);\n }\n return null;\n }\n windowTarget.document.execCommand(\"InsertImage\", false, \"#\");\n let temporalObject = range.parentElement();\n if (temporalObject.nodeName.toUpperCase() !== \"IMG\") {\n // IE9 fix: parentElement() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML('');\n temporalObject = windowTarget.document.getElementById(\"wrs_openEditorWindow_temporalObject\");\n }\n let node;\n let caretPosition;\n if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) {\n // TEXT_NODE.\n node = temporalObject.nextSibling;\n caretPosition = 0;\n } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) {\n node = temporalObject.previousSibling;\n caretPosition = node.nodeValue.length;\n } else {\n node = windowTarget.document.createTextNode(\"\");\n temporalObject.parentNode.insertBefore(node, temporalObject);\n caretPosition = 0;\n }\n temporalObject.parentNode.removeChild(temporalObject);\n return {\n node,\n caretPosition\n };\n }\n if (range.length > 1) {\n return null;\n }\n return {\n node: range.item(0)\n };\n }\n if (windowTarget.getSelection) {\n let range;\n const selection = windowTarget.getSelection();\n try {\n range = selection.getRangeAt(0);\n } catch (e) {\n range = windowTarget.document.createRange();\n }\n const node = range.startContainer;\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return {\n node,\n caretPosition: range.startOffset\n };\n }\n if (node !== range.endContainer) {\n return null;\n }\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n const position = range.startOffset;\n if (node.childNodes[position]) {\n // In case that a formula is detected but not selected,\n // we create an empty span where we could insert the new formula.\n if (range.startOffset === range.endOffset) {\n if (position !== 0 && node.childNodes[position - 1].localName === \"span\" && node.childNodes[position].classList?.contains(\"Wirisformula\")) {\n node.childNodes[position - 1].remove();\n return Util.getSelectedItem(target, isIframe, forceGetSelection);\n } else if (node.childNodes[position].classList?.contains(\"Wirisformula\")) {\n if (position > 0 && node.childNodes[position - 1].classList?.contains(\"Wirisformula\") || position === 0) {\n var emptySpan = document.createElement(\"span\");\n node.insertBefore(emptySpan, node.childNodes[position]);\n return {\n node: node.childNodes[position]\n };\n }\n }\n }\n return {\n node: node.childNodes[position]\n };\n }\n }\n }\n return null;\n }\n /**\n * Returns null if there isn't any item or if it is malformed.\n * Otherwise returns an object containing the node with the MathML image\n * and the cursor position inside the textarea.\n * @param {HTMLTextAreaElement} textarea - textarea element.\n * @returns {Object} An object containing the node, the index of the\n * beginning of the selected text, caret position and the start and end position of the\n * text node.\n * @static\n */ static getSelectedItemOnTextarea(textarea) {\n const textNode = document.createTextNode(textarea.value);\n const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart);\n if (textNodeValues === null) {\n return null;\n }\n return {\n node: textNode,\n caretPosition: textarea.selectionStart,\n startPosition: textNodeValues.startPosition,\n endPosition: textNodeValues.endPosition\n };\n }\n /**\n * Looks for elements that match the given name in a HTML code string.\n * Important: this function is very concrete for WIRIS code.\n * It takes as preconditions lots of behaviors that are not the general case.\n * @param {string} code - HTML code.\n * @param {string} name - element name.\n * @param {boolean} autoClosed - true if the elements are autoClosed.\n * @return {Object[]} an object containing all HTML elements of code matching the name argument.\n * @static\n */ static getElementsByNameFromString(code, name, autoClosed) {\n const elements = [];\n code = code.toLowerCase();\n name = name.toLowerCase();\n let start = code.indexOf(`<${name} `);\n while(start !== -1){\n // Look for nodes.\n let endString;\n if (autoClosed) {\n endString = \">\";\n } else {\n endString = ``;\n }\n let end = code.indexOf(endString, start);\n if (end !== -1) {\n end += endString.length;\n elements.push({\n start,\n end\n });\n } else {\n end = start + 1;\n }\n start = code.indexOf(`<${name} `, end);\n }\n return elements;\n }\n /**\n * Returns the numeric value of a base64 character.\n * @param {string} character - base64 character.\n * @returns {number} base64 character numeric value.\n * @static\n */ static decode64(character) {\n const PLUS = \"+\".charCodeAt(0);\n const SLASH = \"/\".charCodeAt(0);\n const NUMBER = \"0\".charCodeAt(0);\n const LOWER = \"a\".charCodeAt(0);\n const UPPER = \"A\".charCodeAt(0);\n const PLUS_URL_SAFE = \"-\".charCodeAt(0);\n const SLASH_URL_SAFE = \"_\".charCodeAt(0);\n const code = character.charCodeAt(0);\n if (code === PLUS || code === PLUS_URL_SAFE) {\n return 62; // Char '+'.\n }\n if (code === SLASH || code === SLASH_URL_SAFE) {\n return 63; // Char '/'.\n }\n if (code < NUMBER) {\n return -1; // No match.\n }\n if (code < NUMBER + 10) {\n return code - NUMBER + 26 + 26;\n }\n if (code < UPPER + 26) {\n return code - UPPER;\n }\n if (code < LOWER + 26) {\n return code - LOWER + 26;\n }\n return null;\n }\n /**\n * Converts a base64 string to a array of bytes.\n * @param {string} b64String - base64 string.\n * @param {number} length - dimension of byte array (by default whole string).\n * @return {Object[]} the resultant byte array.\n * @static\n */ static b64ToByteArray(b64String, length) {\n let tmp;\n if (b64String.length % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\"); // Tipped base64. Length is fixed.\n }\n const arr = [];\n let l;\n let placeHolders;\n if (!length) {\n // All b64String string.\n if (b64String.charAt(b64String.length - 2) === \"=\") {\n placeHolders = 2;\n } else if (b64String.charAt(b64String.length - 1) === \"=\") {\n placeHolders = 1;\n } else {\n placeHolders = 0;\n }\n l = placeHolders > 0 ? b64String.length - 4 : b64String.length;\n } else {\n l = length;\n }\n let i;\n for(i = 0; i < l; i += 4){\n // Ignoring code checker standards (bitewise operators).\n // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information.\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp = Util.decode64(b64String.charAt(i)) << 18 | Util.decode64(b64String.charAt(i + 1)) << 12 | Util.decode64(b64String.charAt(i + 2)) << 6 | Util.decode64(b64String.charAt(i + 3));\n arr.push(tmp >> 16 & 0xff);\n arr.push(tmp >> 8 & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n if (placeHolders) {\n if (placeHolders === 2) {\n // Ignoring code checker standards (bitewise operators).\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp = Util.decode64(b64String.charAt(i)) << 2 | Util.decode64(b64String.charAt(i + 1)) >> 4;\n arr.push(tmp & 0xff);\n } else if (placeHolders === 1) {\n // eslint-disable-next-line max-len\n tmp = Util.decode64(b64String.charAt(i)) << 10 | Util.decode64(b64String.charAt(i + 1)) << 4 | Util.decode64(b64String.charAt(i + 2)) >> 2;\n arr.push(tmp >> 8 & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n }\n return arr;\n }\n /**\n * Returns the first 32-bit signed integer from a byte array.\n * @param {Object[]} bytes - array of bytes.\n * @returns {number} the 32-bit signed integer.\n * @static\n */ static readInt32(bytes) {\n if (bytes.length < 4) {\n return false;\n }\n const int32 = bytes.splice(0, 4);\n // @codingStandardsIgnoreStart¡\n return int32[0] << 24 | int32[1] << 16 | int32[2] << 8 | int32[3] << 0;\n // @codingStandardsIgnoreEnd\n }\n /**\n * Read the first byte from a byte array.\n * @param {Object} bytes - input byte array.\n * @returns {number} first byte of the byte array.\n * @static\n */ static readByte(bytes) {\n // @codingStandardsIgnoreStart\n return bytes.shift() << 0;\n // @codingStandardsIgnoreEnd\n }\n /**\n * Read an arbitrary number of bytes, from a fixed position on a byte array.\n * @param {Object[]} bytes - byte array.\n * @param {number} pos - start position.\n * @param {number} len - number of bytes to read.\n * @returns {Object[]} the byte array.\n * @static\n */ static readBytes(bytes, pos, len) {\n return bytes.splice(pos, len);\n }\n /**\n * Inserts or modifies formulas or CAS on a textarea.\n * @param {HTMLTextAreaElement} textarea - textarea target.\n * @param {string} text - text to add in the textarea. For example, to add the link to the image,\n * call this function as (textarea, Parser.createImageSrc(mathml));\n * @static\n */ static updateTextArea(textarea, text) {\n if (textarea && text) {\n textarea.focus();\n if (textarea.selectionStart != null) {\n const { selectionEnd } = textarea;\n const selectionStart = textarea.value.substring(0, textarea.selectionStart);\n const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length);\n textarea.value = selectionStart + text + selectionEndSub;\n textarea.selectionEnd = selectionEnd + text.length;\n } else {\n const selection = document.selection.createRange();\n selection.text = text;\n }\n }\n }\n /**\n * Modifies existing formula on a textarea.\n * @param {HTMLTextAreaElement} textarea - text area target.\n * @param {string} text - text to add in the textarea. For example, if you want to add the link\n * to the image,you can call this function as\n * Util.updateTextarea(textarea, Parser.createImageSrc(mathml));\n * @param {number} start - beginning index from textarea where it needs to be replaced by text.\n * @param {number} end - ending index from textarea where it needs to be replaced by text\n * @static\n */ static updateExistingTextOnTextarea(textarea, text, start, end) {\n textarea.focus();\n const textareaStart = textarea.value.substring(0, start);\n textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length);\n textarea.selectionEnd = start + text.length;\n }\n /**\n * Add a parameter with it's correspondent value to an URL (GET).\n * @param {string} path - URL path\n * @param {string} parameter - parameter\n * @param {string} value - value\n * @static\n */ static addArgument(path, parameter, value) {\n let sep;\n if (path.indexOf(\"?\") > 0) {\n sep = \"&\";\n } else {\n sep = \"?\";\n }\n return `${path + sep + parameter}=${value}`;\n }\n}\n\n/**\n * @classdesc\n * This class represents MathType Image class. Contains all the logic related\n * to MathType images manipulation.\n * All MathType images are generated using the appropriate MathType\n * integration service: showimage or createimage.\n *\n * There are two available image formats:\n * - svg (default)\n * - png\n *\n * There are two formats for the image src attribute:\n * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64.\n * - A link to the showimage service.\n */ class Image {\n /**\n * Removes data attributes from an image.\n * @param {HTMLImageElement} img - Image where remove data attributes.\n */ static removeImgDataAttributes(img) {\n const attributesToRemove = [];\n const { attributes } = img;\n Object.keys(attributes).forEach((key)=>{\n const attribute = attributes[key];\n if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf(\"data-\") === 0) {\n // Is preferred keep an array and remove after the search\n // because when attribute is removed the array of attributes\n // is modified.\n attributesToRemove.push(attribute.name);\n }\n });\n attributesToRemove.forEach((attribute)=>{\n img.removeAttribute(attribute);\n });\n }\n /**\n * @static\n * Clones all MathType image attributes from a HTMLImageElement to another.\n * @param {HTMLImageElement} originImg - The original image.\n * @param {HTMLImageElement} destImg - The destination image.\n */ static clone(originImg, destImg) {\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (!originImg.hasAttribute(customEditorAttributeName)) {\n destImg.removeAttribute(customEditorAttributeName);\n }\n const mathmlAttributeName = Configuration.get(\"imageMathmlAttribute\");\n const imgAttributes = [\n mathmlAttributeName,\n customEditorAttributeName,\n \"alt\",\n \"height\",\n \"width\",\n \"style\",\n \"src\",\n \"role\"\n ];\n imgAttributes.forEach((iterator)=>{\n const originAttribute = originImg.getAttribute(iterator);\n if (originAttribute) {\n destImg.setAttribute(iterator, originAttribute);\n }\n });\n }\n /**\n * Determines whether an img src contains an SVG.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src contains an SVG, false otherwise\n */ static isSvg(img) {\n return img.src.startsWith(\"data:image/svg+xml;\");\n }\n /**\n * Determines whether an img src is encoded in base64 or not.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src is encoded in base64, false otherwise\n */ static isBase64(img) {\n return img.src.startsWith(\"data:image/svg+xml;base64,\") || img.src.startsWith(\"data:image/png;base64,\");\n }\n /**\n * Calculates the metrics of a MathType image given the the service response and the image format.\n * @param {HTMLImageElement} img - The HTMLImageElement.\n * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL.\n * @param {Boolean} jsonResponse - True the response of the image service is a\n * JSON object. False otherwise.\n */ static setImgSize(img, uri, jsonResponse) {\n let ar;\n let base64String;\n let bytes;\n let svgString;\n if (jsonResponse) {\n // Cleaning data:image/png;base64.\n if (Image.isSvg(img)) {\n // SVG format.\n // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string.\n if (!Image.isBase64(img)) {\n ar = Image.getMetricsFromSvgString(uri);\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n svgString = \"\";\n bytes = Util.b64ToByteArray(base64String, base64String.length);\n for(let i = 0; i < bytes.length; i += 1){\n svgString += String.fromCharCode(bytes[i]);\n }\n ar = Image.getMetricsFromSvgString(svgString);\n }\n // PNG format: we store all metrics information in the first 88 bytes.\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n bytes = Util.b64ToByteArray(base64String, 88);\n ar = Image.getMetricsFromBytes(bytes);\n }\n // Backwards compatibility: we store the metrics into createimage response.\n } else {\n ar = Util.urlToAssArray(uri);\n }\n let width = ar.cw;\n if (!width) {\n return;\n }\n let height = ar.ch;\n let baseline = ar.cb;\n const { dpi } = ar;\n if (dpi) {\n width = width * 96 / dpi;\n height = height * 96 / dpi;\n baseline = baseline * 96 / dpi;\n }\n img.width = width;\n img.height = height;\n img.style.verticalAlign = `-${height - baseline}px`;\n }\n /**\n * Calculates the metrics of an image which has been resized. Is used to restore the original\n * metrics of a resized image.\n * @param {HTMLImageElement } img - The resized HTMLImageElement.\n */ static fixAfterResize(img) {\n img.removeAttribute(\"style\");\n img.removeAttribute(\"width\");\n img.removeAttribute(\"height\");\n // In order to avoid resize with max-width css property.\n img.style.maxWidth = \"none\";\n const processImg = (img)=>{\n if (img.src.indexOf(\"data:image\") !== -1) {\n if (img.src.indexOf(\"data:image/svg+xml\") !== -1) {\n // Image is in base64: decode it in order to calculate the size, and then bring it back to base64\n // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it\n // (which would actually make more sense for readibility and efficiency).\n if (img.src.indexOf(\"data:image/svg+xml;base64,\") !== -1) {\n // 'data:image/svg+xml;base64,'.length === 26\n const base64String = img.getAttribute(\"src\").substring(26);\n const svgString = window.atob(base64String);\n const encodedSvgString = encodeURIComponent(svgString);\n img.setAttribute(\"src\", `data:image/svg+xml;charset=utf8,${encodedSvgString}`);\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n // Return src to base64!\n img.setAttribute(\"src\", `data:image/svg+xml;base64,${base64String}`);\n } else {\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n }\n } else {\n // 'data:image/png;base64,' === 22.\n const base64 = img.src.substring(22, img.src.length);\n Image.setImgSize(img, base64, true);\n }\n } else {\n Image.setImgSize(img, img.src);\n }\n };\n // If the image doesn't contain a blob, just process it normally\n if (img.src.indexOf(\"blob:\") === -1) {\n processImg(img);\n // if it does contain a blob, then read that, replace the src with the decoded content, and process it\n } else {\n let reader = new FileReader();\n reader.onload = function() {\n img.setAttribute(\"src\", reader.result);\n processImg(img);\n };\n fetch(img.src).then((r)=>r.blob()).then((blob)=>{\n reader.readAsDataURL(blob);\n });\n }\n }\n /**\n * Returns the metrics (height, width and baseline) contained in a SVG image generated\n * by the MathType image service. This image contains as an extra custom attribute:\n * the baseline (wrs:baseline).\n * @param {String} svgString - The SVG image.\n * @return {Array} - The image metrics.\n */ static getMetricsFromSvgString(svgString) {\n let first = svgString.indexOf('height=\"');\n let last = svgString.indexOf('\"', first + 8, svgString.length);\n const height = svgString.substring(first + 8, last);\n first = svgString.indexOf('width=\"');\n last = svgString.indexOf('\"', first + 7, svgString.length);\n const width = svgString.substring(first + 7, last);\n first = svgString.indexOf('wrs:baseline=\"');\n last = svgString.indexOf('\"', first + 14, svgString.length);\n const baseline = svgString.substring(first + 14, last);\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n if (typeof baseline !== \"undefined\") {\n arr.cb = baseline;\n }\n return arr;\n }\n return [];\n }\n /**\n * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array.\n * @param {Array.} bytes - png byte array.\n * @return {Array} The png metrics.\n */ static getMetricsFromBytes(bytes) {\n Util.readBytes(bytes, 0, 8);\n let width;\n let height;\n let typ;\n let baseline;\n let dpi;\n while(bytes.length >= 4){\n typ = Util.readInt32(bytes);\n if (typ === 0x49484452) {\n width = Util.readInt32(bytes);\n height = Util.readInt32(bytes);\n // Read 5 bytes.\n Util.readInt32(bytes);\n Util.readByte(bytes);\n } else if (typ === 0x62615345) {\n // Baseline: 'baSE'.\n baseline = Util.readInt32(bytes);\n } else if (typ === 0x70485973) {\n // Dpis: 'pHYs'.\n dpi = Util.readInt32(bytes);\n dpi = Math.round(dpi / 39.37);\n Util.readInt32(bytes);\n Util.readByte(bytes);\n }\n Util.readInt32(bytes);\n }\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n arr.dpi = dpi;\n if (baseline) {\n arr.cb = baseline;\n }\n return arr;\n }\n return [];\n }\n}\n\n/**\n * @classdesc\n * This class represents MathType accessible class. Converts MathML to accessible text and manages\n * the associated client-side cache.\n */ class Accessibility {\n /**\n * Static property.\n * Accessibility cache, each entry contains a MathML and its correspondent accessibility text.\n * @type {TextCache}\n */ static get cache() {\n return Accessibility._cache;\n }\n /**\n * Static property setter.\n * Set accessibility cache.\n * @param {TextCahe} value - The property value.\n * @ignore\n */ static set cache(value) {\n Accessibility._cache = value;\n }\n /**\n * Converts MathML strings to its accessible text representation.\n * @param {String} mathML - MathML to be converted to accessible text.\n * @param {String} [language] - Language of the accessible text. 'en' by default.\n * @param {Array.} [data] - Parameters to send to mathml2accessible service.\n * @return {String} Accessibility text.\n */ static mathMLToAccessible(mathML, language, data) {\n if (typeof language === \"undefined\") {\n language = \"en\";\n }\n // Check MathML class. If the class is chemistry,\n // we add chemistry to data to force accessibility service\n // to load chemistry grammar.\n if (MathML.containClass(mathML, \"wrs_chemistry\")) {\n data.mode = \"chemistry\";\n }\n // Ignore accesibility styles\n data.ignoreStyles = true;\n let accessibleText = \"\";\n if (Accessibility.cache.get(mathML)) {\n accessibleText = Accessibility.cache.get(mathML);\n } else {\n data.service = \"mathml2accessible\";\n data.lang = language;\n const accessibleJsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n if (accessibleJsonResponse.status !== \"error\") {\n accessibleText = accessibleJsonResponse.result.text;\n Accessibility.cache.populate(mathML, accessibleText);\n } else {\n accessibleText = StringManager.get(\"error_convert_accessibility\");\n }\n }\n return accessibleText;\n }\n}\n/**\n * Contains an instance of TextCache class to manage the JavaScript accessible cache.\n * Each entry of the cache object contains the MathML and it's correspondent accessibility text.\n * @private\n * @type {TextCache}\n */ Accessibility._cache = new TextCache();\n\n/**\n * @classdesc\n * This class represent a MahML parser. Converts MathML into formulas depending on the\n * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured\n * in the backend.\n */ class Parser {\n /**\n * Converts a MathML string to an img element.\n * @param {Document} creator - Document object to call createElement method.\n * @param {string} mathml - MathML code\n * @param {Object[]} wirisProperties - object containing WIRIS custom properties\n * @param {language} language - custom language for accessibility.\n * @returns {HTMLImageElement} the formula image corresponding to initial MathML string.\n * @static\n */ static mathmlToImgObject(creator, mathml, wirisProperties, language) {\n const imgObject = creator.createElement(\"img\");\n imgObject.align = \"middle\";\n imgObject.style.maxWidth = \"none\";\n let data = wirisProperties || {};\n // Take into account the backend config\n const wirisEditorProperties = Configuration.get(\"editorParameters\");\n data = {\n ...wirisEditorProperties,\n ...data\n };\n data.mml = mathml;\n data.lang = language;\n // Request metrics of the generated image.\n data.metrics = \"true\";\n data.centerbaseline = \"false\";\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n // Render js params: _wrs_int_wirisProperties contains some js render params.\n // Since MathML can support render params, js params should be send only to editor.\n imgObject.className = Configuration.get(\"imageClassName\");\n if (mathml.indexOf('class=\"') !== -1) {\n // We check here if the MathML has been created from a customEditor (such chemistry)\n // to add custom editor name attribute to img object (if necessary).\n let mathmlSubstring = mathml.substring(mathml.indexOf('class=\"') + 'class=\"'.length, mathml.length);\n mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('\"'));\n mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length);\n imgObject.setAttribute(Configuration.get(\"imageCustomEditorName\"), mathmlSubstring);\n }\n // Performance enabled.\n if (Configuration.get(\"wirisPluginPerformance\") && (Configuration.get(\"saveMode\") === \"xml\" || Configuration.get(\"saveMode\") === \"safeXml\")) {\n let result = JSON.parse(Parser.createShowImageSrc(data, language));\n if (result.status === \"warning\") {\n // POST call.\n // if the mathml is malformed, this function will throw an exception.\n try {\n result = JSON.parse(ServiceProvider.getService(\"showimage\", data));\n } catch (e) {\n return null;\n }\n }\n ({ result } = result);\n if (result.format === \"png\") {\n imgObject.src = `data:image/png;base64,${result.content}`;\n } else {\n imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`;\n }\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n Image.setImgSize(imgObject, result.content, true);\n if (Configuration.get(\"enableAccessibility\")) {\n if (typeof result.alt === \"undefined\") {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n } else {\n imgObject.alt = result.alt;\n }\n }\n } else {\n const result = Parser.createImageSrc(mathml, data);\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n imgObject.src = result;\n Image.setImgSize(imgObject, result, Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\");\n if (Configuration.get(\"enableAccessibility\")) {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n }\n }\n if (typeof Parser.observer !== \"undefined\") {\n Parser.observer.observe(imgObject);\n }\n // Role math https://www.w3.org/TR/wai-aria/roles#math.\n imgObject.setAttribute(\"role\", \"math\");\n return imgObject;\n }\n /**\n * Returns the source to showimage service by calling createimage service. The\n * output of the createimage service is a URL path pointing to showimage service.\n * This method is called when performance is disabled.\n * @param {string} mathml - MathML code.\n * @param {Object[]} data - data object containing service parameters.\n * @returns {string} the showimage path.\n */ static createImageSrc(mathml, data) {\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n let result = ServiceProvider.getService(\"createimage\", data);\n if (result.indexOf(\"@BASE@\") !== -1) {\n // Replacing '@BASE@' with the base URL of createimage.\n const baseParts = ServiceProvider.getServicePath(\"createimage\").split(\"/\");\n baseParts.pop();\n result = result.split(\"@BASE@\").join(baseParts.join(\"/\"));\n }\n return result;\n }\n /**\n * Parses initial HTML code. If the HTML contains data generated by WIRIS,\n * this data would be converted as following:\n *
\n   * MathML code: Image containing the corresponding MathML formulas.\n   * MathML code with LaTeX annotation : LaTeX string.\n   * 
\n * @param {string} code - HTML code containing MathML data.\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code with the original MathML converted into LaTeX and images.\n */ static initParse(code, language) {\n /* Note: The code inside this function has been inverted.\n If you invert again the code then you cannot use correctly LaTeX\n in Moodle.\n */ code = Parser.initParseSaveMode(code, language);\n return Parser.initParseEditMode(code);\n }\n /**\n * Parses initial HTML code depending on the save mode. Transforms all MathML\n * occurrences for it's correspondent image or LaTeX.\n * @param {string} code - HTML code to be parsed\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code parsed.\n */ static initParseSaveMode(code, language) {\n if (Configuration.get(\"saveMode\")) {\n // Converting XML to tags.\n code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters);\n code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters);\n code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language);\n code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language);\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"base642showimage\");\n }\n }\n return code;\n }\n /**\n * Parses initial HTML code depending on the edit mode.\n * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will\n * be converted into a LaTeX string instead of an image.\n * @param {string} code - HTML code containing MathML.\n * @returns {string} parsed HTML code.\n */ static initParseEditMode(code) {\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n const imgList = Util.getElementsByNameFromString(code, \"img\", true);\n const token = 'encoding=\"LaTeX\">';\n // While replacing images with latex, the indexes of the found images changes\n // respecting the original code, so this carry is needed.\n let carry = 0;\n for(let i = 0; i < imgList.length; i += 1){\n const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry);\n if (imgCode.indexOf(` class=\"${Configuration.get(\"imageClassName\")}\"`) !== -1) {\n let mathmlStartToken = ` ${Configuration.get(\"imageMathmlAttribute\")}=\"`;\n let mathmlStart = imgCode.indexOf(mathmlStartToken);\n if (mathmlStart === -1) {\n mathmlStartToken = ' alt=\"';\n mathmlStart = imgCode.indexOf(mathmlStartToken);\n }\n if (mathmlStart !== -1) {\n mathmlStart += mathmlStartToken.length;\n const mathmlEnd = imgCode.indexOf('\"', mathmlStart);\n const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd)));\n let latexStartPosition = mathml.indexOf(token);\n if (latexStartPosition !== -1) {\n latexStartPosition += token.length;\n const latexEndPosition = mathml.indexOf(\"\", latexStartPosition);\n const latex = mathml.substring(latexStartPosition, latexEndPosition);\n const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`;\n const start = code.substring(0, imgList[i].start + carry);\n const end = code.substring(imgList[i].end + carry);\n code = start + replaceText + end;\n carry += replaceText.length - (imgList[i].end - imgList[i].start);\n }\n }\n }\n }\n }\n return code;\n }\n /**\n * Parses end HTML code. The end HTML code is HTML code with embedded images\n * or LaTeX formulas created with MathType.
\n * By default this method converts the formula images and LaTeX strings in MathML.
\n * If image mode is enabled the images will not be converted into MathML. For further information see {@link https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-web-interface-features/full-mathml-mode---wirisplugins-js.html}.\n * @param {string} code - HTML to be parsed\n * @returns {string} the HTML code parsed.\n */ static endParse(code) {\n // Transform LaTeX ocurrences to MathML elements.\n const codeEndParsedEditMode = Parser.endParseEditMode(code);\n // Transform img elements to MathML elements.\n const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode);\n return codeEndParseSaveMode;\n }\n /**\n * Parses end HTML code depending on the edit mode.\n * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML.\n * @param {string} code - HTML code to be parsed.\n * @returns {string} HTML code parsed.\n */ static endParseEditMode(code) {\n // Converting LaTeX to images.\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n let output = \"\";\n let endPosition = 0;\n let startPosition = code.indexOf(\"$$\");\n while(startPosition !== -1){\n output += code.substring(endPosition, startPosition);\n endPosition = code.indexOf(\"$$\", startPosition + 2);\n if (endPosition !== -1) {\n // Before, it was a condition here to execute the next codelines\n // 'latex.indexOf('<') == -1'.\n // We don't know why it was used, but seems to have a conflict with\n // latex formulas that contains '<'.\n const latex = code.substring(startPosition + 2, endPosition);\n const decodedLatex = Util.htmlEntitiesDecode(latex);\n let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true));\n if (!Configuration.get(\"saveHandTraces\")) {\n // Remove hand traces.\n mathml = MathML.removeAnnotation(mathml, \"application/json\");\n }\n output += mathml;\n endPosition += 2;\n } else {\n output += \"$$\";\n endPosition = startPosition + 2;\n }\n startPosition = code.indexOf(\"$$\", endPosition);\n }\n output += code.substring(endPosition, code.length);\n code = output;\n }\n return code;\n }\n /**\n * Parses end HTML code depending on the save mode. Converts all\n * images into the element determined by the save mode:\n * - xml: Parses images formulas into MathML.\n * - safeXml: Parses images formulas into safeMAthML\n * - base64: Parses images into base64 images.\n * - image: Parse images into images (no parsing)\n * @param {string} code - HTML code to be parsed\n * @returns {string} HTML code parsed.\n */ static endParseSaveMode(code) {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"img264\");\n }\n }\n return code;\n }\n /**\n * Auxiliar function that builds the data object to send to the showimage endpoint\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object with the data to send to showimage.\n */ static createShowImageSrcData(data, language) {\n const dataMd5 = {};\n const renderParams = [\n \"mml\",\n \"color\",\n \"centerbaseline\",\n \"zoom\",\n \"dpi\",\n \"fontSize\",\n \"fontFamily\",\n \"defaultStretchy\",\n \"backgroundColor\",\n \"format\"\n ];\n renderParams.forEach((param)=>{\n if (typeof data[param] !== \"undefined\") {\n dataMd5[param] = data[param];\n }\n });\n // Data variables to get.\n const dataObject = {};\n Object.keys(data).forEach((key)=>{\n // We don't need mathml in this request we try to get cached.\n // Only need the formula md5 calculated before.\n if (key !== \"mml\") {\n dataObject[key] = data[key];\n }\n });\n dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5));\n dataObject.lang = typeof language === \"undefined\" ? \"en\" : language;\n dataObject.version = Configuration.get(\"version\");\n return dataObject;\n }\n /**\n * Returns the result to call showimage service with the formula md5 as parameter.\n * The result could be:\n * - {'status' : warning'} : The image associated to the MathML md5 is not in cache.\n * - {'status' : 'ok' ...} : The image associated to the MathML md5 is in cache.\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object containing showimage response.\n */ static createShowImageSrc(data, language) {\n const dataObject = this.createShowImageSrcData(data, language);\n const result = ServiceProvider.getService(\"showimage\", Util.httpBuildQuery(dataObject), true);\n return result;\n }\n /**\n * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src)\n * or showimage img tags (i.e with showimage.php on src)\n * @param {string} code - HTML code\n * @param {string} mode - base642showimage or img2mathml or img264 transform.\n * @returns {string} html - code transformed.\n */ static codeImgTransform(code, mode) {\n let output = \"\";\n let endPosition = 0;\n const pattern = /\") {\n endPosition = i + 1;\n }\n i += 1;\n }\n if (endPosition < startPosition) {\n // The img tag is stripped.\n output += code.substring(startPosition, code.length);\n return output;\n }\n let imgCode = code.substring(startPosition, endPosition);\n const imgObject = Util.createObject(imgCode);\n let xmlCode = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n let convertToXml;\n let convertToSafeXml;\n if (mode === \"base642showimage\") {\n if (xmlCode == null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null);\n output += Util.createObjectCode(imgCode);\n } else if (mode === \"img2mathml\") {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n convertToXml = true;\n convertToSafeXml = true;\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n convertToXml = true;\n convertToSafeXml = false;\n }\n }\n output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml);\n } else if (mode === \"img264\") {\n if (xmlCode === null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n const properties = {};\n properties.base64 = \"true\";\n imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null);\n // Metrics.\n Image.setImgSize(imgCode, imgCode.src, true);\n output += Util.createObjectCode(imgCode);\n }\n }\n output += code.substring(endPosition, code.length);\n return output;\n }\n /**\n * Converts all occurrences of MathML to the corresponding image.\n * @param {string} content - string with valid MathML code.\n * The MathML code doesn't contain semantics.\n * @param {Constants} characters - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * @param {string} language - a valid language code\n * in order to generate formula accessibility.\n * @returns {string} The input string with all the MathML\n * occurrences replaced by the corresponding image.\n */ static parseMathmlToImg(content, characters, language) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n while(start !== -1){\n output += content.substring(end, start);\n // Avoid WIRIS images to be parsed.\n const imageMathmlAtrribute = content.indexOf(Configuration.get(\"imageMathmlAttribute\"));\n end = content.indexOf(mathTagEnd, start);\n if (end === -1) {\n end = content.length - 1;\n } else if (imageMathmlAtrribute !== -1) {\n // First close tag of img attribute\n // If a mathmlAttribute exists should be inside a img tag.\n end += content.indexOf(\"/>\", start);\n } else {\n end += mathTagEnd.length;\n }\n if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) {\n let mathml = content.substring(start, end);\n mathml = characters.id === Constants.safeXmlCharacters.id ? MathML.safeXmlDecode(mathml) : MathML.mathMLEntities(mathml);\n output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language));\n } else {\n output += content.substring(start, end);\n }\n start = content.indexOf(mathTagBegin, end);\n }\n output += content.substring(end, content.length);\n return output;\n }\n}\n// Mutation observers to avoid wiris image formulas class be removed.\nif (typeof MutationObserver !== \"undefined\") {\n const mutationObserver = new MutationObserver((mutations)=>{\n mutations.forEach((mutation)=>{\n if (mutation.oldValue === Configuration.get(\"imageClassName\") && mutation.attributeName === \"class\" && mutation.target.className.indexOf(Configuration.get(\"imageClassName\")) === -1) {\n mutation.target.className = Configuration.get(\"imageClassName\");\n }\n });\n });\n Parser.observer = Object.create(mutationObserver);\n Parser.observer.Config = {\n attributes: true,\n attributeOldValue: true\n };\n // We use own default config.\n Parser.observer.observe = function(target) {\n Object.getPrototypeOf(this).observe(target, this.Config);\n };\n}\n\n/* eslint-disable class-methods-use-this */ /* eslint-disable no-unused-vars */ /* eslint-disable no-extra-semi */ // The rules above are disabled because we are implementing\n// an external interface.\nclass EditorListener {\n /**\n * @classdesc\n * Determines if the content of the\n * MathType Editor has changes.\n * @implements {EditorListeners}\n * @constructs\n */ constructor(){\n /**\n * Indicates if the content of the editor has changed.\n * @type {Boolean}\n */ this.isContentChanged = false;\n /**\n * Indicates if the listener should be waiting for changes in the editor.\n * @type {Boolean}\n */ this.waitingForChanges = false;\n }\n /**\n * Sets {@link EditorListener.isContentChanged} property.\n * @param {Boolean} value - The new vlue.\n */ setIsContentChanged(value) {\n this.isContentChanged = value;\n }\n /**\n * Returns true if the content of the editor has been changed, false otherwise.\n * @return {Boolean}\n */ getIsContentChanged() {\n return this.isContentChanged;\n }\n /**\n * Determines if the EditorListener should wait for any changes.\n * @param {Boolean} value - True if the editor should wait for changes, false otherwise.\n */ setWaitingForChanges(value) {\n this.waitingForChanges = value;\n }\n /**\n * EditorListener method to overwrite.\n * @type {JsEditor}\n * @ignore\n */ caretPositionChanged(_editor) {}\n /**\n * EditorListener method to overwrite\n * @type {JsEditor}\n * @ignore\n */ clipboardChanged(_editor) {}\n /**\n * Determines if the content of an editor has been changed.\n * @param {JsEditor} editor - editor object.\n */ contentChanged(_editor) {\n if (this.waitingForChanges === true && this.isContentChanged === false) {\n this.isContentChanged = true;\n }\n }\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} editor - The editor instance.\n */ styleChanged(_editor) {}\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} - The editor instance.\n */ transformationReceived(_editor) {}\n}\n\nlet wasm;\nconst cachedTextDecoder = typeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-8\", {\n ignoreBOM: true,\n fatal: true\n}) : {\n decode: ()=>{\n throw Error(\"TextDecoder not available\");\n }\n};\nif (typeof TextDecoder !== \"undefined\") {\n cachedTextDecoder.decode();\n}\nlet cachedUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\nconst heap = new Array(128).fill(undefined);\nheap.push(undefined, null, true, false);\nlet heap_next = heap.length;\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n heap[idx] = obj;\n return idx;\n}\nfunction getObject(idx) {\n return heap[idx];\n}\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\nlet WASM_VECTOR_LEN = 0;\nconst cachedTextEncoder = typeof TextEncoder !== \"undefined\" ? new TextEncoder(\"utf-8\") : {\n encode: ()=>{\n throw Error(\"TextEncoder not available\");\n }\n};\nconst encodeString = typeof cachedTextEncoder.encodeInto === \"function\" ? function(arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n} : function(arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n};\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8Memory0();\n let offset = 0;\n for(; offset < len; offset++){\n const code = arg.charCodeAt(offset);\n if (code > 0x7f) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n offset += ret.written;\n }\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\nlet cachedInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\nlet cachedFloat64Memory0 = null;\nfunction getFloat64Memory0() {\n if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) {\n cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64Memory0;\n}\nlet cachedBigInt64Memory0 = null;\nfunction getBigInt64Memory0() {\n if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) {\n cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer);\n }\n return cachedBigInt64Memory0;\n}\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == \"number\" || type == \"boolean\" || val == null) {\n return `${val}`;\n }\n if (type == \"string\") {\n return `\"${val}\"`;\n }\n if (type == \"symbol\") {\n const description = val.description;\n if (description == null) {\n return \"Symbol\";\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == \"function\") {\n const name = val.name;\n if (typeof name == \"string\" && name.length > 0) {\n return `Function(${name})`;\n } else {\n return \"Function\";\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = \"[\";\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++){\n debug += \", \" + debugString(val[i]);\n }\n debug += \"]\";\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == \"Object\") {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return \"Object(\" + JSON.stringify(val) + \")\";\n } catch (_) {\n return \"Object\";\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\nfunction makeClosure(arg0, arg1, dtor, f) {\n const state = {\n a: arg0,\n b: arg1,\n cnt: 1,\n dtor\n };\n const real = (...args)=>{\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n try {\n return f(state.a, state.b, ...args);\n } finally{\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b);\n state.a = 0;\n }\n }\n };\n real.original = state;\n return real;\n}\nfunction __wbg_adapter_46(arg0, arg1, arg2) {\n wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2));\n}\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = {\n a: arg0,\n b: arg1,\n cnt: 1,\n dtor\n };\n const real = (...args)=>{\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally{\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n return real;\n}\nfunction __wbg_adapter_49(arg0, arg1) {\n wasm.__wbindgen_export_4(arg0, arg1);\n}\nfunction __wbg_adapter_52(arg0, arg1, arg2) {\n wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));\n}\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export_6(addHeapObject(e));\n }\n}\nfunction __wbg_adapter_103(arg0, arg1, arg2, arg3) {\n wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n */ let Telemeter$1 = class Telemeter {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_telemeter_free(ptr);\n }\n /**\n * @param {any} solution\n * @param {any} hosts\n * @param {any} config\n */ constructor(solution, hosts, config){\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n this.__wbg_ptr = r0 >>> 0;\n return this;\n } finally{\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} sender_id\n * @returns {Promise}\n */ identify(sender_id) {\n const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {string} event_type\n * @param {any} event_payload\n * @returns {Promise}\n */ track(event_type, event_payload) {\n const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload));\n return takeObject(ret);\n }\n /**\n * @param {any} level\n * @param {string} message\n * @param {any} payload\n * @returns {Promise}\n */ log(level, message, payload) {\n const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload));\n return takeObject(ret);\n }\n /**\n * @returns {Promise}\n */ finish() {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.telemeter_finish(ptr);\n return takeObject(ret);\n }\n /**\n * @param {boolean | undefined} [new_debug_status]\n */ debug(new_debug_status) {\n wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0);\n }\n};\nasync function __wbg_load(module1, imports) {\n if (typeof Response === \"function\" && module1 instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === \"function\") {\n try {\n return await WebAssembly.instantiateStreaming(module1, imports);\n } catch (e) {\n if (module1.headers.get(\"Content-Type\") != \"application/wasm\") {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n } else {\n throw e;\n }\n }\n }\n const bytes = await module1.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module1, imports);\n if (instance instanceof WebAssembly.Instance) {\n return {\n instance,\n module: module1\n };\n } else {\n return instance;\n }\n }\n}\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_c728d68b8b34487e = function() {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_status_7841bb47be2a8f16 = function(arg0) {\n const ret = getObject(arg0).status;\n return ret;\n };\n imports.wbg.__wbg_headers_ea7ef583d1564b08 = function(arg0) {\n const ret = getObject(arg0).headers;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new0_ad75dd38f92424e2 = function() {\n const ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function(arg0) {\n const ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbindgen_is_object = function(arg0) {\n const val = getObject(arg0);\n const ret = typeof val === \"object\" && val !== null;\n return ret;\n };\n imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function(arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_process_5b786e71d465a513 = function(arg0) {\n const ret = getObject(arg0).process;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_versions_c2ab80650590b6a2 = function(arg0) {\n const ret = getObject(arg0).versions;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_node_523d7bd03ef69fba = function(arg0) {\n const ret = getObject(arg0).node;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_string = function(arg0) {\n const ret = typeof getObject(arg0) === \"string\";\n return ret;\n };\n imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function(arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_require_2784e593a4674877 = function() {\n return handleError(function() {\n const ret = module.require;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_4a9aa5157afeb382 = function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_1989a20442400aaa = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_done_bc26bf4ada718266 = function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_value_0570714ff7d75f35 = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_2aff440840bb6202 = function() {\n return handleError(function(arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_next_15da6a3df9290720 = function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_function = function(arg0) {\n const ret = typeof getObject(arg0) === \"function\";\n return ret;\n };\n imports.wbg.__wbg_call_669127b9d730c650 = function() {\n return handleError(function(arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_3fad056edded10bd = function() {\n return handleError(function() {\n const ret = self.self;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_window_a4f46c98a61d4089 = function() {\n return handleError(function() {\n const ret = window.window;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_globalThis_17eff828815f7d84 = function() {\n return handleError(function() {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_global_46f939f6541643c5 = function() {\n return handleError(function() {\n const ret = global.global;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isArray_38525be7442aa21e = function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_call_53fc3abd42e24ec8 = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_new_feb65b865d980ae2 = function(arg0, arg1) {\n try {\n var state0 = {\n a: arg0,\n b: arg1\n };\n var cb0 = (arg0, arg1)=>{\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_103(a, state0.b, arg0, arg1);\n } finally{\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally{\n state0.a = state0.b = 0;\n }\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_buffer_344d9b41efe96da7 = function(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_d8a000788389a31e = function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_dcfd613a3420f908 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n };\n imports.wbg.__wbg_length_a5587d6cd79ab197 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"string\" ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_stringify_4039297315a25b00 = function() {\n return handleError(function(arg0) {\n const ret = JSON.stringify(getObject(arg0));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_set_40f7786a25a9cc7e = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_has_cdf8b85f6e903c80 = function() {\n return handleError(function(arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_fetch_701fcd2bde06379a = function(arg0, arg1) {\n const ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function(arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_e4960143e41697a4 = function() {\n return handleError(function() {\n const ret = new AbortController();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_signal_1ed842bebd6ae322 = function(arg0) {\n const ret = getObject(arg0).signal;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_abort_8355f201f30300bb = function(arg0) {\n getObject(arg0).abort();\n };\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function(arg0) {\n const v = getObject(arg0);\n const ret = typeof v === \"boolean\" ? v ? 1 : 0 : 2;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"number\" ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_entries_6d727b73ee02b7ce = function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_String_917f38a1211cf44b = function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function(arg0, arg1) {\n console.warn(getObject(arg0), getObject(arg1));\n };\n imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function(arg0) {\n const ret = getObject(arg0).readyState;\n return ret;\n };\n imports.wbg.__wbg_warn_4affe1093892a4ef = function(arg0) {\n console.warn(getObject(arg0));\n };\n imports.wbg.__wbg_close_f4135085ec3fc8f0 = function() {\n return handleError(function(arg0) {\n getObject(arg0).close();\n }, arguments);\n };\n imports.wbg.__wbg_new_b9b318679315404f = function() {\n return handleError(function(arg0, arg1) {\n const ret = new WebSocket(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function(arg0, arg1) {\n getObject(arg0).binaryType = takeObject(arg1);\n };\n imports.wbg.__wbg_log_7811587c4c6d2844 = function(arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_error_f0a6627f4b23c19d = function(arg0) {\n console.error(getObject(arg0));\n };\n imports.wbg.__wbg_info_3ca7870690403fee = function(arg0) {\n console.info(getObject(arg0));\n };\n imports.wbg.__wbg_document_183cf1eecfdbffee = function(arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function(arg0) {\n const ret = getObject(arg0).visibilityState;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function(arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_cace2e0b3ddc0502 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function() {\n return handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function() {\n return handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbindgen_is_bigint = function(arg0) {\n const ret = typeof getObject(arg0) === \"bigint\";\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_in = function(arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).localStorage;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function() {\n return handleError(function(arg0, arg1, arg2, arg3) {\n const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n }, arguments);\n };\n imports.wbg.__wbg_navigator_7078da62d92ff5ad = function(arg0) {\n const ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).mediaDevices;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).enumerateDevices();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setItem_fe04f524052a3839 = function() {\n return handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbindgen_cb_drop = function(arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n return ret;\n };\n imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function(arg0, arg1) {\n const ret = getObject(arg1).deviceId;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Response;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function() {\n return handleError(function(arg0, arg1) {\n getObject(arg0).randomFillSync(takeObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getRandomValues_504510b5564925af = function() {\n return handleError(function(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof v === \"bigint\" ? v : undefined;\n getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_then_89e1c559530b85cf = function(arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function(arg0) {\n queueMicrotask(getObject(arg0));\n };\n imports.wbg.__wbg_then_1bbc9edafd859b06 = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function(arg0) {\n const ret = getObject(arg0).queueMicrotask;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_resolve_a3252b2860f0a09e = function(arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_url_1f609e63ff1a7983 = function(arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_send_2860805104507701 = function() {\n return handleError(function(arg0, arg1, arg2) {\n getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));\n }, arguments);\n };\n imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_new_19676474aa414d62 = function() {\n return handleError(function() {\n const ret = new Headers();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_append_feec4143bbf21904 = function() {\n return handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_closure_wrapper1532 = function(arg0, arg1, arg2) {\n const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1602 = function(arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1834 = function(arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52);\n return addHeapObject(ret);\n };\n return imports;\n}\nfunction __wbg_finalize_init(instance, module1) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module1;\n cachedBigInt64Memory0 = null;\n cachedFloat64Memory0 = null;\n cachedInt32Memory0 = null;\n cachedUint8Memory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\nasync function __wbg_init(input) {\n if (wasm !== undefined) return wasm;\n if (typeof input === \"undefined\") {\n input = new URL(\"telemeter_wasm_bg.wasm\", import.meta.url);\n }\n const imports = __wbg_get_imports();\n if (typeof input === \"string\" || typeof Request === \"function\" && input instanceof Request || typeof URL === \"function\" && input instanceof URL) {\n input = fetch(input);\n }\n const { instance, module: module1 } = await __wbg_load(await input, imports);\n return __wbg_finalize_init(instance, module1);\n}\n\n/**\n * @classdesc\n * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data\n * to Telemetry in a more comfortable and homogeneous way.\n */ class Telemeter {\n /**\n * Inits Telemeter class.\n * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)}\n * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry.\n * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated.\n * @param {Object} telemeterAttributes.config - Configuration parameters.\n */ static init(telemeterAttributes) {\n if (!this.telemeter && !this.waitingForInit) {\n this.waitingForInit = true;\n __wbg_init(telemeterAttributes.url).then(()=>{\n this.telemeter = new Telemeter$1(telemeterAttributes.solution, telemeterAttributes.hosts, telemeterAttributes.config);\n }).catch((error)=>{\n console.log(error);\n }).finally(()=>this.waitingForInit = false);\n }\n }\n /**\n * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session.\n */ static async finish() {\n if (!this.telemeter) return;\n try {\n let local_telemeter = this.telemeter;\n this.telemeter = undefined;\n await local_telemeter.finish();\n } catch (e) {\n console.error(e);\n }\n }\n}\n\nclass ContentManager {\n /**\n * @classdesc\n * This class represents a modal dialog, managing the following:\n * - The insertion of content into the current instance of the {@link ModalDialog} class.\n * - The actions to be done once the modal object has been submitted\n * (submitAction} method).\n * - The update of the content when the {@link ModalDialog} class is also updated,\n * for example when ModalDialog is re-opened.\n * - The communication between the {@link ModalDialog} class and itself, if the content\n * has been changed (hasChanges} method).\n * @constructs\n * @param {Object} contentManagerAttributes - Object containing all attributes needed to\n * create a new instance.\n */ constructor(contentManagerAttributes){\n /**\n * An object containing MathType editor parameters. See\n * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information.\n * @type {Object}\n */ this.editorAttributes = {};\n if (\"editorAttributes\" in contentManagerAttributes) {\n this.editorAttributes = contentManagerAttributes.editorAttributes;\n } else {\n throw new Error(\"ContentManager constructor error: editorAttributes property missed.\");\n }\n /**\n * CustomEditors instance. Contains the custom editors.\n * @type {CustomEditors}\n */ this.customEditors = null;\n if (\"customEditors\" in contentManagerAttributes) {\n this.customEditors = contentManagerAttributes.customEditors;\n }\n /**\n * Environment properties. This object contains data about the integration platform.\n * @type {Object}\n * @property {String} editor - Editor name. Usually the HTML editor.\n * @property {String} mode - Save mode. Xml by default.\n * @property {String} version - Plugin version.\n */ this.environment = {};\n if (\"environment\" in contentManagerAttributes) {\n this.environment = contentManagerAttributes.environment;\n } else {\n throw new Error(\"ContentManager constructor error: environment property missed\");\n }\n /**\n * ContentManager language.\n * @type {String}\n */ this.language = \"\";\n if (\"language\" in contentManagerAttributes) {\n this.language = contentManagerAttributes.language;\n } else {\n throw new Error(\"ContentManager constructor error: language property missed\");\n }\n /**\n * {@link EditorListener} instance. Manages the changes inside the editor.\n * @type {EditorListener}\n */ this.editorListener = new EditorListener();\n /**\n * MathType editor instance.\n * @type {JsEditor}\n */ this.editor = null;\n /**\n * Navigator user agent.\n * @type {String}\n */ this.ua = navigator.userAgent.toLowerCase();\n /**\n * Mobile device properties object\n * @type {DeviceProperties}\n */ this.deviceProperties = {};\n this.deviceProperties.isAndroid = this.ua.indexOf(\"android\") > -1;\n this.deviceProperties.isIOS = ContentManager.isIOS();\n /**\n * Custom editor toolbar.\n * @type {String}\n */ this.toolbar = null;\n /**\n * Custom editor toolbar.\n * @type {String}\n */ this.dbclick = null;\n /**\n * Instance of the {@link ModalDialog} class associated with the current\n * {@link ContentManager} instance.\n * @type {ModalDialog}\n */ this.modalDialogInstance = null;\n /**\n * ContentManager listeners.\n * @type {Listeners}\n */ this.listeners = new Listeners();\n /**\n * MathML associated to the ContentManager instance.\n * @type {String}\n */ this.mathML = null;\n /**\n * Indicates if the edited element is a new one or not.\n * @type {Boolean}\n */ this.isNewElement = true;\n /**\n * {@link IntegrationModel} instance. Needed to call wrapper methods.\n * @type {IntegrationModel}\n */ this.integrationModel = null;\n }\n /**\n * Adds a new listener to the current {@link ContentManager} instance.\n * @param {Object} listener - The listener to be added.\n */ addListener(listener) {\n this.listeners.add(listener);\n }\n /**\n * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager}\n * instance.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance.\n */ setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n /**\n * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance.\n * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance\n */ setModalDialogInstance(modalDialogInstance) {\n this.modalDialogInstance = modalDialogInstance;\n }\n /**\n * Inserts the content into the current {@link ModalDialog} instance updating\n * the title and inserting the JavaScript editor.\n */ insert() {\n // Before insert the editor we update the modal object title to avoid weird render display.\n this.updateTitle(this.modalDialogInstance);\n this.insertEditor(this.modalDialogInstance);\n }\n /**\n * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until\n * editor's JavaScript is loaded.\n */ insertEditor() {\n if (ContentManager.isEditorLoaded()) {\n this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes);\n this.editor.insertInto(this.modalDialogInstance.contentContainer);\n this.editor.focus();\n if (this.modalDialogInstance.rtl) {\n this.editor.action(\"rtl\");\n }\n // Setting div in rtl in case of it's activated.\n if (this.editor.getEditorModel().isRTL()) {\n this.editor.element.style.direction = \"rtl\";\n }\n // Editor listener: this object manages the changes logic of editor.\n this.editor.getEditorModel().addEditorListener(this.editorListener);\n // iOS events.\n if (this.modalDialogInstance.deviceProperties.isIOS) {\n setTimeout(function() {\n // Make sure the modalDialogInstance is available when the timeout is over\n // to avoid throw errors and stop execution.\n if (this.hasOwnProperty(\"modalDialogInstance\")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins\n }, 400);\n const formulaDisplayDiv = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n Util.addEvent(formulaDisplayDiv, \"focus\", this.modalDialogInstance.handleOpenedIosSoftkeyboard);\n Util.addEvent(formulaDisplayDiv, \"blur\", this.modalDialogInstance.handleClosedIosSoftkeyboard);\n }\n // Fire onLoad event. Necessary to set the MathML into the editor\n // after is loaded.\n this.listeners.fire(\"onLoad\", {});\n } else {\n setTimeout(ContentManager.prototype.insertEditor.bind(this), 100);\n }\n }\n /**\n * Initializes the current class by loading MathType script.\n */ init() {\n if (!ContentManager.isEditorLoaded()) {\n this.addEditorAsExternalDependency();\n }\n }\n /**\n * Adds script element to the DOM to include editor externally.\n */ addEditorAsExternalDependency() {\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n let editorUrl = Configuration.get(\"editorUrl\");\n // We create an object url for parse url string and work more efficiently.\n const anchorElement = document.createElement(\"a\");\n ContentManager.setHrefToAnchorElement(anchorElement, editorUrl);\n ContentManager.setProtocolToAnchorElement(anchorElement);\n editorUrl = ContentManager.getURLFromAnchorElement(anchorElement);\n // Load editor URL. We add stats as GET params.\n const stats = this.getEditorStats();\n script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`;\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n }\n /**\n * Sets the specified url to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set 'url'.\n * @param {String} url - URL to set.\n */ static setHrefToAnchorElement(anchorElement, url) {\n anchorElement.href = url;\n }\n /**\n * Sets the current protocol to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set its protocol.\n */ static setProtocolToAnchorElement(anchorElement) {\n // Change to https if necessary.\n if (window.location.href.indexOf(\"https://\") === 0) {\n // It check if browser is https and configuration is http.\n // If this is so, we will replace protocol.\n if (anchorElement.protocol === \"http:\") {\n anchorElement.protocol = \"https:\";\n }\n }\n }\n /**\n * Returns the url of the anchor element adding the current port\n * if it is needed.\n * @param {HTMLAnchorElement} anchorElement - Element where extract the url.\n * @returns {String}\n */ static getURLFromAnchorElement(anchorElement) {\n // Check protocol and remove port if it's standard.\n const removePort = anchorElement.port === \"80\" || anchorElement.port === \"443\" || anchorElement.port === \"\";\n return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? \"\" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith(\"/\") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len\n }\n /**\n * Returns object with editor stats.\n *\n * @typedef {Object} EditorStatsObject\n * @property {string} editor - Editor name.\n * @property {string} mode - Current configuration for formula save mode.\n * @property {string} version - Current plugins version.\n * @returns {EditorStatsObject}\n */ getEditorStats() {\n // Editor stats. Use environment property to set it.\n const stats = {};\n if (\"editor\" in this.environment) {\n stats.editor = this.environment.editor;\n } else {\n stats.editor = \"unknown\";\n }\n if (\"mode\" in this.environment) {\n stats.mode = this.environment.mode;\n } else {\n stats.mode = Configuration.get(\"saveMode\");\n }\n if (\"version\" in this.environment) {\n stats.version = this.environment.version;\n } else {\n stats.version = Configuration.get(\"version\");\n }\n return stats;\n }\n /**\n * Returns true if device is iOS. Otherwise, false.\n * @returns {Boolean}\n */ static isIOS() {\n return [\n \"iPad Simulator\",\n \"iPhone Simulator\",\n \"iPod Simulator\",\n \"iPad\",\n \"iPhone\",\n \"iPod\"\n ].includes(navigator.platform) || // iPad on iOS 13 detection\n navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document;\n }\n /**\n * Returns true if device is Mobile. Otherwise, false.\n * @returns {Boolean}\n */ static isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n /**\n * Returns true if editor is loaded. Otherwise, false.\n * @returns {Boolean}\n */ static isEditorLoaded() {\n // To know if editor JavaScript is loaded we need to wait until\n // window.com.wiris.jsEditor.JsEditor.newInstance is ready.\n return window.com && window.com.wiris && window.com.wiris.jsEditor && window.com.wiris.jsEditor.JsEditor && window.com.wiris.jsEditor.JsEditor.newInstance;\n }\n /**\n * Sets the {@link ContentManager.editor} initial content.\n */ setInitialContent() {\n if (!this.isNewElement) {\n this.setMathML(this.mathML);\n }\n }\n /**\n * Sets a MathML into {@link ContentManager.editor} instance.\n * @param {String} mathml - MathML string.\n * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set.\n * False by default.\n */ setMathML(mathml, focusDisabled) {\n // By default focus is enabled.\n if (typeof focusDisabled === \"undefined\") {\n focusDisabled = false;\n }\n // Using setMathML method is not a change produced by the user but for the API\n // so we set to false the contentChange property of editorListener.\n this.editor.setMathMLWithCallback(mathml, ()=>{\n this.editorListener.setWaitingForChanges(true);\n });\n // We need to wait a little until the callback finish.\n setTimeout(()=>{\n this.editorListener.setIsContentChanged(false);\n }, 500);\n // In some scenarios - like closing modal object - editor mustn't be focused.\n if (!focusDisabled) {\n this.onFocus();\n }\n }\n /**\n * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by\n * {@link ModalDialog.focus}.\n */ onFocus() {\n if (typeof this.editor !== \"undefined\" && this.editor != null) {\n this.editor.focus();\n // On WordPress integration, the focus gets lost right after setting it.\n // To fix this, we enforce another focus some milliseconds after this behaviour.\n setTimeout(()=>{\n this.editor.focus();\n }, 100);\n }\n }\n /**\n * Updates the edition area by calling {@link IntegrationModel.updateFormula}.\n * Triggered by {@link ModalDialog.submitAction}.\n */ submitAction() {\n if (!this.editor.isFormulaEmpty()) {\n let mathML = this.editor.getMathMLWithSemantics();\n // Add class for custom editors.\n if (this.customEditors.getActiveEditor() !== null) {\n const { toolbar } = this.customEditors.getActiveEditor();\n mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar);\n } else {\n // We need - if exists - the editor name from MathML\n // class attribute.\n Object.keys(this.customEditors.editors).forEach((key)=>{\n mathML = MathML.removeCustomEditorClassAttribute(mathML, key);\n });\n }\n const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML);\n this.integrationModel.updateFormula(mathmlEntitiesEncoded);\n } else {\n this.integrationModel.updateFormula(null);\n }\n this.customEditors.disable();\n this.integrationModel.notifyWindowClosed();\n // Set disabled focus to prevent lost focus.\n this.setEmptyMathML();\n this.customEditors.disable();\n }\n /**\n * Sets an empty MathML as {@link ContentManager.editor} content.\n * This will open the MT/CT editor with the hand mode.\n * It adds dir rtl in case of it's activated.\n */ setEmptyMathML() {\n const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS;\n const isRTL = this.editor.getEditorModel().isRTL();\n if (isMobile || this.integrationModel.forcedHandMode) {\n // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode.\n const mathML = `[]`;\n this.setMathML(mathML, true);\n } else {\n // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation.\n const mathML = ``;\n this.setMathML(mathML, true);\n }\n }\n /**\n * Open event. Triggered by {@link ModalDialog.open}. Does the following:\n * - Updates the {@link ContentManager.editor} content\n * (with an empty MathML or an existing formula),\n * - Updates the {@link ContentManager.editor} toolbar.\n * - Recovers the the focus.\n */ onOpen() {\n if (this.isNewElement) {\n this.setEmptyMathML();\n } else {\n this.setMathML(this.mathML);\n }\n let toolbar = this.updateToolbar();\n this.onFocus();\n if (this.deviceProperties.isIOS) {\n const zoom = document.documentElement.clientWidth / window.innerWidth;\n if (zoom !== 1) {\n // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed.\n this.setKeyboardMode();\n }\n }\n let trigger = this.dbclick ? \"formula\" : \"button\";\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"OPENED_MTCT_EDITOR\", {\n toolbar: toolbar,\n trigger: trigger\n });\n } catch (error) {\n console.error(\"Error tracking OPENED_MTCT_EDITOR\", error);\n }\n Core.globalListeners.fire(\"onModalOpen\", {});\n if (this.integrationModel.forcedHandMode) {\n this.hideHandModeButton();\n // In case we have a keyboard written formula, we still want it to be opened with handMode.\n if (this.mathML && !this.mathML.includes('') && !this.isNewElement) {\n this.openHandOnKeyboardMathML(this.mathML, this.editor);\n }\n }\n }\n /**\n * Change Editor in keyboard mode when is loaded\n */ setKeyboardMode() {\n const wrsEditor = document.getElementsByClassName(\"wrs_handOpen wrs_disablePalette\")[0];\n if (wrsEditor) {\n wrsEditor.classList.remove(\"wrs_handOpen\");\n wrsEditor.classList.remove(\"wrs_disablePalette\");\n } else {\n setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100);\n }\n }\n /**\n * Hides the hand <-> keyboard mode switch.\n *\n * This method relies completely on the classes used on different HTML elements within the editor itself, meaning\n * any change on those classes will make this code stop working properly.\n *\n * On top of that, some of those classes are changed on runtime (for example, the one that makes some buttons change).\n * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it.\n * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button.\n */ hideHandModeButton(forced = true) {\n if (this.handSwitchHidden) {\n return; // hand <-> keyboard button already hidden.\n }\n // \"Open hand mode\" button takes a little bit to be available.\n // This selector gets the hand <-> keyboard mode switch\n const handModeButtonSelector = \"div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]\";\n // If in \"forced mode\", we hide the \"keyboard button\" so the user can't can't change between hand and keyboard modes.\n // We use an observer to ensure that the button it hidden as soon as it appears.\n if (forced) {\n const mutationInstance = new MutationObserver((mutations)=>{\n const handModeButton = document.querySelector(handModeButtonSelector);\n if (handModeButton) {\n handModeButton.hidden = true;\n this.handSwitchHidden = true;\n mutationInstance.disconnect();\n }\n });\n mutationInstance.observe(document.body, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n /**\n * It will open any formula written in Keyboard mode with the hand mode with the default hand trace.\n *\n * @param {String} mathml The original KeyBoard MathML\n * @param {Object} editor The editor object.\n */ async openHandOnKeyboardMathML(mathml, editor) {\n // First, as an editor requirement, we need to update the editor object with the current MathML formula.\n // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed.\n await new Promise((resolve)=>{\n editor.setMathMLWithCallback(mathml, resolve);\n });\n // We wait until the hand editor object exists.\n await this.waitForHand(editor);\n // Logic to get the hand traces and open the formula in hand mode.\n // This logic comes from the editor.\n const handEditor = editor.hand;\n editor.handTemporalMathML = editor.getMathML();\n const handCoordinates = editor.editorModel.getHandStrokes();\n handEditor.setStrokes(handCoordinates);\n handEditor.fitStrokes(true);\n editor.openHand();\n }\n /**\n * Waits until the hand editor object exists.\n * @param {Obect} editor The editor object.\n */ async waitForHand(editor) {\n while(!editor.hand){\n await new Promise((resolve)=>setTimeout(resolve, 100));\n }\n }\n /**\n * Sets the correct toolbar depending if exist other custom toolbars\n * at the same time (e.g: Chemistry).\n */ updateToolbar() {\n this.updateTitle(this.modalDialogInstance);\n const customEditor = this.customEditors.getActiveEditor();\n let toolbar;\n if (customEditor) {\n toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar;\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n }\n } else {\n toolbar = this.getToolbar();\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n this.customEditors.disable();\n }\n }\n return toolbar;\n }\n /**\n * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled\n * sets the custom editor title. Otherwise sets the default title.\n */ updateTitle() {\n const customEditor = this.customEditors.getActiveEditor();\n if (customEditor) {\n this.modalDialogInstance.setTitle(customEditor.title);\n } else {\n this.modalDialogInstance.setTitle(\"MathType\");\n }\n }\n /**\n * Returns the editor toolbar, depending on the configuration local or server side.\n * @returns {String} - Toolbar identifier.\n */ getToolbar() {\n let toolbar = \"general\";\n if (\"toolbar\" in this.editorAttributes) {\n ({ toolbar } = this.editorAttributes);\n }\n // TODO: Change global integration variable for integration custom toolbar.\n if (toolbar === \"general\") {\n // eslint-disable-next-line camelcase\n toolbar = typeof _wrs_int_wirisProperties === \"undefined\" || typeof _wrs_int_wirisProperties.toolbar === \"undefined\" ? \"general\" : _wrs_int_wirisProperties.toolbar;\n }\n return toolbar;\n }\n /**\n * Sets the current {@link ContentManager.editor} instance toolbar.\n * @param {String} toolbar - The toolbar name.\n */ setToolbar(toolbar) {\n this.toolbar = toolbar;\n this.editor.setParams({\n toolbar: this.toolbar\n });\n }\n /**\n * Sets the custom headers added on editor requests.\n * @returns {Object} headers - key value headers.\n */ setCustomHeaders(headers) {\n let headersObj = {};\n // We control that we only get String or Object as the input.\n if (typeof headers === \"object\") {\n headersObj = headers;\n } else if (typeof headers === \"string\") {\n headersObj = Util.convertStringToObject(headers);\n }\n this.editor.setParams({\n customHeaders: headersObj\n });\n return headersObj;\n }\n /**\n * Returns true if the content of the editor has been changed. The logic of the changes\n * is delegated to {@link EditorListener} class.\n * @returns {Boolean} True if the editor content has been changed. False otherwise.\n */ hasChanges() {\n return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged();\n }\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */ onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) {\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n // Code to detect Esc event.\n // There should be only one element with class name 'wrs_pressed' at the same time.\n let list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_select wrs_pressed\");\n if (list.length === 0) {\n this.modalDialogInstance.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.modalDialogInstance.submitButton) {\n // Focus is on OK button.\n this.editor.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.querySelector('[title=\"Manual\"]') === document.activeElement) {\n // Focus is on minimize button (_).\n this.modalDialogInstance.closeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n if (document.activeElement === this.modalDialogInstance.minimizeDiv) {\n // Focus on cancel button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n this.modalDialogInstance.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.modalDialogInstance.cancelButton) {\n // Focus is on X button.\n this.modalDialogInstance.minimizeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.activeElement === this.modalDialogInstance.closeDiv) {\n // Focus on help button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n const element = document.querySelector('[title=\"Manual\"]');\n element.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n } else {\n // There should be only one element with class name 'wrs_formulaDisplay'.\n const element = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n if (element.getAttribute(\"class\") === \"wrs_formulaDisplay wrs_focused\") {\n // Focus is on formuladisplay.\n this.modalDialogInstance.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n }\n }\n}\n\n/**\n * A custom editor is MathType editor with a different\n * @typedef {Object} CustomEditor\n * @property {String} CustomEditor.name - Custom editor name.\n * @property {String} CustomEditor.toolbar - Custom editor toolbar.\n * @property {String} CustomEditor.icon - Custom editor icon.\n * @property {String} CustomEditor.confVariable - Configuration property to manage\n * the availability of the custom editor.\n * @property {String} CustomEditor.title - Custom editor modal dialog title.\n * @property {String} CustomEditor.tooltip - Custom editor icon tooltip.\n */ class CustomEditors {\n /**\n * @classdesc\n * This class represents the MathType custom editors manager.\n * A custom editor is MathType editor with a custom toolbar.\n * This class associates a {@link CustomEditor} to:\n * - It's own formulas\n * - A custom toolbar\n * - An icon to open it from a HTML editor.\n * - A tooltip for the icon.\n * - A global variable to enable or disable it globally.\n * @constructs\n */ constructor(){\n /**\n * The custom editors.\n * @type {Array.}\n */ this.editors = [];\n /**\n * The active editor name.\n * @type {String}\n */ this.activeEditor = \"default\";\n }\n /**\n * Adds a {@link CustomEditor} to editors array.\n * @param {String} editorName - The editor name.\n * @param {CustomEditor} editorParams - The custom editor parameters.\n */ addEditor(editorName, editorParams) {\n const customEditor = {};\n customEditor.name = editorParams.name;\n customEditor.toolbar = editorParams.toolbar;\n customEditor.icon = editorParams.icon;\n customEditor.confVariable = editorParams.confVariable;\n customEditor.title = editorParams.title;\n customEditor.tooltip = editorParams.tooltip;\n this.editors[editorName] = customEditor;\n }\n /**\n * Enables a {@link CustomEditor}.\n * @param {String} customEditorName - The custom editor name.\n */ enable(customEditorName) {\n this.activeEditor = customEditorName;\n }\n /**\n * Disables a {@link CustomEditor}.\n */ disable() {\n this.activeEditor = \"default\";\n }\n /**\n * Returns the active editor.\n * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise.\n */ getActiveEditor() {\n if (this.activeEditor !== \"default\") {\n return this.editors[this.activeEditor];\n }\n return null;\n }\n}\n\n/**\n * Represents the configuration properties generated from the frontend (JavaScript variables).\n * @type {Object}\n * @property {string} imageClassName - Default MathType formula image class.\n * @property {string} imageClassName - Default MathType CAS image class.\n * @ignore\n */ const jsProperties = {\n imageCustomEditorName: \"data-custom-editor\",\n imageClassName: \"Wirisformula\",\n CASClassName: \"Wiriscas\"\n};\n\nclass Event {\n /**\n * @classdesc\n * This class represents a custom event. Events should be fired by the {@link Listener} class.\n *\n * ```js\n * let customEvent = new Event();\n * customEvent.properties = {};\n *\n * let listeners = new Listeners();\n * listeners.newListener(eventName, callback);\n *\n * listeners.fire(eventName, customEvent) *\n * ```\n * @constructs\n */ constructor(){\n /**\n * Indicates if the event should be cancelled.\n * @type {Boolean}\n */ this.cancelled = false;\n /**\n * Indicates if the event should be prevented.\n * @type {Boolean}\n */ this.defaultPrevented = false;\n }\n /**\n * Cancels the event.\n */ cancel() {\n this.cancelled = true;\n }\n /**\n * Prevents the default action.\n */ preventDefault() {\n this.defaultPrevented = true;\n }\n}\n\n/**\n\n */ class PopUpMessage {\n /**\n * @classdesc\n * This class represents a dialog message overlaying a DOM element in order to\n * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears\n * o canceled. In this last case a callback function should be called.\n * @constructs\n * @param {Object} popupMessageAttributes - Object containing popup properties.\n * @param {HTMLElement} popupMessageAttributes.overlayElement - Element to overlay.\n * @param {Object} popupMessageAttributes.callbacks - Contains callback\n * methods for close and cancel actions.\n * @param {Object} popupMessageAttributes.strings - Contains all the strings needed.\n */ constructor(popupMessageAttributes){\n /**\n * Element to be overlaid when the popup appears.\n */ this.overlayElement = popupMessageAttributes.overlayElement;\n this.callbacks = popupMessageAttributes.callbacks;\n /**\n * HTMLElement element to wrap all HTML elements inside the popupMessage.\n */ this.overlayWrapper = this.overlayElement.appendChild(document.createElement(\"div\"));\n this.overlayWrapper.setAttribute(\"class\", \"wrs_popupmessage_overlay_envolture\");\n /**\n * HTMLElement to display the popup message, close button and cancel button.\n */ this.message = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n this.message.id = \"wrs_popupmessage\";\n this.message.setAttribute(\"class\", \"wrs_popupmessage_panel\");\n this.message.setAttribute(\"role\", \"dialog\");\n this.message.setAttribute(\"aria-describedby\", \"description_txt\");\n const paragraph = document.createElement(\"p\");\n const text = document.createTextNode(popupMessageAttributes.strings.message);\n paragraph.appendChild(text);\n paragraph.id = \"description_txt\";\n this.message.appendChild(paragraph);\n /**\n * HTML element overlaying the overlayElement.\n */ const overlay = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n overlay.setAttribute(\"class\", \"wrs_popupmessage_overlay\");\n // We create a overlay that close popup message on click in there\n overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n /**\n * HTML element containing cancel and close buttons.\n */ this.buttonArea = this.message.appendChild(document.createElement(\"div\"));\n this.buttonArea.setAttribute(\"class\", \"wrs_popupmessage_button_area\");\n this.buttonArea.id = \"wrs_popup_button_area\";\n // Close button arguments.\n const buttonSubmitArguments = {\n class: \"wrs_button_accept\",\n innerHTML: popupMessageAttributes.strings.submitString,\n id: \"wrs_popup_accept_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-close-button\"\n };\n /**\n * Close button arguments.\n */ this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this));\n this.buttonArea.appendChild(this.closeButton);\n // Cancel button arguments.\n const buttonCancelArguments = {\n class: \"wrs_button_cancel\",\n innerHTML: popupMessageAttributes.strings.cancelString,\n id: \"wrs_popup_cancel_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-cancel-button\"\n };\n /**\n * Cancel button.\n */ this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this));\n this.buttonArea.appendChild(this.cancelButton);\n }\n /**\n * This method create a button with arguments and return button dom object\n * @param {Object} parameters - An object containing id, class and innerHTML button text.\n * @param {String} parameters.id - Button id.\n * @param {String} parameters.class - Button class name.\n * @param {String} parameters.innerHTML - Button innerHTML text.\n * @param {Object} callback- Callback method to call on click event.\n * @returns {HTMLElement} HTML button.\n */ // eslint-disable-next-line class-methods-use-this\n createButton(parameters, callback) {\n let element = {};\n element = document.createElement(\"button\");\n element.setAttribute(\"id\", parameters.id);\n element.setAttribute(\"class\", parameters.class);\n element.innerHTML = parameters.innerHTML;\n element.addEventListener(\"click\", callback);\n if (parameters[\"data-testid\"]) {\n element.setAttribute(\"data-testid\", parameters[\"data-testid\"]);\n }\n return element;\n }\n /**\n * Shows the popupmessage containing a message, and two buttons\n * to cancel the action or close the modal dialog.\n */ show() {\n if (this.overlayWrapper.style.display !== \"block\") {\n // Clear focus with blur for prevent press any key.\n document.activeElement.blur();\n this.overlayWrapper.style.display = \"block\";\n this.closeButton.focus();\n } else {\n this.overlayWrapper.style.display = \"none\";\n // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow\n }\n }\n /**\n * This method cancels the popupMessage: the dialog disappears revealing the overlaid element.\n * A callback method is called (if defined). For example a method to focus the overlaid element.\n */ cancelAction() {\n this.overlayWrapper.style.display = \"none\";\n if (typeof this.callbacks.cancelCallback !== \"undefined\") {\n this.callbacks.cancelCallback();\n // Set temporal image to null to prevent loading\n // an existent formula when starting one from scratch. Make focus come back too.\n // IntegrationModel.setActionsOnCancelButtons();\n }\n }\n /**\n * This method closes the popupMessage: the dialog disappears and the close callback is called.\n * For example to close the overlaid element.\n */ closeAction() {\n this.cancelAction();\n if (typeof this.callbacks.closeCallback !== \"undefined\") {\n this.callbacks.closeCallback();\n }\n IntegrationModel.setActionsOnCancelButtons();\n }\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */ onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Code to detect Esc event.\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n this.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.closeButton) {\n this.cancelButton.focus();\n } else {\n this.closeButton.focus();\n }\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n}\n\nvar closeIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar closeHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar fullsIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar fullsHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minsIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minsHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar maxIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar maxHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\n// eslint-disable-next-line max-classes-per-file\n/**\n * @typedef {Object} DeviceProperties\n * @property {String} DeviceProperties.orientation - Indicates of the orientation of the device.\n * @property {Boolean} DeviceProperties.isAndroid - True if the device is Android. False otherwise.\n * @property {Boolean} DeviceProperties.isIOS - True if the device is iOS. False otherwise.\n * @property {Boolean} DeviceProperties.isMobile - True if the device is a mobile one.\n * False otherwise.\n * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one.\n * False otherwise.\n */ class ModalDialog {\n /**\n * @classdesc\n * This class represents a modal dialog. The modal dialog admits\n * a {@link ContentManager} instance to manage the content of the dialog.\n * @constructs\n * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes.\n */ constructor(modalDialogAttributes){\n this.attributes = modalDialogAttributes;\n // Metrics.\n const ua = navigator.userAgent.toLowerCase();\n const isAndroid = ua.indexOf(\"android\") > -1;\n const isIOS = ContentManager.isIOS();\n this.iosSoftkeyboardOpened = false;\n this.iosMeasureUnit = ua.indexOf(\"crios\") === -1 ? \"%\" : \"vh\";\n this.iosDivHeight = `100%${this.iosMeasureUnit}`;\n const deviceWidth = window.outerWidth;\n const deviceHeight = window.outerHeight;\n const landscape = deviceWidth > deviceHeight;\n const portrait = deviceWidth < deviceHeight;\n // TODO: Detect isMobile without using editor metrics.\n landscape && this.attributes.height > deviceHeight;\n portrait && this.attributes.width > deviceWidth;\n const isMobile = ContentManager.isMobile();\n // Obtain number of current instance.\n this.instanceId = document.getElementsByClassName(\"wrs_modal_dialogContainer\").length;\n // Device object properties.\n /**\n * @type {DeviceProperties}\n */ this.deviceProperties = {\n orientation: landscape ? \"landscape\" : \"portrait\",\n isAndroid,\n isIOS,\n isMobile,\n isDesktop: !isMobile && !isIOS && !isAndroid\n };\n this.properties = {\n created: false,\n state: \"\",\n previousState: \"\",\n position: {\n bottom: 0,\n right: 10\n },\n size: {\n height: 338,\n width: 580\n }\n };\n /**\n * Object to keep website's style before change it on lock scroll for mobile devices.\n * @type {Object}\n * @property {String} bodyStylePosition - Previous body style position.\n * @property {String} bodyStyleOverflow - Previous body style overflow.\n * @property {String} htmlStyleOverflow - Previous body style overflow.\n * @property {String} windowScrollX - Previous window's scroll Y.\n * @property {String} windowScrollY - Previous window's scroll X.\n */ this.websiteBeforeLockParameters = null;\n let attributes = {};\n attributes.class = \"wrs_modal_overlay\";\n attributes.id = this.getElementId(attributes.class);\n this.overlay = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_title_bar\";\n attributes.id = this.getElementId(attributes.class);\n this.titleBar = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_title\";\n attributes.id = this.getElementId(attributes.class);\n this.title = Util.createElement(\"div\", attributes);\n this.title.innerHTML = \"offline\";\n attributes = {};\n attributes.class = \"wrs_modal_close_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"close\");\n attributes.style = {};\n this.closeDiv = Util.createElement(\"a\", attributes);\n this.closeDiv.setAttribute(\"role\", \"button\");\n this.closeDiv.setAttribute(\"tabindex\", 3);\n // Apply styles and events after the creation as createElement doesn't process them correctly\n let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`;\n let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`;\n this.closeDiv.setAttribute(\"style\", generalStyle);\n this.closeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.closeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.closeDiv.setAttribute(\"data-testid\", \"mtcteditor-close-button\");\n attributes = {};\n attributes.class = \"wrs_modal_stack_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"exit_fullscreen\");\n this.stackDiv = Util.createElement(\"a\", attributes);\n this.stackDiv.setAttribute(\"role\", \"button\");\n this.stackDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`;\n hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`;\n this.stackDiv.setAttribute(\"style\", generalStyle);\n this.stackDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.stackDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.stackDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-disable-button\");\n attributes = {};\n attributes.class = \"wrs_modal_maximize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"fullscreen\");\n this.maximizeDiv = Util.createElement(\"a\", attributes);\n this.maximizeDiv.setAttribute(\"role\", \"button\");\n this.maximizeDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`;\n this.maximizeDiv.setAttribute(\"style\", generalStyle);\n this.maximizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.maximizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.maximizeDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-enable-button\");\n attributes = {};\n attributes.class = \"wrs_modal_minimize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"minimize\");\n this.minimizeDiv = Util.createElement(\"a\", attributes);\n this.minimizeDiv.setAttribute(\"role\", \"button\");\n this.minimizeDiv.setAttribute(\"tabindex\", 1);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identify the element in automated testing\n this.minimizeDiv.setAttribute(\"data-testid\", \"mtcteditor-minimize-button\");\n attributes = {};\n attributes.class = \"wrs_modal_dialogContainer\";\n attributes.id = this.getElementId(attributes.class);\n attributes.role = \"dialog\";\n this.container = Util.createElement(\"div\", attributes);\n this.container.setAttribute(\"aria-labeledby\", \"wrs_modal_title[0]\");\n attributes = {};\n attributes.class = \"wrs_modal_wrapper\";\n attributes.id = this.getElementId(attributes.class);\n this.wrapper = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_content_container\";\n attributes.id = this.getElementId(attributes.class);\n this.contentContainer = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_controls\";\n attributes.id = this.getElementId(attributes.class);\n this.controls = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_buttons_container\";\n attributes.id = this.getElementId(attributes.class);\n this.buttonContainer = Util.createElement(\"div\", attributes);\n // Buttons: all button must be created using createSubmitButton method.\n this.submitButton = this.createSubmitButton({\n id: this.getElementId(\"wrs_modal_button_accept\"),\n class: \"wrs_modal_button_accept\",\n innerHTML: StringManager.get(\"accept\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-insert-button\"\n }, this.submitAction.bind(this));\n this.cancelButton = this.createSubmitButton({\n id: this.getElementId(\"wrs_modal_button_cancel\"),\n class: \"wrs_modal_button_cancel\",\n innerHTML: StringManager.get(\"cancel\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cancel-button\"\n }, this.cancelAction.bind(this));\n this.contentManager = null;\n // Overlay popup.\n const popupStrings = {\n cancelString: StringManager.get(\"cancel\"),\n submitString: StringManager.get(\"close\"),\n message: StringManager.get(\"close_modal_warning\")\n };\n const callbacks = {\n closeCallback: ()=>{\n this.close(\"mtc_close\");\n },\n cancelCallback: ()=>{\n this.focus();\n }\n };\n const popupupProperties = {\n overlayElement: this.container,\n callbacks,\n strings: popupStrings\n };\n this.popup = new PopUpMessage(popupupProperties);\n /**\n * Indicates if directionality of the modal dialog is RTL. false by default.\n * @type {Boolean}\n */ this.rtl = false;\n if (\"rtl\" in this.attributes) {\n this.rtl = this.attributes.rtl;\n }\n // Event handlers need modal instance context.\n this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this);\n this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this);\n }\n /**\n * This method sets an ContentManager instance to ModalDialog. ContentManager\n * manages the logic of ModalDialog content: submit, update, close and changes.\n * @param {ContentManager} contentManager - ContentManager instance.\n */ setContentManager(contentManager) {\n this.contentManager = contentManager;\n }\n /**\n * Returns the modal contentElement object.\n * @returns {ContentManager} the instance of the ContentManager class.\n */ getContentManager() {\n return this.contentManager;\n }\n /**\n * This method is called when the modal object has been submitted. Calls\n * contentElement submitAction method - if exists - and closes the modal\n * object. No logic about the content should be placed here,\n * contentElement.submitAction is the responsible of the content logic.\n */ async submitAction() {\n if (typeof this.contentManager.submitAction !== \"undefined\") {\n this.contentManager.submitAction();\n }\n await this.close(\"mtc_insert\");\n }\n /**\n * Performs the cancel action.\n * If there are no changes in the content, it closes the modal.\n * Otherwise, it shows a pop-up message to confirm the cancel action.\n * @returns {Promise} - A promise that resolves when the modal is closed.\n */ async cancelAction() {\n if (typeof this.contentManager.hasChanges === \"undefined\" || !this.contentManager.hasChanges()) {\n IntegrationModel.setActionsOnCancelButtons();\n await this.close(\"mtc_close\");\n } else {\n this.showPopUpMessage();\n }\n }\n /**\n * Returns a button element.\n * @param {Object} properties - Input button properties.\n * @param {String} properties.class - Input button class.\n * @param {String} properties.innerHTML - Input button innerHTML.\n * @param {Object} callback - Callback function associated to click event.\n * @returns {HTMLButtonElement} The button element.\n *\n */ // eslint-disable-next-line class-methods-use-this\n createSubmitButton(properties, callback) {\n class SubmitButton {\n constructor(){\n this.element = document.createElement(\"button\");\n this.element.id = properties.id;\n this.element.className = properties.class;\n this.element.innerHTML = properties.innerHTML;\n this.element.dataset.testid = properties[\"data-testid\"];\n Util.addEvent(this.element, \"click\", callback);\n }\n getElement() {\n return this.element;\n }\n }\n return new SubmitButton(properties, callback).getElement();\n }\n /**\n * Creates the modal window object inserting a contentElement object.\n */ create() {\n /* Modal Window Structure\n _____________________________________________________________________________________\n |wrs_modal_dialog_Container |\n | _________________________________________________________________________________ |\n | |title_bar minimize_button stack_button close_button | |\n | |_______________________________________________________________________________| |\n | |wrapper | |\n | | _____________________________________________________________________________ | |\n | | |content | | |\n | | | | | |\n | | | | | |\n | | |___________________________________________________________________________| | |\n | | _____________________________________________________________________________ | |\n | | |controls | | |\n | | | ___________________________________ | | |\n | | | |buttonContainer | | | |\n | | | | _______________________________ | | | |\n | | | | |button_accept | button_cancel| | | | |\n | | | |_|_____________ |______________|_| | | |\n | | |___________________________________________________________________________| | |\n | |_______________________________________________________________________________| |\n |___________________________________________________________________________________| */ this.titleBar.appendChild(this.closeDiv);\n this.titleBar.appendChild(this.stackDiv);\n this.titleBar.appendChild(this.maximizeDiv);\n this.titleBar.appendChild(this.minimizeDiv);\n this.titleBar.appendChild(this.title);\n if (this.deviceProperties.isDesktop) {\n this.container.appendChild(this.titleBar);\n }\n this.wrapper.appendChild(this.contentContainer);\n this.wrapper.appendChild(this.controls);\n this.controls.appendChild(this.buttonContainer);\n this.buttonContainer.appendChild(this.submitButton);\n this.buttonContainer.appendChild(this.cancelButton);\n this.container.appendChild(this.wrapper);\n // Check if browser has scrollBar before modal has modified.\n this.recalculateScrollBar();\n document.body.appendChild(this.container);\n document.body.appendChild(this.overlay);\n if (this.deviceProperties.isDesktop) {\n // Desktop.\n this.createModalWindowDesktop();\n this.createResizeButtons();\n this.addListeners();\n // Maximize window only when the configuration is set and the device is not iOS or Android.\n if (Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n } else if (this.deviceProperties.isAndroid) {\n this.createModalWindowAndroid();\n } else if (this.deviceProperties.isIOS) {\n this.createModalWindowIos();\n }\n if (this.contentManager != null) {\n this.contentManager.insert(this);\n }\n this.properties.open = true;\n this.properties.created = true;\n // Checks language directionality.\n if (this.isRTL()) {\n this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`;\n this.container.className += \" wrs_modal_rtl\";\n }\n }\n /**\n * Creates a button in the modal object to resize it.\n */ createResizeButtons() {\n // This is a definition of Resize Button Bottom-Right.\n this.resizerBR = document.createElement(\"div\");\n this.resizerBR.className = \"wrs_bottom_right_resizer\";\n this.resizerBR.innerHTML = \"◢\";\n // To identifiy the element in automated testing\n this.resizerBR.dataset.testid = \"mtcteditor-resize-button-right\";\n // This is a definition of Resize Button Top-Left.\n this.resizerTL = document.createElement(\"div\");\n this.resizerTL.className = \"wrs_bottom_left_resizer\";\n // To identifiy the element in automated testing\n this.resizerTL.dataset.testid = \"mtcteditor-resize-button-left\";\n // Append resize buttons to modal.\n this.container.appendChild(this.resizerBR);\n this.titleBar.appendChild(this.resizerTL);\n // Add events to resize on click and drag.\n Util.addEvent(this.resizerBR, \"mousedown\", this.activateResizeStateBR.bind(this));\n Util.addEvent(this.resizerTL, \"mousedown\", this.activateResizeStateTL.bind(this));\n }\n /**\n * Initialize variables for Bottom-Right resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */ activateResizeStateBR(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, false);\n }\n /**\n * Initialize variables for Top-Left resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */ activateResizeStateTL(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, true);\n }\n /**\n * Common method to initialize variables at resize.\n * @param {MouseEvent} mouseEvent - Mouse event.\n */ initializeResizeProperties(mouseEvent, leftOption) {\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n this.resizeDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y\n };\n // Save Initial state of modal to compare on drag and obtain the difference.\n this.initialWidth = parseInt(this.container.style.width, 10);\n this.initialHeight = parseInt(this.container.style.height, 10);\n if (!leftOption) {\n this.initialRight = parseInt(this.container.style.right, 10);\n this.initialBottom = parseInt(this.container.style.bottom, 10);\n } else {\n this.leftScale = true;\n }\n if (!this.initialRight) {\n this.initialRight = 0;\n }\n if (!this.initialBottom) {\n this.initialBottom = 0;\n }\n // Disable mouse events on editor when we start to drag modal.\n document.body.style[\"user-select\"] = \"none\";\n }\n /**\n * This method opens the modal window, restoring the previous state, position and metrics,\n * if exists. By default the modal object opens in stack mode.\n */ open() {\n // Removing close class.\n this.removeClass(\"wrs_closed\");\n // Hiding keyboard for mobile devices.\n const { isIOS } = this.deviceProperties;\n const { isAndroid } = this.deviceProperties;\n const { isMobile } = this.deviceProperties;\n if (isIOS || isAndroid || isMobile) {\n // Restore scale to 1.\n this.restoreWebsiteScale();\n this.lockWebsiteScroll();\n // Due to editor wait we need to wait until editor focus.\n setTimeout(()=>{\n this.hideKeyboard();\n }, 400);\n }\n // New modal window. He need to create the whole object.\n if (!this.properties.created) {\n this.create();\n } else {\n // Previous state closed. Open method can be called even the previous state is open,\n // for example updating the content of the modal object.\n if (!this.properties.open) {\n this.properties.open = true;\n // Restoring the previous open state: if the modal object has been closed\n // re-open it should preserve the state and the metrics.\n if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) {\n this.restoreState();\n }\n }\n // Maximize window only when the configuration is set and the device is not iOs or Android.\n if (this.deviceProperties.isDesktop && Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n // In iOS we need to recalculate the size of the modal object because\n // iOS keyboard is a float div which can overlay the modal object.\n if (this.deviceProperties.isIOS) {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`${100 + this.iosMeasureUnit}`);\n }\n }\n if (!ContentManager.isEditorLoaded()) {\n const listener = Listeners.newListener(\"onLoad\", ()=>{\n this.contentManager.onOpen(this);\n });\n this.contentManager.addListener(listener);\n } else {\n this.contentManager.onOpen(this);\n }\n }\n /**\n * Closes the modal.\n * Removes specific CSS classes, saves modal properties, unlocks website scroll,\n * sets the 'open' property to false, and triggers the 'onModalClose' event.\n * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger.\n * @returns {Promise} A promise that resolves when the modal is closed.\n */ async close(trigger) {\n this.removeClass(\"wrs_maximized\");\n this.removeClass(\"wrs_minimized\");\n this.removeClass(\"wrs_stack\");\n this.addClass(\"wrs_closed\");\n this.saveModalProperties();\n this.unlockWebsiteScroll();\n this.properties.open = false;\n if (trigger) {\n try {\n await Telemeter.telemeter.track(\"CLOSED_MTCT_EDITOR\", {\n toolbar: this.contentManager.toolbar,\n trigger: trigger\n });\n } catch (error) {\n console.error(\"Error tracking CLOSED_MTCT_EDITOR\", error);\n }\n }\n Core.globalListeners.fire(\"onModalClose\", {});\n }\n /**\n * Closes modal window and destroys the object.\n */ destroy() {\n // Close modal window.\n this.close();\n // Remove listeners and destroy the object.\n this.removeListeners();\n this.overlay.remove();\n this.container.remove();\n // Reset properties to allow open again.\n this.properties.created = false;\n }\n /**\n * Sets the website scale to one.\n */ // eslint-disable-next-line class-methods-use-this\n restoreWebsiteScale() {\n let viewportmeta = document.querySelector(\"meta[name=viewport]\");\n // Let the equal symbols in order to search and make meta's final content.\n const contentAttrsToUpdate = [\n \"initial-scale=\",\n \"minimum-scale=\",\n \"maximum-scale=\"\n ];\n const contentAttrsValuesToUpdate = [\n \"1.0\",\n \"1.0\",\n \"1.0\"\n ];\n const setMetaAttrFunc = (viewportelement, contentAttrs)=>{\n const contentAttr = viewportelement.getAttribute(\"content\");\n // If it exists, we need to maintain old values and put our values.\n if (contentAttr) {\n const attrArray = contentAttr.split(\",\");\n let finalContentMeta = \"\";\n const oldAttrs = [];\n for(let i = 0; i < attrArray.length; i += 1){\n let isAttrToUpdate = false;\n let j = 0;\n while(!isAttrToUpdate && j < contentAttrs.length){\n if (attrArray[i].indexOf(contentAttrs[j])) {\n isAttrToUpdate = true;\n }\n j += 1;\n }\n if (!isAttrToUpdate) {\n oldAttrs.push(attrArray[i]);\n }\n }\n for(let i = 0; i < contentAttrs.length; i += 1){\n const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i];\n finalContentMeta += i === 0 ? attr : `,${attr}`;\n }\n for(let i = 0; i < oldAttrs.length; i += 1){\n finalContentMeta += `,${oldAttrs[i]}`;\n }\n viewportelement.setAttribute(\"content\", finalContentMeta);\n // It needs to set to empty because setAttribute refresh only when attribute is different.\n viewportelement.setAttribute(\"content\", \"\");\n viewportelement.setAttribute(\"content\", contentAttr);\n } else {\n viewportelement.setAttribute(\"content\", \"initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\");\n viewportelement.removeAttribute(\"content\");\n }\n };\n if (!viewportmeta) {\n viewportmeta = document.createElement(\"meta\");\n document.getElementsByTagName(\"head\")[0].appendChild(viewportmeta);\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate);\n viewportmeta.remove();\n } else {\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate);\n }\n }\n /**\n * Locks website scroll for mobile devices.\n */ lockWebsiteScroll() {\n this.websiteBeforeLockParameters = {\n bodyStylePosition: document.body.style.position ? document.body.style.position : \"\",\n bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : \"\",\n htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : \"\",\n windowScrollX: window.scrollX,\n windowScrollY: window.scrollY\n };\n }\n /**\n * Unlocks website scroll for mobile devices.\n */ unlockWebsiteScroll() {\n if (this.websiteBeforeLockParameters) {\n document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition;\n document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow;\n document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow;\n const { windowScrollX } = this.websiteBeforeLockParameters;\n const { windowScrollY } = this.websiteBeforeLockParameters;\n window.scrollTo(windowScrollX, windowScrollY);\n this.websiteBeforeLockParameters = null;\n }\n }\n /**\n * Util function to known if browser is IE11.\n * @returns {Boolean} true if the browser is IE11. false otherwise.\n */ // eslint-disable-next-line class-methods-use-this\n isIE11() {\n if (navigator.userAgent.search(\"Msie/\") >= 0 || navigator.userAgent.search(\"Trident/\") >= 0 || navigator.userAgent.search(\"Edge/\") >= 0) {\n return true;\n }\n return false;\n }\n /**\n * Returns if the current language type is RTL.\n * @return {Boolean} true if current language is RTL. false otherwise.\n */ isRTL() {\n if (this.attributes.language === \"ar\" || this.attributes.language === \"he\") {\n return true;\n }\n return this.rtl;\n }\n /**\n * Adds a class to all modal ModalDialog DOM elements.\n * @param {String} className - Class name.\n */ addClass(className) {\n Util.addClass(this.overlay, className);\n Util.addClass(this.titleBar, className);\n Util.addClass(this.overlay, className);\n Util.addClass(this.container, className);\n Util.addClass(this.contentContainer, className);\n Util.addClass(this.stackDiv, className);\n Util.addClass(this.minimizeDiv, className);\n Util.addClass(this.maximizeDiv, className);\n Util.addClass(this.wrapper, className);\n }\n /**\n * Remove a class from all modal DOM elements.\n * @param {String} className - Class name.\n */ removeClass(className) {\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.titleBar, className);\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.container, className);\n Util.removeClass(this.contentContainer, className);\n Util.removeClass(this.stackDiv, className);\n Util.removeClass(this.minimizeDiv, className);\n Util.removeClass(this.maximizeDiv, className);\n Util.removeClass(this.wrapper, className);\n }\n /**\n * Create modal dialog for desktop.\n */ createModalWindowDesktop() {\n this.addClass(\"wrs_modal_desktop\");\n this.stack();\n }\n /**\n * Create modal dialog for non android devices.\n */ createModalWindowAndroid() {\n this.addClass(\"wrs_modal_android\");\n window.addEventListener(\"resize\", this.orientationChangeAndroidSoftkeyboard.bind(this));\n }\n /**\n * Create modal dialog for iOS devices.\n */ createModalWindowIos() {\n this.addClass(\"wrs_modal_ios\");\n // Refresh the size when the orientation is changed.\n window.addEventListener(\"resize\", this.orientationChangeIosSoftkeyboard.bind(this));\n }\n /**\n * Restore previous state, position and size of previous stacked modal dialog.\n */ restoreState() {\n if (this.properties.state === \"maximized\") {\n // Reset states for prevent return to stack state.\n this.maximize();\n } else if (this.properties.state === \"minimized\") {\n // Reset states for prevent return to stack state.\n this.properties.state = this.properties.previousState;\n this.properties.previousState = \"\";\n this.minimize();\n } else {\n this.stack();\n }\n }\n /**\n * Stacks the modal object.\n */ stack() {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"stack\";\n this.removeClass(\"wrs_maximized\");\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n this.addClass(\"wrs_stack\");\n // Change maximize/minimize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n this.restoreModalProperties();\n if (typeof this.resizerBR !== \"undefined\" && typeof this.resizerTL !== \"undefined\") {\n this.setResizeButtonsVisibility();\n }\n // Need recalculate position of actual modal because window can was changed in fullscreenmode.\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n this.focus();\n }\n /**\n * Minimizes the modal object.\n */ minimize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n this.title.style.cursor = \"pointer\";\n if (this.properties.state === \"minimized\" && this.properties.previousState === \"stack\") {\n this.stack();\n } else if (this.properties.state === \"minimized\" && this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n // Setting css to prevent important tag into css style.\n this.container.style.height = \"30px\";\n this.container.style.width = \"250px\";\n this.container.style.bottom = \"0px\";\n this.container.style.right = \"10px\";\n this.removeListeners();\n this.properties.previousState = this.properties.state;\n this.properties.state = \"minimized\";\n this.setResizeButtonsVisibility();\n this.minimizeDiv.title = StringManager.get(\"maximize\");\n if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.removeClass(\"wrs_stack\");\n } else {\n this.removeClass(\"wrs_maximized\");\n }\n this.addClass(\"wrs_minimized\");\n // Change minimize icon to maximize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n }\n }\n /**\n * Maximizes the modal object.\n */ maximize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n if (this.properties.state !== \"maximized\") {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"maximized\";\n }\n // Don't permit resize on maximize mode.\n this.setResizeButtonsVisibility();\n if (Util.containsClass(this.overlay, \"wrs_minimized\")) {\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n } else if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.container.style.left = null;\n this.container.style.top = null;\n this.removeClass(\"wrs_stack\");\n }\n this.addClass(\"wrs_maximized\");\n // Change maximize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // Set size to 80% screen with a max size.\n this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10));\n if (this.container.clientHeight > 700) {\n this.container.style.height = \"700px\";\n }\n if (this.container.clientWidth > 1200) {\n this.container.style.width = \"1200px\";\n }\n // Setting modal position in center on screen.\n const { innerHeight } = window;\n const { innerWidth } = window;\n const { offsetHeight } = this.container;\n const { offsetWidth } = this.container;\n const bottom = innerHeight / 2 - offsetHeight / 2;\n const right = innerWidth / 2 - offsetWidth / 2;\n this.setPosition(bottom, right);\n this.recalculateScale();\n this.recalculatePosition();\n this.recalculateSize();\n this.focus();\n }\n /**\n * Expand again the modal object from a minimized state.\n */ reExpand() {\n if (this.properties.state === \"minimized\") {\n if (this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n this.stack();\n }\n this.title.style.cursor = \"\";\n }\n }\n /**\n * Sets modal size.\n * @param {Number} height - Height of the ModalDialog\n * @param {Number} width - Width of the ModalDialog.\n */ setSize(height, width) {\n this.container.style.height = `${height}px`;\n this.container.style.width = `${width}px`;\n this.recalculateSize();\n }\n /**\n * Sets modal position using bottom and right style attributes.\n * @param {number} bottom - bottom attribute.\n * @param {number} right - right attribute.\n */ setPosition(bottom, right) {\n this.container.style.bottom = `${bottom}px`;\n this.container.style.right = `${right}px`;\n }\n /**\n * Saves position and size parameters of and open ModalDialog. This attributes\n * are needed to restore it on re-open.\n */ saveModalProperties() {\n // Saving values of modal only when modal is in stack state.\n if (this.properties.state === \"stack\") {\n this.properties.position.bottom = parseInt(this.container.style.bottom, 10);\n this.properties.position.right = parseInt(this.container.style.right, 10);\n this.properties.size.width = parseInt(this.container.style.width, 10);\n this.properties.size.height = parseInt(this.container.style.height, 10);\n }\n }\n /**\n * Restore ModalDialog position and size parameters.\n */ restoreModalProperties() {\n if (this.properties.state === \"stack\") {\n // Restoring Bottom and Right values from last modal.\n this.setPosition(this.properties.position.bottom, this.properties.position.right);\n // Restoring Height and Left values from last modal.\n this.setSize(this.properties.size.height, this.properties.size.width);\n }\n }\n /**\n * Sets the modal dialog initial size.\n */ recalculateSize() {\n this.wrapper.style.width = `${this.container.clientWidth - 12}px`;\n this.wrapper.style.height = `${this.container.clientHeight - 38}px`;\n this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`;\n }\n /**\n * Enable or disable visibility of resize buttons in modal window depend on state.\n */ setResizeButtonsVisibility() {\n if (this.properties.state === \"stack\") {\n this.resizerTL.style.visibility = \"visible\";\n this.resizerBR.style.visibility = \"visible\";\n } else {\n this.resizerTL.style.visibility = \"hidden\";\n this.resizerBR.style.visibility = \"hidden\";\n }\n }\n /**\n * Makes an object draggable adding mouse and touch events.\n */ addListeners() {\n // Button events (maximize, minimize, stack and close).\n this.maximizeDiv.addEventListener(\"click\", this.maximize.bind(this), true);\n this.stackDiv.addEventListener(\"click\", this.stack.bind(this), true);\n this.minimizeDiv.addEventListener(\"click\", this.minimize.bind(this), true);\n this.closeDiv.addEventListener(\"click\", this.cancelAction.bind(this));\n this.maximizeDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n }\n }, true);\n this.stackDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n }, true);\n this.minimizeDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n }, true);\n this.closeDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n });\n this.title.addEventListener(\"click\", this.reExpand.bind(this));\n // Overlay events (close).\n this.overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n // Mouse events.\n Util.addEvent(window, \"mousedown\", this.startDrag.bind(this));\n Util.addEvent(window, \"mouseup\", this.stopDrag.bind(this));\n Util.addEvent(window, \"mousemove\", this.drag.bind(this));\n Util.addEvent(window, \"resize\", this.onWindowResize.bind(this));\n // Key events.\n Util.addEvent(window, \"keydown\", this.onKeyDown.bind(this));\n }\n /**\n * Removes draggable events from an object.\n */ removeListeners() {\n // Mouse events.\n Util.removeEvent(window, \"mousedown\", this.startDrag);\n Util.removeEvent(window, \"mouseup\", this.stopDrag);\n Util.removeEvent(window, \"mousemove\", this.drag);\n Util.removeEvent(window, \"resize\", this.onWindowResize);\n // Key events.\n Util.removeEvent(window, \"keydown\", this.onKeyDown);\n }\n /**\n * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists)\n * @param {MouseEvent} mouseEvent - Mouse event.\n * @return {Object} With the X and Y coordinates.\n */ // eslint-disable-next-line class-methods-use-this\n eventClient(mouseEvent) {\n if (typeof mouseEvent.clientX === \"undefined\" && mouseEvent.changedTouches) {\n const client = {\n X: mouseEvent.changedTouches[0].clientX,\n Y: mouseEvent.changedTouches[0].clientY\n };\n return client;\n }\n const client = {\n X: mouseEvent.clientX,\n Y: mouseEvent.clientY\n };\n return client;\n }\n /**\n * Start drag function: set the object dragDataObject with the draggable\n * object offsets coordinates.\n * when drag starts (on touchstart or mousedown events).\n * @param {MouseEvent} mouseEvent - Touchstart or mousedown event.\n */ startDrag(mouseEvent) {\n if (this.properties.state === \"minimized\") {\n return;\n }\n if (mouseEvent.target === this.title) {\n if (typeof this.dragDataObject === \"undefined\" || this.dragDataObject === null) {\n // Save first click mouse point on screen.\n this.dragDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y\n };\n // Reset last drag position when start drag.\n this.lastDrag = {\n x: \"0px\",\n y: \"0px\"\n };\n // Init right and bottom values for window modal if it isn't exist.\n if (this.container.style.right === \"\") {\n this.container.style.right = \"0px\";\n }\n if (this.container.style.bottom === \"\") {\n this.container.style.bottom = \"0px\";\n }\n // Needed for IE11 for apply disabled mouse events on editor because\n // internet explorer needs a dynamic object to apply this property.\n if (this.isIE11()) ;\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n // Obtain screen limits for prevent overflow.\n this.limitWindow = this.getLimitWindow();\n }\n }\n }\n /**\n * Updates dragDataObject with the draggable object coordinates when\n * the draggable object is being moved.\n * @param {MouseEvent} mouseEvent - The mouse event.\n */ drag(mouseEvent) {\n if (this.dragDataObject) {\n mouseEvent.preventDefault();\n // Calculate max and min between actual mouse position and limit of screeen.\n // It restric the movement of modal into window.\n let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y);\n limitY = Math.max(this.limitWindow.maxPointer.y, limitY);\n let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x);\n limitX = Math.max(this.limitWindow.maxPointer.x, limitX);\n // Subtract limit with first position to obtain relative pixels increment\n // to the anchor point.\n const dragX = `${limitX - this.dragDataObject.x}px`;\n const dragY = `${limitY - this.dragDataObject.y}px`;\n // Save last valid position of modal before window overflow.\n this.lastDrag = {\n x: dragX,\n y: dragY\n };\n // This move modal with hardware acceleration.\n this.container.style.transform = `translate3d(${dragX},${dragY},0)`;\n }\n if (this.resizeDataObject) {\n const { innerWidth } = window;\n const { innerHeight } = window;\n let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7);\n let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7);\n if (limitX < 0) {\n limitX = 0;\n }\n if (limitY < 0) {\n limitY = 0;\n }\n let scaleMultiplier;\n if (this.leftScale) {\n scaleMultiplier = -1;\n } else {\n scaleMultiplier = 1;\n }\n this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`;\n this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`;\n if (!this.leftScale) {\n if (this.resizeDataObject.x - limitX - this.initialWidth < -580) {\n this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`;\n } else {\n this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`;\n this.container.style.width = \"580px\";\n }\n if (this.resizeDataObject.y - limitY < this.initialHeight - 338) {\n this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`;\n } else {\n this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`;\n this.container.style.height = \"338px\";\n }\n }\n this.recalculateScale();\n this.recalculatePosition();\n }\n }\n /**\n * Returns the boundaries of actual window to limit modal movement.\n * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen.\n */ getLimitWindow() {\n // Obtain dimensions of window page.\n const maxWidth = window.innerWidth;\n const maxHeight = window.innerHeight;\n // Calculate relative position of mouse point into window.\n const { offsetHeight } = this.container;\n const contStyleBottom = parseInt(this.container.style.bottom, 10);\n const contStyleRight = parseInt(this.container.style.right, 10);\n const { pageXOffset } = window;\n const dragY = this.dragDataObject.y;\n const dragX = this.dragDataObject.x;\n const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset));\n const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight;\n // Calculate limits with sizes of window, modal and mouse position.\n const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY;\n const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY);\n const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth;\n const maxPointerX = this.container.offsetWidth - offSetToolbarX;\n const minPointer = {\n x: minPointerX,\n y: minPointerY\n };\n const maxPointer = {\n x: maxPointerX,\n y: maxPointerY\n };\n return {\n minPointer,\n maxPointer\n };\n }\n /**\n * Returns the scrollbar width size of browser\n * @returns {Number} The scrollbar width.\n */ // eslint-disable-next-line class-methods-use-this\n getScrollBarWidth() {\n // Create a paragraph with full width of page.\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n // Create a hidden div to compare sizes.\n const outer = document.createElement(\"div\");\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const widthOuter = inner.offsetWidth;\n // Change type overflow of paragraph for measure scrollbar.\n outer.style.overflow = \"scroll\";\n let widthInner = inner.offsetWidth;\n // If measure is the same, we compare with internal div.\n if (widthOuter === widthInner) {\n widthInner = outer.clientWidth;\n }\n document.body.removeChild(outer);\n return widthOuter - widthInner;\n }\n /**\n * Set the dragDataObject to null.\n */ stopDrag() {\n // Due to we have multiple events that call this function, we need only to execute\n // the next modifiers one time,\n // when the user stops to drag and dragDataObject is not null (the object to drag is attached).\n if (this.dragDataObject || this.resizeDataObject) {\n // If modal doesn't change, it's not necessary to set position with interpolation.\n this.container.style.transform = \"\";\n if (this.dragDataObject) {\n this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`;\n this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`;\n }\n // We make focus on editor after drag modal windows to prevent lose focus.\n this.focus();\n // Restore mouse events on iframe.\n // this.iframe.style['pointer-events'] = 'auto';\n document.body.style[\"user-select\"] = \"\";\n // Restore static state of iframe if we use Internet Explorer.\n if (this.isIE11()) ;\n // Active text select event.\n Util.removeClass(document.body, \"wrs_noselect\");\n Util.removeClass(this.overlay, \"wrs_overlay_active\");\n }\n this.dragDataObject = null;\n this.resizeDataObject = null;\n this.initialWidth = null;\n this.leftScale = null;\n }\n /**\n * Recalculates scale for modal when resize browser window.\n */ onWindowResize() {\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n }\n /**\n * Triggers keyboard events:\n * - Tab key tab to go to submit button.\n * - Esc key to close the modal dialog.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */ onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Popupmessage is not oppened.\n if (this.popup.overlayWrapper.style.display !== \"block\") {\n // Code to detect Esc event\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n if (this.properties.open) {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.cancelButton) {\n this.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.submitButton) {\n this.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n }\n } else {\n // Popupmessage oppened.\n this.popup.onKeyDown(keyboardEvent);\n }\n }\n }\n /**\n * Recalculating position for modal dialog when the browser is resized.\n */ recalculatePosition() {\n this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`;\n if (parseInt(this.container.style.right, 10) < 0) {\n this.container.style.right = \"0px\";\n }\n this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`;\n if (parseInt(this.container.style.bottom, 10) < 0) {\n this.container.style.bottom = \"0px\";\n }\n }\n /**\n * Recalculating scale for modal when the browser is resized.\n */ recalculateScale() {\n let sizeModified = false;\n if (parseInt(this.container.style.width, 10) > 580) {\n this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`;\n sizeModified = true;\n } else {\n this.container.style.width = \"580px\";\n sizeModified = true;\n }\n if (parseInt(this.container.style.height, 10) > 338) {\n this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`;\n sizeModified = true;\n } else {\n this.container.style.height = \"338px\";\n sizeModified = true;\n }\n if (sizeModified) {\n this.recalculateSize();\n }\n }\n /**\n * Recalculating width of browser scroll bar.\n */ recalculateScrollBar() {\n this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth;\n if (this.hasScrollBar) {\n this.scrollbarWidth = this.getScrollBarWidth();\n } else {\n this.scrollbarWidth = 0;\n }\n }\n /**\n * Hide soft keyboards on iOS devices.\n */ // eslint-disable-next-line class-methods-use-this\n hideKeyboard() {\n // iOS keyboard can't be detected or hide directly from JavaScript.\n // So, this method simulates that user focus a text input and blur\n // the selection.\n const inputField = document.createElement(\"input\");\n this.container.appendChild(inputField);\n inputField.focus();\n inputField.blur();\n // Is removed to not see it.\n inputField.remove();\n }\n /**\n * Focus to contentManager object.\n */ focus() {\n if (this.contentManager != null && typeof this.contentManager.onFocus !== \"undefined\") {\n this.contentManager.onFocus();\n }\n }\n /**\n * Returns true when the device is on portrait mode.\n */ // eslint-disable-next-line class-methods-use-this\n portraitMode() {\n return window.innerHeight > window.innerWidth;\n }\n /**\n * Event handler that change container size when IOS soft keyboard is opened.\n */ handleOpenedIosSoftkeyboard() {\n if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n }\n this.iosSoftkeyboardOpened = true;\n }\n /**\n * Event handler that change container size when IOS soft keyboard is closed.\n */ handleClosedIosSoftkeyboard() {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n /**\n * Change container sizes when orientation is changed on iOS.\n */ orientationChangeIosSoftkeyboard() {\n if (this.iosSoftkeyboardOpened) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n } else {\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n }\n /**\n * Change container sizes when orientation is changed on Android.\n */ orientationChangeAndroidSoftkeyboard() {\n this.setContainerHeight(\"100%\");\n }\n /**\n * Set iframe container height.\n * @param {Number} height - New height.\n */ setContainerHeight(height) {\n this.iosDivHeight = height;\n this.wrapper.style.height = height;\n }\n /**\n * Check content of editor before close action.\n */ showPopUpMessage() {\n if (this.properties.state === \"minimized\") {\n this.stack();\n }\n this.popup.show();\n }\n /**\n * Sets the title of the modal dialog.\n * @param {String} title - Modal dialog title.\n */ setTitle(title) {\n this.title.innerHTML = title;\n }\n /**\n * Returns the id of an element, adding the instance number to\n * the element class name:\n * className --> className[idNumber]\n * @param {String} className - The element class name.\n * @returns {String} A string appending the instance id to the className.\n */ getElementId(className) {\n return `${className}[${this.instanceId}]`;\n }\n}\n\n// Polyfills.\n/*! http://mths.be/codepointat v0.1.0 by @mathias */ if (!String.prototype.codePointAt) {\n (function() {\n var codePointAt = function(position) {\n if (this == null) {\n throw TypeError();\n }\n var string = String(this);\n var size = string.length;\n // `ToInteger`\n var index = position ? Number(position) : 0;\n if (index != index) {\n // better `isNaN`\n index = 0;\n }\n // Account for out-of-bounds indices:\n if (index < 0 || index >= size) {\n return undefined;\n }\n // Get the first code unit\n var first = string.charCodeAt(index);\n var second;\n if (// check if it’s the start of a surrogate pair\n first >= 0xd800 && first <= 0xdbff && // high surrogate\n size > index + 1 // there is a next code unit\n ) {\n second = string.charCodeAt(index + 1);\n if (second >= 0xdc00 && second <= 0xdfff) {\n // low surrogate\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;\n }\n }\n return first;\n };\n if (Object.defineProperty) {\n Object.defineProperty(String.prototype, \"codePointAt\", {\n value: codePointAt,\n configurable: true,\n writable: true\n });\n } else {\n String.prototype.codePointAt = codePointAt;\n }\n })();\n}\n// Object.assign polyfill.\nif (typeof Object.assign != \"function\") {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var to = Object(target);\n for(var index = 1; index < arguments.length; index++){\n var nextSource = arguments[index];\n if (nextSource != null) {\n // Skip over if undefined or null\n for(var nextKey in nextSource){\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nif (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, \"includes\", {\n value: function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" s null or is not defined');\n }\n // 1. Let O be ? ToObject(this value).\n var o = Object(this);\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n // 3. if len is 0, return false.\n if (len === 0) {\n return false;\n }\n // 4. Let n be ? ToInteger(fromIndex).\n // (if fromIndex is undefinedo, this step generates the value 0.)\n var n = fromIndex | 0;\n // 5. if n ≥ 0, then\n // a. Let k be n.\n // 6. Else n < 0,\n // a. Let k be len + n.\n // b. if k < 0, let k be 0.\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n function sameValueZero(x, y) {\n return x === y || typeof x === \"number\" && typeof y === \"number\" && isNaN(x) && isNaN(y);\n }\n // 7. Repeat while k < len\n while(k < len){\n // a. let element k be the result of ? Get(O, ! ToString(k)).\n // b. if SameValueZero(searchElement, elementK) is true, return true.\n if (sameValueZero(o[k], searchElement)) {\n return true;\n }\n // c. Increase k by 1.\n k++;\n }\n // 8. Return false\n return false;\n }\n });\n}\nif (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (search instanceof RegExp) {\n throw TypeError(\"first argument must not be a RegExp\");\n }\n if (start === undefined) {\n start = 0;\n }\n return this.indexOf(search, start) !== -1;\n };\n}\nif (!String.prototype.startsWith) {\n Object.defineProperty(String.prototype, \"startsWith\", {\n value: function(search, rawPos) {\n var pos = rawPos > 0 ? rawPos | 0 : 0;\n return this.substring(pos, pos + search.length) === search;\n }\n });\n}\n\n/**\n * @typedef {Object} CoreProperties\n * @property {ServiceProviderProperties} serviceProviderProperties\n * - The ServiceProvider class properties. *\n */ class Core {\n /**\n * @classdesc\n * This class represents MathType integration Core, managing the following:\n * - Integration initialization.\n * - Event managing.\n * - Insertion of formulas into the edit area.\n * ```js\n * let core = new Core();\n * core.addListener(listener);\n * core.language = 'en';\n *\n * // Initializing Core class.\n * core.init(configurationService);\n * ```\n * @constructs\n * Core constructor.\n * @param {CoreProperties}\n */ constructor(coreProperties){\n /**\n * Language. Needed for accessibility and locales. 'en' by default.\n * @type {String}\n */ this.language = \"en\";\n /**\n * Edit mode, 'images' by default. Admits the following values:\n * - images\n * - latex\n * @type {String}\n */ this.editMode = \"images\";\n /**\n * Modal dialog instance.\n * @type {ModalDialog}\n */ this.modalDialog = null;\n /**\n * The instance of {@link CustomEditors}. By default\n * the only custom editor is the Chemistry editor.\n * @type {CustomEditors}\n */ this.customEditors = new CustomEditors();\n /**\n * Chemistry editor.\n * @type {CustomEditor}\n */ const chemEditorParams = {\n name: \"Chemistry\",\n toolbar: \"chemistry\",\n icon: \"chem.png\",\n confVariable: \"chemEnabled\",\n title: \"ChemType\",\n tooltip: \"Insert a chemistry formula - ChemType\"\n };\n this.customEditors.addEditor(\"chemistry\", chemEditorParams);\n /**\n * Environment properties. This object contains data about the integration platform.\n * @typedef IntegrationEnvironment\n * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor.\n * @property {String} IntegrationEnvironment.mode - Integration save mode.\n * @property {String} IntegrationEnvironment.version - Integration version.\n *\n */ /**\n * The environment properties object.\n * @type {IntegrationEnvironment}\n */ this.environment = {};\n /**\n * @typedef EditionProperties\n * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one.\n * False otherwise.\n * @property {HTMLImageElement} editionProperties.temporalImage- The image element.\n * Null if the formula is new.\n * @property {Range} editionProperties.latexRange - Tha range that contains the LaTeX formula.\n * @property {Range} editionProperties.range - The range that contains the image element.\n * @property {String} editionProperties.editMode - The edition mode. 'images' by default.\n */ /**\n * The properties of the current edition process.\n * @type {EditionProperties}\n */ this.editionProperties = {};\n this.editionProperties.isNewElement = true;\n this.editionProperties.temporalImage = null;\n this.editionProperties.latexRange = null;\n this.editionProperties.range = null;\n this.editionProperties.editionStartTime = null;\n /**\n * The {@link IntegrationModel} instance.\n * @type {IntegrationModel}\n */ this.integrationModel = null;\n /**\n * The {@link ContentManager} instance.\n * @type {ContentManager}\n */ this.contentManager = null;\n /**\n * The current browser.\n * @type {String}\n */ this.browser = (()=>{\n const ua = navigator.userAgent;\n let browser = \"none\";\n if (ua.search(\"Edge/\") >= 0) {\n browser = \"EDGE\";\n } else if (ua.search(\"Chrome/\") >= 0) {\n browser = \"CHROME\";\n } else if (ua.search(\"Trident/\") >= 0) {\n browser = \"IE\";\n } else if (ua.search(\"Firefox/\") >= 0) {\n browser = \"FIREFOX\";\n } else if (ua.search(\"Safari/\") >= 0) {\n browser = \"SAFARI\";\n }\n return browser;\n })();\n /**\n * Plugin listeners.\n * @type {Array.}\n */ this.listeners = new Listeners();\n /**\n * Service provider properties.\n * @type {ServiceProviderProperties}\n */ this.serviceProviderProperties = {};\n if (\"serviceProviderProperties\" in coreProperties) {\n this.serviceProviderProperties = coreProperties.serviceProviderProperties;\n } else {\n throw new Error(\"serviceProviderProperties property missing.\");\n }\n }\n /**\n * Static property.\n * Core listeners.\n * @private\n * @type {Listeners}\n */ static get globalListeners() {\n return Core._globalListeners;\n }\n /**\n * Static property setter.\n * Set core listeners.\n * @param {Listeners} value - The property value.\n * @ignore\n */ static set globalListeners(value) {\n Core._globalListeners = value;\n }\n /**\n * Core state. Says if it was loaded previously.\n * True when Core.init was called. Otherwise, false.\n * @private\n * @type {Boolean}\n */ static get initialized() {\n return Core._initialized;\n }\n /**\n * Core state. Says if it was loaded previously.\n * @param {Boolean} value - True to say that Core.init was called. Otherwise, false.\n * @ignore\n */ static set initialized(value) {\n Core._initialized = value;\n }\n /**\n * Sets the {@link Core.integrationModel} property.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property.\n */ setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n /**\n * Sets the {@link Core.environment} property.\n * @param {IntegrationEnvironment} integrationEnvironment -\n * The {@link IntegrationEnvironment} object.\n */ setEnvironment(integrationEnvironment) {\n if (\"editor\" in integrationEnvironment) {\n this.environment.editor = integrationEnvironment.editor;\n }\n if (\"mode\" in integrationEnvironment) {\n this.environment.mode = integrationEnvironment.mode;\n }\n if (\"version\" in integrationEnvironment) {\n this.environment.version = integrationEnvironment.version;\n }\n }\n /**\n * Sets the custom headers added on editor requests if contentManager isn't undefined.\n * @returns {Object} headers - key value headers.\n */ setHeaders(headers) {\n const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers;\n Configuration.set(\"customHeaders\", headerObject);\n }\n /**\n * Returns the current {@link ModalDialog} instance.\n * @returns {ModalDialog} The current {@link ModalDialog} instance.\n */ getModalDialog() {\n return this.modalDialog;\n }\n /**\n * Inits the {@link Core} class, doing the following:\n * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON.\n * - Updates {@link Configuration} class with the previous configuration properties.\n * - Updates the {@link ServiceProvider} class using the configuration service path as reference.\n * - Loads language strings.\n * - Fires onLoad event.\n * @param {Object} serviceParameters - Service parameters.\n */ init() {\n if (!Core.initialized) {\n const serviceProviderListener = Listeners.newListener(\"onInit\", ()=>{\n const jsConfiguration = ServiceProvider.getService(\"configurationjs\", \"\", \"get\");\n const jsonConfiguration = JSON.parse(jsConfiguration);\n Configuration.addConfiguration(jsonConfiguration);\n // Adding JavaScript (not backend) configuration variables.\n Configuration.addConfiguration(jsProperties);\n // Fire 'onLoad' event:\n // All integration must listen this event in order to know if the plugin\n // has been properly loaded.\n StringManager.language = this.language;\n this.listeners.fire(\"onLoad\", {});\n });\n ServiceProvider.addListener(serviceProviderListener);\n ServiceProvider.init(this.serviceProviderProperties);\n Core.initialized = true;\n } else {\n // Case when there are more than two editor instances.\n // After the first editor all the other editors don't need to load any file or service.\n this.listeners.fire(\"onLoad\", {});\n }\n }\n /**\n * Adds a {@link Listener} to the current instance of the {@link Core} class.\n * @param {Listener} listener - The listener object.\n */ addListener(listener) {\n this.listeners.add(listener);\n }\n /**\n * Adds the global {@link Listener} instance to {@link Core} class.\n * @param {Listener} listener - The event listener to be added.\n * @static\n */ static addGlobalListener(listener) {\n Core.globalListeners.add(listener);\n }\n beforeUpdateFormula(mathml, wirisProperties) {\n /**\n * This event is fired before updating the formula.\n * @type {Object}\n * @property {String} mathml - MathML to be transformed.\n * @property {String} editMode - Edit mode.\n * @property {Object} wirisProperties - Extra attributes for the formula.\n * @property {String} language - Formula language.\n */ const beforeUpdateEvent = new Event();\n beforeUpdateEvent.mathml = mathml;\n // Cloning wirisProperties object\n // We don't want wirisProperties object modified.\n beforeUpdateEvent.wirisProperties = {};\n if (wirisProperties != null) {\n Object.keys(wirisProperties).forEach((attr)=>{\n beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr];\n });\n }\n // Read only.\n beforeUpdateEvent.language = this.language;\n beforeUpdateEvent.editMode = this.editMode;\n if (this.listeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n if (Core.globalListeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n return {\n mathml: beforeUpdateEvent.mathml,\n wirisProperties: beforeUpdateEvent.wirisProperties\n };\n }\n /**\n * Converts a MathML into it's correspondent image and inserts the image is\n * inserted in a HTMLElement target by creating\n * a new image or updating an existing one.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the insertion.\n * @param {Window} windowTarget - The window element where the editable content is.\n * @param {String} mathml - The MathML.\n * @param {Array.} wirisProperties - The extra attributes for the formula.\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n /**\n * It is the object with the information of the node or latex to insert.\n * @typedef ReturnObject\n * @property {Node} [node] - The DOM node to insert.\n * @property {String} [latex] - The latex to insert.\n */ const returnObject = {};\n if (!mathml) {\n this.insertElementOnSelection(null, focusElement, windowTarget);\n } else if (this.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n // this.integrationModel.getNonLatexNode is an integration wrapper\n // to have special behaviours for nonLatex.\n // Not all the integrations have special behaviours for nonLatex.\n if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) {\n const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.latex = returnObject.latex;\n this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml);\n } else {\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n }\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n } else {\n returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language);\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n }\n return returnObject;\n }\n afterUpdateFormula(focusElement, windowTarget, node, latex) {\n /**\n * This event is fired after update the formula.\n * @type {Event}\n * @param {String} editMode - edit mode.\n * @param {Object} windowTarget - target window.\n * @param {Object} focusElement - target element to be focused after update.\n * @param {String} latex - LaTeX generated by the formula (editMode=latex).\n * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise).\n */ const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.node = node;\n afterUpdateEvent.latex = latex;\n if (this.listeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n if (Core.globalListeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n return {};\n }\n /**\n * Sets the caret after a given Node and set the focus to the owner document.\n * @param {Node} node - The Node element.\n */ placeCaretAfterNode(node) {\n if (node === null) return;\n this.integrationModel.getSelection();\n const nodeDocument = node.ownerDocument;\n if (typeof nodeDocument.getSelection !== \"undefined\" && !!node.parentElement) {\n const range = nodeDocument.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const selection = nodeDocument.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n nodeDocument.body.focus();\n }\n }\n /**\n * Replaces a Selection object with an HTMLElement.\n * @param {HTMLElement} element - The HTMLElement to replace the selection.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace.\n * @param {Window} windowTarget - The window target.\n */ insertElementOnSelection(element, focusElement, windowTarget) {\n let mathmlOrigin = null;\n if (this.editionProperties.isNewElement) {\n if (element) {\n if (focusElement.type === \"textarea\") {\n Util.updateTextArea(focusElement, element.textContent);\n } else if (document.selection && document.getSelection === 0) {\n let range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n if (!(\"parentElement\" in range)) {\n windowTarget.document.execCommand(\"delete\", false);\n range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n }\n if (\"parentElement\" in range) {\n const temporalObject = range.parentElement();\n if (temporalObject.nodeName.toUpperCase() === \"IMG\") {\n temporalObject.parentNode.replaceChild(element, temporalObject);\n } else {\n // IE9 fix: parentNode() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML(Util.createObjectCode(element));\n }\n }\n } else {\n let range = null;\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n if (this.editionProperties.range) {\n ({ range } = this.editionProperties);\n this.editionProperties.range = null;\n } else {\n const editorSelection = this.integrationModel.getSelection();\n range = editorSelection.getRangeAt(0);\n }\n // Delete if something was surrounded.\n range.deleteContents();\n let node = range.startContainer;\n const position = range.startOffset;\n if (node.nodeType === 3) {\n // TEXT_NODE.\n node = node.splitText(position);\n node.parentNode.insertBefore(element, node);\n } else if (node.nodeType === 1) {\n // ELEMENT_NODE.\n node.insertBefore(element, node.childNodes[position]);\n }\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n focusElement.focus();\n } else {\n const editorSelection = this.integrationModel.getSelection();\n editorSelection.removeAllRanges();\n if (this.editionProperties.range) {\n const { range } = this.editionProperties;\n this.editionProperties.range = null;\n editorSelection.addRange(range);\n }\n }\n } else if (this.editionProperties.latexRange) {\n if (document.selection && document.getSelection === 0) {\n this.editionProperties.isNewElement = true;\n this.editionProperties.latexRange.select();\n this.insertElementOnSelection(element, focusElement, windowTarget);\n } else {\n this.editionProperties.latexRange.deleteContents();\n this.editionProperties.latexRange.insertNode(element);\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n let item;\n // Wrapper for some integrations that can have special behaviours to show latex.\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n item = this.integrationModel.getSelectedItem(focusElement, false);\n } else {\n item = Util.getSelectedItemOnTextarea(focusElement);\n }\n Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition);\n } else {\n mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml;\n if (element && element.nodeName.toLowerCase() === \"img\") {\n // Editor empty, formula has been erased on edit.\n // There are editors (e.g: CKEditor) that put attributes in images.\n // We don't allow that behaviour in our images.\n Image.removeImgDataAttributes(this.editionProperties.temporalImage);\n // Clone is needed to maintain event references to temporalImage.\n Image.clone(element, this.editionProperties.temporalImage);\n } else {\n this.editionProperties.temporalImage.remove();\n }\n this.placeCaretAfterNode(this.editionProperties.temporalImage);\n }\n // Build the telemeter payload separated to delete null/undefined entries.\n const mathml = element?.dataset?.mathml;\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.editionProperties.editionStartTime,\n editor_origin: null,\n toolbar: this.modalDialog.contentManager.toolbar,\n size: mathml?.length\n };\n // Remove the desired null keys.\n Object.keys(payload).forEach((key)=>{\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n }\n /**\n * Opens a modal dialog containing MathType editor..\n * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted.\n * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise.\n */ openModalDialog(target, isIframe) {\n // Count the time since the editor is open\n this.editionProperties.editionStartTime = Date.now();\n // Textarea elements don't have normal document ranges. It only accepts latex edit.\n this.editMode = \"images\";\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n try {\n if (isIframe) {\n // Is needed focus the target first.\n target.contentWindow.focus();\n const selection = target.contentWindow.getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n } else {\n // Is needed focus the target first.\n target.focus();\n const selection = getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n }\n } catch (e) {\n this.editionProperties.range = null;\n }\n if (isIframe === undefined) {\n isIframe = true;\n }\n this.editionProperties.latexRange = null;\n if (target) {\n let selectedItem;\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n selectedItem = this.integrationModel.getSelectedItem(target, isIframe);\n } else {\n selectedItem = Util.getSelectedItem(target, isIframe);\n }\n // Check LaTeX if and only if the node is a text node (nodeType==3).\n if (selectedItem) {\n // Case when image was selected and button pressed.\n if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get(\"imageClassName\"))) {\n this.editionProperties.temporalImage = selectedItem.node;\n this.editionProperties.isNewElement = false;\n } else if (selectedItem.node.nodeType === 3) {\n // If it's a text node means that editor is working with LaTeX.\n if (this.integrationModel.getMathmlFromTextNode) {\n // If integration has this function it isn't set range due to we don't\n // know if it will be put into a textarea as a text or image.\n const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (mathml) {\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n }\n } else {\n const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (latexResult) {\n const mathml = Latex.getMathMLFromLatex(latexResult.latex);\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n const windowTarget = isIframe ? target.contentWindow : window;\n if (target.tagName.toLowerCase() !== \"textarea\") {\n if (document.selection) {\n let leftOffset = 0;\n let previousNode = latexResult.startNode.previousSibling;\n while(previousNode){\n leftOffset += Util.getNodeLength(previousNode);\n previousNode = previousNode.previousSibling;\n }\n this.editionProperties.latexRange = windowTarget.document.selection.createRange();\n this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode);\n this.editionProperties.latexRange.move(\"character\", leftOffset + latexResult.startPosition);\n this.editionProperties.latexRange.moveEnd(\"character\", latexResult.latex.length + 4); // Plus 4 for the '$$' characters.\n } else {\n this.editionProperties.latexRange = windowTarget.document.createRange();\n this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition);\n this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition);\n }\n }\n }\n }\n }\n } else if (target.tagName.toLowerCase() === \"textarea\") {\n // By default editMode is 'images', but when target is a textarea it needs to be 'latex'.\n this.editMode = \"latex\";\n }\n }\n // Setting an object with the editor parameters.\n // Editor parameters can be customized in several ways:\n // 1 - editorAttributes: Contains the default editor attributes,\n // usually the metrics in a comma separated string. Always exists.\n // 2 - editorParameters: Object containing custom editor parameters.\n // These parameters are defined in the backend. So they affects all integration instances.\n // The backend send the default editor attributes in a coma separated\n // with the following structure: key1=value1,key2=value2...\n const defaultEditorAttributesArray = Configuration.get(\"editorAttributes\").split(\", \");\n const defaultEditorAttributes = {};\n for(let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1){\n const tempAttribute = defaultEditorAttributesArray[i].split(\"=\");\n const key = tempAttribute[0];\n const value = tempAttribute[1];\n defaultEditorAttributes[key] = value;\n }\n // Custom editor parameters.\n const editorAttributes = {\n language: this.language\n };\n // Editor parameters in backend, usually configuration.ini.\n const serverEditorParameters = Configuration.get(\"editorParameters\");\n // Editor parameters through JavaScript configuration.\n const clientEditorParameters = this.integrationModel.editorParameters;\n Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters);\n Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters);\n // Now, update backwards: if user has set a custom language, pass that back to core properties\n this.language = editorAttributes.language;\n StringManager.language = this.language;\n editorAttributes.rtl = this.integrationModel.rtl;\n const customHeaders = Configuration.get(\"customHeaders\");\n // This is not being used in the code, we are keeping it just in case it's needed.\n // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend.\n editorAttributes.customHeaders = typeof customHeaders === \"string\" ? Util.convertStringToObject(customHeaders) : customHeaders;\n const contentManagerAttributes = {};\n contentManagerAttributes.editorAttributes = editorAttributes;\n contentManagerAttributes.language = this.language;\n contentManagerAttributes.customEditors = this.customEditors;\n contentManagerAttributes.environment = this.environment;\n if (this.modalDialog == null) {\n this.modalDialog = new ModalDialog(editorAttributes);\n this.contentManager = new ContentManager(contentManagerAttributes);\n // When an instance of ContentManager is created we need to wait until\n // the ContentManager is ready by listening 'onLoad' event.\n const listener = Listeners.newListener(\"onLoad\", ()=>{\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")));\n this.contentManager.mathML = mathML;\n }\n });\n this.contentManager.addListener(listener);\n this.contentManager.init();\n this.modalDialog.setContentManager(this.contentManager);\n this.contentManager.setModalDialogInstance(this.modalDialog);\n } else {\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")));\n this.contentManager.mathML = mathML;\n }\n }\n this.contentManager.setIntegrationModel(this.integrationModel);\n this.modalDialog.open();\n }\n /**\n * Returns the {@link CustomEditors} instance.\n * @return {CustomEditors} The current {@link CustomEditors} instance.\n */ getCustomEditors() {\n return this.customEditors;\n }\n}\n/**\n * Core static listeners.\n * @type {Listeners}\n * @private\n */ Core._globalListeners = new Listeners();\n/**\n * Resources state. Says if they were loaded or not.\n * @type {Boolean}\n * @private\n */ Core._initialized = false;\n\nvar warnIcon = \"\\n\\n\\n\";\n\n// eslint-disable-next-line no-unused-vars, import/named\n/**\n * @typedef {Object} IntegrationModelProperties\n * @property {string} configurationService - Configuration service path.\n * This parameter is needed to determine all services paths.\n * @property {HTMLElement} integrationModelProperties.target - HTML target.\n * @property {string} integrationModelProperties.scriptName - Integration script name.\n * Usually the name of the integration script.\n * @property {Object} integrationModelProperties.environment - integration environment properties.\n * @property {Object} [integrationModelProperties.callbackMethodArguments] - object containing\n * callback method arguments.\n * @property {string} [integrationModelProperties.version] - integration version number.\n * @property {Object} [integrationModelProperties.editorObject] - object containing\n * the integration editor instance.\n * @property {boolean} [integrationModelProperties.rtl] - true if the editor is in RTL mode.\n * false otherwise.\n * @property {ServiceProviderProperties} [integrationModelProperties.serviceProviderProperties]\n * - The service parameters.\n * @property {Object} [integrationModelProperties.integrationParameters]\n * - Overwritten integration parameters.\n */ class IntegrationModel {\n /**\n * @classdesc\n * This class represents an integration model, allowing the integration script to\n * communicate with Core class. Each integration must extend this class.\n * @constructs\n * @param {IntegrationModelProperties} integrationModelProperties\n */ constructor(integrationModelProperties){\n /**\n * Language. Needed for accessibility and locales. English by default.\n */ this.language = \"en\";\n /**\n * Service parameters\n * @type {ServiceProviderProperties}\n */ this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {};\n /**\n * Configuration service path. The integration service is needed by Core class to\n * load all the backend configuration into the frontend and also to create the paths\n * of all services (all services lives in the same route). Mandatory property.\n */ this.configurationService = \"\";\n if (\"configurationService\" in integrationModelProperties) {\n this.serviceProviderProperties.URI = integrationModelProperties.configurationService;\n console.warn(\"Deprecated property configurationService. Use serviceParameters on instead.\", [\n integrationModelProperties.configurationService\n ]);\n }\n /**\n * Plugin version. Needed to stats and caching.\n * @type {string}\n */ this.version = \"version\" in integrationModelProperties ? integrationModelProperties.version : \"\";\n /**\n * DOM target in which the plugin works. Needed to associate events, insert formulas, etc.\n * Mandatory property.\n */ this.target = null;\n if (\"target\" in integrationModelProperties) {\n this.target = integrationModelProperties.target;\n } else {\n throw new Error(\"IntegrationModel constructor error: target property missed.\");\n }\n /**\n * Integration script name. Needed to know the plugin path.\n */ if (\"scriptName\" in integrationModelProperties) {\n this.scriptName = integrationModelProperties.scriptName;\n }\n /**\n * Object containing the arguments needed by the callback function.\n */ this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {};\n /**\n * Contains information about the integration environment:\n * like the name of the editor, the version, etc.\n */ this.environment = integrationModelProperties.environment ?? {};\n /**\n * Indicates if the DOM target is - or not - and iframe.\n */ this.isIframe = false;\n if (this.target != null) {\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n /**\n * Instance of the integration editor object. Usually the entry point to access the API\n * of a HTML editor.\n */ this.editorObject = integrationModelProperties.editorObject ?? null;\n /**\n * Specifies if the direction of the text is RTL. false by default.\n */ this.rtl = integrationModelProperties.rtl ?? false;\n /**\n * Specifies if the integration model exposes the locale strings. false by default.\n */ this.managesLanguage = integrationModelProperties.managesLanguage ?? false;\n /**\n * Specify if editor will open in hand mode only\n */ this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false;\n /**\n * Indicates if an image is selected. Needed to resize the image to the original size in case\n * the image is resized.\n * @type {boolean}\n */ this.temporalImageResizing = false;\n /**\n * The Core class instance associated to the integration model.\n * @type {Core}\n */ this.core = null;\n /**\n * Integration model listeners.\n * @type {Listeners}\n */ this.listeners = new Listeners();\n // Parameters overwrite.\n if (\"integrationParameters\" in integrationModelProperties) {\n IntegrationModel.integrationParameters.forEach((parameter)=>{\n if (parameter in integrationModelProperties.integrationParameters) {\n // Don't add empty parameters.\n const value = integrationModelProperties.integrationParameters[parameter];\n if (Object.keys(value).length !== 0) {\n this[parameter] = value;\n }\n }\n });\n }\n }\n /**\n * Init function. Usually called from the integration side once the core.js file is loaded.\n */ init() {\n // Check if language is an object and select the property necessary\n this.language = this.getLanguage();\n // We need to wait until Core class is loaded ('onLoad' event) before\n // call the callback method.\n const listener = Listeners.newListener(\"onLoad\", ()=>{\n this.callbackFunction(this.callbackMethodArguments);\n });\n // Backwards compatibility.\n if (this.serviceProviderProperties.URI.indexOf(\"configuration\") !== -1) {\n const uri = this.serviceProviderProperties.URI;\n const server = ServiceProvider.getServerLanguageFromService(uri);\n this.serviceProviderProperties.server = server;\n const configurationIndex = this.serviceProviderProperties.URI.indexOf(\"configuration\");\n const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex);\n this.serviceProviderProperties.URI = subsTring;\n }\n let serviceParametersURI = this.serviceProviderProperties.URI;\n serviceParametersURI = serviceParametersURI.indexOf(\"/\") === 0 || serviceParametersURI.indexOf(\"http\") === 0 ? serviceParametersURI : Util.concatenateUrl(this.getPath(), serviceParametersURI);\n this.serviceProviderProperties.URI = serviceParametersURI;\n const coreProperties = {};\n coreProperties.serviceProviderProperties = this.serviceProviderProperties;\n this.setCore(new Core(coreProperties));\n this.core.addListener(listener);\n this.core.language = this.language;\n // Initializing Core class.\n this.core.init();\n // TODO: Move to Core constructor.\n this.core.setEnvironment(this.environment);\n // No internet connection modal.\n let attributes = {};\n attributes.class = attributes.id = \"wrs_modal_offline\";\n this.offlineModal = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_content_offline\";\n this.offlineModalContent = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_offline_close\";\n this.offlineModalClose = Util.createElement(\"span\", attributes);\n this.offlineModalClose.innerHTML = \"×\";\n attributes = {};\n attributes.class = \"wrs_modal_offline_warn\";\n this.offlineModalWarn = Util.createElement(\"span\", attributes);\n let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`;\n this.offlineModalWarn.setAttribute(\"style\", generalStyle);\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_container\";\n this.offlineModalMessage = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_warn\";\n this.offlineModalMessage1 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage1.innerHTML = \"You are not online!\";\n attributes = {};\n attributes.class = \"wrs_modal_offline_text\";\n this.offlineModalMessage2 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`;\n //Append offline modal elements\n this.offlineModalContent.appendChild(this.offlineModalClose);\n this.offlineModalMessage.appendChild(this.offlineModalMessage1);\n this.offlineModalMessage.appendChild(this.offlineModalMessage2);\n this.offlineModalContent.appendChild(this.offlineModalMessage);\n this.offlineModalContent.appendChild(this.offlineModalWarn);\n this.offlineModal.appendChild(this.offlineModalContent);\n document.body.appendChild(this.offlineModal);\n let modal = document.getElementById(\"wrs_modal_offline\");\n this.offlineModalClose.addEventListener(\"click\", function() {\n modal.style.display = \"none\";\n });\n // Store editor name for telemetry purposes.\n let editorName = this.environment.editor;\n editorName = editorName.slice(0, -1); // Remove version number from editors\n if (editorName.includes(\"TinyMCE\")) editorName = \"TinyMCE\"; // Remove version from Tinymce editor.\n if (editorName.includes(\"Generic\")) editorName = \"Generic\"; // Remove version from Generic editor.\n let solutionTelemeter = editorName;\n // If moodle, add information to hosts and solution.\n let isMoodle = !!(typeof M === \"object\" && M !== null), lms;\n if (isMoodle) {\n solutionTelemeter = \"Moodle\";\n lms = {\n nam: \"moodle\",\n fam: \"lms\",\n ver: this.environment.moodleVersion,\n category: this.environment.moodleCourseCategory,\n course: this.environment.moodleCourseName\n };\n if (!editorName.includes(\"TinyMCE\")) {\n editorName = \"Atto\";\n }\n }\n // Get the OS and its version.\n let OSData = this.getOS();\n // Get the broswer and its version.\n let broswerData = this.getBrowser();\n // Create list of hosts to send to telemetry.\n let hosts = [\n {\n nam: broswerData.detectedBrowser,\n fam: \"browser\",\n ver: broswerData.versionBrowser\n },\n {\n nam: editorName.toLowerCase(),\n fam: \"html-editor\",\n ver: this.environment.editorVersion\n },\n {\n nam: OSData.detectedOS,\n fam: \"os\",\n ver: OSData.versionOS\n },\n {\n nam: window.location.hostname,\n fam: \"domain\"\n },\n lms\n ];\n // Filter hosts to remove empty objects and empty keys.\n hosts = hosts.filter(function(element) {\n if (element) Object.keys(element).forEach((key)=>element[key] === \"unknown\" ? delete element[key] : {});\n return element !== undefined;\n });\n // Initialize telemeter\n Telemeter.init({\n solution: {\n name: \"MathType for \" + solutionTelemeter,\n version: this.version\n },\n hosts: hosts,\n config: {\n test: false,\n debug: false,\n dry_run: false,\n api_key: \"eda2ce9b-0e8a-46f2-acdd-c228a615314e\"\n },\n url: undefined\n });\n }\n /**\n * Returns the Browser name and its version.\n * @return {array} - detectedBrowser = Operating System name.\n * versionBrowser = Operating System version.\n */ getBrowser() {\n // default value for OS just in case nothing is detected\n let detectedBrowser = \"unknown\", versionBrowser = \"unknown\";\n let userAgent = window.navigator.userAgent;\n if (/Brave/.test(userAgent)) {\n detectedBrowser = \"brave\";\n if (userAgent.indexOf(\"Brave/\")) {\n let start = userAgent.indexOf(\"Brave\") + 6;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n }\n } else if (userAgent.indexOf(\"Edg/\") !== -1) {\n detectedBrowser = \"edge_chromium\";\n let start = userAgent.indexOf(\"Edg/\") + 4;\n versionBrowser = userAgent.substring(start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Edg/.test(userAgent)) {\n detectedBrowser = \"edge\";\n let start = userAgent.indexOf(\"Edg\") + 3;\n start = start + userAgent.substring(start).indexOf(\"/\");\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) {\n detectedBrowser = \"firefox\";\n let start = userAgent.indexOf(\"Firefox\");\n start = start === -1 ? userAgent.indexOf(\"FxiOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/OPR/.test(userAgent)) {\n detectedBrowser = \"opera\";\n let start = userAgent.indexOf(\"OPR/\") + 4;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) {\n detectedBrowser = \"chrome\";\n let start = userAgent.indexOf(\"Chrome\");\n start = start === -1 ? userAgent.indexOf(\"CriOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/Safari/.test(userAgent)) {\n detectedBrowser = \"safari\";\n let start = userAgent.indexOf(\"Version/\");\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n }\n return {\n detectedBrowser,\n versionBrowser\n };\n }\n /**\n * Returns the operating system and its version.\n * @return {array} - detectedOS = Operating System name.\n * versionOS = Operating System version.\n */ getOS() {\n // default value for OS just in case nothing is detected\n let detectedOS = \"unknown\", versionOS = \"unknown\";\n // Retrieve properties to easily detect the OS\n let userAgent = window.navigator.userAgent, platform = window.navigator.platform, macosPlatforms = [\n \"Macintosh\",\n \"MacIntel\",\n \"MacPPC\",\n \"Mac68K\"\n ], windowsPlatforms = [\n \"Win32\",\n \"Win64\",\n \"Windows\",\n \"WinCE\"\n ], iosPlatforms = [\n \"iPhone\",\n \"iPad\",\n \"iPod\"\n ];\n // Find OS and their respective versions\n if (macosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"macos\";\n if (userAgent.indexOf(\"OS X\") !== -1) {\n let start = userAgent.indexOf(\"OS X\") + 5;\n let end = userAgent.substring(start).indexOf(\" \");\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n }\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"ios\";\n if (userAgent.indexOf(\"OS \") !== -1) {\n let start = userAgent.indexOf(\"OS \") + 3;\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n }\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"windows\";\n let start = userAgent.indexOf(\"Windows\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Android/.test(userAgent)) {\n detectedOS = \"android\";\n let start = userAgent.indexOf(\"Android\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/CrOS/.test(userAgent)) {\n detectedOS = \"chromeos\";\n let start = userAgent.indexOf(\"CrOS \") + 5;\n start = start + userAgent.substring(start).indexOf(\" \");\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (detectedOS === \"unknown\" && /Linux/.test(platform)) {\n detectedOS = \"linux\";\n }\n return {\n detectedOS,\n versionOS\n };\n }\n /**\n * Returns the absolute path of the integration script.\n * @return {string} - Absolute path for the integration script.\n */ getPath() {\n if (typeof this.scriptName === \"undefined\") {\n throw new Error(\"scriptName property needed for getPath.\");\n }\n const col = document.getElementsByTagName(\"script\");\n let path = \"\";\n for(let i = 0; i < col.length; i += 1){\n const j = col[i].src.lastIndexOf(this.scriptName);\n if (j >= 0) {\n path = col[i].src.substr(0, j - 1);\n }\n }\n return path;\n }\n /**\n * Returns integration model plugin version\n * @param {string} - Plugin version\n */ getVersion() {\n return this.version;\n }\n /**\n * Sets the language property.\n * @param {string} language - language code.\n */ setLanguage(language) {\n this.language = language;\n }\n /**\n * Sets a Core instance.\n * @param {Core} core - instance of Core class.\n */ setCore(core) {\n this.core = core;\n core.setIntegrationModel(this);\n }\n /**\n * Returns the Core instance.\n * @returns {Core} instance of Core class.\n */ getCore() {\n return this.core;\n }\n /**\n * Sets the object target and updates the iframe property.\n * @param {HTMLElement} target - target object.\n */ setTarget(target) {\n this.target = target;\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n /**\n * Sets the editor object.\n * @param {Object} editorObject - The editor object.\n */ setEditorObject(editorObject) {\n this.editorObject = editorObject;\n }\n /**\n * Opens formula editor to editing a new formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */ openNewFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.dbclick = false;\n this.core.editionProperties.isNewElement = true;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n /**\n * Opens formula editor to editing an existing formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */ openExistingFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.isNewElement = false;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n /**\n * Wrapper to Core.updateFormula method.\n * Transform a MathML into a image formula.\n * Then the image formula is inserted in the specified target, creating a new image (new formula)\n * or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n */ updateFormula(mathml) {\n if (this.editorParameters) {\n mathml = com.wiris.editor.util.EditorUtils.addAnnotation(mathml, \"application/vnd.wiris.mtweb-params+json\", JSON.stringify(this.editorParameters));\n }\n let focusElement;\n let windowTarget;\n const wirisProperties = null;\n if (this.isIframe) {\n focusElement = this.target.contentWindow;\n windowTarget = this.target.contentWindow;\n } else {\n focusElement = this.target;\n windowTarget = window;\n }\n let obj = this.core.beforeUpdateFormula(mathml, wirisProperties);\n if (!obj) {\n return \"\";\n }\n obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties);\n if (!obj) {\n return \"\";\n }\n return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex);\n }\n /**\n * Wrapper to Core.insertFormula method.\n * Inserts the formula in the specified target, creating\n * a new image (new formula) or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties);\n // Delete temporal image when inserted\n this.core.editionProperties.temporalImage = null;\n return obj;\n }\n /**\n * Returns the target selection.\n * @returns {Selection} target selection.\n */ getSelection() {\n if (this.isIframe) {\n this.target.contentWindow.focus();\n return this.target.contentWindow.getSelection();\n }\n this.target.focus();\n return window.getSelection();\n }\n /**\n * Add events to formulas in the DOM target. The events added are the following:\n * - doubleClickHandler: handles Double-click event on formulas by opening an editor\n * to edit them.\n * - mouseDownHandler: handles mouse down event on formulas by saving the size of the formula\n * in case the the formula is resized.\n * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size\n * in case the formula is resized.\n */ addEvents() {\n const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target;\n Util.addElementEvents(eventTarget, (element, event)=>{\n this.doubleClickHandler(element, event);\n // Avoid creating the double click listener more than once for each element.\n event.stopImmediatePropagation();\n }, (element, event)=>{\n this.mousedownHandler(element, event);\n }, (element, event)=>{\n this.mouseupHandler(element, event);\n });\n }\n /**\n * Remove events to formulas in the DOM target.\n */ removeEvents() {\n const eventTarget = this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target;\n if (!eventTarget) {\n return;\n }\n Util.removeElementEvents(eventTarget);\n }\n /**\n * Remove events, modals and set this.editorObject to null in order to prevent memory leaks.\n */ destroy() {\n this.removeEvents();\n // Destroy modal dialog if exists.\n if (this.core.modalDialog) {\n this.core.modalDialog.destroy();\n }\n // Remove offline modal dialog if exists.\n if (this.offlineModal) {\n this.offlineModal.remove();\n }\n this.editorObject = null;\n }\n /**\n * Handles a Double-click on the target element. Opens an editor\n * to re-edit the double-clicked formula.\n * @param {HTMLElement} element - DOM object target.\n */ doubleClickHandler(element) {\n this.core.editionProperties.dbclick = true;\n if (element.nodeName.toLowerCase() === \"img\") {\n this.core.getCustomEditors().disable();\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (element.hasAttribute(customEditorAttributeName)) {\n const customEditor = element.getAttribute(customEditorAttributeName);\n this.core.getCustomEditors().enable(customEditor);\n }\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.core.editionProperties.temporalImage = element;\n this.core.editionProperties.isNewElement = true;\n this.openExistingFormulaEditor();\n }\n }\n }\n /**\n * Handles a mouse up event on the target element. Restores the image size to avoid\n * resizing formulas.\n */ mouseupHandler() {\n if (this.temporalImageResizing) {\n setTimeout(()=>{\n Image.fixAfterResize(this.temporalImageResizing);\n }, 10);\n }\n }\n /**\n * Handles a mouse down event on the target element. Saves the formula size to avoid\n * resizing formulas.\n * @param {HTMLElement} element - target element.\n */ mousedownHandler(element) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.temporalImageResizing = element;\n }\n }\n }\n /**\n * Returns the integration language. By default the browser agent. This method\n * should be overwritten to obtain the integration language, for example using the\n * plugin API of an HTML editor.\n * @returns {string} integration language.\n */ getLanguage() {\n return this.getBrowserLanguage();\n }\n /**\n * Returns the browser language.\n * @returns {string} the browser language.\n */ // eslint-disable-next-line class-methods-use-this\n getBrowserLanguage() {\n let language = \"en\";\n if (navigator.userLanguage) {\n language = navigator.userLanguage.substring(0, 2);\n } else if (navigator.language) {\n language = navigator.language.substring(0, 2);\n } else {\n language = \"en\";\n }\n return language;\n }\n /**\n * This function is called once the {@link Core} is loaded. IntegrationModel class\n * will fire this method when {@link Core} 'onLoad' event is fired.\n * This method should content all the logic to init\n * the integration.\n */ callbackFunction() {\n // It's needed to wait until the integration target is ready. The event is fired\n // from the integration side.\n const listener = Listeners.newListener(\"onTargetReady\", ()=>{\n this.addEvents(this.target);\n });\n this.listeners.add(listener);\n }\n /**\n * Function called when the content submits an action.\n */ // eslint-disable-next-line class-methods-use-this\n notifyWindowClosed() {\n // Nothing.\n }\n /**\n * Wrapper.\n * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js\n * in order to get mathml from a text node that can contain normal LaTeX or other chosen text.\n * @param {string} textNode - text node to extract the MathML.\n * @param {int} caretPosition - caret position inside the text node.\n * @returns {string} MathML inside the text node.\n */ // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getMathmlFromTextNode(textNode, caretPosition) {}\n /**\n * Wrapper\n * It fills wrs event object of nonLatex with the desired data.\n * @param {Object} event - event object.\n * @param {Object} window dom window object.\n * @param {string} mathml valid mathml.\n */ // eslint-disable-next-line class-methods-use-this, no-unused-vars\n fillNonLatexNode(event, window1, mathml) {}\n /**\n Wrapper.\n * Returns selected item from the target.\n * @param {HTMLElement} target - target element\n * @param {boolean} iframe\n */ // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getSelectedItem(target, isIframe) {}\n // Set temporal image to null and make focus come back.\n static setActionsOnCancelButtons() {\n // Make focus come back on the previous place it was when click cancel button\n const currentInstance = WirisPlugin.currentInstance;\n const editorSelection = currentInstance.getSelection();\n editorSelection.removeAllRanges();\n if (currentInstance.core.editionProperties.range) {\n const { range } = currentInstance.core.editionProperties;\n currentInstance.core.editionProperties.range = null;\n editorSelection.addRange(range);\n if (range.startOffset !== range.endOffset) {\n currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage);\n }\n }\n // eslint-disable-next-line no-undef\n if (WirisPlugin.currentInstance) {\n WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line\n }\n }\n}\n// To know if the integration that extends this class implements\n// wrapper methods, they are set as undefined.\nIntegrationModel.prototype.getMathmlFromTextNode = undefined;\nIntegrationModel.prototype.fillNonLatexNode = undefined;\nIntegrationModel.prototype.getSelectedItem = undefined;\n/**\n * An object containing a list with the overwritable class constructor properties.\n * @type {Object}\n */ IntegrationModel.integrationParameters = [\n \"serviceProviderProperties\",\n \"editorParameters\"\n];\n\n/**\n * This class represents the MathType integration for CKEditor5.\n * @extends {IntegrationModel}\n */ class CKEditor5Integration extends IntegrationModel {\n constructor(ckeditorIntegrationModelProperties){\n const editor = ckeditorIntegrationModelProperties.editorObject;\n if (typeof editor.config !== \"undefined\" && typeof editor.config.get(\"mathTypeParameters\") !== \"undefined\") {\n ckeditorIntegrationModelProperties.integrationParameters = editor.config.get(\"mathTypeParameters\");\n }\n /**\n * CKEditor5 Integration.\n *\n * @param {integrationModelProperties} integrationModelAttributes\n */ super(ckeditorIntegrationModelProperties);\n /**\n * Folder name used for the integration inside CKEditor plugins folder.\n */ this.integrationFolderName = \"ckeditor_wiris\";\n }\n /**\n * @inheritdoc\n * @returns {string} - The CKEditor instance language.\n * @override\n */ getLanguage() {\n // Returns the CKEDitor instance language taking into account that the language can be an object.\n // Try to get editorParameters.language, fail silently otherwise\n try {\n return this.editorParameters.language;\n } catch (e) {}\n const languageObject = this.editorObject.config.get(\"language\");\n if (languageObject != null) {\n if (typeof languageObject === \"object\") {\n // eslint-disable-next-line no-prototype-builtins\n if (languageObject.hasOwnProperty(\"ui\")) {\n return languageObject.ui;\n }\n return languageObject;\n }\n return languageObject;\n }\n return super.getLanguage();\n }\n /**\n * Adds callbacks to the following CKEditor listeners:\n * - 'focus' - updates the current instance.\n * - 'contentDom' - adds 'doubleclick' callback.\n * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas.\n * - 'setData' - parses the data converting MathML into images.\n * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications.\n * - 'getData' - parses the data converting images into selected save mode (MathML by default).\n * - 'mode' - recalculates the active element.\n */ addEditorListeners() {\n const editor = this.editorObject;\n if (typeof editor.config.wirislistenersdisabled === \"undefined\" || !editor.config.wirislistenersdisabled) {\n this.checkElement();\n }\n }\n /**\n * Checks the current container and assign events in case that it doesn't have them.\n * CKEditor replaces several times the element element during its execution,\n * so we must assign the events again to editor element.\n */ checkElement() {\n const editor = this.editorObject;\n const newElement = editor.sourceElement;\n // If the element wasn't treated, add the events.\n if (!newElement.wirisActive) {\n this.setTarget(newElement);\n this.addEvents();\n // Set the element as treated\n newElement.wirisActive = true;\n }\n }\n /**\n * @inheritdoc\n * @param {HTMLElement} element - HTMLElement target.\n * @param {MouseEvent} event - event which trigger the handler.\n */ doubleClickHandler(element, event) {\n this.core.editionProperties.dbclick = true;\n if (this.editorObject.isReadOnly === false) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n // Some plugins (image2, image) open a dialog on Double-click. On formulas\n // doubleclick event ends here.\n if (typeof event.stopPropagation !== \"undefined\") {\n // old I.E compatibility.\n event.stopPropagation();\n } else {\n event.returnValue = false;\n }\n this.core.getCustomEditors().disable();\n const customEditorAttr = element.getAttribute(Configuration.get(\"imageCustomEditorName\"));\n if (customEditorAttr) {\n this.core.getCustomEditors().enable(customEditorAttr);\n }\n this.core.editionProperties.temporalImage = element;\n this.openExistingFormulaEditor();\n }\n }\n }\n }\n /** @inheritdoc */ static getCorePath() {\n return null; // TODO\n }\n /** @inheritdoc */ callbackFunction() {\n super.callbackFunction();\n this.addEditorListeners();\n }\n openNewFormulaEditor() {\n // Store the editor selection as it will be lost upon opening the modal\n this.core.editionProperties.selection = this.editorObject.editing.view.document.selection;\n return super.openNewFormulaEditor();\n }\n /**\n * Replaces old formula with new MathML or inserts it in caret position if new\n * @param {String} mathml MathML to update old one or insert\n * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image\n */ insertMathml(mathml) {\n // This returns the value returned by the callback function (writer => {...})\n return this.editorObject.model.change((writer)=>{\n const core = this.getCore();\n const selection = this.editorObject.model.document.selection;\n const modelElementNew = writer.createElement(\"mathml\", {\n formula: mathml,\n ...Object.fromEntries(selection.getAttributes())\n });\n // Obtain the DOM object corresponding to the formula\n if (core.editionProperties.isNewElement) {\n // Don't bother inserting anything at all if the MathML is empty.\n if (!mathml) return;\n const viewSelection = this.core.editionProperties.selection || this.editorObject.editing.view.document.selection;\n const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition());\n this.editorObject.model.insertObject(modelElementNew, modelPosition);\n // Remove selection\n if (!viewSelection.isCollapsed) {\n for (const range of viewSelection.getRanges()){\n writer.remove(this.editorObject.editing.mapper.toModelRange(range));\n }\n }\n // Set carret after the formula\n const position = this.editorObject.model.createPositionAfter(modelElementNew);\n writer.setSelection(position);\n } else {\n const img = core.editionProperties.temporalImage;\n const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent;\n const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement);\n // Insert the new and remove the old one\n const position = this.editorObject.model.createPositionBefore(modelElementOld);\n // If the given MathML is empty, don't insert a new formula.\n if (mathml) {\n this.editorObject.model.insertObject(modelElementNew, position);\n }\n writer.remove(modelElementOld);\n }\n // eslint-disable-next-line consistent-return\n return modelElementNew;\n });\n }\n /**\n * Finds the text node corresponding to given DOM text element.\n * @param {element} viewElement Element to find corresponding text node of.\n * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist.\n */ findText(viewElement) {\n // eslint-disable-line consistent-return\n // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down\n let pivot = viewElement;\n let element;\n while(!element){\n element = this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(pivot));\n pivot = pivot.parentElement;\n }\n // Navigate through all the subtree under `pivot` in order to find the correct text node\n const range = this.editorObject.model.createRangeIn(element);\n const descendants = Array.from(range.getItems());\n for (const node of descendants){\n let viewElementData = viewElement.data;\n if (viewElement.nodeType === 3) {\n // Remove invisible white spaces\n viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), \"\");\n }\n if (node.is(\"textProxy\") && node.data === viewElementData.replace(String.fromCharCode(160), \" \")) {\n return node.textNode;\n }\n }\n }\n /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n // eslint-disable-line no-unused-vars\n const returnObject = {};\n let mathmlOrigin;\n if (!mathml) {\n this.insertMathml(\"\");\n } else if (this.core.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n this.editorObject.model.change((writer)=>{\n const { latexRange } = this.core.editionProperties;\n const startNode = this.findText(latexRange.startContainer);\n const endNode = this.findText(latexRange.endContainer);\n let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset);\n let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset);\n let range = writer.createRange(startPosition, endPosition);\n // When Latex is next to image/formula.\n if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) {\n // Get the position of the latex to be replaced.\n let latexEdited = \"$$\" + Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + \"$$\";\n let data = latexRange.startContainer.data;\n // Remove invisible characters.\n data = data.replaceAll(String.fromCharCode(8288), \"\");\n // Get to the start of the latex we are editing.\n let offset = data.indexOf(latexEdited);\n let dataOffset = data.substring(offset);\n let second$ = dataOffset.substring(2).indexOf(\"$$\") + 4;\n let substring = dataOffset.substr(0, second$);\n data = data.replace(substring, \"\");\n if (!data) {\n startPosition = writer.createPositionBefore(startNode);\n range = startNode;\n } else {\n startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset);\n endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset);\n range = writer.createRange(startPosition, endPosition);\n }\n }\n writer.remove(range);\n writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition);\n });\n } else {\n mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml;\n try {\n returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), windowTarget.document);\n } catch (e) {\n const x = e.toString();\n if (x.includes(\"CKEditorError: Cannot read property 'parent' of undefined\")) {\n this.core.modalDialog.cancelAction();\n }\n }\n }\n // Build the telemeter payload separated to delete null/undefined entries.\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.core.editionProperties.editionStartTime,\n editor_origin: null,\n toolbar: this.core.modalDialog.contentManager.toolbar,\n size: mathml?.length\n };\n // Remove desired null keys.\n Object.keys(payload).forEach((key)=>{\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula.\n We probably should add it here as well, but we should look further into how */ // this.editorObject.fire('change');\n // Remove temporal image of inserted formula\n this.core.editionProperties.temporalImage = null;\n return returnObject;\n }\n /**\n * Function called when the content submits an action.\n */ notifyWindowClosed() {\n this.editorObject.editing.view.focus();\n }\n}\n\n/**\n * Command for opening the MathType editor\n */ class MathTypeCommand extends Command {\n execute(options = {}) {\n // Check we get a valid integration\n // eslint-disable-next-line no-prototype-builtins\n if (!options.hasOwnProperty(\"integration\") || !(options.integration instanceof CKEditor5Integration)) {\n throw 'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options';\n }\n // Save the integration instance as a property of the command.\n this.integration = options.integration;\n // Set custom editor or disable it\n this.setEditor();\n // Open the editor\n this.openEditor();\n }\n /**\n * Sets the appropriate custom editor, if any, or disables them.\n */ setEditor() {\n // It's possible that a custom editor was last used.\n // We need to disable it to avoid wrong behaviors.\n this.integration.core.getCustomEditors().disable();\n }\n /**\n * Checks whether we are editing an existing formula or a new one and opens the editor.\n */ openEditor() {\n this.integration.core.editionProperties.dbclick = false;\n const image = this._getSelectedImage();\n if (typeof image !== \"undefined\" && image !== null && image.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))) {\n this.integration.core.editionProperties.temporalImage = image;\n this.integration.openExistingFormulaEditor();\n } else {\n this.integration.openNewFormulaEditor();\n }\n }\n /**\n * Gets the currently selected formula image\n * @returns {Element} selected image, if any, undefined otherwise\n */ _getSelectedImage() {\n const { selection } = this.editor.editing.view.document;\n // If we can not extract the formula, fall back to default behavior.\n if (selection.isCollapsed || selection.rangeCount !== 1) {\n return;\n }\n // Look for the wrapping the formula and then for the inside\n const range = selection.getFirstRange();\n let image;\n for (const span of range){\n if (span.item.name !== \"span\") {\n return;\n }\n image = span.item.getChild(0);\n break;\n }\n if (!image) {\n return;\n }\n // eslint-disable-next-line consistent-return\n return this.editor.editing.view.domConverter.mapViewToDom(image);\n }\n}\n/**\n * Command for opening the ChemType editor\n */ class ChemTypeCommand extends MathTypeCommand {\n setEditor() {\n this.integration.core.getCustomEditors().enable(\"chemistry\");\n }\n}\n\nvar mathIcon = \"\\n\\n\\n\\n\\n\\n\\n\\t\\n\\t\\t\\n\\t\\n\\n\\n\\t\\n\\t\\t\\n\\t\\n\\n\\n\";\n\nvar chemIcon = \"\\n\\n\\n\\n\\n\\n\";\n\nvar name = \"@wiris/mathtype-ckeditor5\";\nvar version = \"8.9.2\";\nvar description = \"MathType Web for CKEditor5 editor\";\nvar keywords = [\n\t\"chem\",\n\t\"chemistry\",\n\t\"chemtype\",\n\t\"ckeditor\",\n\t\"ckeditor5\",\n\t\"editor\",\n\t\"equation\",\n\t\"latex\",\n\t\"math\",\n\t\"mathml\",\n\t\"maths\",\n\t\"mathtype\",\n\t\"wiris\"\n];\nvar repository = \"https://github.com/wiris/html-integrations/tree/stable/packages/mathtype-ckeditor5\";\nvar homepage = \"https://www.wiris.com/\";\nvar bugs = {\n\temail: \"support@wiris.com\"\n};\nvar license = \"MIT\";\nvar author = \"WIRIS Team (http://www.wiris.com)\";\nvar files = [\n\t\"dist\",\n\t\"src\",\n\t\"icons\",\n\t\"theme\",\n\t\"lang\"\n];\nvar main = \"src/plugin.js\";\nvar type = \"module\";\nvar exports = {\n\t\".\": \"./src/plugin.js\",\n\t\"./dist/*.css\": \"./dist/*.css\",\n\t\"./dist/*\": \"./dist/*\",\n\t\"./src/*\": \"./src/*\",\n\t\"./theme/*\": \"./theme/*\",\n\t\"./package.json\": \"./package.json\"\n};\nvar scripts = {\n\tbuild: \"node ./scripts/build-dist.mjs\",\n\t\"build:dist\": \"node ./scripts/build-dist.mjs\",\n\tprepare: \"npm run build:dist\"\n};\nvar dependencies = {\n\t\"@wiris/mathtype-html-integration-devkit\": \"1.17.3\"\n};\nvar devDependencies = {\n\t\"@ckeditor/ckeditor5-dev-build-tools\": \"^40.2.0\",\n\tckeditor5: \">=42.0.0\"\n};\nvar peerDependencies = {\n\tckeditor5: \">=42.0.0\"\n};\nvar packageInfo = {\n\tname: name,\n\tversion: version,\n\tdescription: description,\n\tkeywords: keywords,\n\trepository: repository,\n\thomepage: homepage,\n\tbugs: bugs,\n\tlicense: license,\n\tauthor: author,\n\tfiles: files,\n\tmain: main,\n\ttype: type,\n\texports: exports,\n\tscripts: scripts,\n\tdependencies: dependencies,\n\tdevDependencies: devDependencies,\n\tpeerDependencies: peerDependencies\n};\n\n// CKEditor imports\nlet currentInstance = null; // eslint-disable-line import/no-mutable-exports\nclass MathType extends Plugin {\n static get requires() {\n return [\n Widget\n ];\n }\n static get pluginName() {\n return \"MathType\";\n }\n init() {\n // Create the MathType API Integration object\n const integration = this._addIntegration();\n currentInstance = integration;\n // Add the MathType and ChemType commands to the editor\n this._addCommands();\n // Add the buttons for MathType and ChemType\n this._addViews(integration);\n // Registers the element in the schema\n this._addSchema();\n // Add the downcast and upcast converters\n this._addConverters(integration);\n // Expose the WirisPlugin variable to the window\n this._exposeWiris();\n }\n /**\n * Inherited from Plugin class: Executed when CKEditor5 is destroyed\n */ destroy() {\n // eslint-disable-line class-methods-use-this\n currentInstance.destroy();\n }\n /**\n * Create the MathType API Integration object\n * @returns {CKEditor5Integration} the integration object\n */ _addIntegration() {\n const { editor } = this;\n /**\n * Integration model constructor attributes.\n * @type {integrationModelProperties}\n */ const integrationProperties = {};\n integrationProperties.environment = {};\n integrationProperties.environment.editor = \"CKEditor5\";\n integrationProperties.environment.editorVersion = \"5.x\";\n integrationProperties.version = packageInfo.version;\n integrationProperties.editorObject = editor;\n integrationProperties.serviceProviderProperties = {};\n integrationProperties.serviceProviderProperties.URI = \"https://www.wiris.net/demo/plugins/app\";\n integrationProperties.serviceProviderProperties.server = \"java\";\n integrationProperties.target = editor.sourceElement;\n integrationProperties.scriptName = \"bundle.js\";\n integrationProperties.managesLanguage = true;\n // etc\n // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element.\n // To avoid a wrong behaviour, this integration only starts if the workspace container exists.\n let integration;\n if (integrationProperties.target) {\n // Instance of the integration associated to this editor instance\n integration = new CKEditor5Integration(integrationProperties);\n integration.init();\n integration.listeners.fire(\"onTargetReady\", {});\n integration.checkElement();\n this.listenTo(editor.editing.view.document, \"click\", (evt, data)=>{\n // Is Double-click\n if (data.domEvent.detail === 2) {\n integration.doubleClickHandler(data.domTarget, data.domEvent);\n evt.stop();\n }\n }, {\n priority: \"highest\"\n });\n }\n return integration;\n }\n /**\n * Add the MathType and ChemType commands to the editor\n */ _addCommands() {\n const { editor } = this;\n // Add command to open the formula editor\n editor.commands.add(\"MathType\", new MathTypeCommand(editor));\n // Add command to open the chemistry formula editor\n editor.commands.add(\"ChemType\", new ChemTypeCommand(editor));\n }\n /**\n * Add the buttons for MathType and ChemType\n * @param {CKEditor5Integration} integration the integration object\n */ _addViews(integration) {\n const { editor } = this;\n // Check if MathType editor is enabled\n if (Configuration.get(\"editorEnabled\")) {\n // Add button for the formula editor\n editor.ui.componentFactory.add(\"MathType\", (locale)=>{\n const view = new ButtonView(locale);\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"MathType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_math\", integration.getLanguage()),\n icon: mathIcon,\n tooltip: true\n });\n // Callback executed once the image is clicked.\n view.on(\"execute\", ()=>{\n editor.execute(\"MathType\", {\n integration\n });\n });\n return view;\n });\n }\n // Check if ChemType editor is enabled\n if (Configuration.get(\"chemEnabled\")) {\n // Add button for the chemistry formula editor\n editor.ui.componentFactory.add(\"ChemType\", (locale)=>{\n const view = new ButtonView(locale);\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"ChemType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_chem\", integration.getLanguage()),\n icon: chemIcon,\n tooltip: true\n });\n // Callback executed once the image is clicked.\n view.on(\"execute\", ()=>{\n editor.execute(\"ChemType\", {\n integration\n });\n });\n return view;\n });\n }\n // Observer for the Double-click event\n editor.editing.view.addObserver(ClickObserver);\n }\n /**\n * Registers the element in the schema\n */ _addSchema() {\n const { schema } = this.editor.model;\n schema.register(\"mathml\", {\n inheritAllFrom: \"$inlineObject\",\n allowAttributes: [\n \"formula\"\n ]\n });\n }\n /**\n * Add the downcast and upcast converters\n */ _addConverters(integration) {\n const { editor } = this;\n // Editing view -> Model\n editor.conversion.for(\"upcast\").elementToElement({\n view: {\n name: \"span\",\n classes: \"ck-math-widget\"\n },\n model: (viewElement, { writer: modelWriter })=>{\n const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute(\"data-mathml\"));\n return modelWriter.createElement(\"mathml\", {\n formula\n });\n }\n });\n // Data view -> Model\n editor.data.upcastDispatcher.on(\"element:math\", (evt, data, conversionApi)=>{\n const { consumable, writer } = conversionApi;\n const { viewItem } = data;\n // When element was already consumed then skip it.\n if (!consumable.test(viewItem, {\n name: true\n })) {\n return;\n }\n // If we encounter any with a LaTeX annotation inside,\n // convert it into a \"$$...$$\" string.\n const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define\n // Get the formula of the (which is all its children).\n const processor = new XmlDataProcessor(editor.editing.view.document);\n // Only god knows why the following line makes viewItem lose all of its children,\n // so we obtain isLatex before doing this because we need viewItem's children for that.\n const upcastWriter = new UpcastWriter(editor.editing.view.document);\n const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren());\n // and obtain the attributes of too!\n const mathAttributes = [\n ...viewItem.getAttributes()\n ].map(([key, value])=>` ${key}=\"${value}\"`).join(\"\");\n // We process the document fragment\n let formula = processor.toData(viewDocumentFragment) || \"\";\n // And obtain the complete formula\n formula = Util.htmlSanitize(`${formula}`);\n // Replaces the < & > characters to its HTMLEntity to avoid render issues.\n formula = formula.replaceAll('\"<\"', '\"<\"').replaceAll('\">\"', '\">\"').replaceAll(\"><<\", \"><<\");\n /* Model node that contains what's going to actually be inserted. This can be either:\n - A element with a formula attribute set to the given formula, or\n - If the original had a LaTeX annotation, then the annotation surrounded by \"$$...$$\" */ const modelNode = isLatex ? writer.createText(Parser.initParse(formula, integration.getLanguage())) : writer.createElement(\"mathml\", {\n formula\n });\n // Find allowed parent for element that we are going to insert.\n // If current parent does not allow to insert element but one of the ancestors does\n // then split nodes to allowed parent.\n const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor);\n // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n if (!splitResult) {\n return;\n }\n // Insert element on allowed position.\n conversionApi.writer.insert(modelNode, splitResult.position);\n // Consume appropriate value from consumable values list.\n consumable.consume(viewItem, {\n name: true\n });\n const parts = conversionApi.getSplitParts(modelNode);\n // Set conversion result range.\n data.modelRange = writer.createRange(conversionApi.writer.createPositionBefore(modelNode), conversionApi.writer.createPositionAfter(parts[parts.length - 1]));\n // Now we need to check where the `modelCursor` should be.\n if (splitResult.cursorParent) {\n // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n //\n // before: foo[]\n // after: foo[]\n data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n } else {\n // Otherwise just continue after inserted element.\n data.modelCursor = data.modelRange.end;\n }\n });\n /**\n * Whether the given view element has a LaTeX annotation element.\n * @param {*} math\n * @returns {bool}\n */ function mathIsLatex(math) {\n const semantics = math.getChild(0);\n if (!semantics || semantics.name !== \"semantics\") return false;\n for (const child of semantics.getChildren()){\n if (child.name === \"annotation\" && child.getAttribute(\"encoding\") === \"LaTeX\") {\n return true;\n }\n }\n return false;\n }\n function createViewWidget(modelItem, { writer: viewWriter }) {\n const widgetElement = viewWriter.createContainerElement(\"span\", {\n class: \"ck-math-widget\"\n });\n const mathUIElement = createViewImage(modelItem, {\n writer: viewWriter\n }); // eslint-disable-line no-use-before-define\n if (mathUIElement) {\n viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement);\n }\n return toWidget(widgetElement, viewWriter);\n }\n function createViewImage(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n const mathString = modelItem.getAttribute(\"formula\").replaceAll('ref=\"<\"', 'ref=\"<\"');\n const imgHtml = Parser.initParse(mathString, integration.getLanguage());\n const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0);\n /* Although we use the HtmlDataProcessor to obtain the attributes,\n we must create a new EmptyElement which is independent of the\n DataProcessor being used by this editor instance */ if (imgElement) {\n return viewWriter.createEmptyElement(\"img\", imgElement.getAttributes(), {\n renderUnsafeAttributes: [\n \"src\"\n ]\n });\n }\n return null;\n }\n // Model -> Editing view\n editor.conversion.for(\"editingDowncast\").elementToElement({\n model: \"mathml\",\n view: createViewWidget\n });\n // Model -> Data view\n editor.conversion.for(\"dataDowncast\").elementToElement({\n model: \"mathml\",\n view: createDataString\n });\n /**\n * Makes a copy of the given view node.\n * @param {module:engine/view/node~Node} sourceNode Node to copy.\n * @returns {module:engine/view/node~Node} Copy of the node.\n */ function clone(viewWriter, sourceNode) {\n if (sourceNode.is(\"text\")) {\n return viewWriter.createText(sourceNode.data);\n }\n if (sourceNode.is(\"element\")) {\n if (sourceNode.is(\"emptyElement\")) {\n return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes());\n }\n const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes());\n for (const child of sourceNode.getChildren()){\n viewWriter.insert(viewWriter.createPositionAt(element, \"end\"), clone(viewWriter, child));\n }\n return element;\n }\n throw new Exception(\"Given node has unsupported type.\"); // eslint-disable-line no-undef\n }\n function createDataString(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n let mathString = Parser.endParseSaveMode(modelItem.getAttribute(\"formula\"));\n const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0);\n return clone(viewWriter, sourceMathElement);\n }\n // This stops the view selection getting into the s and messing up caret movement\n editor.editing.mapper.on(\"viewToModelPosition\", viewToModelPositionOutsideModelElement(editor.model, (viewElement)=>viewElement.hasClass(\"ck-math-widget\")));\n // Keep a reference to the original get and set function.\n editor.data;\n /**\n * Hack to transform $$latex$$ into in editor.getData()'s output.\n */ editor.data.on(\"get\", (e)=>{\n let output = e.return;\n // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any.\n // For text or latex formulas, it returns the original output.\n e.return = MathML.removeSemantics(output, \"application/json\");\n }, {\n priority: \"low\"\n });\n /**\n * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData().\n */ editor.data.on(\"set\", (e, args)=>{\n // Retrieve the data to be set on the CKEditor.\n let modifiedData = args[0];\n // Regex to find all mathml formulas.\n const regexp = //gm;\n // Get all MathML formulas and store them in an array.\n // Using the conditional operator on data.main because the data parameter has different types depending on:\n // editor.data.set can be used directly or by the source editing plugin.\n // With the source editor plugin, data is an object with the key `main` which contains the source code string.\n // When using the editor.data.set method, the data is a string with the content to be set to the editor.\n let formulas = Object.values(modifiedData)[0] ? [\n ...Object.values(modifiedData)[0].matchAll(regexp)\n ] : [\n ...modifiedData.matchAll(regexp)\n ];\n // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation.\n formulas.forEach((formula)=>{\n let mathml = formula[0];\n if (mathml.includes('encoding=\"LaTeX\"')) {\n // LaTeX found.\n let latex = \"$$$\" + Latex.getLatexFromMathML(mathml) + \"$$$\"; // We add $$$ instead of $$ because the replace function ignores one $.\n modifiedData = modifiedData.replace(mathml, latex);\n }\n });\n args[0] = modifiedData;\n }, {\n priority: \"high\"\n });\n }\n /**\n * Expose the WirisPlugin variable to the window\n */ // eslint-disable-next-line class-methods-use-this\n _exposeWiris() {\n window.WirisPlugin = {\n Core,\n Parser,\n Image,\n MathML,\n Util,\n Configuration,\n Listeners,\n IntegrationModel,\n currentInstance,\n Latex\n };\n }\n}\n\nexport { MathType as default };\n//# sourceMappingURL=index.js.map\n" - ], - "names": [ - "Command", - "exports", - "Plugin", - "Widget", - "ButtonView", - "ClickObserver", - "XmlDataProcessor", - "UpcastWriter", - "toWidget", - "HtmlDataProcessor", - "viewToModelPositionOutsideModelElement" - ], - "mappings": "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" -} +{"version":3,"file":"index.umd.js","sources":["index.js"],"sourcesContent":["import { Command, Plugin } from 'ckeditor5';\nimport { ButtonView } from 'ckeditor5';\nimport { ClickObserver, XmlDataProcessor, UpcastWriter, HtmlDataProcessor } from 'ckeditor5';\nimport { Widget, viewToModelPositionOutsideModelElement, toWidget } from 'ckeditor5';\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nvar purify = {exports: {}};\n\n(function(module, exports) {\n (function(global, factory) {\n module.exports = factory() ;\n })(commonjsGlobal, function() {\n const { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object;\n let { freeze, seal, create } = Object; // eslint-disable-line import/no-mutable-exports\n let { apply, construct } = typeof Reflect !== 'undefined' && Reflect;\n if (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n }\n if (!seal) {\n seal = function seal(x) {\n return x;\n };\n }\n if (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n }\n if (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n }\n const arrayForEach = unapply(Array.prototype.forEach);\n const arrayPop = unapply(Array.prototype.pop);\n const arrayPush = unapply(Array.prototype.push);\n const stringToLowerCase = unapply(String.prototype.toLowerCase);\n const stringToString = unapply(String.prototype.toString);\n const stringMatch = unapply(String.prototype.match);\n const stringReplace = unapply(String.prototype.replace);\n const stringIndexOf = unapply(String.prototype.indexOf);\n const stringTrim = unapply(String.prototype.trim);\n const objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\n const regExpTest = unapply(RegExp.prototype.test);\n const typeErrorCreate = unconstruct(TypeError);\n /**\n\t * Creates a new function that calls the given function with a specified thisArg and arguments.\n\t *\n\t * @param {Function} func - The function to be wrapped and called.\n\t * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n\t */ function unapply(func) {\n return function(thisArg) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n }\n /**\n\t * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n\t *\n\t * @param {Function} func - The constructor function to be wrapped and called.\n\t * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n\t */ function unconstruct(func) {\n return function() {\n for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n }\n /**\n\t * Add properties to a lookup table\n\t *\n\t * @param {Object} set - The set to which elements will be added.\n\t * @param {Array} array - The array containing elements to be added to the set.\n\t * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n\t * @returns {Object} The modified set with added elements.\n\t */ function addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while(l--){\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n }\n /**\n\t * Clean up an array to harden against CSPP\n\t *\n\t * @param {Array} array - The array to be cleaned.\n\t * @returns {Array} The cleaned version of the array\n\t */ function cleanArray(array) {\n for(let index = 0; index < array.length; index++){\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n }\n /**\n\t * Shallow clone an object\n\t *\n\t * @param {Object} object - The object to be cloned.\n\t * @returns {Object} A new object that copies the original.\n\t */ function clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)){\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n }\n /**\n\t * This method automatically checks if the prop is function or getter and behaves accordingly.\n\t *\n\t * @param {Object} object - The object to look up the getter function in its prototype chain.\n\t * @param {String} prop - The property name for which to find the getter function.\n\t * @returns {Function} The getter function found in the prototype chain or a fallback function.\n\t */ function lookupGetter(object, prop) {\n while(object !== null){\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n }\n const html$1 = freeze([\n 'a',\n 'abbr',\n 'acronym',\n 'address',\n 'area',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'bdi',\n 'bdo',\n 'big',\n 'blink',\n 'blockquote',\n 'body',\n 'br',\n 'button',\n 'canvas',\n 'caption',\n 'center',\n 'cite',\n 'code',\n 'col',\n 'colgroup',\n 'content',\n 'data',\n 'datalist',\n 'dd',\n 'decorator',\n 'del',\n 'details',\n 'dfn',\n 'dialog',\n 'dir',\n 'div',\n 'dl',\n 'dt',\n 'element',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'font',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'head',\n 'header',\n 'hgroup',\n 'hr',\n 'html',\n 'i',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'map',\n 'mark',\n 'marquee',\n 'menu',\n 'menuitem',\n 'meter',\n 'nav',\n 'nobr',\n 'ol',\n 'optgroup',\n 'option',\n 'output',\n 'p',\n 'picture',\n 'pre',\n 'progress',\n 'q',\n 'rp',\n 'rt',\n 'ruby',\n 's',\n 'samp',\n 'section',\n 'select',\n 'shadow',\n 'small',\n 'source',\n 'spacer',\n 'span',\n 'strike',\n 'strong',\n 'style',\n 'sub',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'template',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'track',\n 'tt',\n 'u',\n 'ul',\n 'var',\n 'video',\n 'wbr'\n ]);\n // SVG\n const svg$1 = freeze([\n 'svg',\n 'a',\n 'altglyph',\n 'altglyphdef',\n 'altglyphitem',\n 'animatecolor',\n 'animatemotion',\n 'animatetransform',\n 'circle',\n 'clippath',\n 'defs',\n 'desc',\n 'ellipse',\n 'filter',\n 'font',\n 'g',\n 'glyph',\n 'glyphref',\n 'hkern',\n 'image',\n 'line',\n 'lineargradient',\n 'marker',\n 'mask',\n 'metadata',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialgradient',\n 'rect',\n 'stop',\n 'style',\n 'switch',\n 'symbol',\n 'text',\n 'textpath',\n 'title',\n 'tref',\n 'tspan',\n 'view',\n 'vkern'\n ]);\n const svgFilters = freeze([\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence'\n ]);\n // List of SVG elements that are disallowed by default.\n // We still need to know them so that we can do namespace\n // checks properly in case one wants to add them to\n // allow-list.\n const svgDisallowed = freeze([\n 'animate',\n 'color-profile',\n 'cursor',\n 'discard',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignobject',\n 'hatch',\n 'hatchpath',\n 'mesh',\n 'meshgradient',\n 'meshpatch',\n 'meshrow',\n 'missing-glyph',\n 'script',\n 'set',\n 'solidcolor',\n 'unknown',\n 'use'\n ]);\n const mathMl$1 = freeze([\n 'math',\n 'menclose',\n 'merror',\n 'mfenced',\n 'mfrac',\n 'mglyph',\n 'mi',\n 'mlabeledtr',\n 'mmultiscripts',\n 'mn',\n 'mo',\n 'mover',\n 'mpadded',\n 'mphantom',\n 'mroot',\n 'mrow',\n 'ms',\n 'mspace',\n 'msqrt',\n 'mstyle',\n 'msub',\n 'msup',\n 'msubsup',\n 'mtable',\n 'mtd',\n 'mtext',\n 'mtr',\n 'munder',\n 'munderover',\n 'mprescripts'\n ]);\n // Similarly to SVG, we want to know all MathML elements,\n // even those that we disallow by default.\n const mathMlDisallowed = freeze([\n 'maction',\n 'maligngroup',\n 'malignmark',\n 'mlongdiv',\n 'mscarries',\n 'mscarry',\n 'msgroup',\n 'mstack',\n 'msline',\n 'msrow',\n 'semantics',\n 'annotation',\n 'annotation-xml',\n 'mprescripts',\n 'none'\n ]);\n const text = freeze([\n '#text'\n ]);\n const html = freeze([\n 'accept',\n 'action',\n 'align',\n 'alt',\n 'autocapitalize',\n 'autocomplete',\n 'autopictureinpicture',\n 'autoplay',\n 'background',\n 'bgcolor',\n 'border',\n 'capture',\n 'cellpadding',\n 'cellspacing',\n 'checked',\n 'cite',\n 'class',\n 'clear',\n 'color',\n 'cols',\n 'colspan',\n 'controls',\n 'controlslist',\n 'coords',\n 'crossorigin',\n 'datetime',\n 'decoding',\n 'default',\n 'dir',\n 'disabled',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'download',\n 'draggable',\n 'enctype',\n 'enterkeyhint',\n 'face',\n 'for',\n 'headers',\n 'height',\n 'hidden',\n 'high',\n 'href',\n 'hreflang',\n 'id',\n 'inputmode',\n 'integrity',\n 'ismap',\n 'kind',\n 'label',\n 'lang',\n 'list',\n 'loading',\n 'loop',\n 'low',\n 'max',\n 'maxlength',\n 'media',\n 'method',\n 'min',\n 'minlength',\n 'multiple',\n 'muted',\n 'name',\n 'nonce',\n 'noshade',\n 'novalidate',\n 'nowrap',\n 'open',\n 'optimum',\n 'pattern',\n 'placeholder',\n 'playsinline',\n 'popover',\n 'popovertarget',\n 'popovertargetaction',\n 'poster',\n 'preload',\n 'pubdate',\n 'radiogroup',\n 'readonly',\n 'rel',\n 'required',\n 'rev',\n 'reversed',\n 'role',\n 'rows',\n 'rowspan',\n 'spellcheck',\n 'scope',\n 'selected',\n 'shape',\n 'size',\n 'sizes',\n 'span',\n 'srclang',\n 'start',\n 'src',\n 'srcset',\n 'step',\n 'style',\n 'summary',\n 'tabindex',\n 'title',\n 'translate',\n 'type',\n 'usemap',\n 'valign',\n 'value',\n 'width',\n 'wrap',\n 'xmlns',\n 'slot'\n ]);\n const svg = freeze([\n 'accent-height',\n 'accumulate',\n 'additive',\n 'alignment-baseline',\n 'ascent',\n 'attributename',\n 'attributetype',\n 'azimuth',\n 'basefrequency',\n 'baseline-shift',\n 'begin',\n 'bias',\n 'by',\n 'class',\n 'clip',\n 'clippathunits',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'diffuseconstant',\n 'direction',\n 'display',\n 'divisor',\n 'dur',\n 'edgemode',\n 'elevation',\n 'end',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'filterunits',\n 'flood-color',\n 'flood-opacity',\n 'font-family',\n 'font-size',\n 'font-size-adjust',\n 'font-stretch',\n 'font-style',\n 'font-variant',\n 'font-weight',\n 'fx',\n 'fy',\n 'g1',\n 'g2',\n 'glyph-name',\n 'glyphref',\n 'gradientunits',\n 'gradienttransform',\n 'height',\n 'href',\n 'id',\n 'image-rendering',\n 'in',\n 'in2',\n 'k',\n 'k1',\n 'k2',\n 'k3',\n 'k4',\n 'kerning',\n 'keypoints',\n 'keysplines',\n 'keytimes',\n 'lang',\n 'lengthadjust',\n 'letter-spacing',\n 'kernelmatrix',\n 'kernelunitlength',\n 'lighting-color',\n 'local',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'markerheight',\n 'markerunits',\n 'markerwidth',\n 'maskcontentunits',\n 'maskunits',\n 'max',\n 'mask',\n 'media',\n 'method',\n 'mode',\n 'min',\n 'name',\n 'numoctaves',\n 'offset',\n 'operator',\n 'opacity',\n 'order',\n 'orient',\n 'orientation',\n 'origin',\n 'overflow',\n 'paint-order',\n 'path',\n 'pathlength',\n 'patterncontentunits',\n 'patterntransform',\n 'patternunits',\n 'points',\n 'preservealpha',\n 'preserveaspectratio',\n 'primitiveunits',\n 'r',\n 'rx',\n 'ry',\n 'radius',\n 'refx',\n 'refy',\n 'repeatcount',\n 'repeatdur',\n 'restart',\n 'result',\n 'rotate',\n 'scale',\n 'seed',\n 'shape-rendering',\n 'specularconstant',\n 'specularexponent',\n 'spreadmethod',\n 'startoffset',\n 'stddeviation',\n 'stitchtiles',\n 'stop-color',\n 'stop-opacity',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke',\n 'stroke-width',\n 'style',\n 'surfacescale',\n 'systemlanguage',\n 'tabindex',\n 'targetx',\n 'targety',\n 'transform',\n 'transform-origin',\n 'text-anchor',\n 'text-decoration',\n 'text-rendering',\n 'textlength',\n 'type',\n 'u1',\n 'u2',\n 'unicode',\n 'values',\n 'viewbox',\n 'visibility',\n 'version',\n 'vert-adv-y',\n 'vert-origin-x',\n 'vert-origin-y',\n 'width',\n 'word-spacing',\n 'wrap',\n 'writing-mode',\n 'xchannelselector',\n 'ychannelselector',\n 'x',\n 'x1',\n 'x2',\n 'xmlns',\n 'y',\n 'y1',\n 'y2',\n 'z',\n 'zoomandpan'\n ]);\n const mathMl = freeze([\n 'accent',\n 'accentunder',\n 'align',\n 'bevelled',\n 'close',\n 'columnsalign',\n 'columnlines',\n 'columnspan',\n 'denomalign',\n 'depth',\n 'dir',\n 'display',\n 'displaystyle',\n 'encoding',\n 'fence',\n 'frame',\n 'height',\n 'href',\n 'id',\n 'largeop',\n 'length',\n 'linethickness',\n 'lspace',\n 'lquote',\n 'mathbackground',\n 'mathcolor',\n 'mathsize',\n 'mathvariant',\n 'maxsize',\n 'minsize',\n 'movablelimits',\n 'notation',\n 'numalign',\n 'open',\n 'rowalign',\n 'rowlines',\n 'rowspacing',\n 'rowspan',\n 'rspace',\n 'rquote',\n 'scriptlevel',\n 'scriptminsize',\n 'scriptsizemultiplier',\n 'selection',\n 'separator',\n 'separators',\n 'stretchy',\n 'subscriptshift',\n 'supscriptshift',\n 'symmetric',\n 'voffset',\n 'width',\n 'xmlns'\n ]);\n const xml = freeze([\n 'xlink:href',\n 'xml:id',\n 'xlink:title',\n 'xml:space',\n 'xmlns:xlink'\n ]);\n // eslint-disable-next-line unicorn/better-regex\n const MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\n const ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\n const TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\n const DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\n const ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\n const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n );\n const IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\n const ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n );\n const DOCTYPE_NAME = seal(/^html$/i);\n const CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n var EXPRESSIONS = /*#__PURE__*/ Object.freeze({\n __proto__: null,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n ERB_EXPR: ERB_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR,\n DATA_ATTR: DATA_ATTR,\n ARIA_ATTR: ARIA_ATTR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n DOCTYPE_NAME: DOCTYPE_NAME,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT\n });\n // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\n const NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n };\n const getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n };\n /**\n\t * Creates a no-op policy for internal use only.\n\t * Don't export this function outside this module!\n\t * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n\t * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n\t * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n\t * are not supported or creating the policy failed).\n\t */ const _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML (html) {\n return html;\n },\n createScriptURL (scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n };\n function createDOMPurify() {\n let window1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = (root)=>createDOMPurify(root);\n /**\n\t * Version label, exposed for easier checks\n\t * if DOMPurify is up to date or not\n\t */ DOMPurify.version = '3.1.6';\n /**\n\t * Array of elements that DOMPurify removed during sanitation.\n\t * Empty if nothing was removed.\n\t */ DOMPurify.removed = [];\n if (!window1 || !window1.document || window1.document.nodeType !== NODE_TYPE.document) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let { document } = window1;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window1.NamedNodeMap || window1.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window1;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document;\n const { importNode } = originalDocument;\n let hooks = {};\n /**\n\t * Expose whether this browser supports running the full DOMPurify.\n\t */ DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, CUSTOM_ELEMENT } = EXPRESSIONS;\n let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS;\n /**\n\t * We consider the elements and attributes below to be safe. Ideally\n\t * don't add any new ones but feel free to remove unwanted ones.\n\t */ /* allowed element names */ let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [\n ...html$1,\n ...svg$1,\n ...svgFilters,\n ...mathMl$1,\n ...text\n ]);\n /* Allowed attribute names */ let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [\n ...html,\n ...svg,\n ...mathMl,\n ...xml\n ]);\n /*\n\t * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n\t * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n\t * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n\t * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n\t */ let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */ let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */ let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */ let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */ let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */ let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n\t * Usually removed due to a mXSS issue in jQuery 3.0 */ let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n\t * This means, DOMPurify removes data attributes, mustaches and ERB\n\t */ let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n\t * This means, DOMPurify removes comments when containing risky content.\n\t */ let SAFE_FOR_XML = true;\n /* Decide if document with ... should be returned */ let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */ let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n\t * document.body. By default, browsers might move them to document.head */ let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n\t * string (or a TrustedHTML object if Trusted Types are supported).\n\t * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n\t */ let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n\t * string (or a TrustedHTML object if Trusted Types are supported) */ let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n\t * case Trusted Types are not supported */ let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n\t * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n\t */ let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n\t * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n\t *\n\t * HTML/DOM spec rules that enable DOM Clobbering:\n\t * - Named Access on Window (§7.3.3)\n\t * - DOM Tree Accessors (§3.1.5)\n\t * - Form Element Parent-Child Relations (§4.10.3)\n\t * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n\t * - HTMLCollection (§4.2.10.2)\n\t *\n\t * Namespace isolation is implemented by prefixing `id` and `name` attributes\n\t * with a constant string, i.e., `user-content-`\n\t */ let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */ let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n\t * of importing it into a new Document and returning a sanitized copy */ let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */ let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */ let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, [\n 'annotation-xml',\n 'audio',\n 'colgroup',\n 'desc',\n 'foreignobject',\n 'head',\n 'iframe',\n 'math',\n 'mi',\n 'mn',\n 'mo',\n 'ms',\n 'mtext',\n 'noembed',\n 'noframes',\n 'noscript',\n 'plaintext',\n 'script',\n 'style',\n 'svg',\n 'template',\n 'thead',\n 'title',\n 'video',\n 'xmp'\n ]);\n /* Tags that are safe for data: URIs */ let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, [\n 'audio',\n 'video',\n 'img',\n 'source',\n 'image',\n 'track'\n ]);\n /* Attributes safe for values like \"javascript:\" */ let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [\n 'alt',\n 'class',\n 'for',\n 'id',\n 'label',\n 'name',\n 'pattern',\n 'placeholder',\n 'role',\n 'summary',\n 'title',\n 'value',\n 'style',\n 'xmlns'\n ]);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */ let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */ let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [\n MATHML_NAMESPACE,\n SVG_NAMESPACE,\n HTML_NAMESPACE\n ], stringToString);\n /* Parsing of strict XHTML documents */ let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = [\n 'application/xhtml+xml',\n 'text/html'\n ];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */ let CONFIG = null;\n /* Ideally, do not touch anything below this line */ /* ______________________________________________ */ const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n\t * _parseConfig\n\t *\n\t * @param {Object} cfg optional config literal\n\t */ // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */ if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */ cfg = clone(cfg);\n PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */ ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent\n cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent\n cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent\n transformCaseFunc // eslint-disable-line indent\n ) // eslint-disable-line indent\n : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */ if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */ if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */ if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */ if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, [\n 'html',\n 'head',\n 'body'\n ]);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */ if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, [\n 'tbody'\n ]);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [\n 'mi',\n 'mo',\n 'mn',\n 'ms',\n 'mtext'\n ]);\n const HTML_INTEGRATION_POINTS = addToSet({}, [\n 'foreignobject',\n 'annotation-xml'\n ]);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [\n 'title',\n 'style',\n 'font',\n 'a',\n 'script'\n ]);\n /* Keep track of all possible SVG and MathML tags\n\t * so that we can perform the namespace checks\n\t * correctly. */ const ALL_SVG_TAGS = addToSet({}, [\n ...svg$1,\n ...svgFilters,\n ...svgDisallowed\n ]);\n const ALL_MATHML_TAGS = addToSet({}, [\n ...mathMl$1,\n ...mathMlDisallowed\n ]);\n /**\n\t * @param {Element} element a DOM element whose namespace is being checked\n\t * @returns {boolean} Return false if the element has a\n\t * namespace that a spec-compliant parser would never\n\t * return. Return true otherwise.\n\t */ const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via . If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n\t * _forceRemove\n\t *\n\t * @param {Node} node a DOM node\n\t */ const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n\t * _removeAttribute\n\t *\n\t * @param {String} name an Attribute name\n\t * @param {Node} node a DOM node\n\t */ const _removeAttribute = function _removeAttribute(name, node) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: node.getAttributeNode(name),\n from: node\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: node\n });\n }\n node.removeAttribute(name);\n // We void attribute values for unremovable \"is\"\" attributes\n if (name === 'is' && !ALLOWED_ATTR[name]) {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(node);\n } catch (_) {}\n } else {\n try {\n node.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n\t * _initDocument\n\t *\n\t * @param {String} dirty a string of dirty markup\n\t * @return {Document} a DOM, filled with the dirty markup\n\t */ const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */ let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */ const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '' + dirty + '';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n\t * Use the DOMParser API by default, fallback later if needs be\n\t * DOMParser not work for svg when has multiple root element.\n\t */ if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */ if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */ if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n\t * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n\t *\n\t * @param {Node} root The root element or node to start traversing on.\n\t * @return {NodeIterator} The created NodeIterator\n\t */ const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n\t * _isClobbered\n\t *\n\t * @param {Node} elm element to check for clobbering attacks\n\t * @return {Boolean} true if clobbered, false if safe\n\t */ const _isClobbered = function _isClobbered(elm) {\n return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n };\n /**\n\t * Checks whether the given object is a DOM node.\n\t *\n\t * @param {Node} object object to check whether it's a DOM node\n\t * @return {Boolean} true is object is a DOM node\n\t */ const _isNode = function _isNode(object) {\n return typeof Node === 'function' && object instanceof Node;\n };\n /**\n\t * _executeHook\n\t * Execute user configurable hooks\n\t *\n\t * @param {String} entryPoint Name of the hook's entry point\n\t * @param {Node} currentNode node to work on with the hook\n\t * @param {Object} data additional hook parameters\n\t */ const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n if (!hooks[entryPoint]) {\n return;\n }\n arrayForEach(hooks[entryPoint], (hook)=>{\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n };\n /**\n\t * _sanitizeElements\n\t *\n\t * @protect nodeName\n\t * @protect textContent\n\t * @protect removeChild\n\t *\n\t * @param {Node} currentNode to check for permission to exist\n\t * @return {Boolean} true if node was killed, false if left alive\n\t */ const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */ _executeHook('beforeSanitizeElements', currentNode, null);\n /* Check if element is clobbered or can clobber */ if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */ const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */ _executeHook('uponSanitizeElement', currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */ if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */ if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */ if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */ if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */ if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */ if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for(let i = childCount - 1; i >= 0; --i){\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */ if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */ if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */ if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */ content = currentNode.textContent;\n arrayForEach([\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR\n ], (expr)=>{\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */ _executeHook('afterSanitizeElements', currentNode, null);\n return false;\n };\n /**\n\t * _isValidAttribute\n\t *\n\t * @param {string} lcTag Lowercase tag name of containing element.\n\t * @param {string} lcName Lowercase attribute name.\n\t * @param {string} value Attribute value.\n\t * @return {Boolean} Returns true if `value` is valid, otherwise false.\n\t */ // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */ if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n\t (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n\t XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n\t We don't need to check the value; it's always URI safe. */ if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ;\n else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ;\n else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (// First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ;\n else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */ } else if (URI_SAFE_ATTRIBUTES[lcName]) ;\n else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ;\n else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ;\n else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ;\n else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n\t * _isBasicCustomElement\n\t * checks if at least one dash is included in tagName, and it's not the first char\n\t * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n\t *\n\t * @param {string} tagName name of the tag of the node to sanitize\n\t * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n\t */ const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n\t * _sanitizeAttributes\n\t *\n\t * @protect attributes\n\t * @protect nodeName\n\t * @protect removeAttribute\n\t * @protect setAttribute\n\t *\n\t * @param {Node} currentNode to sanitize\n\t */ const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */ _executeHook('beforeSanitizeAttributes', currentNode, null);\n const { attributes } = currentNode;\n /* Check if we have attributes; if not we might have a text node */ if (!attributes) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */ while(l--){\n const attr = attributes[l];\n const { name, namespaceURI, value: attrValue } = attr;\n const lcName = transformCaseFunc(name);\n let value = name === 'value' ? attrValue : stringTrim(attrValue);\n /* Execute a hook if present */ hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Work around a security issue with comments inside attributes */ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */ if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Remove attribute */ _removeAttribute(name, currentNode);\n /* Did the hooks approve of the attribute? */ if (!hookEvent.keepAttr) {\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */ if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */ if (SAFE_FOR_TEMPLATES) {\n arrayForEach([\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR\n ], (expr)=>{\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */ const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n continue;\n }\n /* Full DOM Clobbering protection via namespace isolation,\n\t * Prefix id and name attributes with `user-content-`\n\t */ if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Handle attributes that require Trusted Types */ if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ;\n else {\n switch(trustedTypes.getAttributeType(lcTag, lcName)){\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */ try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */ currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {}\n }\n /* Execute a hook if present */ _executeHook('afterSanitizeAttributes', currentNode, null);\n };\n /**\n\t * _sanitizeShadowDOM\n\t *\n\t * @param {DocumentFragment} fragment to iterate over recursively\n\t */ const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */ _executeHook('beforeSanitizeShadowDOM', fragment, null);\n while(shadowNode = shadowIterator.nextNode()){\n /* Execute a hook if present */ _executeHook('uponSanitizeShadowNode', shadowNode, null);\n /* Sanitize tags and elements */ if (_sanitizeElements(shadowNode)) {\n continue;\n }\n /* Deep shadow DOM detected */ if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n /* Check attributes, sanitize if necessary */ _sanitizeAttributes(shadowNode);\n }\n /* Execute a hook if present */ _executeHook('afterSanitizeShadowDOM', fragment, null);\n };\n /**\n\t * Sanitize\n\t * Public method providing core sanitation functionality\n\t *\n\t * @param {String|Node} dirty string or DOM node\n\t * @param {Object} cfg object\n\t */ // eslint-disable-next-line complexity\n DOMPurify.sanitize = function(dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n\t DO NOT return early, as this will return the wrong type if\n\t the user has requested a DOM object rather than a string */ IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '';\n }\n /* Stringify, in case dirty is an object */ if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */ if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */ if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */ DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */ if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */ if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n\t elements being stripped by the parser */ body = _initDocument('');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */ body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */ if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */ body = _initDocument(dirty);\n /* Check we have a DOM node from the data */ if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */ if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */ const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */ while(currentNode = nodeIterator.nextNode()){\n /* Sanitize tags and elements */ if (_sanitizeElements(currentNode)) {\n continue;\n }\n /* Shadow DOM detected, sanitize it */ if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n /* Check attributes, sanitize if necessary */ _sanitizeAttributes(currentNode);\n }\n /* If we sanitized `dirty` in-place, return it. */ if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */ if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while(body.firstChild){\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n\t AdoptNode() is not used because internal state is not reset\n\t (e.g. the past names map of a HTMLFormElement), this is safe\n\t in theory but we would rather not risk another attack vector.\n\t The state that is cloned by importNode() is explicitly defined\n\t by the specs.\n\t */ returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */ if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */ if (SAFE_FOR_TEMPLATES) {\n arrayForEach([\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR\n ], (expr)=>{\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n /**\n\t * Public method to set the configuration once\n\t * setConfig\n\t *\n\t * @param {Object} cfg configuration object\n\t */ DOMPurify.setConfig = function() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n /**\n\t * Public method to remove the configuration\n\t * clearConfig\n\t *\n\t */ DOMPurify.clearConfig = function() {\n CONFIG = null;\n SET_CONFIG = false;\n };\n /**\n\t * Public method to check if an attribute value is valid.\n\t * Uses last set config, if any. Otherwise, uses config defaults.\n\t * isValidAttribute\n\t *\n\t * @param {String} tag Tag name of containing element.\n\t * @param {String} attr Attribute name.\n\t * @param {String} value Attribute value.\n\t * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n\t */ DOMPurify.isValidAttribute = function(tag, attr, value) {\n /* Initialize shared config vars if necessary. */ if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n /**\n\t * AddHook\n\t * Public method to add DOMPurify hooks\n\t *\n\t * @param {String} entryPoint entry point for the hook to add\n\t * @param {Function} hookFunction function to execute\n\t */ DOMPurify.addHook = function(entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n hooks[entryPoint] = hooks[entryPoint] || [];\n arrayPush(hooks[entryPoint], hookFunction);\n };\n /**\n\t * RemoveHook\n\t * Public method to remove a DOMPurify hook at a given entryPoint\n\t * (pops it from the stack of hooks if more are present)\n\t *\n\t * @param {String} entryPoint entry point for the hook to remove\n\t * @return {Function} removed(popped) hook\n\t */ DOMPurify.removeHook = function(entryPoint) {\n if (hooks[entryPoint]) {\n return arrayPop(hooks[entryPoint]);\n }\n };\n /**\n\t * RemoveHooks\n\t * Public method to remove all DOMPurify hooks at a given entryPoint\n\t *\n\t * @param {String} entryPoint entry point for the hooks to remove\n\t */ DOMPurify.removeHooks = function(entryPoint) {\n if (hooks[entryPoint]) {\n hooks[entryPoint] = [];\n }\n };\n /**\n\t * RemoveAllHooks\n\t * Public method to remove all DOMPurify hooks\n\t */ DOMPurify.removeAllHooks = function() {\n hooks = {};\n };\n return DOMPurify;\n }\n var purify = createDOMPurify();\n return purify;\n });\n\n})(purify);\nvar purifyExports = purify.exports;\n\n/**\n * This class represents all the constants needed in a MathType integration among different classes.\n * If a constant should be used across different classes should be defined using attribute\n * accessors.\n */ class Constants {\n /**\n * Safe XML entities.\n * @type {Object}\n */ static get safeXmlCharactersEntities() {\n return {\n tagOpener: \"«\",\n tagCloser: \"»\",\n doubleQuote: \"¨\",\n realDoubleQuote: \""\"\n };\n }\n /**\n * Blackboard invalid safe characters.\n * @type {Object}\n */ static get safeBadBlackboardCharacters() {\n return {\n ltElement: \"«mo»<«/mo»\",\n gtElement: \"«mo»>«/mo»\",\n ampElement: \"«mo»&«/mo»\"\n };\n }\n /**\n * Blackboard valid safe characters.\n * @type{Object}\n */ static get safeGoodBlackboardCharacters() {\n return {\n ltElement: \"«mo»§lt;«/mo»\",\n gtElement: \"«mo»§gt;«/mo»\",\n ampElement: \"«mo»§amp;«/mo»\"\n };\n }\n /**\n * Standard XML special characters.\n * @type {Object}\n */ static get xmlCharacters() {\n return {\n id: \"xmlCharacters\",\n tagOpener: \"<\",\n tagCloser: \">\",\n doubleQuote: '\"',\n ampersand: \"&\",\n quote: \"'\"\n };\n }\n /**\n * Safe XML special characters. This characters are used instead the standard\n * the standard to parse the MathML if safeXML save mode is enable. Each XML\n * special character have a UTF-8 representation.\n * @type {Object}\n */ static get safeXmlCharacters() {\n return {\n id: \"safeXmlCharacters\",\n tagOpener: \"«\",\n tagCloser: \"»\",\n doubleQuote: \"¨\",\n ampersand: \"§\",\n quote: \"`\",\n realDoubleQuote: \"¨\"\n };\n }\n}\n\n/**\n * @classdesc\n * This class represents a class to manage MathML objects.\n */ class MathML {\n /**\n * Checks if the mathml at position i is inside an HTML attribute or not.\n * @param {string} content - a string containing MathML code.\n * @param {number} i - search index.\n * @return {boolean} true if is inside an HTML attribute. false otherwise.\n */ static isMathmlInAttribute(content, i) {\n // Regex =\n // '^[\\'\"][\\\\s]*=[\\\\s]*[\\\\w-]+([\\\\s]*(\"[^\"]*\"|\\'[^\\']*\\')[\\\\s]*\n // =[\\\\s]*[\\\\w-]+[\\\\s]*)*[\\\\s]+gmi<';\n const mathAtt = \"['\\\"][\\\\s]*=[\\\\s]*[\\\\w-]+\"; // \"=att OR '=att\n const attContent = \"\\\"[^\\\"]*\\\"|'[^']*'\"; // \"blabla\" OR 'blabla'\n const att = `[\\\\s]*(${attContent})[\\\\s]*=[\\\\s]*[\\\\w-]+[\\\\s]*`; // \"blabla\"=att OR 'blabla'=att\n const atts = `('${att}')*`; // \"blabla\"=att1 \"blabla\"=att2\n const regex = `^${mathAtt}${atts}[\\\\s]+gmi<`; // \"=att \"blabla\"=att1 \"blabla\"=att2 gmi< .\n const expression = new RegExp(regex);\n const actualContent = content.substring(0, i);\n const reversed = actualContent.split(\"\").reverse().join(\"\");\n const exists = expression.test(reversed);\n return exists;\n }\n /**\n * Decodes an encoded MathML with standard XML tags.\n * We use these entities because IE doesn't support html entities\n * on its attributes sometimes. Yes, sometimes.\n * @param {string} input - string to be decoded.\n * @return {string} decoded string.\n */ static safeXmlDecode(input) {\n let { tagOpener } = Constants.safeXmlCharactersEntities;\n let { tagCloser } = Constants.safeXmlCharactersEntities;\n let { doubleQuote } = Constants.safeXmlCharactersEntities;\n let { realDoubleQuote } = Constants.safeXmlCharactersEntities;\n // Decoding entities.\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n // Added to fix problem due to import from 1.9.x.\n input = input.split(realDoubleQuote).join(Constants.safeXmlCharacters.realDoubleQuote);\n // Blackboard.\n const { ltElement } = Constants.safeBadBlackboardCharacters;\n const { gtElement } = Constants.safeBadBlackboardCharacters;\n const { ampElement } = Constants.safeBadBlackboardCharacters;\n if (\"_wrs_blackboard\" in window && window._wrs_blackboard) {\n input = input.split(ltElement).join(Constants.safeGoodBlackboardCharacters.ltElement);\n input = input.split(gtElement).join(Constants.safeGoodBlackboardCharacters.gtElement);\n input = input.split(ampElement).join(Constants.safeGoodBlackboardCharacters.ampElement);\n }\n ({ tagOpener } = Constants.safeXmlCharacters);\n ({ tagCloser } = Constants.safeXmlCharacters);\n ({ doubleQuote } = Constants.safeXmlCharacters);\n ({ realDoubleQuote } = Constants.safeXmlCharacters);\n const { ampersand } = Constants.safeXmlCharacters;\n const { quote } = Constants.safeXmlCharacters;\n // Decoding characters.\n input = input.split(tagOpener).join(Constants.xmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.xmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.xmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.xmlCharacters.ampersand);\n input = input.split(quote).join(Constants.xmlCharacters.quote);\n // We are replacing $ by & when its part of an entity for retro-compatibility.\n // Now, the standard is replace § by &.\n let returnValue = \"\";\n let currentEntity = null;\n for(let i = 0; i < input.length; i += 1){\n const character = input.charAt(i);\n if (currentEntity == null) {\n if (character === \"$\") {\n currentEntity = \"\";\n } else {\n returnValue += character;\n }\n } else if (character === \";\") {\n returnValue += `&${currentEntity}`;\n currentEntity = null;\n } else if (character.match(/([a-zA-Z0-9#._-] | '-')/)) {\n // Character is part of an entity.\n currentEntity += character;\n } else {\n returnValue += `$${currentEntity}`; // Is not an entity.\n currentEntity = null;\n i -= 1; // Parse again the current character.\n }\n }\n return returnValue;\n }\n /**\n * Encodes a MathML with standard XML tags to a MMathML encoded with safe XML tags.\n * We use these entities because IE doesn't support html entities on its attributes sometimes.\n * @param {string} input - input string to be encoded\n * @returns {string} encoded string.\n */ static safeXmlEncode(input) {\n const { tagOpener } = Constants.xmlCharacters;\n const { tagCloser } = Constants.xmlCharacters;\n const { doubleQuote } = Constants.xmlCharacters;\n const { ampersand } = Constants.xmlCharacters;\n const { quote } = Constants.xmlCharacters;\n input = input.split(tagOpener).join(Constants.safeXmlCharacters.tagOpener);\n input = input.split(tagCloser).join(Constants.safeXmlCharacters.tagCloser);\n input = input.split(doubleQuote).join(Constants.safeXmlCharacters.doubleQuote);\n input = input.split(ampersand).join(Constants.safeXmlCharacters.ampersand);\n input = input.split(quote).join(Constants.safeXmlCharacters.quote);\n return input;\n }\n /**\n * Converts special symbols (> 128) to entities and replaces all textual\n * entities by its number entities.\n * @param {string} mathml - MathML string containing - or not - special symbols\n * @returns {string} MathML with all textual entities replaced.\n */ static mathMLEntities(mathml) {\n let toReturn = \"\";\n for(let i = 0; i < mathml.length; i += 1){\n const character = mathml.charAt(i);\n // Parsing > 128 characters.\n if (mathml.codePointAt(i) > 128) {\n toReturn += `&#${mathml.codePointAt(i)};`;\n // For UTF-32 characters we need to move the index one position.\n if (mathml.codePointAt(i) > 0xffff) {\n i += 1;\n }\n } else if (character === \"&\") {\n const end = mathml.indexOf(\";\", i + 1);\n if (end >= 0) {\n const container = document.createElement(\"span\");\n container.innerHTML = mathml.substring(i, end + 1);\n toReturn += `&#${Util.fixedCharCodeAt(container.textContent || container.innerText, 0)};`;\n i = end;\n } else {\n toReturn += character;\n }\n } else {\n toReturn += character;\n }\n }\n return toReturn;\n }\n /**\n * Add a custom editor name with the prefix wrs_ to a MathML class attribute.\n * @param {string} mathml - a MathML string created with a custom editor, like chemistry.\n * @param {string} customEditor - custom editor name.\n * @returns {string} MathML string with his class containing the editor toolbar string.\n */ static addCustomEditorClassAttribute(mathml, customEditor) {\n let toReturn = \"\";\n const start = mathml.indexOf(\"\");\n if (mathml.indexOf(\"class\") === -1) {\n // Adding custom editor type.\n toReturn = `${mathml.substr(start, end)} class=\"wrs_${customEditor}\">`;\n toReturn += mathml.substr(end + 1, mathml.length);\n return toReturn;\n }\n }\n return mathml;\n }\n /**\n * Remove a custom editor name from the MathML class attribute.\n * @param {string} mathml - a MathML string.\n * @param {string} customEditor - custom editor name.\n * @returns {string} The input MathML without customEditor name in his class.\n */ static removeCustomEditorClassAttribute(mathml, customEditor) {\n // Discard MathML without the specified class.\n if (mathml.indexOf(\"class\") === -1 || mathml.indexOf(`wrs_${customEditor}`) === -1) {\n return mathml;\n }\n // Trivial case: class attribute value equal to editor name. Then\n // class attribute is removed.\n // First try to remove it with a space before if there is one\n // Otherwise without the space\n if (mathml.indexOf(` class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(` class=\"wrs_${customEditor}\"`, \"\");\n } else if (mathml.indexOf(`class=\"wrs_${customEditor}\"`) !== -1) {\n return mathml.replace(`class=\"wrs_${customEditor}\"`, \"\");\n }\n // Non Trivial case: class attribute contains editor name.\n return mathml.replace(`wrs_${customEditor}`, \"\");\n }\n /**\n * Adds annotation tag in MathML element.\n * @param {String} mathml - valid MathML.\n * @param {String} content - value to put inside annotation tag.\n * @param {String} annotationEncoding - annotation encoding.\n * @returns {String} - 'mathml' with an annotation that contains\n * 'content' and encoding 'encoding'.\n */ static addAnnotation(mathml, content, annotationEncoding) {\n // If contains annotation, also contains semantics tag.\n const containsAnnotation = mathml.indexOf(\"\");\n mathmlWithAnnotation = `${mathml.substring(0, closeSemanticsIndex)}${content}${mathml.substring(closeSemanticsIndex)}`;\n } else if (MathML.isEmpty(mathml)) {\n const endIndexInline = mathml.indexOf(\"/>\");\n const endIndexNonInline = mathml.indexOf(\">\");\n const endIndex = endIndexNonInline === endIndexInline ? endIndexInline : endIndexNonInline;\n mathmlWithAnnotation = `${mathml.substring(0, endIndex)}>${content}`;\n } else {\n const beginMathMLContent = mathml.indexOf(\">\") + 1;\n const endMathmlContent = mathml.lastIndexOf(\"\");\n const mathmlContent = mathml.substring(beginMathMLContent, endMathmlContent);\n mathmlWithAnnotation = `${mathml.substring(0, beginMathMLContent)}${mathmlContent}${content}`; // eslint-disable-line max-len\n }\n return mathmlWithAnnotation;\n }\n /**\n * Removes specific annotation tag in MathML element.\n * In case of remove the unique annotation, also is removed semantics tag.\n * @param {String} mathml - valid MathML.\n * @param {String} annotationEncoding - annotation encoding to remove.\n * @returns {String} - 'mathml' without the annotation encoding specified.\n */ static removeAnnotation(mathml, annotationEncoding) {\n let mathmlWithoutAnnotation = mathml;\n const openAnnotationTag = ``;\n const closeAnnotationTag = \"\";\n const startAnnotationIndex = mathml.indexOf(openAnnotationTag);\n if (startAnnotationIndex !== -1) {\n let differentAnnotationFound = false;\n let differentAnnotationIndex = mathml.indexOf(\"\\s*?()?/gm;\n // If `mrow` is found right after the `annotation` ending tag, it's removed as well\n // alongside `semantics` closing tag and the whole `annotation` tag and its contents.\n const semanticsEndingTagRegex = /(<\\/mrow>)?\\s*/gm;\n return mathml.replace(semanticsStartingTagRegex, \"\").replace(semanticsEndingTagRegex, \"\");\n }\n /**\n * Transforms all xml mathml occurrences that contain semantics to the same\n * xml mathml occurrences without semantics.\n * @param {string} text - string that can contain xml mathml occurrences.\n * @param {Constants} [characters] - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * xmlCharacters by default.\n * @returns {string} - 'text' with all xml mathml occurrences without annotation tag.\n */ static removeSemanticsOcurrences(text, characters = Constants.xmlCharacters) {\n const mathTagStart = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const mathTagEndline = `/${characters.tagCloser}`;\n const { tagCloser } = characters;\n const semanticsTagStart = `${characters.tagOpener}semantics${characters.tagCloser}`;\n const annotationTagStart = `${characters.tagOpener}annotation encoding=`;\n let output = \"\";\n let start = text.indexOf(mathTagStart);\n let end = 0;\n while(start !== -1){\n output += text.substring(end, start);\n // MathML can be written as '' or ''.\n const mathTagEndIndex = text.indexOf(mathTagEnd, start);\n const mathTagEndlineIndex = text.indexOf(mathTagEndline, start);\n const firstTagCloser = text.indexOf(tagCloser, start);\n if (mathTagEndIndex !== -1) {\n end = mathTagEndIndex;\n } else if (mathTagEndlineIndex === firstTagCloser - 1) {\n end = mathTagEndlineIndex;\n }\n const semanticsIndex = text.indexOf(semanticsTagStart, start);\n if (semanticsIndex !== -1) {\n const mmlTagStart = text.substring(start, semanticsIndex);\n const annotationIndex = text.indexOf(annotationTagStart, start);\n if (annotationIndex !== -1) {\n const startIndex = semanticsIndex + semanticsTagStart.length;\n const mmlContent = text.substring(startIndex, annotationIndex);\n output += mmlTagStart + mmlContent + mathTagEnd;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n end += mathTagEnd.length;\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n } else {\n end = start;\n start = text.indexOf(mathTagStart, start + mathTagStart.length);\n }\n }\n output += text.substring(end, text.length);\n return output;\n }\n /**\n * Returns true if a MathML contains a certain class.\n * @param {string} mathML - input MathML.\n * @param {string} className - className.\n * @returns {boolean} true if the input MathML contains the input class.\n * false otherwise.\n * @static\n */ static containClass(mathML, className) {\n const classIndex = mathML.indexOf(\"class\");\n if (classIndex === -1) {\n return false;\n }\n const classTagEndIndex = mathML.indexOf(\">\", classIndex);\n const classTag = mathML.substring(classIndex, classTagEndIndex);\n if (classTag.indexOf(className) !== -1) {\n return true;\n }\n return false;\n }\n /**\n * Returns true if mathml is empty. Otherwise, false.\n * @param {string} mathml - valid MathML with standard XML tags.\n * @returns {boolean} - true if mathml is empty. Otherwise, false.\n */ static isEmpty(mathml) {\n // MathML can have the shape or ''.\n const closeTag = \">\";\n const closeTagInline = \"/>\";\n const firstCloseTagIndex = mathml.indexOf(closeTag);\n const firstCloseTagInlineIndex = mathml.indexOf(closeTagInline);\n let empty = false;\n // MathML is always empty in the second shape.\n if (firstCloseTagInlineIndex !== -1) {\n if (firstCloseTagInlineIndex === firstCloseTagIndex - 1) {\n empty = true;\n }\n }\n // MathML is always empty in the first shape when there aren't elements\n // between math tags.\n if (!empty) {\n const mathTagEndRegex = new RegExp(\"\");\n const mathTagEndArray = mathTagEndRegex.exec(mathml);\n if (mathTagEndArray) {\n empty = firstCloseTagIndex + 1 === mathTagEndArray.index;\n }\n }\n return empty;\n }\n /**\n * Encodes html entities inside properties.\n * @param {String} mathml - valid MathML with standard XML tags.\n * @returns {String} - 'mathml' with property entities encoded.\n */ static encodeProperties(mathml) {\n // Search all the properties.\n const regex = /\\w+=\".*?\"/g;\n // Encode html entities.\n const replacer = (match)=>{\n // It has the shape:\n // .\n const quoteIndex = match.indexOf('\"');\n const propertyValue = match.substring(quoteIndex + 1, match.length - 1);\n const propertyValueEncoded = Util.htmlEntities(propertyValue);\n const matchEncoded = `${match.substring(0, quoteIndex + 1)}${propertyValueEncoded}\"`;\n return matchEncoded;\n };\n const mathmlEncoded = mathml.replace(regex, replacer);\n return mathmlEncoded;\n }\n}\n\n/**\n * This class represents the configuration class.\n * Usually used to retrieve configuration properties generated in the backend into the frontend.\n */ class Configuration {\n /**\n * Adds a properties object to {@link Configuration.properties}.\n * @param {Object} properties - properties to append to current properties.\n */ static addConfiguration(properties) {\n Object.assign(Configuration.properties, properties);\n }\n /**\n * Static property.\n * The configuration properties object.\n * @private\n * @type {Object}\n */ static get properties() {\n return Configuration._properties;\n }\n /**\n * Static property setter.\n * Set configuration properties.\n * @param {Object} value - The property value.\n * @ignore\n */ static set properties(value) {\n Configuration._properties = value;\n }\n /**\n * Returns the value of a property key.\n * @param {String} key - Property key\n * @returns {String} Property value\n */ static get(key) {\n if (!Object.prototype.hasOwnProperty.call(Configuration.properties, key)) {\n // Backwards compatibility.\n if (Object.prototype.hasOwnProperty.call(Configuration.properties, \"_wrs_conf_\")) {\n return Configuration.properties[`_wrs_conf_${key}`];\n }\n return false;\n }\n return Configuration.properties[key];\n }\n /**\n * Adds a new property to Configuration class.\n * @param {String} key - Property key.\n * @param {Object} value - Property value.\n */ static set(key, value) {\n Configuration.properties[key] = value;\n }\n /**\n * Updates a property object value with new values.\n * @param {String} key - The property key to be updated.\n * @param {Object} propertyValue - Object containing the new values.\n */ static update(key, propertyValue) {\n if (!Configuration.get(key)) {\n Configuration.set(key, propertyValue);\n } else {\n const updateProperty = Object.assign(Configuration.get(key), propertyValue);\n Configuration.set(key, updateProperty);\n }\n }\n}\n/**\n * Static properties object. Stores all configuration properties.\n * Needed to attribute accessors.\n * @private\n * @type {Object}\n */ Configuration._properties = {};\n\nclass TextCache {\n /**\n * @classdesc\n * This class represent a client-side text cache class. Contains pairs of\n * strings (key/value) which can be retrieved in any moment. Usually used\n * to store AJAX responses for text services like mathml2latex\n * (c.f {@link Latex} class) or mathml2accessible (c.f {@link Accessibility} class).\n * @constructs\n */ constructor(){\n /**\n * Cache array property storing the cache entries.\n * @type {Array.}\n */ this.cache = [];\n }\n /**\n * This method populates a key/value pair into the {@link this.cache} property.\n * @param {String} key - Cache key, usually the service string parameter.\n * @param {String} value - Cache value, usually the service response.\n */ populate(key, value) {\n this.cache[key] = value;\n }\n /**\n * Returns the cache value associated to certain cache key.\n * @param {String} key - Cache key, usually the service string parameter.\n * @return {String} value - Cache value, if exists. False otherwise.\n */ get(key) {\n if (Object.prototype.hasOwnProperty.call(this.cache, key)) {\n return this.cache[key];\n }\n return false;\n }\n}\n\n/**\n * This object represents a custom listener.\n * @typedef {Object} Listener\n * @property {String} Listener.eventName - The listener name.\n * @property {Function} Listener.callback - The listener callback function.\n */ class Listeners {\n /**\n * @classdesc\n * This class represents a custom listeners manager.\n * @constructs\n */ constructor(){\n /**\n * Array containing all custom listeners.\n * @type {Object[]}\n */ this.listeners = [];\n }\n /**\n * Add a listener to Listener class.\n * @param {Object} listener - A listener object.\n */ add(listener) {\n this.listeners.push(listener);\n }\n /**\n * Fires MathType event listeners\n * @param {String} eventName - event name\n * @param {Event} event - event object.\n * @return {boolean} false if event has been prevented. true otherwise.\n */ fire(eventName, event) {\n for(let i = 0; i < this.listeners.length && !event.cancelled; i += 1){\n if (this.listeners[i].eventName === eventName) {\n // Calling listener.\n this.listeners[i].callback(event);\n }\n }\n return event.defaultPrevented;\n }\n /**\n * Creates a new listener object.\n * @param {string} eventName - Event name.\n * @param {Object} callback - Callback function.\n * @returns {object} the listener object.\n */ static newListener(eventName, callback) {\n const listener = {};\n listener.eventName = eventName;\n listener.callback = callback;\n return listener;\n }\n}\n\n/**\n * @typedef {Object} ServiceProviderProperties\n * @property {String} URI - Service URI.\n * @property {String} server - Service server language.\n */ /**\n * @classdesc\n * Class representing a serviceProvider. A serviceProvider is a class containing\n * an arbitrary number of services with the correspondent path.\n */ class ServiceProvider {\n /**\n * Returns Service Provider listeners.\n * @type {Listeners}\n */ static get listeners() {\n return ServiceProvider._listeners;\n }\n /**\n * Adds a {@link Listener} instance to {@link ServiceProvider} class.\n * @param {Listener} listener - Instance of {@link Listener}.\n */ static addListener(listener) {\n ServiceProvider.listeners.add(listener);\n }\n /**\n * Fires events in Service Provider.\n * @param {String} eventName - Event name.\n * @param {Event} event - Event object.\n */ static fireEvent(eventName, event) {\n ServiceProvider.listeners.fire(eventName, event);\n }\n /**\n * Service parameters.\n * @type {ServiceProviderProperties}\n *\n */ static get parameters() {\n return ServiceProvider._parameters;\n }\n /**\n * Service parameters.\n * @private\n * @type {ServiceProviderProperties}\n */ static set parameters(parameters) {\n ServiceProvider._parameters = parameters;\n }\n /**\n * Static property.\n * Return service provider paths.\n * @private\n * @type {String}\n */ static get servicePaths() {\n return ServiceProvider._servicePaths;\n }\n /**\n * Static property setter.\n * Set service paths.\n * @param {String} value - The property value.\n * @ignore\n */ static set servicePaths(value) {\n ServiceProvider._servicePaths = value;\n }\n /**\n * Adds a new service to the ServiceProvider.\n * @param {String} service - Service name.\n * @param {String} path - Service path.\n * @static\n */ static setServicePath(service, path) {\n ServiceProvider.servicePaths[service] = path;\n }\n /**\n * Returns the service path for a certain service.\n * @param {String} serviceName - Service name.\n * @returns {String} The service path.\n * @static\n */ static getServicePath(serviceName) {\n return ServiceProvider.servicePaths[serviceName];\n }\n /**\n * Static property.\n * Service provider integration path.\n * @type {String}\n */ static get integrationPath() {\n return ServiceProvider._integrationPath;\n }\n /**\n * Static property setter.\n * Set service provider integration path.\n * @param {String} value - The property value.\n * @ignore\n */ static set integrationPath(value) {\n ServiceProvider._integrationPath = value;\n }\n /**\n * Returns the server URL in the form protocol://serverName:serverPort.\n * @return {String} The client side server path.\n */ static getServerURL() {\n const url = window.location.href;\n const arr = url.split(\"/\");\n const result = `${arr[0]}//${arr[2]}`;\n return result;\n }\n /**\n * Inits {@link this} class. Uses {@link this.integrationPath} as\n * base path to generate all backend services paths.\n * @param {Object} parameters - Function parameters.\n * @param {String} parameters.integrationPath - Service path.\n */ static init(parameters) {\n ServiceProvider.parameters = parameters;\n // Services path (tech dependant).\n let configurationURI = ServiceProvider.createServiceURI(\"configurationjs\");\n let createImageURI = ServiceProvider.createServiceURI(\"createimage\");\n let showImageURI = ServiceProvider.createServiceURI(\"showimage\");\n let getMathMLURI = ServiceProvider.createServiceURI(\"getmathml\");\n let serviceURI = ServiceProvider.createServiceURI(\"service\");\n // Some backend integrations (like Java o Ruby) have an absolute backend path,\n // for example: /app/service. For them we calculate the absolute URL path, i.e\n // protocol://domain:port/app/service\n if (ServiceProvider.parameters.URI.indexOf(\"/\") === 0) {\n const serverPath = ServiceProvider.getServerURL();\n configurationURI = serverPath + configurationURI;\n showImageURI = serverPath + showImageURI;\n createImageURI = serverPath + createImageURI;\n getMathMLURI = serverPath + getMathMLURI;\n serviceURI = serverPath + serviceURI;\n }\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n ServiceProvider.setServicePath(\"showimage\", showImageURI);\n ServiceProvider.setServicePath(\"createimage\", createImageURI);\n ServiceProvider.setServicePath(\"service\", serviceURI);\n ServiceProvider.setServicePath(\"getmathml\", getMathMLURI);\n ServiceProvider.setServicePath(\"configurationjs\", configurationURI);\n ServiceProvider.listeners.fire(\"onInit\", {});\n }\n /**\n * Gets the content from an URL.\n * @param {String} url - Target URL.\n * @param {Object} [postVariables] - Object containing post variables.\n * null if a GET query should be done.\n * @returns {String} Content of the target URL.\n * @private\n * @static\n */ static getUrl(url, postVariables) {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n const httpRequest = Util.createHttpRequest();\n if (httpRequest) {\n if (typeof postVariables === \"undefined\" || typeof postVariables === \"undefined\") {\n httpRequest.open(\"GET\", url, false);\n } else if (url.substr(0, 1) === \"/\" || url.substr(0, 7) === \"http://\" || url.substr(0, 8) === \"https://\") {\n httpRequest.open(\"POST\", url, false);\n } else {\n httpRequest.open(\"POST\", currentPath + url, false);\n }\n let header = Configuration.get(\"customHeaders\");\n if (header) {\n if (typeof header === \"string\") {\n header = Util.convertStringToObject(header);\n }\n Object.entries(header).forEach(([key, val])=>httpRequest.setRequestHeader(key, val));\n }\n if (typeof postVariables !== \"undefined\" && postVariables) {\n httpRequest.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n httpRequest.send(Util.httpBuildQuery(postVariables));\n } else {\n httpRequest.send(null);\n }\n return httpRequest.responseText;\n }\n return \"\";\n }\n /**\n * Returns the response text of a certain service.\n * @param {String} service - Service name.\n * @param {String} postVariables - Post variables.\n * @param {Boolean} get - True if the request is GET instead of POST. false otherwise.\n * @returns {String} Service response text.\n */ static getService(service, postVariables, get) {\n let response;\n if (get === true) {\n const getVariables = postVariables ? `?${postVariables}` : \"\";\n const serviceUrl = `${ServiceProvider.getServicePath(service)}${getVariables}`;\n response = ServiceProvider.getUrl(serviceUrl);\n } else {\n const serviceUrl = ServiceProvider.getServicePath(service);\n response = ServiceProvider.getUrl(serviceUrl, postVariables);\n }\n return response;\n }\n /**\n * Returns the server language of a certain service. The possible values\n * are: php, aspx, java and ruby.\n * This method has backward compatibility purposes.\n * @param {String} service - The configuration service.\n * @returns {String} - The server technology associated with the configuration service.\n */ static getServerLanguageFromService(service) {\n if (service.indexOf(\".php\") !== -1) {\n return \"php\";\n }\n if (service.indexOf(\".aspx\") !== -1) {\n return \"aspx\";\n }\n if (service.indexOf(\"wirispluginengine\") !== -1) {\n return \"ruby\";\n }\n return \"java\";\n }\n /**\n * Returns the URI associated with a certain service.\n * @param {String} service - The service name.\n * @return {String} The service path.\n */ static createServiceURI(service) {\n const extension = ServiceProvider.serverExtension();\n return Util.concatenateUrl(ServiceProvider.parameters.URI, service) + extension;\n }\n static serverExtension() {\n if (ServiceProvider.parameters.server.indexOf(\"php\") !== -1) {\n return \".php\";\n }\n if (ServiceProvider.parameters.server.indexOf(\"aspx\") !== -1) {\n return \".aspx\";\n }\n return \"\";\n }\n}\n/**\n * @property {String} service - The service name.\n * @property {String} path - The service path.\n * @static\n */ ServiceProvider._servicePaths = {};\n/**\n * The integration path. Contains the path of the configuration service.\n * Used to define the path for all services.\n * @type {String}\n * @private\n */ ServiceProvider._integrationPath = \"\";\n/**\n * ServiceProvider static listeners.\n * @type {Listeners}\n * @private\n */ ServiceProvider._listeners = new Listeners();\n/**\n * Service provider parameters.\n * @type {ServiceProviderParameters}\n */ ServiceProvider._parameters = {};\n\n/**\n * @classdesc\n * This class represents a LaTeX parser. Manages the services which allows to convert\n * LaTeX into MathML and MathML into LaTeX.\n */ class Latex {\n /**\n * Static property.\n * Return latex cache.\n * @private\n * @type {Cache}\n */ static get cache() {\n return Latex._cache;\n }\n /**\n * Static property setter.\n * Set latex cache.\n * @param {Cache} value - The property value.\n * @ignore\n */ static set cache(value) {\n Latex._cache = value;\n }\n /**\n * Converts MathML to LaTeX by calling mathml2latex service. For text services\n * we call a text service with the param mathml2latex.\n * @param {String} mathml - MathML String.\n * @return {String} LaTeX string generated by the MathML argument.\n */ static getLatexFromMathML(mathml) {\n const mathmlWithoutSemantics = MathML.removeSemantics(mathml);\n /**\n * @type {TextCache}\n */ const { cache } = Latex;\n const data = {\n service: \"mathml2latex\",\n mml: mathmlWithoutSemantics\n };\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n // TODO: Error handling.\n let latex = \"\";\n if (jsonResponse.status === \"ok\") {\n latex = jsonResponse.result.text;\n const latexHtmlEntitiesEncoded = Util.htmlEntities(latex);\n // Inserting LaTeX semantics.\n const mathmlWithSemantics = MathML.addAnnotation(mathml, latexHtmlEntitiesEncoded, \"LaTeX\");\n cache.populate(latex, mathmlWithSemantics);\n }\n return latex;\n }\n /**\n * Converts LaTeX to MathML by calling latex2mathml service. For text services\n * we call a text service with the param latex2mathml.\n * @param {String} latex - String containing a LaTeX formula.\n * @param {Boolean} includeLatexOnSemantics\n * - If true LaTeX would me included into MathML semantics.\n * @return {String} MathML string generated by the LaTeX argument.\n */ static getMathMLFromLatex(latex, includeLatexOnSemantics) {\n /**\n * @type {TextCache}\n */ const latexCache = Latex.cache;\n if (Latex.cache.get(latex)) {\n return Latex.cache.get(latex);\n }\n const data = {\n service: \"latex2mathml\",\n latex\n };\n if (includeLatexOnSemantics) {\n data.saveLatex = \"\";\n }\n const jsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n let output;\n if (jsonResponse.status === \"ok\") {\n let mathml = jsonResponse.result.text;\n mathml = mathml.split(\"\\r\").join(\"\").split(\"\\n\").join(\" \");\n // Populate LatexCache.\n if (mathml.indexOf(\"semantics\") === -1 && mathml.indexOf(\"annotation\") === -1) {\n const content = Util.htmlEntities(latex);\n mathml = MathML.addAnnotation(mathml, content, \"LaTeX\");\n output = mathml;\n } else {\n output = mathml;\n }\n if (!latexCache.get(latex)) {\n latexCache.populate(latex, mathml);\n }\n } else {\n output = `$$${latex}$$`;\n }\n return output;\n }\n /**\n * Converts all occurrences of MathML code to LaTeX.\n * The MathML code should containing to be converted.\n * @param {String} content - A string containing MathML valid code.\n * @param {Object} characters - An object containing special characters.\n * @return {String} A string containing all MathML annotated occurrences\n * replaced by the corresponding LaTeX code.\n */ static parseMathmlToLatex(content, characters) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n const openTarget = `${characters.tagOpener}annotation encoding=${characters.doubleQuote}LaTeX${characters.doubleQuote}${characters.tagCloser}`;\n const closeTarget = `${characters.tagOpener}/annotation${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n let mathml;\n let startAnnotation;\n let closeAnnotation;\n while(start !== -1){\n output += content.substring(end, start);\n end = content.indexOf(mathTagEnd, start);\n if (end === -1) {\n end = content.length - 1;\n } else {\n end += mathTagEnd.length;\n }\n mathml = content.substring(start, end);\n startAnnotation = mathml.indexOf(openTarget);\n if (startAnnotation !== -1) {\n startAnnotation += openTarget.length;\n closeAnnotation = mathml.indexOf(closeTarget);\n let latex = mathml.substring(startAnnotation, closeAnnotation);\n if (characters === Constants.safeXmlCharacters) {\n latex = MathML.safeXmlDecode(latex);\n }\n output += `$$${latex}$$`;\n // Populate latex into cache.\n Latex.cache.populate(latex, mathml);\n } else {\n output += mathml;\n }\n start = content.indexOf(mathTagBegin, end);\n }\n output += content.substring(end, content.length);\n return output;\n }\n /**\n * Extracts the latex of a determined position in a text.\n * @param {Node} textNode - textNode to extract the LaTeX\n * @param {Number} caretPosition - Starting position to find LaTeX.\n * @param {Object} latexTags - Optional parameter representing tags between latex is inserted.\n * It has the 'open' attribute for the open tag and the 'close' attribute for the close tag.\n * \"$$\" by default.\n * @return {Object} An object with 3 keys: 'latex', 'start' and 'end'. Null if latex is not found.\n * @static\n */ static getLatexFromTextNode(textNode, caretPosition, latexTags) {\n // TODO: Set LaTeX Tags as Core variable. Fix the call to this function (third argument).\n // Tags used for LaTeX formulas.\n const defaultLatexTags = {\n open: \"$$\",\n close: \"$$\"\n };\n // latexTags is an optional parameter. If is not set, use default latexTags.\n if (typeof latexTags === \"undefined\" || latexTags == null) {\n latexTags = defaultLatexTags;\n }\n // Looking for the first textNode.\n let startNode = textNode;\n while(startNode.previousSibling && startNode.previousSibling.nodeType === 3){\n // TEXT_NODE.\n startNode = startNode.previousSibling;\n }\n /**\n * Returns the next latex position and node from a specific node and position.\n * @param {Node} currentNode - Node where searching latex.\n * @param {Number} currentPosition - Current position inside the currentNode.\n * @param {Object} latexTagsToUse - Tags used at latex beginning and latex final.\n * \"$$\" by default.\n * @param {Boolean} tag - Tag containing the current search.\n * @returns {Object} Object containing the current node and the position.\n */ function getNextLatexPosition(currentNode, currentPosition, tag) {\n let position = currentNode.nodeValue.indexOf(tag, currentPosition);\n while(position === -1){\n currentNode = currentNode.nextSibling;\n if (!currentNode) {\n // TEXT_NODE.\n return null; // Not found.\n }\n position = currentNode.nodeValue ? currentNode.nodeValue.indexOf(latexTags.close) : -1;\n }\n return {\n node: currentNode,\n position\n };\n }\n /**\n * Determines if a node is previous, or not, to a second one.\n * @param {Node} node - Start node.\n * @param {Number} position - Start node position.\n * @param {Node} endNode - End node.\n * @param {Number} endPosition - End node position.\n * @returns {Boolean} True if the starting node is previous thant the en node. false otherwise.\n */ function isPrevious(node, position, endNode, endPosition) {\n if (node === endNode) {\n return position <= endPosition;\n }\n while(node && node !== endNode){\n node = node.nextSibling;\n }\n return node === endNode;\n }\n let start;\n let end = {\n node: startNode,\n position: 0\n };\n // Is supposed that open and close tags has the same length.\n const tagLength = latexTags.open.length;\n do {\n start = getNextLatexPosition(end.node, end.position, latexTags.open);\n if (start == null || isPrevious(textNode, caretPosition, start.node, start.position)) {\n return null;\n }\n end = getNextLatexPosition(start.node, start.position + tagLength, latexTags.close);\n if (end == null) {\n return null;\n }\n end.position += tagLength;\n }while (isPrevious(end.node, end.position, textNode, caretPosition))\n // Isolating latex.\n let latex;\n if (start.node === end.node) {\n latex = start.node.nodeValue.substring(start.position + tagLength, end.position - tagLength);\n } else {\n const index = start.position + tagLength;\n latex = start.node.nodeValue.substring(index, start.node.nodeValue.length);\n let currentNode = start.node;\n do {\n currentNode = currentNode.nextSibling;\n if (currentNode === end.node) {\n latex += end.node.nodeValue.substring(0, end.position - tagLength);\n } else {\n latex += currentNode.nodeValue ? currentNode.nodeValue : \"\";\n }\n }while (currentNode !== end.node)\n }\n return {\n latex,\n startNode: start.node,\n startPosition: start.position,\n endNode: end.node,\n endPosition: end.position\n };\n }\n}\n/**\n * Text cache. Stores all processed LaTeX strings and it's correspondent MathML string.\n * @type {Cache}\n * @static\n */ Latex._cache = new TextCache();\n\nvar ar = {\n\tlatex: \"LaTeX\",\n\tcancel: \"إلغاء\",\n\taccept: \"إدراج\",\n\tmanual: \"الدليل\",\n\tinsert_math: \"إدراج صيغة رياضية - MathType\",\n\tinsert_chem: \"إدراج صيغة كيميائية - ChemType\",\n\tminimize: \"تصغير\",\n\tmaximize: \"تكبير\",\n\tfullscreen: \"ملء الشاشة\",\n\texit_fullscreen: \"الخروج من ملء الشاشة\",\n\tclose: \"إغلاق\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"نافذة MathType مشروطة\",\n\tclose_modal_warning: \"هل تريد المغادرة بالتأكيد؟ ستُفقد التغييرات التي أجريتها.\",\n\tlatex_name_label: \"صيغة Latex\",\n\tbrowser_no_compatible: \"المستعرض غير متوافق مع تقنية AJAX. الرجاء استخدام أحدث إصدار من Mozilla Firefox.\",\n\terror_convert_accessibility: \"حدث خطأ أثناء التحويل من MathML إلى نص قابل للاستخدام.\",\n\texception_cross_site: \"البرمجة النصية للمواقع المشتركة مسموح بها لـ HTTP فقط.\",\n\texception_high_surrogate: \"المركّب المرتفع غير متبوع بمركّب منخفض في fixedCharCodeAt()‎\",\n\texception_string_length: \"سلسلة غير صالحة. يجب أن يكون الطول من مضاعفات العدد 4\",\n\texception_key_nonobject: \"Object.keys مستدعاة على غير كائن\",\n\texception_null_or_undefined: \" هذا فارغ أو غير محدد\",\n\texception_not_function: \" ليست دالة\",\n\texception_invalid_date_format: \"تنسيق تاريخ غير صالح: \",\n\texception_casting: \"لا يمكن الصياغة \",\n\texception_casting_to: \" إلى \"\n};\nvar ca = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancel·lar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir fórmula matemàtica - MathType\",\n\tinsert_chem: \"Inserir fórmula química - ChemType\",\n\tminimize: \"Minimitza\",\n\tmaximize: \"Maximitza\",\n\tfullscreen: \"Pantalla completa\",\n\texit_fullscreen: \"Sortir de la pantalla complera\",\n\tclose: \"Tanca\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \" Finestra modal de MathType\",\n\tclose_modal_warning: \"N'estàs segur que vols sortir? Es perdran els canvis que has fet.\",\n\tlatex_name_label: \"Fórmula en Latex\",\n\tbrowser_no_compatible: \"El teu navegador no és compatible amb AJAX. Si us plau, usa la darrera versió de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Error en convertir de MathML a text accessible.\",\n\texception_cross_site: \"Els scripts de llocs creuats només estan permesos per HTTP.\",\n\texception_high_surrogate: \"Subrogat alt no seguit de subrogat baix a fixedCharCodeAt()\",\n\texception_string_length: \"Cadena invàlida. La longitud ha de ser un múltiple de 4\",\n\texception_key_nonobject: \"Object.keys anomenat a non-object\",\n\texception_null_or_undefined: \" això és null o no definit\",\n\texception_not_function: \" no és una funció\",\n\texception_invalid_date_format: \"Format de data invàlid : \",\n\texception_casting: \"No es pot emetre \",\n\texception_casting_to: \" a \"\n};\nvar cs = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Storno\",\n\taccept: \"Vložit\",\n\tmanual: \"Příručka\",\n\tinsert_math: \"Vložit matematický vzorec - MathType\",\n\tinsert_chem: \"Vložení chemického vzorce – ChemType\",\n\tminimize: \"Minimalizovat\",\n\tmaximize: \"Maximalizovat\",\n\tfullscreen: \"Celá obrazovka\",\n\texit_fullscreen: \"Opustit režim celé obrazovky\",\n\tclose: \"Zavřít\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modální okno MathType\",\n\tclose_modal_warning: \"Opravdu chcete okno zavřít? Provedené změny budou ztraceny.\",\n\tlatex_name_label: \"Vzorec v LaTeXu\",\n\tbrowser_no_compatible: \"Váš prohlížeč nepodporuje technologii AJAX. Použijte nejnovější verzi prohlížeče Mozilla Firefox.\",\n\terror_convert_accessibility: \"Při převodu kódu MathML na čitelný text došlo k chybě.\",\n\texception_cross_site: \"Skriptování mezi více servery je povoleno jen v HTTP.\",\n\texception_high_surrogate: \"Ve funkci fixedCharCodeAt() nenásleduje po první části kódu znaku druhá část\",\n\texception_string_length: \"Neplatný řetězec. Délka musí být násobkem 4.\",\n\texception_key_nonobject: \"Funkce Object.keys byla použita pro prvek, který není objektem\",\n\texception_null_or_undefined: \" hodnota je null nebo není definovaná\",\n\texception_not_function: \" není funkce\",\n\texception_invalid_date_format: \"Neplatný formát data: \",\n\texception_casting: \"Nelze přetypovat \",\n\texception_casting_to: \" na \"\n};\nvar da = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annuller\",\n\taccept: \"Indsæt\",\n\tmanual: \"Brugervejledning\",\n\tinsert_math: \"Indsæt matematisk formel - MathType\",\n\tinsert_chem: \"Indsæt en kemisk formel - ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fuld skærm\",\n\texit_fullscreen: \"Afslut Fuld skærm\",\n\tclose: \"Luk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType-modalvindue\",\n\tclose_modal_warning: \"Er du sikker på, du vil lukke? Dine ændringer går tabt.\",\n\tlatex_name_label: \"LaTex-formel\",\n\tbrowser_no_compatible: \"Din browser er ikke kompatibel med AJAX-teknologi. Brug den nyeste version af Mozilla Firefox.\",\n\terror_convert_accessibility: \"Fejl under konvertering fra MathML til tilgængelig tekst.\",\n\texception_cross_site: \"Scripts på tværs af websteder er kun tilladt for HTTP.\",\n\texception_high_surrogate: \"Et højt erstatningstegn er ikke fulgt af et lavt erstatningstegn i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Længden skal være et multiplum af 4\",\n\texception_key_nonobject: \"Object.keys kaldet ved ikke-objekt\",\n\texception_null_or_undefined: \" dette er nul eller ikke defineret\",\n\texception_not_function: \" er ikke en funktion\",\n\texception_invalid_date_format: \"Ugyldigt datoformat: \",\n\texception_casting: \"Kan ikke beregne \",\n\texception_casting_to: \" til \"\n};\nvar de = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Abbrechen\",\n\taccept: \"Einfügen\",\n\tmanual: \"Handbuch\",\n\tinsert_math: \"Mathematische Formel einfügen - MathType\",\n\tinsert_chem: \"Eine chemische Formel einfügen – ChemType\",\n\tminimize: \"Verkleinern\",\n\tmaximize: \"Vergrößern\",\n\tfullscreen: \"Vollbild\",\n\texit_fullscreen: \"Vollbild schließen\",\n\tclose: \"Schließen\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modales MathType-Fenster\",\n\tclose_modal_warning: \"Bist du sicher, dass du das Programm verlassen willst? Alle vorgenommenen Änderungen gehen damit verloren.\",\n\tlatex_name_label: \"Latex-Formel\",\n\tbrowser_no_compatible: \"Dein Browser ist nicht mit der AJAX-Technologie kompatibel. Verwende bitte die neueste Version von Mozilla Firefox.\",\n\terror_convert_accessibility: \"Fehler beim Konvertieren von MathML in barrierefreien Text.\",\n\texception_cross_site: \"Cross-Site-Scripting ist nur bei HTTP zulässig.\",\n\texception_high_surrogate: \"Hoher Ersatz bei bei festerZeichenkodierungbei() nicht von niedrigem Ersatz befolgt.\",\n\texception_string_length: \"Ungültige Zeichenfolge. Länge muss ein Vielfaches von 4 sein.\",\n\texception_key_nonobject: \"Object.keys wurde für ein Nicht-Objekt aufgerufen.\",\n\texception_null_or_undefined: \" Das ist Null oder nicht definiert.\",\n\texception_not_function: \" ist keine Funktion\",\n\texception_invalid_date_format: \"Ungültiges Datumsformat: \",\n\texception_casting: \"Umwandlung nicht möglich \",\n\texception_casting_to: \" zu \"\n};\nvar el = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Άκυρο\",\n\taccept: \"Εισαγωγή\",\n\tmanual: \"Χειροκίνητα\",\n\tinsert_math: \"Εισαγωγή μαθηματικού τύπου - MathType\",\n\tinsert_chem: \"Εισαγωγή χημικού τύπου - ChemType\",\n\tminimize: \"Ελαχιστοποίηση\",\n\tmaximize: \"Μεγιστοποίηση\",\n\tfullscreen: \"Πλήρης οθόνη\",\n\texit_fullscreen: \"Έξοδος από πλήρη οθόνη\",\n\tclose: \"Κλείσιμο\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Τροπικό παράθυρο MathType\",\n\tclose_modal_warning: \"Επιθυμείτε σίγουρα αποχώρηση; Θα χαθούν οι αλλαγές που έχετε κάνει.\",\n\tlatex_name_label: \"Τύπος LaTeX\",\n\tbrowser_no_compatible: \"Το πρόγραμμα περιήγησής σας δεν είναι συμβατό με την τεχνολογία AJAX. Χρησιμοποιήστε την πιο πρόσφατη έκδοση του Mozilla Firefox.\",\n\terror_convert_accessibility: \"Σφάλμα κατά τη μετατροπή από MathML σε προσβάσιμο κείμενο.\",\n\texception_cross_site: \"Το XSS (Cross site scripting) επιτρέπεται μόνο για HTTP.\",\n\texception_high_surrogate: \"Το υψηλό υποκατάστατο δεν ακολουθείται από χαμηλό υποκατάστατο στο fixedCharCodeAt()\",\n\texception_string_length: \"Μη έγκυρη συμβολοσειρά. Το μήκος πρέπει να είναι πολλαπλάσιο του 4\",\n\texception_key_nonobject: \"Έγινε κλήση του Object.keys σε μη αντικείμενο\",\n\texception_null_or_undefined: \" αυτό είναι μηδενικό ή δεν έχει οριστεί\",\n\texception_not_function: \" δεν είναι συνάρτηση\",\n\texception_invalid_date_format: \"Μη έγκυρη μορφή ημερομηνίας: \",\n\texception_casting: \"Δεν είναι δυνατή η μετατροπή \",\n\texception_casting_to: \" σε \"\n};\nvar en = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancel\",\n\taccept: \"Insert\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Insert a math equation - MathType\",\n\tinsert_chem: \"Insert a chemistry formula - ChemType\",\n\tminimize: \"Minimize\",\n\tmaximize: \"Maximize\",\n\tfullscreen: \"Full-screen\",\n\texit_fullscreen: \"Exit full-screen\",\n\tclose: \"Close\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modal window\",\n\tclose_modal_warning: \"Are you sure you want to leave? The changes you made will be lost.\",\n\tlatex_name_label: \"Latex Formula\",\n\tbrowser_no_compatible: \"Your browser is not compatible with AJAX technology. Please, use the latest version of Mozilla Firefox.\",\n\terror_convert_accessibility: \"Error converting from MathML to accessible text.\",\n\texception_cross_site: \"Cross site scripting is only allowed for HTTP.\",\n\texception_high_surrogate: \"High surrogate not followed by low surrogate in fixedCharCodeAt()\",\n\texception_string_length: \"Invalid string. Length must be a multiple of 4\",\n\texception_key_nonobject: \"Object.keys called on non-object\",\n\texception_null_or_undefined: \" this is null or not defined\",\n\texception_not_function: \" is not a function\",\n\texception_invalid_date_format: \"Invalid date format : \",\n\texception_casting: \"Cannot cast \",\n\texception_casting_to: \" to \"\n};\nvar es = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Insertar\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Insertar fórmula matemática - MathType\",\n\tinsert_chem: \"Insertar fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Pantalla completa\",\n\texit_fullscreen: \"Salir de pantalla completa\",\n\tclose: \"Cerrar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Ventana modal de MathType\",\n\tclose_modal_warning: \"Seguro que quieres cerrar? Los cambios que has hecho se perderán\",\n\tlatex_name_label: \"Formula en Latex\",\n\tbrowser_no_compatible: \"Tu navegador no es complatible con AJAX. Por favor, usa la última version de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Error conviertiendo una fórmula MathML a texto accesible.\",\n\texception_cross_site: \"Cross site scripting solo está permitido para HTTP.\",\n\texception_high_surrogate: \"Subrogado alto no seguido por subrogado bajo en fixedCharCodeAt()\",\n\texception_string_length: \"Cadena no válida. La longitud debe ser múltiplo de 4\",\n\texception_key_nonobject: \"Object.keys called on non-object\",\n\texception_null_or_undefined: \" esto es null o no definido\",\n\texception_not_function: \" no es una función\",\n\texception_invalid_date_format: \"Formato de fecha inválido: \",\n\texception_casting: \"No se puede emitir\",\n\texception_casting_to: \" a \"\n};\nvar et = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Loobu\",\n\taccept: \"Lisa\",\n\tmanual: \"Käsiraamat\",\n\tinsert_math: \"Lisa matemaatiline valem – WIRIS\",\n\tinsert_chem: \"Lisa keemiline valem – ChemType\",\n\tminimize: \"Minimeeri\",\n\tmaximize: \"Maksimeeri\",\n\tfullscreen: \"Täiskuva\",\n\texit_fullscreen: \"Välju täiskuvalt\",\n\tclose: \"Sule\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType'i modaalaken\",\n\tclose_modal_warning: \"Kas soovite kindlasti lahkuda? Tehtud muudatused lähevad kaduma.\",\n\tlatex_name_label: \"Latexi valem\",\n\tbrowser_no_compatible: \"Teie brauser ei ühildu AJAXi tehnoloogiaga. Palun kasutage Mozilla Firefoxi uusimat versiooni.\",\n\terror_convert_accessibility: \"Tõrge teisendamisel MathML-ist muudetavaks tekstiks.\",\n\texception_cross_site: \"Ristskriptimine on lubatud ainult HTTP kasutamisel.\",\n\texception_high_surrogate: \"Funktsioonis fixedCharCodeAt() ei järgne kõrgemale asendusliikmele madalam asendusliige.\",\n\texception_string_length: \"Vigane string. Pikkus peab olema 4 kordne.\",\n\texception_key_nonobject: \"Protseduur Object.keys kutsuti mitteobjekti korral.\",\n\texception_null_or_undefined: \" see on null või määramata\",\n\texception_not_function: \" ei ole funktsioon\",\n\texception_invalid_date_format: \"Sobimatu kuupäeva kuju: \",\n\texception_casting: \"Esitamine ei õnnestu \",\n\texception_casting_to: \" – \"\n};\nvar eu = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Ezeztatu\",\n\taccept: \"Txertatu\",\n\tmanual: \"Gida\",\n\tinsert_math: \"Txertatu matematikako formula - MathType\",\n\tinsert_chem: \"Txertatu formula kimiko bat - ChemType\",\n\tminimize: \"Ikonotu\",\n\tmaximize: \"Maximizatu\",\n\tfullscreen: \"Pantaila osoa\",\n\texit_fullscreen: \"Irten pantaila osotik\",\n\tclose: \"Itxi\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType leiho modala\",\n\tclose_modal_warning: \"Ziur irten nahi duzula? Egiten dituzun aldaketak galdu egingo dira.\",\n\tlatex_name_label: \"LaTex Formula\",\n\tbrowser_no_compatible: \"Zure arakatzailea ez da bateragarria AJAX teknologiarekin. Erabili Mozilla Firefoxen azken bertsioa.\",\n\terror_convert_accessibility: \"Errorea MathMLtik testu irisgarrira bihurtzean.\",\n\texception_cross_site: \"Gune arteko scriptak HTTPrako soilik onartzen dira.\",\n\texception_high_surrogate: \"Ordezko baxuak ez dio ordezko altuari jarraitzen, hemen: fixedCharCodeAt()\",\n\texception_string_length: \"Kate baliogabea. Luzerak 4ren multiploa izan behar du\",\n\texception_key_nonobject: \"Object.keys deitu zaio objektua ez den zerbaiti\",\n\texception_null_or_undefined: \" nulua edo definitu gabea da\",\n\texception_not_function: \" ez da funtzio bat\",\n\texception_invalid_date_format: \"Data-formatu baliogabea : \",\n\texception_casting: \"Ezin da igorri \",\n\texception_casting_to: \" honi \"\n};\nvar fi = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Peruuta\",\n\taccept: \"Lisää\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Liitä matemaattinen kaava - MathType\",\n\tinsert_chem: \"Lisää kemian kaava - ChemType\",\n\tminimize: \"Pienennä\",\n\tmaximize: \"Suurenna\",\n\tfullscreen: \"Koko ruutu\",\n\texit_fullscreen: \"Poistu koko ruudun tilasta\",\n\tclose: \"Sulje\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathTypen modaalinen ikkuna\",\n\tclose_modal_warning: \"Oletko varma, että haluat poistua? Menetät tekemäsi muutokset.\",\n\tlatex_name_label: \"Latex-kaava\",\n\tbrowser_no_compatible: \"Selaimesi ei tue AJAX-tekniikkaa. Ole hyvä ja käytä uusinta Firefox-versiota.\",\n\terror_convert_accessibility: \"Virhe muunnettaessa MathML:stä tekstiksi.\",\n\texception_cross_site: \"Cross site scripting sallitaan vain HTTP:llä.\",\n\texception_high_surrogate: \"fixedCharCodeAt(): yläsijaismerkkiä ei seurannut alasijaismerkki\",\n\texception_string_length: \"Epäkelpo merkkijono. Pituuden on oltava 4:n kerrannainen\",\n\texception_key_nonobject: \"Object.keys kutsui muuta kuin oliota\",\n\texception_null_or_undefined: \" tämä on null tai ei määritelty\",\n\texception_not_function: \" ei ole funktio\",\n\texception_invalid_date_format: \"Virheellinen päivämäärämuoto : \",\n\texception_casting: \"Ei voida muuntaa tyyppiä \",\n\texception_casting_to: \" tyyppiin \"\n};\nvar fr = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annuler\",\n\taccept: \"Insérer\",\n\tmanual: \"Manuel\",\n\tinsert_math: \"Insérer une formule mathématique - MathType\",\n\tinsert_chem: \"Insérer une formule chimique - ChemType\",\n\tminimize: \"Minimiser\",\n\tmaximize: \"Maximiser\",\n\tfullscreen: \"Plein écran\",\n\texit_fullscreen: \"Quitter le plein écran\",\n\tclose: \"Fermer\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Fenêtre modale MathType\",\n\tclose_modal_warning: \"Confirmez-vous vouloir fermer ? Les changements effectués seront perdus.\",\n\tlatex_name_label: \"Formule LaTeX\",\n\tbrowser_no_compatible: \"Votre navigateur n’est pas compatible avec la technologie AJAX. Veuillez utiliser la dernière version de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Une erreur de conversion du format MathML en texte accessible est survenue.\",\n\texception_cross_site: \"Le cross-site scripting n’est autorisé que pour HTTP.\",\n\texception_high_surrogate: \"Substitut élevé non suivi d’un substitut inférieur dans fixedCharCodeAt()\",\n\texception_string_length: \"Chaîne non valide. Longueur limitée aux multiples de 4\",\n\texception_key_nonobject: \"Object.keys appelé sur un non-objet\",\n\texception_null_or_undefined: \" nul ou non défini\",\n\texception_not_function: \" n’est pas une fonction\",\n\texception_invalid_date_format: \"Format de date non valide : \",\n\texception_casting: \"Impossible de convertir \",\n\texception_casting_to: \" sur \"\n};\nvar gl = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir unha fórmula matemática - MathType\",\n\tinsert_chem: \"Inserir unha fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Pantalla completa\",\n\texit_fullscreen: \"Saír da pantalla completa\",\n\tclose: \"Pechar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Ventá modal de MathType\",\n\tclose_modal_warning: \"Seguro que quere saír? Perderanse os cambios realizados.\",\n\tlatex_name_label: \"Fórmula Latex\",\n\tbrowser_no_compatible: \"O seu explorador non é compatible coa tecnoloxía AJAX. Use a versión máis recente de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Erro ao converter de MathML a texto accesible.\",\n\texception_cross_site: \"Os scripts de sitios só se permiten para HTTP.\",\n\texception_high_surrogate: \"Suplente superior non seguido por suplente inferior en fixedCharCodeAt()\",\n\texception_string_length: \"Cadea non válida. A lonxitude debe ser un múltiplo de 4\",\n\texception_key_nonobject: \"Claves de obxecto chamadas en non obxecto\",\n\texception_null_or_undefined: \" nulo ou non definido\",\n\texception_not_function: \" non é unha función\",\n\texception_invalid_date_format: \"Formato de data non válido: \",\n\texception_casting: \"Non se pode converter \",\n\texception_casting_to: \" a \"\n};\nvar he = {\n\tlatex: \"LaTeX\",\n\tcancel: \"ביטול\",\n\taccept: \"עדכון\",\n\tmanual: \"ידני\",\n\tinsert_math: \"הוספת נוסחה מתמטית - MathType\",\n\tinsert_chem: \"הוספת כתיבה כימית - ChemType\",\n\tminimize: \"מזערי\",\n\tmaximize: \"מרבי\",\n\tfullscreen: \"מסך מלא\",\n\texit_fullscreen: \"יציאה ממצב מסך מלא\",\n\tclose: \"סגירה\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"חלון מודאלי של MathType\",\n\tclose_modal_warning: \"האם לצאת? שינויים אשר בוצעו ימחקו.\",\n\tlatex_name_label: \"נוסחת Latex\",\n\tbrowser_no_compatible: \"הדפדפן שלך אינו תואם לטכנולוגיית AJAX. יש להשתמש בגרסה העדכנית ביותר של Mozilla Firefox.\",\n\terror_convert_accessibility: \"שגיאה בהמרה מ-MathML לטקסט נגיש.\",\n\texception_cross_site: \"סקריפטינג חוצה-אתרים מורשה עבור HTTP בלבד.\",\n\texception_high_surrogate: \"ערך ממלא מקום גבוה אינו מופיע אחרי ערך ממלא מקום נמוך ב-fixedCharCodeAt()‎\",\n\texception_string_length: \"מחרוזת לא חוקית. האורך חייב להיות כפולה של 4\",\n\texception_key_nonobject: \"בוצעה קריאה אל Object.keys ברכיב שאינו אובייקט\",\n\texception_null_or_undefined: \" הוא Null או לא מוגדר\",\n\texception_not_function: \"איננה פונקציה\",\n\texception_invalid_date_format: \"תסדיר תאריך אינו תקין : \",\n\texception_casting: \"לא ניתן להמיר \",\n\texception_casting_to: \" ל \"\n};\nvar hr = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Poništi\",\n\taccept: \"Umetni\",\n\tmanual: \"Priručnik\",\n\tinsert_math: \"Umetnite matematičku formulu - MathType\",\n\tinsert_chem: \"Umetnite kemijsku formulu - ChemType\",\n\tminimize: \"Minimiziraj\",\n\tmaximize: \"Maksimiziraj\",\n\tfullscreen: \"Cijeli zaslon\",\n\texit_fullscreen: \"Izlaz iz prikaza na cijelom zaslonu\",\n\tclose: \"Zatvori\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modalni prozor\",\n\tclose_modal_warning: \"Sigurno želite zatvoriti? Izgubit će se unesene promjene.\",\n\tlatex_name_label: \"Latex formula\",\n\tbrowser_no_compatible: \"Vaš preglednik nije kompatibilan s AJAX tehnologijom. Upotrijebite najnoviju verziju Mozilla Firefoxa.\",\n\terror_convert_accessibility: \"Pogreška konverzije iz MathML-a u dostupni tekst.\",\n\texception_cross_site: \"Skriptiranje na različitim web-mjestima dopušteno je samo za HTTP.\",\n\texception_high_surrogate: \"Iza visoke zamjene ne slijedi niska zamjena u fixedCharCodeAt()\",\n\texception_string_length: \"Nevažeći niz. Duljina mora biti višekratnik broja 4\",\n\texception_key_nonobject: \"Object.keys pozvano na ne-objekt\",\n\texception_null_or_undefined: \" ovo je nula ili nije definirano\",\n\texception_not_function: \" nije funkcija\",\n\texception_invalid_date_format: \"Nevažeći format datuma : \",\n\texception_casting: \"Ne može se poslati \",\n\texception_casting_to: \" na \"\n};\nvar hu = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Mégsem\",\n\taccept: \"Beszúrás\",\n\tmanual: \"Kézikönyv\",\n\tinsert_math: \"Matematikai képlet beszúrása - MathType\",\n\tinsert_chem: \"Kémiai képet beillesztése - ChemType\",\n\tminimize: \"Kis méret\",\n\tmaximize: \"Nagy méret\",\n\tfullscreen: \"Teljes képernyő\",\n\texit_fullscreen: \"Teljes képernyő elhagyása\",\n\tclose: \"Bezárás\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modális ablak\",\n\tclose_modal_warning: \"Biztosan kilép? A módosítások el fognak veszni.\",\n\tlatex_name_label: \"Latex képlet\",\n\tbrowser_no_compatible: \"A böngészője nem kompatibilis az AJAX technológiával. Használja a Mozilla Firefox legújabb verzióját.\",\n\terror_convert_accessibility: \"Hiba lépett fel a MathML szöveggé történő konvertálása során.\",\n\texception_cross_site: \"Az oldalak közti scriptelés csak HTTP esetén engedélyezett.\",\n\texception_high_surrogate: \"A magas helyettesítő karaktert nem alacsony helyettesítő karakter követi a fixedCharCodeAt() esetében\",\n\texception_string_length: \"Érvénytelen karakterlánc. A hossznak a 4 többszörösének kell lennie\",\n\texception_key_nonobject: \"Az Object.keys egy nem objektumra került meghívásra\",\n\texception_null_or_undefined: \" null vagy nem definiált\",\n\texception_not_function: \" nem függvény\",\n\texception_invalid_date_format: \"Érvénytelen dátumformátum: \",\n\texception_casting: \"Nem alkalmazható \",\n\texception_casting_to: \" erre \"\n};\nvar id = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Membatalkan\",\n\taccept: \"Masukkan\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Masukkan rumus matematika - MathType\",\n\tinsert_chem: \"Masukkan rumus kimia - ChemType\",\n\tminimize: \"Minikan\",\n\tmaximize: \"Perbesar\",\n\tfullscreen: \"Layar penuh\",\n\texit_fullscreen: \"Keluar layar penuh\",\n\tclose: \"Tutup\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Jendela modal MathType\",\n\tclose_modal_warning: \"Anda yakin ingin keluar? Anda akan kehilangan perubahan yang Anda buat.\",\n\tlatex_name_label: \"Rumus Latex\",\n\tbrowser_no_compatible: \"Penjelajah Anda tidak kompatibel dengan teknologi AJAX. Harap gunakan Mozilla Firefox versi terbaru.\",\n\terror_convert_accessibility: \"Kesalahan konversi dari MathML menjadi teks yang dapat diakses.\",\n\texception_cross_site: \"Skrip lintas situs hanya diizinkan untuk HTTP.\",\n\texception_high_surrogate: \"Pengganti tinggi tidak diikuti oleh pengganti rendah di fixedCharCodeAt()\",\n\texception_string_length: \"String tidak valid. Panjang harus kelipatan 4\",\n\texception_key_nonobject: \"Object.keys meminta nonobjek\",\n\texception_null_or_undefined: \" ini tidak berlaku atau tidak didefinisikan\",\n\texception_not_function: \" bukan sebuah fungsi\",\n\texception_invalid_date_format: \"Format tanggal tidak valid : \",\n\texception_casting: \"Tidak dapat mentransmisikan \",\n\texception_casting_to: \" untuk \"\n};\nvar it = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annulla\",\n\taccept: \"Inserisci\",\n\tmanual: \"Manuale\",\n\tinsert_math: \"Inserisci una formula matematica - MathType\",\n\tinsert_chem: \"Inserisci una formula chimica - ChemType\",\n\tminimize: \"Riduci a icona\",\n\tmaximize: \"Ingrandisci\",\n\tfullscreen: \"Schermo intero\",\n\texit_fullscreen: \"Esci da schermo intero\",\n\tclose: \"Chiudi\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Finestra modale di MathType\",\n\tclose_modal_warning: \"Confermi di voler uscire? Le modifiche effettuate andranno perse.\",\n\tlatex_name_label: \"Formula LaTeX\",\n\tbrowser_no_compatible: \"Il tuo browser non è compatibile con la tecnologia AJAX. Utilizza la versione più recente di Mozilla Firefox.\",\n\terror_convert_accessibility: \"Errore durante la conversione da MathML in testo accessibile.\",\n\texception_cross_site: \"Lo scripting tra siti è consentito solo per HTTP.\",\n\texception_high_surrogate: \"Surrogato alto non seguito da surrogato basso in fixedCharCodeAt()\",\n\texception_string_length: \"Stringa non valida. La lunghezza deve essere un multiplo di 4\",\n\texception_key_nonobject: \"Metodo Object.keys richiamato in un elemento non oggetto\",\n\texception_null_or_undefined: \" questo è un valore null o non definito\",\n\texception_not_function: \" non è una funzione\",\n\texception_invalid_date_format: \"Formato di data non valido: \",\n\texception_casting: \"Impossibile eseguire il cast \",\n\texception_casting_to: \" a \"\n};\nvar ja = {\n\tlatex: \"LaTeX\",\n\tcancel: \"キャンセル\",\n\taccept: \"挿入\",\n\tmanual: \"マニュアル\",\n\tinsert_math: \"数式を挿入 - MathType\",\n\tinsert_chem: \"化学式を挿入 - ChemType\",\n\tminimize: \"最小化\",\n\tmaximize: \"最大化\",\n\tfullscreen: \"全画面表示\",\n\texit_fullscreen: \"全画面表示を解除\",\n\tclose: \"閉じる\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType モードウィンドウ\",\n\tclose_modal_warning: \"このページから移動してもよろしいですか?変更内容は失われます。\",\n\tlatex_name_label: \"LaTeX 数式\",\n\tbrowser_no_compatible: \"お使いのブラウザは、AJAX 技術と互換性がありません。Mozilla Firefox の最新バージョンをご使用ください。\",\n\terror_convert_accessibility: \"MathML からアクセシブルなテキストへの変換中にエラーが発生しました。\",\n\texception_cross_site: \"クロスサイトスクリプティングは、HTTP のみに許可されています。\",\n\texception_high_surrogate: \"fixedCharCodeAt()で上位サロゲートの後に下位サロゲートがありません\",\n\texception_string_length: \"無効な文字列です。長さは4の倍数である必要があります\",\n\texception_key_nonobject: \"Object.keys が非オブジェクトで呼び出されました\",\n\texception_null_or_undefined: \" null であるか、定義されていません\",\n\texception_not_function: \" は関数ではありません\",\n\texception_invalid_date_format: \"無効な日付形式: \",\n\texception_casting: \"次にキャスト \",\n\texception_casting_to: \" できません \"\n};\nvar ko = {\n\tlatex: \"LaTeX\",\n\tcancel: \"취소\",\n\taccept: \"삽입\",\n\tmanual: \"설명서\",\n\tinsert_math: \"수학 공식 삽입 - MathType\",\n\tinsert_chem: \"화학 공식 입력하기 - ChemType\",\n\tminimize: \"최소화\",\n\tmaximize: \"최대화\",\n\tfullscreen: \"전체 화면\",\n\texit_fullscreen: \"전체 화면 나가기\",\n\tclose: \"닫기\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType 모달 창\",\n\tclose_modal_warning: \"정말로 나가시겠습니까? 변경 사항이 손실됩니다.\",\n\tlatex_name_label: \"Latex 공식\",\n\tbrowser_no_compatible: \"사용자의 브라우저는 AJAX 기술과 호환되지 않습니다. Mozilla Firefox 최신 버전을 사용하십시오.\",\n\terror_convert_accessibility: \"MathML로부터 접근 가능한 텍스트로 오류 변환.\",\n\texception_cross_site: \"사이트 교차 스크립팅은 HTTP 환경에서만 사용할 수 있습니다.\",\n\texception_high_surrogate: \"fixedCharCodeAt()에서는 상위 서러게이트 뒤에 하위 서러게이트가 붙지 않습니다\",\n\texception_string_length: \"유효하지 않은 스트링입니다. 길이는 4의 배수여야 합니다\",\n\texception_key_nonobject: \"Object.keys가 non-object를 요청하였습니다\",\n\texception_null_or_undefined: \" Null값이거나 정의되지 않았습니다\",\n\texception_not_function: \" 함수가 아닙니다\",\n\texception_invalid_date_format: \"유효하지 않은 날짜 포맷 : \",\n\texception_casting: \"캐스팅할 수 없습니다 \",\n\texception_casting_to: \" (으)로 \"\n};\nvar nl = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Annuleren\",\n\tinsert_chem: \"Een scheikundige formule invoegen - ChemType\",\n\tminimize: \"Minimaliseer\",\n\tmaximize: \"Maximaliseer\",\n\tfullscreen: \"Schermvullend\",\n\texit_fullscreen: \"Verlaat volledig scherm\",\n\tclose: \"Sluit\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modaal venster MathType\",\n\tclose_modal_warning: \"Weet je zeker dat je de app wilt sluiten? De gemaakte wijzigingen gaan verloren.\",\n\tlatex_name_label: \"LaTeX-formule\",\n\tbrowser_no_compatible: \"Je browser is niet compatibel met AJAX-technologie. Gebruik de meest recente versie van Mozilla Firefox.\",\n\terror_convert_accessibility: \"Fout bij conversie van MathML naar toegankelijke tekst.\",\n\texception_cross_site: \"Cross-site scripting is alleen toegestaan voor HTTP.\",\n\texception_high_surrogate: \"Hoog surrogaat niet gevolgd door laag surrogaat in fixedCharCodeAt()\",\n\texception_string_length: \"Ongeldige tekenreeks. Lengte moet een veelvoud van 4 zijn\",\n\texception_key_nonobject: \"Object.keys opgeroepen voor niet-object\",\n\texception_null_or_undefined: \" dit is nul of niet gedefinieerd\",\n\texception_not_function: \" is geen functie\",\n\texception_invalid_date_format: \"Ongeldige datumnotatie: \",\n\texception_casting: \"Kan niet weergeven \",\n\texception_casting_to: \" op \"\n};\nvar no = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Set inn\",\n\tmanual: \"Håndbok\",\n\tinsert_math: \"Sett inn matematikkformel - MathType\",\n\tinsert_chem: \"Set inn ein kjemisk formel – ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fullskjerm\",\n\texit_fullscreen: \"Avslutt fullskjerm\",\n\tclose: \"Lukk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modalt MathType-vindu\",\n\tclose_modal_warning: \"Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.\",\n\tlatex_name_label: \"LaTeX-formel\",\n\tbrowser_no_compatible: \"Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Feil under konvertering frå MathML til tilgjengeleg tekst.\",\n\texception_cross_site: \"Skripting på tvers av nettstadar er bere tillaten med HTTP.\",\n\texception_high_surrogate: \"Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Lengda må vera deleleg på 4\",\n\texception_key_nonobject: \"Object.keys kalla på eit ikkje-objekt\",\n\texception_null_or_undefined: \" dette er null eller ikkje definert\",\n\texception_not_function: \" er ikkje ein funksjon\",\n\texception_invalid_date_format: \"Ugyldig datoformat: \",\n\texception_casting: \"Kan ikkje bruka casting \",\n\texception_casting_to: \" til \"\n};\nvar nb = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Insert\",\n\tmanual: \"Håndbok\",\n\tinsert_math: \"Sett inn matematikkformel - MathType\",\n\tinsert_chem: \"Sett inn en kjemisk formel – ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fullskjerm\",\n\texit_fullscreen: \"Avslutt fullskjerm\",\n\tclose: \"Lukk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modalt MathType-vindu\",\n\tclose_modal_warning: \"Er du sikker på at du vil gå ut? Endringene du har gjort, vil gå tapt.\",\n\tlatex_name_label: \"LaTeX-formel\",\n\tbrowser_no_compatible: \"Nettleseren er ikke kompatibel med AJAX-teknologien. Bruk den nyeste versjonen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Feil under konvertering fra MathML til tilgjengelig tekst.\",\n\texception_cross_site: \"Skripting på tvers av nettsteder er bare tillatt med HTTP.\",\n\texception_high_surrogate: \"Høyt surrogat etterfølges ikke av lavt surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Lengden må være delelig på 4\",\n\texception_key_nonobject: \"Object.keys kalte på et ikke-objekt\",\n\texception_null_or_undefined: \" dette er null eller ikke definert\",\n\texception_not_function: \" er ikke en funksjon\",\n\texception_invalid_date_format: \"Ugyldig datoformat: \",\n\texception_casting: \"Kan ikke bruke casting \",\n\texception_casting_to: \" til \"\n};\nvar nn = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Set inn\",\n\tmanual: \"Håndbok\",\n\tinsert_math: \"Sett inn matematikkformel - MathType\",\n\tinsert_chem: \"Set inn ein kjemisk formel – ChemType\",\n\tminimize: \"Minimer\",\n\tmaximize: \"Maksimer\",\n\tfullscreen: \"Fullskjerm\",\n\texit_fullscreen: \"Avslutt fullskjerm\",\n\tclose: \"Lukk\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Modalt MathType-vindu\",\n\tclose_modal_warning: \"Er du sikker på at du vil gå ut? Endringane du har gjort, vil gå tapt.\",\n\tlatex_name_label: \"LaTeX-formel\",\n\tbrowser_no_compatible: \"Nettlesaren er ikkje kompatibel med AJAX-teknologien. Bruk den nyaste versjonen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Feil under konvertering frå MathML til tilgjengeleg tekst.\",\n\texception_cross_site: \"Skripting på tvers av nettstadar er bere tillaten med HTTP.\",\n\texception_high_surrogate: \"Høgt surrogat er ikkje etterfølgt av lågt surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ugyldig streng. Lengda må vera deleleg på 4\",\n\texception_key_nonobject: \"Object.keys kalla på eit ikkje-objekt\",\n\texception_null_or_undefined: \" dette er null eller ikkje definert\",\n\texception_not_function: \" er ikkje ein funksjon\",\n\texception_invalid_date_format: \"Ugyldig datoformat: \",\n\texception_casting: \"Kan ikkje bruka casting \",\n\texception_casting_to: \" til \"\n};\nvar pl = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Anuluj\",\n\taccept: \"Wstaw\",\n\tmanual: \"Instrukcja\",\n\tinsert_math: \"Wstaw formułę matematyczną - MathType\",\n\tinsert_chem: \"Wstaw wzór chemiczny — ChemType\",\n\tminimize: \"Minimalizuj\",\n\tmaximize: \"Maksymalizuj\",\n\tfullscreen: \"Pełny ekran\",\n\texit_fullscreen: \"Opuść tryb pełnoekranowy\",\n\tclose: \"Zamknij\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Okno modalne MathType\",\n\tclose_modal_warning: \"Czy na pewno chcesz zamknąć? Wprowadzone zmiany zostaną utracone.\",\n\tlatex_name_label: \"Wzór Latex\",\n\tbrowser_no_compatible: \"Twoja przeglądarka jest niezgodna z technologią AJAX Użyj najnowszej wersji Mozilla Firefox.\",\n\terror_convert_accessibility: \"Błąd podczas konwertowania z formatu MathML na dostępny tekst.\",\n\texception_cross_site: \"Krzyżowanie skryptów witryny jest dozwolone tylko dla HTTP.\",\n\texception_high_surrogate: \"Brak niskiego surogatu po wysokim surogacie w fixedCharCodeAt()\",\n\texception_string_length: \"Niewłaściwy ciąg znaków. Długość musi być wielokrotnością liczby 4.\",\n\texception_key_nonobject: \"Argumentem wywołanej funkcji Object.key nie jest obiekt.\",\n\texception_null_or_undefined: \" jest zerowy lub niezdefiniowany\",\n\texception_not_function: \" nie jest funkcją\",\n\texception_invalid_date_format: \"Nieprawidłowy format daty: \",\n\texception_casting: \"Nie można rzutować \",\n\texception_casting_to: \" na \"\n};\nvar pt = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir fórmula matemática - MathType\",\n\tinsert_chem: \"Inserir uma fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Ecrã completo\",\n\texit_fullscreen: \"Sair do ecrã completo\",\n\tclose: \"Fechar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Janela modal do MathType\",\n\tclose_modal_warning: \"Pretende sair? As alterações efetuadas serão perdidas.\",\n\tlatex_name_label: \"Fórmula Latex\",\n\tbrowser_no_compatible: \"O seu navegador não é compatível com a tecnologia AJAX. Utilize a versão mais recente do Mozilla Firefox.\",\n\terror_convert_accessibility: \"Erro ao converter de MathML para texto acessível.\",\n\texception_cross_site: \"O processamento de scripts em vários sites só é permitido para HTTP.\",\n\texception_high_surrogate: \"Substituto alto não seguido por um substituto baixo em fixedCharCodeAt()\",\n\texception_string_length: \"Cadeia inválida. O comprimento tem de ser um múltiplo de 4\",\n\texception_key_nonobject: \"Object.keys chamou um não-objeto\",\n\texception_null_or_undefined: \" é nulo ou não está definido\",\n\texception_not_function: \" não é uma função\",\n\texception_invalid_date_format: \"Formato de data inválido: \",\n\texception_casting: \"Não é possível adicionar \",\n\texception_casting_to: \" até \"\n};\nvar pt_br = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Cancelar\",\n\taccept: \"Inserir\",\n\tmanual: \"Manual\",\n\tinsert_math: \"Inserir fórmula matemática - MathType\",\n\tinsert_chem: \"Insira uma fórmula química - ChemType\",\n\tminimize: \"Minimizar\",\n\tmaximize: \"Maximizar\",\n\tfullscreen: \"Tela cheia\",\n\texit_fullscreen: \"Sair de tela cheia\",\n\tclose: \"Fechar\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Janela modal do MathType\",\n\tclose_modal_warning: \"Tem certeza de que deseja sair? Todas as alterações serão perdidas.\",\n\tlatex_name_label: \"Fórmula LaTeX\",\n\tbrowser_no_compatible: \"O navegador não é compatível com a tecnologia AJAX. Use a versão mais recente do Mozilla Firefox.\",\n\terror_convert_accessibility: \"Erro ao converter de MathML para texto acessível.\",\n\texception_cross_site: \"O uso de scripts entre sites só é permitido para HTTP.\",\n\texception_high_surrogate: \"High surrogate não seguido de low surrogate em fixedCharCodeAt()\",\n\texception_string_length: \"String inválida. O comprimento deve ser um múltiplo de 4\",\n\texception_key_nonobject: \"Object.keys chamados em não objeto\",\n\texception_null_or_undefined: \" isto é nulo ou não definido\",\n\texception_not_function: \" não é uma função\",\n\texception_invalid_date_format: \"Formato de data inválido: \",\n\texception_casting: \"Não é possível transmitir \",\n\texception_casting_to: \" para \"\n};\nvar ro = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Anulare\",\n\taccept: \"Inserați\",\n\tmanual: \"Ghid\",\n\tinsert_math: \"Inserați o formulă matematică - MathType\",\n\tinsert_chem: \"Inserați o formulă chimică - ChemType\",\n\tminimize: \"Minimizați\",\n\tmaximize: \"Maximizați\",\n\tfullscreen: \"Afișați pe tot ecranul\",\n\texit_fullscreen: \"Opriți afișarea pe tot ecranul\",\n\tclose: \"Închideți\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Fereastră modală MathType\",\n\tclose_modal_warning: \"Sigur doriți să ieșiți? Modificările realizate se vor pierde.\",\n\tlatex_name_label: \"Formulă Latex\",\n\tbrowser_no_compatible: \"Browserul dvs. nu este compatibil cu tehnologia AJAX. Utilizați cea mai recentă versiune de Mozilla Firefox.\",\n\terror_convert_accessibility: \"Eroare la convertirea din MathML în text accesibil.\",\n\texception_cross_site: \"Scriptarea între site‑uri este permisă doar pentru HTTP.\",\n\texception_high_surrogate: \"Surogatul superior nu este urmat de un surogat inferior în fixedCharCodeAt()\",\n\texception_string_length: \"Șir nevalid. Lungimea trebuie să fie multiplu de 4\",\n\texception_key_nonobject: \"Object.keys a apelat un non-obiect\",\n\texception_null_or_undefined: \" este null sau nu este definit\",\n\texception_not_function: \" nu este funcție\",\n\texception_invalid_date_format: \"Format de dată nevalid: \",\n\texception_casting: \"nu se poate difuza \",\n\texception_casting_to: \" către \"\n};\nvar ru = {\n\tlatex: \"LaTeX\",\n\tcancel: \"отмена\",\n\taccept: \"Вставка\",\n\tmanual: \"вручную\",\n\tinsert_math: \"Вставить математическую формулу: WIRIS\",\n\tinsert_chem: \"Вставить химическую формулу — ChemType\",\n\tminimize: \"Свернуть\",\n\tmaximize: \"Развернуть\",\n\tfullscreen: \"На весь экран\",\n\texit_fullscreen: \"Выйти из полноэкранного режима\",\n\tclose: \"Закрыть\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"Режимное окно MathType\",\n\tclose_modal_warning: \"Вы уверены, что хотите выйти? Все внесенные изменения будут утрачены.\",\n\tlatex_name_label: \"Формула Latex\",\n\tbrowser_no_compatible: \"Ваш браузер несовместим с технологией AJAX. Используйте последнюю версию Mozilla Firefox.\",\n\terror_convert_accessibility: \"При преобразовании формулы в текст допустимого формата произошла ошибка.\",\n\texception_cross_site: \"Межсайтовые сценарии доступны только для HTTP.\",\n\texception_high_surrogate: \"Младший символ-заместитель не сопровождает старший символ-заместитель в исправленном методе CharCodeAt()\",\n\texception_string_length: \"Недопустимая строка. Длинна должна быть кратной 4.\",\n\texception_key_nonobject: \"Метод Object.keys вызван не для объекта\",\n\texception_null_or_undefined: \" значение пустое или не определено\",\n\texception_not_function: \" не функция\",\n\texception_invalid_date_format: \"Недопустимый формат даты: \",\n\texception_casting: \"Не удается привести \",\n\texception_casting_to: \" к \"\n};\nvar sv = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Avbryt\",\n\taccept: \"Infoga\",\n\tmanual: \"Bruksanvisning\",\n\tinsert_math: \"Infoga matematisk formel - MathType\",\n\tinsert_chem: \"Infoga en kemiformel – ChemType\",\n\tminimize: \"Minimera\",\n\tmaximize: \"Maximera\",\n\tfullscreen: \"Helskärm\",\n\texit_fullscreen: \"Stäng helskärm\",\n\tclose: \"Stäng\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType modulfönster\",\n\tclose_modal_warning: \"Vill du avsluta? Inga ändringar kommer att sparas.\",\n\tlatex_name_label: \"Latex-formel\",\n\tbrowser_no_compatible: \"Din webbläsare är inte kompatibel med AJAX-teknik. Använd den senaste versionen av Mozilla Firefox.\",\n\terror_convert_accessibility: \"Det uppstod ett fel vid konvertering från MathML till åtkomlig text.\",\n\texception_cross_site: \"Skriptkörning över flera sajter är endast tillåtet för HTTP.\",\n\texception_high_surrogate: \"Hög surrogat följs inte av låg surrogat i fixedCharCodeAt()\",\n\texception_string_length: \"Ogiltig sträng. Längden måste vara en multipel av 4\",\n\texception_key_nonobject: \"Object.keys anropade icke-objekt\",\n\texception_null_or_undefined: \" det är null eller inte definierat\",\n\texception_not_function: \" är inte en funktion\",\n\texception_invalid_date_format: \"Ogiltigt datumformat: \",\n\texception_casting: \"Går inte att konvertera \",\n\texception_casting_to: \" till \"\n};\nvar tr = {\n\tlatex: \"LaTeX\",\n\tcancel: \"Vazgeç\",\n\taccept: \"Ekle\",\n\tmanual: \"Kılavuz\",\n\tinsert_math: \"Matematik formülü ekle - MathType\",\n\tinsert_chem: \"Kimya formülü ekleyin - ChemType\",\n\tminimize: \"Simge Durumuna Küçült\",\n\tmaximize: \"Ekranı Kapla\",\n\tfullscreen: \"Tam Ekran\",\n\texit_fullscreen: \"Tam Ekrandan Çık\",\n\tclose: \"Kapat\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType kalıcı penceresi\",\n\tclose_modal_warning: \"Çıkmak istediğinizden emin misiniz? Yaptığınız değişiklikler kaybolacak.\",\n\tlatex_name_label: \"Latex Formülü\",\n\tbrowser_no_compatible: \"Tarayıcınız AJAX teknolojisiyle uyumlu değil. Lütfen en güncel Mozilla Firefox sürümünü kullanın.\",\n\terror_convert_accessibility: \"MathML biçiminden erişilebilir metne dönüştürme hatası.\",\n\texception_cross_site: \"Siteler arası komut dosyası yazma işlemine yalnızca HTTP için izin verilir.\",\n\texception_high_surrogate: \"fixedCharCodeAt() fonksiyonunda üst vekilin ardından alt vekil gelmiyor\",\n\texception_string_length: \"Geçersiz dizgi. Uzunluk, 4'ün katlarından biri olmalıdır\",\n\texception_key_nonobject: \"Nesne olmayan öğe üzerinde Object.keys çağrıldı\",\n\texception_null_or_undefined: \" bu değer boş veya tanımlanmamış\",\n\texception_not_function: \" bir fonksiyon değil\",\n\texception_invalid_date_format: \"Geçersiz tarih biçimi: \",\n\texception_casting: \"Tür dönüştürülemiyor \",\n\texception_casting_to: \" hedef: \"\n};\nvar zh = {\n\tlatex: \"LaTeX\",\n\tcancel: \"取消\",\n\taccept: \"插入\",\n\tmanual: \"手册\",\n\tinsert_math: \"插入数学公式 - MathType\",\n\tinsert_chem: \"插入化学分子式 - ChemType\",\n\tminimize: \"最小化\",\n\tmaximize: \"最大化\",\n\tfullscreen: \"全屏幕\",\n\texit_fullscreen: \"退出全屏幕\",\n\tclose: \"关闭\",\n\tmathtype: \"MathType\",\n\ttitle_modalwindow: \"MathType 模式窗口\",\n\tclose_modal_warning: \"您确定要离开吗?您所做的修改将丢失。\",\n\tlatex_name_label: \"Latex 分子式\",\n\tbrowser_no_compatible: \"您的浏览器不兼容 AJAX 技术。请使用最新版 Mozilla Firefox。\",\n\terror_convert_accessibility: \"将 MathML 转换为可访问文本时出错。\",\n\texception_cross_site: \"仅 HTTP 允许跨站脚本。\",\n\texception_high_surrogate: \"fixedCharCodeAt() 中的高位代理之后未跟随低位代理\",\n\texception_string_length: \"无效字符串。长度必须是 4 的倍数\",\n\texception_key_nonobject: \"非对象调用了 Object.keys\",\n\texception_null_or_undefined: \" 该值为空或未定义\",\n\texception_not_function: \" 不是一个函数\",\n\texception_invalid_date_format: \"无效日期格式: \",\n\texception_casting: \"无法转换 \",\n\texception_casting_to: \" 为 \"\n};\nvar translations = {\n\tar: ar,\n\tca: ca,\n\tcs: cs,\n\tda: da,\n\tde: de,\n\tel: el,\n\ten: en,\n\tes: es,\n\tet: et,\n\teu: eu,\n\tfi: fi,\n\tfr: fr,\n\tgl: gl,\n\the: he,\n\thr: hr,\n\thu: hu,\n\tid: id,\n\tit: it,\n\tja: ja,\n\tko: ko,\n\tnl: nl,\n\tno: no,\n\tnb: nb,\n\tnn: nn,\n\tpl: pl,\n\tpt: pt,\n\tpt_br: pt_br,\n\tro: ro,\n\tru: ru,\n\tsv: sv,\n\ttr: tr,\n\tzh: zh,\n\t\"\": {\n}\n};\n\n/**\n * This class represents a string manager. It's used to load localized strings.\n */ class StringManager {\n constructor(){\n throw new Error(\"Static class StringManager can not be instantiated.\");\n }\n /**\n * Returns the associated value of certain string key. If the associated value\n * doesn't exits returns the original key.\n * @param {string} key - string key\n * @param {string} lang - DEFAULT = null. Specify the language to translate the string\n * @returns {string} correspondent value. If doesn't exists original key.\n */ static get(key, lang) {\n // Default language definition\n let { language } = this;\n // If parameter language, use it\n if (lang) {\n language = lang;\n }\n // Cut down on strings. e.g. en_US -> en\n if (language && language.length > 2) {\n language = language.slice(0, 2);\n }\n // Check if we support the language\n if (!this.strings.hasOwnProperty(language)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown language ${language} set in StringManager.`);\n language = \"en\";\n }\n // Check if the key is supported in the given language\n if (!this.strings[language].hasOwnProperty(key)) {\n // eslint-disable-line no-prototype-builtins\n console.warn(`Unknown key ${key} for language ${language} in StringManager.`);\n return key;\n }\n return this.strings[language][key];\n }\n}\n/**\n * Dictionary of dictionaries:\n * Key: language code\n * Value: Key: id of the string\n * Value: translation of the string\n */ StringManager.strings = translations;\n/**\n * Language of the translations; English by default\n */ StringManager.language = \"en\";\n\n/**\n * This class represents an utility class.\n */ class Util {\n /**\n * Fires an event in a target.\n * @param {EventTarget} eventTarget - target where event should be fired.\n * @param {string} eventName event to fire.\n * @static\n */ static fireEvent(eventTarget, eventName) {\n if (document.createEvent) {\n const eventObject = document.createEvent(\"HTMLEvents\");\n eventObject.initEvent(eventName, true, true);\n return !eventTarget.dispatchEvent(eventObject);\n }\n const eventObject = document.createEventObject();\n return eventTarget.fireEvent(`on${eventName}`, eventObject);\n }\n /**\n * Cross-browser addEventListener/attachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - callback function.\n * @static\n */ static addEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.addEventListener) {\n eventTarget.addEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.attachEvent) {\n // Backwards compatibility.\n eventTarget.attachEvent(`on${eventName}`, callBackFunction);\n }\n }\n /**\n * Cross-browser removeEventListener/detachEvent function.\n * @param {EventTarget} eventTarget - target to add the event.\n * @param {string} eventName - specifies the type of event.\n * @param {Function} callBackFunction - function to remove from the event target.\n * @static\n */ static removeEvent(eventTarget, eventName, callBackFunction) {\n if (eventTarget.removeEventListener) {\n eventTarget.removeEventListener(eventName, callBackFunction, true);\n } else if (eventTarget.detachEvent) {\n eventTarget.detachEvent(`on${eventName}`, callBackFunction);\n }\n }\n /**\n * Adds the a callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @param {Function} doubleClickHandler - function to run when on dblclick event.\n * @param {Function} mousedownHandler - function to run when on mousedown event.\n * @param {Function} mouseupHandler - function to run when on mouseup event.\n * @static\n */ static addElementEvents(eventTarget, doubleClickHandler, mousedownHandler, mouseupHandler) {\n if (doubleClickHandler) {\n this.callbackDblclick = (event)=>{\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n doubleClickHandler(element, realEvent);\n };\n Util.addEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n }\n if (mousedownHandler) {\n this.callbackMousedown = (event)=>{\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mousedownHandler(element, realEvent);\n };\n Util.addEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n }\n if (mouseupHandler) {\n this.callbackMouseup = (event)=>{\n const realEvent = event || window.event;\n const element = realEvent.srcElement ? realEvent.srcElement : realEvent.target;\n mouseupHandler(element, realEvent);\n };\n // Chrome doesn't trigger this event for eventTarget if we release the mouse button\n // while the mouse is outside the editor text field.\n // This is a workaround: we trigger the event independently of where the mouse\n // is when we release its button.\n Util.addEvent(document, \"mouseup\", this.callbackMouseup);\n Util.addEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n }\n /**\n * Remove all callback function, for a certain event target, to the following event types:\n * - dblclick\n * - mousedown\n * - mouseup\n * @param {EventTarget} eventTarget - event target.\n * @static\n */ static removeElementEvents(eventTarget) {\n Util.removeEvent(eventTarget, \"dblclick\", this.callbackDblclick);\n Util.removeEvent(eventTarget, \"mousedown\", this.callbackMousedown);\n Util.removeEvent(document, \"mouseup\", this.callbackMouseup);\n Util.removeEvent(eventTarget, \"mouseup\", this.callbackMouseup);\n }\n /**\n * Adds a class name to a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */ static addClass(element, className) {\n if (!Util.containsClass(element, className)) {\n element.className += ` ${className}`;\n }\n }\n /**\n * Checks if a HTMLElement contains a certain class.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the className.\n * @returns {boolean} true if the HTMLElement contains the class name. false otherwise.\n * @static\n */ static containsClass(element, className) {\n if (element == null || !(\"className\" in element)) {\n return false;\n }\n const currentClasses = element.className.split(\" \");\n for(let i = currentClasses.length - 1; i >= 0; i -= 1){\n if (currentClasses[i] === className) {\n return true;\n }\n }\n return false;\n }\n /**\n * Remove a certain class for a HTMLElement.\n * @param {HTMLElement} element - the HTML element.\n * @param {string} className - the class name.\n * @static\n */ static removeClass(element, className) {\n let newClassName = \"\";\n const classes = element.className.split(\" \");\n for(let i = 0; i < classes.length; i += 1){\n if (classes[i] !== className) {\n newClassName += `${classes[i]} `;\n }\n }\n element.className = newClassName.trim();\n }\n /**\n * Converts old xml initial text attribute (with «») to the correct one(with §lt;§gt;). It's\n * used to parse old applets.\n * @param {string} text - string containing safeXml characters\n * @returns {string} a string with safeXml characters parsed.\n * @static\n */ static convertOldXmlinitialtextAttribute(text) {\n // Used to fix a bug with Cas imported from Moodle 1.9 to Moodle 2.x.\n // This could be removed in future.\n const val = \"value=\";\n const xitpos = text.indexOf(\"xmlinitialtext\");\n const valpos = text.indexOf(val, xitpos);\n const quote = text.charAt(valpos + val.length);\n const startquote = valpos + val.length + 1;\n const endquote = text.indexOf(quote, startquote);\n const value = text.substring(startquote, endquote);\n let newvalue = value.split(\"«\").join(\"§lt;\");\n newvalue = newvalue.split(\"»\").join(\"§gt;\");\n newvalue = newvalue.split(\"&\").join(\"§\");\n newvalue = newvalue.split(\"¨\").join(\"§quot;\");\n text = text.split(value).join(newvalue);\n return text;\n }\n /**\n * Convert a string representation of key-value pairs to an object.\n * @param {string} keyValueString - String with key-value pairs in the format key1='value1', key2='value2'\n * @returns {Object} - Object containing the key-value pairs\n */ static convertStringToObject(keyValueString) {\n if (!keyValueString || typeof keyValueString !== \"string\") {\n return {};\n }\n return keyValueString.split(\",\").map((pair)=>pair.trim().split(\"=\")).reduce((resultObject, [key, value])=>{\n if (key && value) {\n resultObject[key] = value;\n }\n return resultObject;\n }, {});\n }\n /**\n * Cross-browser solution for creating new elements.\n * @param {string} tagName - tag name of the wished element.\n * @param {Object} attributes - an object where each key is a wished\n * attribute name and each value is its value.\n * @param {Object} [creator] - if supplied, this function will use\n * the \"createElement\" method from this param. Otherwise\n * document will be used as creator.\n * @returns {Element} The DOM element with the specified attributes assigned.\n * @static\n */ static createElement(tagName, attributes, creator) {\n if (attributes === undefined) {\n attributes = {};\n }\n if (creator === undefined) {\n creator = document;\n }\n let element;\n /*\n * Internet Explorer fix:\n * If you create a new object dynamically, you can't set a non-standard attribute.\n * For example, you can't set the \"src\" attribute on an \"applet\" object.\n * Other browsers will throw an exception and will run the standard code.\n */ try {\n let html = `<${tagName}`;\n Object.keys(attributes).forEach((attributeName)=>{\n html += ` ${attributeName}=\"${Util.htmlEntities(attributes[attributeName])}\"`;\n });\n html += \">\";\n element = creator.createElement(html);\n } catch (e) {\n element = creator.createElement(tagName);\n Object.keys(attributes).forEach((attributeName)=>{\n element.setAttribute(attributeName, attributes[attributeName]);\n });\n }\n return element;\n }\n /**\n * Creates new HTML from it's HTML code as string.\n * @param {string} objectCode - html code\n * @returns {Element} the HTML element.\n * @static\n */ static createObject(objectCode, creator) {\n if (creator === undefined) {\n creator = document;\n }\n // Internet Explorer can't include \"param\" tag when is setting an innerHTML property.\n objectCode = objectCode.split(\"\").join(\"\").split(\"\").join(\"\");\n objectCode = objectCode.split(\"\").join(\"
\").split(\"\").join(\"
\");\n const container = Util.createElement(\"div\", {}, creator);\n container.innerHTML = objectCode;\n function recursiveParamsFix(object) {\n if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisParam\") {\n const attributesParsed = {};\n for(let i = 0; i < object.attributes.length; i += 1){\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n const param = Util.createElement(\"param\", attributesParsed, creator);\n // IE fix.\n if (param.NAME) {\n param.name = param.NAME;\n param.value = param.VALUE;\n }\n param.removeAttribute(\"wirisObject\");\n object.parentNode.replaceChild(param, object);\n } else if (object.getAttribute && object.getAttribute(\"wirisObject\") === \"WirisApplet\") {\n const attributesParsed = {};\n for(let i = 0; i < object.attributes.length; i += 1){\n if (object.attributes[i].nodeValue !== null) {\n attributesParsed[object.attributes[i].nodeName] = object.attributes[i].nodeValue;\n }\n }\n const applet = Util.createElement(\"applet\", attributesParsed, creator);\n applet.removeAttribute(\"wirisObject\");\n for(let i = 0; i < object.childNodes.length; i += 1){\n recursiveParamsFix(object.childNodes[i]);\n if (object.childNodes[i].nodeName.toLowerCase() === \"param\") {\n applet.appendChild(object.childNodes[i]);\n i -= 1; // When we insert the object child into the applet, object loses one child.\n }\n }\n object.parentNode.replaceChild(applet, object);\n } else {\n for(let i = 0; i < object.childNodes.length; i += 1){\n recursiveParamsFix(object.childNodes[i]);\n }\n }\n }\n recursiveParamsFix(container);\n return container.firstChild;\n }\n /**\n * Converts an Element to its HTML code.\n * @param {Element} element - entry element.\n * @return {string} the HTML code of the input element.\n * @static\n */ static createObjectCode(element) {\n // In case that the image was not created, the object can be null or undefined.\n if (typeof element === \"undefined\" || element === null) {\n return null;\n }\n if (element.nodeType === 1) {\n // ELEMENT_NODE.\n let output = `<${element.tagName}`;\n for(let i = 0; i < element.attributes.length; i += 1){\n if (element.attributes[i].specified) {\n output += ` ${element.attributes[i].name}=\"${Util.htmlEntities(element.attributes[i].value)}\"`;\n }\n }\n if (element.childNodes.length > 0) {\n output += \">\";\n for(let i = 0; i < element.childNodes.length; i += 1){\n output += Util.createObject(element.childNodes[i]);\n }\n output += ``;\n } else if (element.nodeName === \"DIV\" || element.nodeName === \"SCRIPT\") {\n output += `>`;\n } else {\n output += \"/>\";\n }\n return output;\n }\n if (element.nodeType === 3) {\n // TEXT_NODE.\n return Util.htmlEntities(element.nodeValue);\n }\n return \"\";\n }\n /**\n * Concatenates two URL paths.\n * @param {string} path1 - first URL path\n * @param {string} path2 - second URL path\n * @returns {string} new URL.\n */ static concatenateUrl(path1, path2) {\n let separator = \"\";\n if (path1.indexOf(\"/\") !== path1.length && path2.indexOf(\"/\") !== 0) {\n separator = \"/\";\n }\n return (path1 + separator + path2).replace(/([^:]\\/)\\/+/g, \"$1\");\n }\n /**\n * Parses a text and replaces all HTML special characters by their correspondent entities.\n * @param {string} input - text to be parsed.\n * @returns {string} the input text with all their special characters replaced by their entities.\n * @static\n */ static htmlEntities(input) {\n return input.split(\"&\").join(\"&\").split(\"<\").join(\"<\").split(\">\").join(\">\").split('\"').join(\""\");\n }\n /**\n * Sanitize HTML to prevent XSS injections.\n * @param {string} html - html to be sanitize.\n * @returns {string} html sanitized.\n * @static\n */ static htmlSanitize(html) {\n let annotationRegex = /\\/;\n // Get all the annotation content including the tags.\n let annotation = html.match(annotationRegex);\n // Sanitize html code without removing our supported MathML tags and attributes.\n html = purifyExports.sanitize(html, {\n ADD_TAGS: [\n \"semantics\",\n \"annotation\",\n \"mstack\",\n \"msline\",\n \"msrow\",\n \"none\"\n ],\n ADD_ATTR: [\n \"linebreak\",\n \"charalign\",\n \"stackalign\"\n ]\n });\n // Readd old annotation content.\n return html.replace(annotationRegex, annotation);\n }\n /**\n * Parses a text and replaces all the HTML entities by their characters.\n * @param {string} input - text to be parsed\n * @returns {string} the input text with all their entities replaced by characters.\n * @static\n */ static htmlEntitiesDecode(input) {\n // Textarea element decodes when inner html is set.\n const textarea = document.createElement(\"textarea\");\n textarea.innerHTML = input;\n return textarea.value;\n }\n /**\n * Returns a cross-browser http request.\n * @return {object} httpRequest request object.\n * @returns {XMLHttpRequest|ActiveXObject} the proper request object.\n */ static createHttpRequest() {\n const currentPath = window.location.toString().substr(0, window.location.toString().lastIndexOf(\"/\") + 1);\n if (currentPath.substr(0, 7) === \"file://\") {\n throw StringManager.get(\"exception_cross_site\");\n }\n if (typeof XMLHttpRequest !== \"undefined\") {\n return new XMLHttpRequest();\n }\n try {\n return new ActiveXObject(\"Msxml2.XMLHTTP\");\n } catch (e) {\n try {\n return new ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (oc) {\n return null;\n }\n }\n }\n /**\n * Converts a hash to a HTTP query.\n * @param {Object[]} properties - a key/value object.\n * @returns {string} a HTTP query containing all the key value pairs with\n * all the special characters replaced by their entities.\n * @static\n */ static httpBuildQuery(properties) {\n let result = \"\";\n Object.keys(properties).forEach((i)=>{\n if (properties[i] != null) {\n result += `${Util.urlEncode(i)}=${Util.urlEncode(properties[i])}&`;\n }\n });\n // Deleting last '&' empty character.\n if (result.substring(result.length - 1) === \"&\") {\n result = result.substring(0, result.length - 1);\n }\n return result;\n }\n /**\n * Convert a hash to string sorting keys to get a deterministic output\n * @param {Object[]} hash - a key/value object.\n * @returns {string} a string with the form key1=value1...keyn=valuen\n * @static\n */ static propertiesToString(hash) {\n // 1. Sort keys. We sort the keys because we want a deterministic output.\n const keys = [];\n Object.keys(hash).forEach((key)=>{\n if (Object.prototype.hasOwnProperty.call(hash, key)) {\n keys.push(key);\n }\n });\n const n = keys.length;\n for(let i = 0; i < n; i += 1){\n for(let j = i + 1; j < n; j += 1){\n const s1 = keys[i];\n const s2 = keys[j];\n if (Util.compareStrings(s1, s2) > 0) {\n // Swap.\n keys[i] = s2;\n keys[j] = s1;\n }\n }\n }\n // 2. Generate output.\n let output = \"\";\n for(let i = 0; i < n; i += 1){\n const key = keys[i];\n output += key;\n output += \"=\";\n let value = hash[key];\n value = value.replace(\"\\\\\", \"\\\\\\\\\");\n value = value.replace(\"\\n\", \"\\\\n\");\n value = value.replace(\"\\r\", \"\\\\r\");\n value = value.replace(\"\\t\", \"\\\\t\");\n output += value;\n output += \"\\n\";\n }\n return output;\n }\n /**\n * Compare two strings using charCodeAt method\n * @param {string} a - first string to compare.\n * @param {string} b - second string to compare.\n * @returns {number} the difference between a and b\n * @static\n */ static compareStrings(a, b) {\n let i;\n const an = a.length;\n const bn = b.length;\n const n = an > bn ? bn : an;\n for(i = 0; i < n; i += 1){\n const c = Util.fixedCharCodeAt(a, i) - Util.fixedCharCodeAt(b, i);\n if (c !== 0) {\n return c;\n }\n }\n return a.length - b.length;\n }\n /**\n * Fix charCodeAt() JavaScript function to handle non-Basic-Multilingual-Plane characters.\n * @param {string} string - input string\n * @param {number} idx - an integer greater than or equal to 0\n * and less than the length of the string\n * @returns {number} an integer representing the UTF-16 code of the string at the given index.\n * @static\n */ static fixedCharCodeAt(string, idx) {\n idx = idx || 0;\n const code = string.charCodeAt(idx);\n let hi;\n let low;\n /* High surrogate (could change last hex to 0xDB7F to treat high\n private surrogates as single characters) */ if (code >= 0xd800 && code <= 0xdbff) {\n hi = code;\n low = string.charCodeAt(idx + 1);\n if (Number.isNaN(low)) {\n throw StringManager.get(\"exception_high_surrogate\");\n }\n return (hi - 0xd800) * 0x400 + (low - 0xdc00) + 0x10000;\n }\n if (code >= 0xdc00 && code <= 0xdfff) {\n // Low surrogate.\n /* We return false to allow loops to skip this iteration since should have\n already handled high surrogate above in the previous iteration. */ return false;\n }\n return code;\n }\n /**\n * Returns an URL with it's query params converted into array.\n * @param {string} url - input URL.\n * @returns {Object[]} an array containing all URL query params.\n * @static\n */ static urlToAssArray(url) {\n let i;\n i = url.indexOf(\"?\");\n if (i > 0) {\n const query = url.substring(i + 1);\n const ss = query.split(\"&\");\n const h = {};\n for(i = 0; i < ss.length; i += 1){\n const s = ss[i];\n const kv = s.split(\"=\");\n if (kv.length > 1) {\n h[kv[0]] = decodeURIComponent(kv[1].replace(/\\+/g, \" \"));\n }\n }\n return h;\n }\n return {};\n }\n /**\n * Returns an encoded URL by replacing each instance of certain characters by\n * one, two, three or four escape sequences using encodeURIComponent method.\n * !'()* . will not be encoded.\n *\n * @param {string} clearString - URL string to be encoded\n * @returns {string} URL with it's special characters replaced.\n * @static\n */ static urlEncode(clearString) {\n let output = \"\";\n // Method encodeURIComponent doesn't encode !'()*~ .\n output = encodeURIComponent(clearString);\n return output;\n }\n // TODO: To parser?\n /**\n * Converts the HTML of a image into the output code that WIRIS must return.\n * By default returns the MathML stored on data-mahml attribute (if imgCode is a formula)\n * or the Wiriscas attribute of a WIRIS applet.\n * @param {string} imgCode - the html code from a formula or a CAS image.\n * @param {boolean} convertToXml - true if the image should be converted to XML.\n * @param {boolean} convertToSafeXml - true if the image should be converted to safeXML.\n * @returns {string} the XML or safeXML of a WIRIS image.\n * @static\n */ static getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml) {\n const imgObject = Util.createObject(imgCode);\n if (imgObject) {\n if (imgObject.className === Configuration.get(\"imageClassName\") || imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"))) {\n if (!convertToXml) {\n return imgCode;\n }\n const dataMathML = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n // To handle annotations, first we need the MathML in XML.\n let mathML = MathML.safeXmlDecode(dataMathML);\n if (!Configuration.get(\"saveHandTraces\")) {\n mathML = MathML.removeAnnotation(mathML, \"application/json\");\n }\n if (mathML == null) {\n mathML = imgObject.getAttribute(\"alt\");\n }\n if (convertToSafeXml) {\n const safeMathML = MathML.safeXmlEncode(mathML);\n return safeMathML;\n }\n return mathML;\n }\n }\n return imgCode;\n }\n /**\n * Gets the node length in characters.\n * @param {Node} node - HTML node.\n * @returns {number} node length.\n * @static\n */ static getNodeLength(node) {\n const staticNodeLengths = {\n IMG: 1,\n BR: 1\n };\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return node.nodeValue.length;\n }\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n let length = staticNodeLengths[node.nodeName.toUpperCase()];\n if (length === undefined) {\n length = 0;\n }\n for(let i = 0; i < node.childNodes.length; i += 1){\n length += Util.getNodeLength(node.childNodes[i]);\n }\n return length;\n }\n return 0;\n }\n /**\n * Gets a selected node or text from an editable HTMLElement.\n * If the caret is on a text node, concatenates it with all the previous and next text nodes.\n * @param {HTMLElement} target - the editable HTMLElement.\n * @param {boolean} isIframe - specifies if the target is an iframe or not\n * @param {boolean} forceGetSelection - if true, ignores IE system to get\n * the current selection and uses window.getSelection()\n * @returns {object} an object with the 'node' key set if the item is an\n * element or the keys 'node' and 'caretPosition' if the element is text.\n * @static\n */ static getSelectedItem(target, isIframe, forceGetSelection) {\n let windowTarget;\n if (isIframe) {\n windowTarget = target.contentWindow;\n windowTarget.focus();\n } else {\n windowTarget = window;\n target.focus();\n }\n if (document.selection && !forceGetSelection) {\n const range = windowTarget.document.selection.createRange();\n if (range.parentElement) {\n if (range.htmlText.length > 0) {\n if (range.text.length === 0) {\n return Util.getSelectedItem(target, isIframe, true);\n }\n return null;\n }\n windowTarget.document.execCommand(\"InsertImage\", false, \"#\");\n let temporalObject = range.parentElement();\n if (temporalObject.nodeName.toUpperCase() !== \"IMG\") {\n // IE9 fix: parentElement() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML('');\n temporalObject = windowTarget.document.getElementById(\"wrs_openEditorWindow_temporalObject\");\n }\n let node;\n let caretPosition;\n if (temporalObject.nextSibling && temporalObject.nextSibling.nodeType === 3) {\n // TEXT_NODE.\n node = temporalObject.nextSibling;\n caretPosition = 0;\n } else if (temporalObject.previousSibling && temporalObject.previousSibling.nodeType === 3) {\n node = temporalObject.previousSibling;\n caretPosition = node.nodeValue.length;\n } else {\n node = windowTarget.document.createTextNode(\"\");\n temporalObject.parentNode.insertBefore(node, temporalObject);\n caretPosition = 0;\n }\n temporalObject.parentNode.removeChild(temporalObject);\n return {\n node,\n caretPosition\n };\n }\n if (range.length > 1) {\n return null;\n }\n return {\n node: range.item(0)\n };\n }\n if (windowTarget.getSelection) {\n let range;\n const selection = windowTarget.getSelection();\n try {\n range = selection.getRangeAt(0);\n } catch (e) {\n range = windowTarget.document.createRange();\n }\n const node = range.startContainer;\n if (node.nodeType === 3) {\n // TEXT_NODE.\n return {\n node,\n caretPosition: range.startOffset\n };\n }\n if (node !== range.endContainer) {\n return null;\n }\n if (node.nodeType === 1) {\n // ELEMENT_NODE.\n const position = range.startOffset;\n if (node.childNodes[position]) {\n // In case that a formula is detected but not selected,\n // we create an empty span where we could insert the new formula.\n if (range.startOffset === range.endOffset) {\n if (position !== 0 && node.childNodes[position - 1].localName === \"span\" && node.childNodes[position].classList?.contains(\"Wirisformula\")) {\n node.childNodes[position - 1].remove();\n return Util.getSelectedItem(target, isIframe, forceGetSelection);\n } else if (node.childNodes[position].classList?.contains(\"Wirisformula\")) {\n if (position > 0 && node.childNodes[position - 1].classList?.contains(\"Wirisformula\") || position === 0) {\n var emptySpan = document.createElement(\"span\");\n node.insertBefore(emptySpan, node.childNodes[position]);\n return {\n node: node.childNodes[position]\n };\n }\n }\n }\n return {\n node: node.childNodes[position]\n };\n }\n }\n }\n return null;\n }\n /**\n * Returns null if there isn't any item or if it is malformed.\n * Otherwise returns an object containing the node with the MathML image\n * and the cursor position inside the textarea.\n * @param {HTMLTextAreaElement} textarea - textarea element.\n * @returns {Object} An object containing the node, the index of the\n * beginning of the selected text, caret position and the start and end position of the\n * text node.\n * @static\n */ static getSelectedItemOnTextarea(textarea) {\n const textNode = document.createTextNode(textarea.value);\n const textNodeValues = Latex.getLatexFromTextNode(textNode, textarea.selectionStart);\n if (textNodeValues === null) {\n return null;\n }\n return {\n node: textNode,\n caretPosition: textarea.selectionStart,\n startPosition: textNodeValues.startPosition,\n endPosition: textNodeValues.endPosition\n };\n }\n /**\n * Looks for elements that match the given name in a HTML code string.\n * Important: this function is very concrete for WIRIS code.\n * It takes as preconditions lots of behaviors that are not the general case.\n * @param {string} code - HTML code.\n * @param {string} name - element name.\n * @param {boolean} autoClosed - true if the elements are autoClosed.\n * @return {Object[]} an object containing all HTML elements of code matching the name argument.\n * @static\n */ static getElementsByNameFromString(code, name, autoClosed) {\n const elements = [];\n code = code.toLowerCase();\n name = name.toLowerCase();\n let start = code.indexOf(`<${name} `);\n while(start !== -1){\n // Look for nodes.\n let endString;\n if (autoClosed) {\n endString = \">\";\n } else {\n endString = ``;\n }\n let end = code.indexOf(endString, start);\n if (end !== -1) {\n end += endString.length;\n elements.push({\n start,\n end\n });\n } else {\n end = start + 1;\n }\n start = code.indexOf(`<${name} `, end);\n }\n return elements;\n }\n /**\n * Returns the numeric value of a base64 character.\n * @param {string} character - base64 character.\n * @returns {number} base64 character numeric value.\n * @static\n */ static decode64(character) {\n const PLUS = \"+\".charCodeAt(0);\n const SLASH = \"/\".charCodeAt(0);\n const NUMBER = \"0\".charCodeAt(0);\n const LOWER = \"a\".charCodeAt(0);\n const UPPER = \"A\".charCodeAt(0);\n const PLUS_URL_SAFE = \"-\".charCodeAt(0);\n const SLASH_URL_SAFE = \"_\".charCodeAt(0);\n const code = character.charCodeAt(0);\n if (code === PLUS || code === PLUS_URL_SAFE) {\n return 62; // Char '+'.\n }\n if (code === SLASH || code === SLASH_URL_SAFE) {\n return 63; // Char '/'.\n }\n if (code < NUMBER) {\n return -1; // No match.\n }\n if (code < NUMBER + 10) {\n return code - NUMBER + 26 + 26;\n }\n if (code < UPPER + 26) {\n return code - UPPER;\n }\n if (code < LOWER + 26) {\n return code - LOWER + 26;\n }\n return null;\n }\n /**\n * Converts a base64 string to a array of bytes.\n * @param {string} b64String - base64 string.\n * @param {number} length - dimension of byte array (by default whole string).\n * @return {Object[]} the resultant byte array.\n * @static\n */ static b64ToByteArray(b64String, length) {\n let tmp;\n if (b64String.length % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\"); // Tipped base64. Length is fixed.\n }\n const arr = [];\n let l;\n let placeHolders;\n if (!length) {\n // All b64String string.\n if (b64String.charAt(b64String.length - 2) === \"=\") {\n placeHolders = 2;\n } else if (b64String.charAt(b64String.length - 1) === \"=\") {\n placeHolders = 1;\n } else {\n placeHolders = 0;\n }\n l = placeHolders > 0 ? b64String.length - 4 : b64String.length;\n } else {\n l = length;\n }\n let i;\n for(i = 0; i < l; i += 4){\n // Ignoring code checker standards (bitewise operators).\n // See https://tracker.moodle.org/browse/CONTRIB-5862 for further information.\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp = Util.decode64(b64String.charAt(i)) << 18 | Util.decode64(b64String.charAt(i + 1)) << 12 | Util.decode64(b64String.charAt(i + 2)) << 6 | Util.decode64(b64String.charAt(i + 3));\n arr.push(tmp >> 16 & 0xff);\n arr.push(tmp >> 8 & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n if (placeHolders) {\n if (placeHolders === 2) {\n // Ignoring code checker standards (bitewise operators).\n // @codingStandardsIgnoreStart\n // eslint-disable-next-line max-len\n tmp = Util.decode64(b64String.charAt(i)) << 2 | Util.decode64(b64String.charAt(i + 1)) >> 4;\n arr.push(tmp & 0xff);\n } else if (placeHolders === 1) {\n // eslint-disable-next-line max-len\n tmp = Util.decode64(b64String.charAt(i)) << 10 | Util.decode64(b64String.charAt(i + 1)) << 4 | Util.decode64(b64String.charAt(i + 2)) >> 2;\n arr.push(tmp >> 8 & 0xff);\n arr.push(tmp & 0xff);\n // @codingStandardsIgnoreEnd\n }\n }\n return arr;\n }\n /**\n * Returns the first 32-bit signed integer from a byte array.\n * @param {Object[]} bytes - array of bytes.\n * @returns {number} the 32-bit signed integer.\n * @static\n */ static readInt32(bytes) {\n if (bytes.length < 4) {\n return false;\n }\n const int32 = bytes.splice(0, 4);\n // @codingStandardsIgnoreStart¡\n return int32[0] << 24 | int32[1] << 16 | int32[2] << 8 | int32[3] << 0;\n // @codingStandardsIgnoreEnd\n }\n /**\n * Read the first byte from a byte array.\n * @param {Object} bytes - input byte array.\n * @returns {number} first byte of the byte array.\n * @static\n */ static readByte(bytes) {\n // @codingStandardsIgnoreStart\n return bytes.shift() << 0;\n // @codingStandardsIgnoreEnd\n }\n /**\n * Read an arbitrary number of bytes, from a fixed position on a byte array.\n * @param {Object[]} bytes - byte array.\n * @param {number} pos - start position.\n * @param {number} len - number of bytes to read.\n * @returns {Object[]} the byte array.\n * @static\n */ static readBytes(bytes, pos, len) {\n return bytes.splice(pos, len);\n }\n /**\n * Inserts or modifies formulas or CAS on a textarea.\n * @param {HTMLTextAreaElement} textarea - textarea target.\n * @param {string} text - text to add in the textarea. For example, to add the link to the image,\n * call this function as (textarea, Parser.createImageSrc(mathml));\n * @static\n */ static updateTextArea(textarea, text) {\n if (textarea && text) {\n textarea.focus();\n if (textarea.selectionStart != null) {\n const { selectionEnd } = textarea;\n const selectionStart = textarea.value.substring(0, textarea.selectionStart);\n const selectionEndSub = textarea.value.substring(selectionEnd, textarea.value.length);\n textarea.value = selectionStart + text + selectionEndSub;\n textarea.selectionEnd = selectionEnd + text.length;\n } else {\n const selection = document.selection.createRange();\n selection.text = text;\n }\n }\n }\n /**\n * Modifies existing formula on a textarea.\n * @param {HTMLTextAreaElement} textarea - text area target.\n * @param {string} text - text to add in the textarea. For example, if you want to add the link\n * to the image,you can call this function as\n * Util.updateTextarea(textarea, Parser.createImageSrc(mathml));\n * @param {number} start - beginning index from textarea where it needs to be replaced by text.\n * @param {number} end - ending index from textarea where it needs to be replaced by text\n * @static\n */ static updateExistingTextOnTextarea(textarea, text, start, end) {\n textarea.focus();\n const textareaStart = textarea.value.substring(0, start);\n textarea.value = textareaStart + text + textarea.value.substring(end, textarea.value.length);\n textarea.selectionEnd = start + text.length;\n }\n /**\n * Add a parameter with it's correspondent value to an URL (GET).\n * @param {string} path - URL path\n * @param {string} parameter - parameter\n * @param {string} value - value\n * @static\n */ static addArgument(path, parameter, value) {\n let sep;\n if (path.indexOf(\"?\") > 0) {\n sep = \"&\";\n } else {\n sep = \"?\";\n }\n return `${path + sep + parameter}=${value}`;\n }\n}\n\n/**\n * @classdesc\n * This class represents MathType Image class. Contains all the logic related\n * to MathType images manipulation.\n * All MathType images are generated using the appropriate MathType\n * integration service: showimage or createimage.\n *\n * There are two available image formats:\n * - svg (default)\n * - png\n *\n * There are two formats for the image src attribute:\n * - A data-uri scheme containing the URL-encoded SVG or a PNG's base64.\n * - A link to the showimage service.\n */ class Image {\n /**\n * Removes data attributes from an image.\n * @param {HTMLImageElement} img - Image where remove data attributes.\n */ static removeImgDataAttributes(img) {\n const attributesToRemove = [];\n const { attributes } = img;\n Object.keys(attributes).forEach((key)=>{\n const attribute = attributes[key];\n if (attribute !== undefined && attribute.name !== undefined && attribute.name.indexOf(\"data-\") === 0) {\n // Is preferred keep an array and remove after the search\n // because when attribute is removed the array of attributes\n // is modified.\n attributesToRemove.push(attribute.name);\n }\n });\n attributesToRemove.forEach((attribute)=>{\n img.removeAttribute(attribute);\n });\n }\n /**\n * @static\n * Clones all MathType image attributes from a HTMLImageElement to another.\n * @param {HTMLImageElement} originImg - The original image.\n * @param {HTMLImageElement} destImg - The destination image.\n */ static clone(originImg, destImg) {\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (!originImg.hasAttribute(customEditorAttributeName)) {\n destImg.removeAttribute(customEditorAttributeName);\n }\n const mathmlAttributeName = Configuration.get(\"imageMathmlAttribute\");\n const imgAttributes = [\n mathmlAttributeName,\n customEditorAttributeName,\n \"alt\",\n \"height\",\n \"width\",\n \"style\",\n \"src\",\n \"role\"\n ];\n imgAttributes.forEach((iterator)=>{\n const originAttribute = originImg.getAttribute(iterator);\n if (originAttribute) {\n destImg.setAttribute(iterator, originAttribute);\n }\n });\n }\n /**\n * Determines whether an img src contains an SVG.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src contains an SVG, false otherwise\n */ static isSvg(img) {\n return img.src.startsWith(\"data:image/svg+xml;\");\n }\n /**\n * Determines whether an img src is encoded in base64 or not.\n * @param {HTMLImageElement} img the img element to inspect\n * @returns true if the img src is encoded in base64, false otherwise\n */ static isBase64(img) {\n return img.src.startsWith(\"data:image/svg+xml;base64,\") || img.src.startsWith(\"data:image/png;base64,\");\n }\n /**\n * Calculates the metrics of a MathType image given the the service response and the image format.\n * @param {HTMLImageElement} img - The HTMLImageElement.\n * @param {String} uri - The URI generated by the image service: can be a data URI scheme or a URL.\n * @param {Boolean} jsonResponse - True the response of the image service is a\n * JSON object. False otherwise.\n */ static setImgSize(img, uri, jsonResponse) {\n let ar;\n let base64String;\n let bytes;\n let svgString;\n if (jsonResponse) {\n // Cleaning data:image/png;base64.\n if (Image.isSvg(img)) {\n // SVG format.\n // If SVG is encoded in base64 we need to convert the base64 bytes into a SVG string.\n if (!Image.isBase64(img)) {\n ar = Image.getMetricsFromSvgString(uri);\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n svgString = \"\";\n bytes = Util.b64ToByteArray(base64String, base64String.length);\n for(let i = 0; i < bytes.length; i += 1){\n svgString += String.fromCharCode(bytes[i]);\n }\n ar = Image.getMetricsFromSvgString(svgString);\n }\n // PNG format: we store all metrics information in the first 88 bytes.\n } else {\n base64String = img.src.substr(img.src.indexOf(\"base64,\") + 7, img.src.length);\n bytes = Util.b64ToByteArray(base64String, 88);\n ar = Image.getMetricsFromBytes(bytes);\n }\n // Backwards compatibility: we store the metrics into createimage response.\n } else {\n ar = Util.urlToAssArray(uri);\n }\n let width = ar.cw;\n if (!width) {\n return;\n }\n let height = ar.ch;\n let baseline = ar.cb;\n const { dpi } = ar;\n if (dpi) {\n width = width * 96 / dpi;\n height = height * 96 / dpi;\n baseline = baseline * 96 / dpi;\n }\n img.width = width;\n img.height = height;\n img.style.verticalAlign = `-${height - baseline}px`;\n }\n /**\n * Calculates the metrics of an image which has been resized. Is used to restore the original\n * metrics of a resized image.\n * @param {HTMLImageElement } img - The resized HTMLImageElement.\n */ static fixAfterResize(img) {\n img.removeAttribute(\"style\");\n img.removeAttribute(\"width\");\n img.removeAttribute(\"height\");\n // In order to avoid resize with max-width css property.\n img.style.maxWidth = \"none\";\n const processImg = (img)=>{\n if (img.src.indexOf(\"data:image\") !== -1) {\n if (img.src.indexOf(\"data:image/svg+xml\") !== -1) {\n // Image is in base64: decode it in order to calculate the size, and then bring it back to base64\n // This is a bit of an ugly hack used to recycle the logic of Image.setImgSize instead of rewriting it\n // (which would actually make more sense for readibility and efficiency).\n if (img.src.indexOf(\"data:image/svg+xml;base64,\") !== -1) {\n // 'data:image/svg+xml;base64,'.length === 26\n const base64String = img.getAttribute(\"src\").substring(26);\n const svgString = window.atob(base64String);\n const encodedSvgString = encodeURIComponent(svgString);\n img.setAttribute(\"src\", `data:image/svg+xml;charset=utf8,${encodedSvgString}`);\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n // Return src to base64!\n img.setAttribute(\"src\", `data:image/svg+xml;base64,${base64String}`);\n } else {\n // 'data:image/svg+xml;charset=utf8,'.length === 32.\n const svg = decodeURIComponent(img.src.substring(32, img.src.length));\n Image.setImgSize(img, svg, true);\n }\n } else {\n // 'data:image/png;base64,' === 22.\n const base64 = img.src.substring(22, img.src.length);\n Image.setImgSize(img, base64, true);\n }\n } else {\n Image.setImgSize(img, img.src);\n }\n };\n // If the image doesn't contain a blob, just process it normally\n if (img.src.indexOf(\"blob:\") === -1) {\n processImg(img);\n // if it does contain a blob, then read that, replace the src with the decoded content, and process it\n } else {\n let reader = new FileReader();\n reader.onload = function() {\n img.setAttribute(\"src\", reader.result);\n processImg(img);\n };\n fetch(img.src).then((r)=>r.blob()).then((blob)=>{\n reader.readAsDataURL(blob);\n });\n }\n }\n /**\n * Returns the metrics (height, width and baseline) contained in a SVG image generated\n * by the MathType image service. This image contains as an extra custom attribute:\n * the baseline (wrs:baseline).\n * @param {String} svgString - The SVG image.\n * @return {Array} - The image metrics.\n */ static getMetricsFromSvgString(svgString) {\n let first = svgString.indexOf('height=\"');\n let last = svgString.indexOf('\"', first + 8, svgString.length);\n const height = svgString.substring(first + 8, last);\n first = svgString.indexOf('width=\"');\n last = svgString.indexOf('\"', first + 7, svgString.length);\n const width = svgString.substring(first + 7, last);\n first = svgString.indexOf('wrs:baseline=\"');\n last = svgString.indexOf('\"', first + 14, svgString.length);\n const baseline = svgString.substring(first + 14, last);\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n if (typeof baseline !== \"undefined\") {\n arr.cb = baseline;\n }\n return arr;\n }\n return [];\n }\n /**\n * Returns the metrics (width, height, baseline and dpi) contained in a PNG byte array.\n * @param {Array.} bytes - png byte array.\n * @return {Array} The png metrics.\n */ static getMetricsFromBytes(bytes) {\n Util.readBytes(bytes, 0, 8);\n let width;\n let height;\n let typ;\n let baseline;\n let dpi;\n while(bytes.length >= 4){\n typ = Util.readInt32(bytes);\n if (typ === 0x49484452) {\n width = Util.readInt32(bytes);\n height = Util.readInt32(bytes);\n // Read 5 bytes.\n Util.readInt32(bytes);\n Util.readByte(bytes);\n } else if (typ === 0x62615345) {\n // Baseline: 'baSE'.\n baseline = Util.readInt32(bytes);\n } else if (typ === 0x70485973) {\n // Dpis: 'pHYs'.\n dpi = Util.readInt32(bytes);\n dpi = Math.round(dpi / 39.37);\n Util.readInt32(bytes);\n Util.readByte(bytes);\n }\n Util.readInt32(bytes);\n }\n if (typeof width !== \"undefined\") {\n const arr = [];\n arr.cw = width;\n arr.ch = height;\n arr.dpi = dpi;\n if (baseline) {\n arr.cb = baseline;\n }\n return arr;\n }\n return [];\n }\n}\n\n/**\n * @classdesc\n * This class represents MathType accessible class. Converts MathML to accessible text and manages\n * the associated client-side cache.\n */ class Accessibility {\n /**\n * Static property.\n * Accessibility cache, each entry contains a MathML and its correspondent accessibility text.\n * @type {TextCache}\n */ static get cache() {\n return Accessibility._cache;\n }\n /**\n * Static property setter.\n * Set accessibility cache.\n * @param {TextCahe} value - The property value.\n * @ignore\n */ static set cache(value) {\n Accessibility._cache = value;\n }\n /**\n * Converts MathML strings to its accessible text representation.\n * @param {String} mathML - MathML to be converted to accessible text.\n * @param {String} [language] - Language of the accessible text. 'en' by default.\n * @param {Array.} [data] - Parameters to send to mathml2accessible service.\n * @return {String} Accessibility text.\n */ static mathMLToAccessible(mathML, language, data) {\n if (typeof language === \"undefined\") {\n language = \"en\";\n }\n // Check MathML class. If the class is chemistry,\n // we add chemistry to data to force accessibility service\n // to load chemistry grammar.\n if (MathML.containClass(mathML, \"wrs_chemistry\")) {\n data.mode = \"chemistry\";\n }\n // Ignore accesibility styles\n data.ignoreStyles = true;\n let accessibleText = \"\";\n if (Accessibility.cache.get(mathML)) {\n accessibleText = Accessibility.cache.get(mathML);\n } else {\n data.service = \"mathml2accessible\";\n data.lang = language;\n const accessibleJsonResponse = JSON.parse(ServiceProvider.getService(\"service\", data));\n if (accessibleJsonResponse.status !== \"error\") {\n accessibleText = accessibleJsonResponse.result.text;\n Accessibility.cache.populate(mathML, accessibleText);\n } else {\n accessibleText = StringManager.get(\"error_convert_accessibility\");\n }\n }\n return accessibleText;\n }\n}\n/**\n * Contains an instance of TextCache class to manage the JavaScript accessible cache.\n * Each entry of the cache object contains the MathML and it's correspondent accessibility text.\n * @private\n * @type {TextCache}\n */ Accessibility._cache = new TextCache();\n\n/**\n * @classdesc\n * This class represent a MahML parser. Converts MathML into formulas depending on the\n * image format (SVG, PNG, base64) and the save mode (XML, safeXML, Image) configured\n * in the backend.\n */ class Parser {\n /**\n * Converts a MathML string to an img element.\n * @param {Document} creator - Document object to call createElement method.\n * @param {string} mathml - MathML code\n * @param {Object[]} wirisProperties - object containing WIRIS custom properties\n * @param {language} language - custom language for accessibility.\n * @returns {HTMLImageElement} the formula image corresponding to initial MathML string.\n * @static\n */ static mathmlToImgObject(creator, mathml, wirisProperties, language) {\n const imgObject = creator.createElement(\"img\");\n imgObject.align = \"middle\";\n imgObject.style.maxWidth = \"none\";\n let data = wirisProperties || {};\n // Take into account the backend config\n const wirisEditorProperties = Configuration.get(\"editorParameters\");\n data = {\n ...wirisEditorProperties,\n ...data\n };\n data.mml = mathml;\n data.lang = language;\n // Request metrics of the generated image.\n data.metrics = \"true\";\n data.centerbaseline = \"false\";\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n // Render js params: _wrs_int_wirisProperties contains some js render params.\n // Since MathML can support render params, js params should be send only to editor.\n imgObject.className = Configuration.get(\"imageClassName\");\n if (mathml.indexOf('class=\"') !== -1) {\n // We check here if the MathML has been created from a customEditor (such chemistry)\n // to add custom editor name attribute to img object (if necessary).\n let mathmlSubstring = mathml.substring(mathml.indexOf('class=\"') + 'class=\"'.length, mathml.length);\n mathmlSubstring = mathmlSubstring.substring(0, mathmlSubstring.indexOf('\"'));\n mathmlSubstring = mathmlSubstring.substring(4, mathmlSubstring.length);\n imgObject.setAttribute(Configuration.get(\"imageCustomEditorName\"), mathmlSubstring);\n }\n // Performance enabled.\n if (Configuration.get(\"wirisPluginPerformance\") && (Configuration.get(\"saveMode\") === \"xml\" || Configuration.get(\"saveMode\") === \"safeXml\")) {\n let result = JSON.parse(Parser.createShowImageSrc(data, language));\n if (result.status === \"warning\") {\n // POST call.\n // if the mathml is malformed, this function will throw an exception.\n try {\n result = JSON.parse(ServiceProvider.getService(\"showimage\", data));\n } catch (e) {\n return null;\n }\n }\n ({ result } = result);\n if (result.format === \"png\") {\n imgObject.src = `data:image/png;base64,${result.content}`;\n } else {\n imgObject.src = `data:image/svg+xml;charset=utf8,${Util.urlEncode(result.content)}`;\n }\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n Image.setImgSize(imgObject, result.content, true);\n if (Configuration.get(\"enableAccessibility\")) {\n if (typeof result.alt === \"undefined\") {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n } else {\n imgObject.alt = result.alt;\n }\n }\n } else {\n const result = Parser.createImageSrc(mathml, data);\n imgObject.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n imgObject.src = result;\n Image.setImgSize(imgObject, result, Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\");\n if (Configuration.get(\"enableAccessibility\")) {\n imgObject.alt = Accessibility.mathMLToAccessible(mathml, language, data);\n }\n }\n if (typeof Parser.observer !== \"undefined\") {\n Parser.observer.observe(imgObject);\n }\n // Role math https://www.w3.org/TR/wai-aria/roles#math.\n imgObject.setAttribute(\"role\", \"math\");\n return imgObject;\n }\n /**\n * Returns the source to showimage service by calling createimage service. The\n * output of the createimage service is a URL path pointing to showimage service.\n * This method is called when performance is disabled.\n * @param {string} mathml - MathML code.\n * @param {Object[]} data - data object containing service parameters.\n * @returns {string} the showimage path.\n */ static createImageSrc(mathml, data) {\n // Full base64 method (edit & save).\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"default\") {\n data.base64 = true;\n }\n let result = ServiceProvider.getService(\"createimage\", data);\n if (result.indexOf(\"@BASE@\") !== -1) {\n // Replacing '@BASE@' with the base URL of createimage.\n const baseParts = ServiceProvider.getServicePath(\"createimage\").split(\"/\");\n baseParts.pop();\n result = result.split(\"@BASE@\").join(baseParts.join(\"/\"));\n }\n return result;\n }\n /**\n * Parses initial HTML code. If the HTML contains data generated by WIRIS,\n * this data would be converted as following:\n *
\n   * MathML code: Image containing the corresponding MathML formulas.\n   * MathML code with LaTeX annotation : LaTeX string.\n   * 
\n * @param {string} code - HTML code containing MathML data.\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code with the original MathML converted into LaTeX and images.\n */ static initParse(code, language) {\n /* Note: The code inside this function has been inverted.\n If you invert again the code then you cannot use correctly LaTeX\n in Moodle.\n */ code = Parser.initParseSaveMode(code, language);\n return Parser.initParseEditMode(code);\n }\n /**\n * Parses initial HTML code depending on the save mode. Transforms all MathML\n * occurrences for it's correspondent image or LaTeX.\n * @param {string} code - HTML code to be parsed\n * @param {string} language - language to create image alt text.\n * @returns {string} HTML code parsed.\n */ static initParseSaveMode(code, language) {\n if (Configuration.get(\"saveMode\")) {\n // Converting XML to tags.\n code = Latex.parseMathmlToLatex(code, Constants.safeXmlCharacters);\n code = Latex.parseMathmlToLatex(code, Constants.xmlCharacters);\n code = Parser.parseMathmlToImg(code, Constants.safeXmlCharacters, language);\n code = Parser.parseMathmlToImg(code, Constants.xmlCharacters, language);\n if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"base642showimage\");\n }\n }\n return code;\n }\n /**\n * Parses initial HTML code depending on the edit mode.\n * If 'latex' parseMode is enabled all MathML containing an annotation with encoding='LaTeX' will\n * be converted into a LaTeX string instead of an image.\n * @param {string} code - HTML code containing MathML.\n * @returns {string} parsed HTML code.\n */ static initParseEditMode(code) {\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n const imgList = Util.getElementsByNameFromString(code, \"img\", true);\n const token = 'encoding=\"LaTeX\">';\n // While replacing images with latex, the indexes of the found images changes\n // respecting the original code, so this carry is needed.\n let carry = 0;\n for(let i = 0; i < imgList.length; i += 1){\n const imgCode = code.substring(imgList[i].start + carry, imgList[i].end + carry);\n if (imgCode.indexOf(` class=\"${Configuration.get(\"imageClassName\")}\"`) !== -1) {\n let mathmlStartToken = ` ${Configuration.get(\"imageMathmlAttribute\")}=\"`;\n let mathmlStart = imgCode.indexOf(mathmlStartToken);\n if (mathmlStart === -1) {\n mathmlStartToken = ' alt=\"';\n mathmlStart = imgCode.indexOf(mathmlStartToken);\n }\n if (mathmlStart !== -1) {\n mathmlStart += mathmlStartToken.length;\n const mathmlEnd = imgCode.indexOf('\"', mathmlStart);\n const mathml = Util.htmlSanitize(MathML.safeXmlDecode(imgCode.substring(mathmlStart, mathmlEnd)));\n let latexStartPosition = mathml.indexOf(token);\n if (latexStartPosition !== -1) {\n latexStartPosition += token.length;\n const latexEndPosition = mathml.indexOf(\"\", latexStartPosition);\n const latex = mathml.substring(latexStartPosition, latexEndPosition);\n const replaceText = `$$${Util.htmlEntitiesDecode(latex)}$$`;\n const start = code.substring(0, imgList[i].start + carry);\n const end = code.substring(imgList[i].end + carry);\n code = start + replaceText + end;\n carry += replaceText.length - (imgList[i].end - imgList[i].start);\n }\n }\n }\n }\n }\n return code;\n }\n /**\n * Parses end HTML code. The end HTML code is HTML code with embedded images\n * or LaTeX formulas created with MathType.
\n * By default this method converts the formula images and LaTeX strings in MathML.
\n * If image mode is enabled the images will not be converted into MathML. For further information see {@link https://docs.wiris.com/mathtype/en/mathtype-integrations/mathtype-web-interface-features/full-mathml-mode---wirisplugins-js.html}.\n * @param {string} code - HTML to be parsed\n * @returns {string} the HTML code parsed.\n */ static endParse(code) {\n // Transform LaTeX ocurrences to MathML elements.\n const codeEndParsedEditMode = Parser.endParseEditMode(code);\n // Transform img elements to MathML elements.\n const codeEndParseSaveMode = Parser.endParseSaveMode(codeEndParsedEditMode);\n return codeEndParseSaveMode;\n }\n /**\n * Parses end HTML code depending on the edit mode.\n * - LaTeX is an enabled parse mode, all LaTeX occurrences will be converted into MathML.\n * @param {string} code - HTML code to be parsed.\n * @returns {string} HTML code parsed.\n */ static endParseEditMode(code) {\n // Converting LaTeX to images.\n if (Configuration.get(\"parseModes\").indexOf(\"latex\") !== -1) {\n let output = \"\";\n let endPosition = 0;\n let startPosition = code.indexOf(\"$$\");\n while(startPosition !== -1){\n output += code.substring(endPosition, startPosition);\n endPosition = code.indexOf(\"$$\", startPosition + 2);\n if (endPosition !== -1) {\n // Before, it was a condition here to execute the next codelines\n // 'latex.indexOf('<') == -1'.\n // We don't know why it was used, but seems to have a conflict with\n // latex formulas that contains '<'.\n const latex = code.substring(startPosition + 2, endPosition);\n const decodedLatex = Util.htmlEntitiesDecode(latex);\n let mathml = Util.htmlSanitize(Latex.getMathMLFromLatex(decodedLatex, true));\n if (!Configuration.get(\"saveHandTraces\")) {\n // Remove hand traces.\n mathml = MathML.removeAnnotation(mathml, \"application/json\");\n }\n output += mathml;\n endPosition += 2;\n } else {\n output += \"$$\";\n endPosition = startPosition + 2;\n }\n startPosition = code.indexOf(\"$$\", endPosition);\n }\n output += code.substring(endPosition, code.length);\n code = output;\n }\n return code;\n }\n /**\n * Parses end HTML code depending on the save mode. Converts all\n * images into the element determined by the save mode:\n * - xml: Parses images formulas into MathML.\n * - safeXml: Parses images formulas into safeMAthML\n * - base64: Parses images into base64 images.\n * - image: Parse images into images (no parsing)\n * @param {string} code - HTML code to be parsed\n * @returns {string} HTML code parsed.\n */ static endParseSaveMode(code) {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n code = Parser.codeImgTransform(code, \"img2mathml\");\n } else if (Configuration.get(\"saveMode\") === \"base64\" && Configuration.get(\"base64savemode\") === \"image\") {\n code = Parser.codeImgTransform(code, \"img264\");\n }\n }\n return code;\n }\n /**\n * Auxiliar function that builds the data object to send to the showimage endpoint\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object with the data to send to showimage.\n */ static createShowImageSrcData(data, language) {\n const dataMd5 = {};\n const renderParams = [\n \"mml\",\n \"color\",\n \"centerbaseline\",\n \"zoom\",\n \"dpi\",\n \"fontSize\",\n \"fontFamily\",\n \"defaultStretchy\",\n \"backgroundColor\",\n \"format\"\n ];\n renderParams.forEach((param)=>{\n if (typeof data[param] !== \"undefined\") {\n dataMd5[param] = data[param];\n }\n });\n // Data variables to get.\n const dataObject = {};\n Object.keys(data).forEach((key)=>{\n // We don't need mathml in this request we try to get cached.\n // Only need the formula md5 calculated before.\n if (key !== \"mml\") {\n dataObject[key] = data[key];\n }\n });\n dataObject.formula = com.wiris.js.JsPluginTools.md5encode(Util.propertiesToString(dataMd5));\n dataObject.lang = typeof language === \"undefined\" ? \"en\" : language;\n dataObject.version = Configuration.get(\"version\");\n return dataObject;\n }\n /**\n * Returns the result to call showimage service with the formula md5 as parameter.\n * The result could be:\n * - {'status' : warning'} : The image associated to the MathML md5 is not in cache.\n * - {'status' : 'ok' ...} : The image associated to the MathML md5 is in cache.\n * @param {Object[]} data - object containing showimage service parameters.\n * @param {string} language - string containing the language of the formula.\n * @returns {Object} JSON object containing showimage response.\n */ static createShowImageSrc(data, language) {\n const dataObject = this.createShowImageSrcData(data, language);\n const result = ServiceProvider.getService(\"showimage\", Util.httpBuildQuery(dataObject), true);\n return result;\n }\n /**\n * Transform html img tags inside a html code to mathml, base64 img tags (i.e with base64 on src)\n * or showimage img tags (i.e with showimage.php on src)\n * @param {string} code - HTML code\n * @param {string} mode - base642showimage or img2mathml or img264 transform.\n * @returns {string} html - code transformed.\n */ static codeImgTransform(code, mode) {\n let output = \"\";\n let endPosition = 0;\n const pattern = /\") {\n endPosition = i + 1;\n }\n i += 1;\n }\n if (endPosition < startPosition) {\n // The img tag is stripped.\n output += code.substring(startPosition, code.length);\n return output;\n }\n let imgCode = code.substring(startPosition, endPosition);\n const imgObject = Util.createObject(imgCode);\n let xmlCode = imgObject.getAttribute(Configuration.get(\"imageMathmlAttribute\"));\n let convertToXml;\n let convertToSafeXml;\n if (mode === \"base642showimage\") {\n if (xmlCode == null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n imgCode = Parser.mathmlToImgObject(document, xmlCode, null, null);\n output += Util.createObjectCode(imgCode);\n } else if (mode === \"img2mathml\") {\n if (Configuration.get(\"saveMode\")) {\n if (Configuration.get(\"saveMode\") === \"safeXml\") {\n convertToXml = true;\n convertToSafeXml = true;\n } else if (Configuration.get(\"saveMode\") === \"xml\") {\n convertToXml = true;\n convertToSafeXml = false;\n }\n }\n output += Util.getWIRISImageOutput(imgCode, convertToXml, convertToSafeXml);\n } else if (mode === \"img264\") {\n if (xmlCode === null) {\n xmlCode = imgObject.getAttribute(\"alt\");\n }\n xmlCode = MathML.safeXmlDecode(xmlCode);\n const properties = {};\n properties.base64 = \"true\";\n imgCode = Parser.mathmlToImgObject(document, xmlCode, properties, null);\n // Metrics.\n Image.setImgSize(imgCode, imgCode.src, true);\n output += Util.createObjectCode(imgCode);\n }\n }\n output += code.substring(endPosition, code.length);\n return output;\n }\n /**\n * Converts all occurrences of MathML to the corresponding image.\n * @param {string} content - string with valid MathML code.\n * The MathML code doesn't contain semantics.\n * @param {Constants} characters - Constant object containing xmlCharacters\n * or safeXmlCharacters relation.\n * @param {string} language - a valid language code\n * in order to generate formula accessibility.\n * @returns {string} The input string with all the MathML\n * occurrences replaced by the corresponding image.\n */ static parseMathmlToImg(content, characters, language) {\n let output = \"\";\n const mathTagBegin = `${characters.tagOpener}math`;\n const mathTagEnd = `${characters.tagOpener}/math${characters.tagCloser}`;\n let start = content.indexOf(mathTagBegin);\n let end = 0;\n while(start !== -1){\n output += content.substring(end, start);\n // Avoid WIRIS images to be parsed.\n const imageMathmlAtrribute = content.indexOf(Configuration.get(\"imageMathmlAttribute\"));\n end = content.indexOf(mathTagEnd, start);\n if (end === -1) {\n end = content.length - 1;\n } else if (imageMathmlAtrribute !== -1) {\n // First close tag of img attribute\n // If a mathmlAttribute exists should be inside a img tag.\n end += content.indexOf(\"/>\", start);\n } else {\n end += mathTagEnd.length;\n }\n if (!MathML.isMathmlInAttribute(content, start) && imageMathmlAtrribute === -1) {\n let mathml = content.substring(start, end);\n mathml = characters.id === Constants.safeXmlCharacters.id ? MathML.safeXmlDecode(mathml) : MathML.mathMLEntities(mathml);\n output += Util.createObjectCode(Parser.mathmlToImgObject(document, mathml, null, language));\n } else {\n output += content.substring(start, end);\n }\n start = content.indexOf(mathTagBegin, end);\n }\n output += content.substring(end, content.length);\n return output;\n }\n}\n// Mutation observers to avoid wiris image formulas class be removed.\nif (typeof MutationObserver !== \"undefined\") {\n const mutationObserver = new MutationObserver((mutations)=>{\n mutations.forEach((mutation)=>{\n if (mutation.oldValue === Configuration.get(\"imageClassName\") && mutation.attributeName === \"class\" && mutation.target.className.indexOf(Configuration.get(\"imageClassName\")) === -1) {\n mutation.target.className = Configuration.get(\"imageClassName\");\n }\n });\n });\n Parser.observer = Object.create(mutationObserver);\n Parser.observer.Config = {\n attributes: true,\n attributeOldValue: true\n };\n // We use own default config.\n Parser.observer.observe = function(target) {\n Object.getPrototypeOf(this).observe(target, this.Config);\n };\n}\n\n/* eslint-disable class-methods-use-this */ /* eslint-disable no-unused-vars */ /* eslint-disable no-extra-semi */ // The rules above are disabled because we are implementing\n// an external interface.\nclass EditorListener {\n /**\n * @classdesc\n * Determines if the content of the\n * MathType Editor has changes.\n * @implements {EditorListeners}\n * @constructs\n */ constructor(){\n /**\n * Indicates if the content of the editor has changed.\n * @type {Boolean}\n */ this.isContentChanged = false;\n /**\n * Indicates if the listener should be waiting for changes in the editor.\n * @type {Boolean}\n */ this.waitingForChanges = false;\n }\n /**\n * Sets {@link EditorListener.isContentChanged} property.\n * @param {Boolean} value - The new vlue.\n */ setIsContentChanged(value) {\n this.isContentChanged = value;\n }\n /**\n * Returns true if the content of the editor has been changed, false otherwise.\n * @return {Boolean}\n */ getIsContentChanged() {\n return this.isContentChanged;\n }\n /**\n * Determines if the EditorListener should wait for any changes.\n * @param {Boolean} value - True if the editor should wait for changes, false otherwise.\n */ setWaitingForChanges(value) {\n this.waitingForChanges = value;\n }\n /**\n * EditorListener method to overwrite.\n * @type {JsEditor}\n * @ignore\n */ caretPositionChanged(_editor) {}\n /**\n * EditorListener method to overwrite\n * @type {JsEditor}\n * @ignore\n */ clipboardChanged(_editor) {}\n /**\n * Determines if the content of an editor has been changed.\n * @param {JsEditor} editor - editor object.\n */ contentChanged(_editor) {\n if (this.waitingForChanges === true && this.isContentChanged === false) {\n this.isContentChanged = true;\n }\n }\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} editor - The editor instance.\n */ styleChanged(_editor) {}\n /**\n * EditorListener method to overwrite\n * @param {JsEditor} - The editor instance.\n */ transformationReceived(_editor) {}\n}\n\nlet wasm;\nconst cachedTextDecoder = typeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-8\", {\n ignoreBOM: true,\n fatal: true\n}) : {\n decode: ()=>{\n throw Error(\"TextDecoder not available\");\n }\n};\nif (typeof TextDecoder !== \"undefined\") {\n cachedTextDecoder.decode();\n}\nlet cachedUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\nconst heap = new Array(128).fill(undefined);\nheap.push(undefined, null, true, false);\nlet heap_next = heap.length;\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n heap[idx] = obj;\n return idx;\n}\nfunction getObject(idx) {\n return heap[idx];\n}\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\nlet WASM_VECTOR_LEN = 0;\nconst cachedTextEncoder = typeof TextEncoder !== \"undefined\" ? new TextEncoder(\"utf-8\") : {\n encode: ()=>{\n throw Error(\"TextEncoder not available\");\n }\n};\nconst encodeString = typeof cachedTextEncoder.encodeInto === \"function\" ? function(arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n} : function(arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n};\nfunction passStringToWasm0(arg, malloc, realloc) {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8Memory0();\n let offset = 0;\n for(; offset < len; offset++){\n const code = arg.charCodeAt(offset);\n if (code > 0x7f) break;\n mem[ptr + offset] = code;\n }\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n offset += ret.written;\n }\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\nlet cachedInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\nlet cachedFloat64Memory0 = null;\nfunction getFloat64Memory0() {\n if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) {\n cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64Memory0;\n}\nlet cachedBigInt64Memory0 = null;\nfunction getBigInt64Memory0() {\n if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) {\n cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer);\n }\n return cachedBigInt64Memory0;\n}\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == \"number\" || type == \"boolean\" || val == null) {\n return `${val}`;\n }\n if (type == \"string\") {\n return `\"${val}\"`;\n }\n if (type == \"symbol\") {\n const description = val.description;\n if (description == null) {\n return \"Symbol\";\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == \"function\") {\n const name = val.name;\n if (typeof name == \"string\" && name.length > 0) {\n return `Function(${name})`;\n } else {\n return \"Function\";\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = \"[\";\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++){\n debug += \", \" + debugString(val[i]);\n }\n debug += \"]\";\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == \"Object\") {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return \"Object(\" + JSON.stringify(val) + \")\";\n } catch (_) {\n return \"Object\";\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\nfunction makeClosure(arg0, arg1, dtor, f) {\n const state = {\n a: arg0,\n b: arg1,\n cnt: 1,\n dtor\n };\n const real = (...args)=>{\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n try {\n return f(state.a, state.b, ...args);\n } finally{\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b);\n state.a = 0;\n }\n }\n };\n real.original = state;\n return real;\n}\nfunction __wbg_adapter_46(arg0, arg1, arg2) {\n wasm.__wbindgen_export_3(arg0, arg1, addHeapObject(arg2));\n}\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = {\n a: arg0,\n b: arg1,\n cnt: 1,\n dtor\n };\n const real = (...args)=>{\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally{\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n return real;\n}\nfunction __wbg_adapter_49(arg0, arg1) {\n wasm.__wbindgen_export_4(arg0, arg1);\n}\nfunction __wbg_adapter_52(arg0, arg1, arg2) {\n wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));\n}\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export_6(addHeapObject(e));\n }\n}\nfunction __wbg_adapter_103(arg0, arg1, arg2, arg3) {\n wasm.__wbindgen_export_7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n/**\n */ let Telemeter$1 = class Telemeter {\n __destroy_into_raw() {\n const ptr = this.__wbg_ptr;\n this.__wbg_ptr = 0;\n return ptr;\n }\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_telemeter_free(ptr);\n }\n /**\n * @param {any} solution\n * @param {any} hosts\n * @param {any} config\n */ constructor(solution, hosts, config){\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.telemeter_new(retptr, addHeapObject(solution), addHeapObject(hosts), addHeapObject(config));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n this.__wbg_ptr = r0 >>> 0;\n return this;\n } finally{\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} sender_id\n * @returns {Promise}\n */ identify(sender_id) {\n const ptr0 = passStringToWasm0(sender_id, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_identify(this.__wbg_ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * @param {string} event_type\n * @param {any} event_payload\n * @returns {Promise}\n */ track(event_type, event_payload) {\n const ptr0 = passStringToWasm0(event_type, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_track(this.__wbg_ptr, ptr0, len0, addHeapObject(event_payload));\n return takeObject(ret);\n }\n /**\n * @param {any} level\n * @param {string} message\n * @param {any} payload\n * @returns {Promise}\n */ log(level, message, payload) {\n const ptr0 = passStringToWasm0(message, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len0 = WASM_VECTOR_LEN;\n const ret = wasm.telemeter_log(this.__wbg_ptr, addHeapObject(level), ptr0, len0, addHeapObject(payload));\n return takeObject(ret);\n }\n /**\n * @returns {Promise}\n */ finish() {\n const ptr = this.__destroy_into_raw();\n const ret = wasm.telemeter_finish(ptr);\n return takeObject(ret);\n }\n /**\n * @param {boolean | undefined} [new_debug_status]\n */ debug(new_debug_status) {\n wasm.telemeter_debug(this.__wbg_ptr, isLikeNone(new_debug_status) ? 0xffffff : new_debug_status ? 1 : 0);\n }\n};\nasync function __wbg_load(module1, imports) {\n if (typeof Response === \"function\" && module1 instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === \"function\") {\n try {\n return await WebAssembly.instantiateStreaming(module1, imports);\n } catch (e) {\n if (module1.headers.get(\"Content-Type\") != \"application/wasm\") {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n } else {\n throw e;\n }\n }\n }\n const bytes = await module1.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n } else {\n const instance = await WebAssembly.instantiate(module1, imports);\n if (instance instanceof WebAssembly.Instance) {\n return {\n instance,\n module: module1\n };\n } else {\n return instance;\n }\n }\n}\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_c728d68b8b34487e = function() {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_status_7841bb47be2a8f16 = function(arg0) {\n const ret = getObject(arg0).status;\n return ret;\n };\n imports.wbg.__wbg_headers_ea7ef583d1564b08 = function(arg0) {\n const ret = getObject(arg0).headers;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new0_ad75dd38f92424e2 = function() {\n const ret = new Date();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getTime_ed6ee333b702f8fc = function(arg0) {\n const ret = getObject(arg0).getTime();\n return ret;\n };\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbindgen_is_object = function(arg0) {\n const val = getObject(arg0);\n const ret = typeof val === \"object\" && val !== null;\n return ret;\n };\n imports.wbg.__wbg_crypto_58f13aa23ffcb166 = function(arg0) {\n const ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_process_5b786e71d465a513 = function(arg0) {\n const ret = getObject(arg0).process;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_versions_c2ab80650590b6a2 = function(arg0) {\n const ret = getObject(arg0).versions;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_node_523d7bd03ef69fba = function(arg0) {\n const ret = getObject(arg0).node;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_string = function(arg0) {\n const ret = typeof getObject(arg0) === \"string\";\n return ret;\n };\n imports.wbg.__wbg_msCrypto_abcb1295e768d1f2 = function(arg0) {\n const ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_require_2784e593a4674877 = function() {\n return handleError(function() {\n const ret = module.require;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_newwithlength_13b5319ab422dcf6 = function(arg0) {\n const ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_4a9aa5157afeb382 = function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_1989a20442400aaa = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_done_bc26bf4ada718266 = function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_value_0570714ff7d75f35 = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_iterator_7ee1a391d310f8e4 = function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_2aff440840bb6202 = function() {\n return handleError(function(arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_next_15da6a3df9290720 = function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_function = function(arg0) {\n const ret = typeof getObject(arg0) === \"function\";\n return ret;\n };\n imports.wbg.__wbg_call_669127b9d730c650 = function() {\n return handleError(function(arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_3fad056edded10bd = function() {\n return handleError(function() {\n const ret = self.self;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_window_a4f46c98a61d4089 = function() {\n return handleError(function() {\n const ret = window.window;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_globalThis_17eff828815f7d84 = function() {\n return handleError(function() {\n const ret = globalThis.globalThis;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_global_46f939f6541643c5 = function() {\n return handleError(function() {\n const ret = global.global;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg_newnoargs_ccdcae30fd002262 = function(arg0, arg1) {\n const ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_isArray_38525be7442aa21e = function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_call_53fc3abd42e24ec8 = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_isSafeInteger_c38b0a16d0c7cef7 = function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_new_feb65b865d980ae2 = function(arg0, arg1) {\n try {\n var state0 = {\n a: arg0,\n b: arg1\n };\n var cb0 = (arg0, arg1)=>{\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_103(a, state0.b, arg0, arg1);\n } finally{\n state0.a = a;\n }\n };\n const ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally{\n state0.a = state0.b = 0;\n }\n };\n imports.wbg.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_buffer_344d9b41efe96da7 = function(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_d8a000788389a31e = function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_dcfd613a3420f908 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n };\n imports.wbg.__wbg_length_a5587d6cd79ab197 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"string\" ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_stringify_4039297315a25b00 = function() {\n return handleError(function(arg0) {\n const ret = JSON.stringify(getObject(arg0));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_set_40f7786a25a9cc7e = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_has_cdf8b85f6e903c80 = function() {\n return handleError(function(arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n }, arguments);\n };\n imports.wbg.__wbg_fetch_701fcd2bde06379a = function(arg0, arg1) {\n const ret = getObject(arg0).fetch(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_fetch_b5d6bebed1e6c2d2 = function(arg0) {\n const ret = fetch(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_2dc04d99088b15e3 = function(arg0, arg1, arg2) {\n const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_e4960143e41697a4 = function() {\n return handleError(function() {\n const ret = new AbortController();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_signal_1ed842bebd6ae322 = function(arg0) {\n const ret = getObject(arg0).signal;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_abort_8355f201f30300bb = function(arg0) {\n getObject(arg0).abort();\n };\n imports.wbg.__wbindgen_error_new = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_boolean_get = function(arg0) {\n const v = getObject(arg0);\n const ret = typeof v === \"boolean\" ? v ? 1 : 0 : 2;\n return ret;\n };\n imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof obj === \"number\" ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbg_instanceof_Uint8Array_19e6f142a5e7e1e1 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_c7cc317e5c29cc0d = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_entries_6d727b73ee02b7ce = function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_String_917f38a1211cf44b = function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_warn_ade8d3b7ecee11ff = function(arg0, arg1) {\n console.warn(getObject(arg0), getObject(arg1));\n };\n imports.wbg.__wbg_readyState_13e55da5ad6d64e2 = function(arg0) {\n const ret = getObject(arg0).readyState;\n return ret;\n };\n imports.wbg.__wbg_warn_4affe1093892a4ef = function(arg0) {\n console.warn(getObject(arg0));\n };\n imports.wbg.__wbg_close_f4135085ec3fc8f0 = function() {\n return handleError(function(arg0) {\n getObject(arg0).close();\n }, arguments);\n };\n imports.wbg.__wbg_new_b9b318679315404f = function() {\n return handleError(function(arg0, arg1) {\n const ret = new WebSocket(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setbinaryType_dcb62e0f2b346301 = function(arg0, arg1) {\n getObject(arg0).binaryType = takeObject(arg1);\n };\n imports.wbg.__wbg_log_7811587c4c6d2844 = function(arg0) {\n console.log(getObject(arg0));\n };\n imports.wbg.__wbg_error_f0a6627f4b23c19d = function(arg0) {\n console.error(getObject(arg0));\n };\n imports.wbg.__wbg_info_3ca7870690403fee = function(arg0) {\n console.info(getObject(arg0));\n };\n imports.wbg.__wbg_document_183cf1eecfdbffee = function(arg0) {\n const ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_visibilityState_9721703a5ef75faf = function(arg0) {\n const ret = getObject(arg0).visibilityState;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getwithrefkey_3b3c46ba20582127 = function(arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_cace2e0b3ddc0502 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_addEventListener_0f2891b0794e07fa = function() {\n return handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbg_removeEventListener_104d11302bb212d1 = function() {\n return handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n }, arguments);\n };\n imports.wbg.__wbindgen_is_bigint = function(arg0) {\n const ret = typeof getObject(arg0) === \"bigint\";\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_in = function(arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n };\n imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) {\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg_localStorage_e11f72e996a4f5d9 = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).localStorage;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_getItem_c81cd3ae30cd579a = function() {\n return handleError(function(arg0, arg1, arg2, arg3) {\n const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n var len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n }, arguments);\n };\n imports.wbg.__wbg_navigator_7078da62d92ff5ad = function(arg0) {\n const ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_mediaDevices_e00b1f64d2b9939f = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).mediaDevices;\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_enumerateDevices_619d52f5eef34c2f = function() {\n return handleError(function(arg0) {\n const ret = getObject(arg0).enumerateDevices();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_setItem_fe04f524052a3839 = function() {\n return handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbindgen_cb_drop = function(arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n const ret = false;\n return ret;\n };\n imports.wbg.__wbg_deviceId_58f7da2228a26c02 = function(arg0, arg1) {\n const ret = getObject(arg1).deviceId;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_instanceof_Response_944e2745b5db71f5 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Response;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_randomFillSync_a0d98aa11c81fe89 = function() {\n return handleError(function(arg0, arg1) {\n getObject(arg0).randomFillSync(takeObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbg_subarray_6ca5cfa7fbb9abbe = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getRandomValues_504510b5564925af = function() {\n return handleError(function(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n }, arguments);\n };\n imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof v === \"bigint\" ? v : undefined;\n getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_then_89e1c559530b85cf = function(arg0, arg1) {\n const ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_e5949c35d772a669 = function(arg0) {\n queueMicrotask(getObject(arg0));\n };\n imports.wbg.__wbg_then_1bbc9edafd859b06 = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_queueMicrotask_2be8b97a81fe4d00 = function(arg0) {\n const ret = getObject(arg0).queueMicrotask;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_resolve_a3252b2860f0a09e = function(arg0) {\n const ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_url_1f609e63ff1a7983 = function(arg0, arg1) {\n const ret = getObject(arg1).url;\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);\n const len1 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len1;\n getInt32Memory0()[arg0 / 4 + 0] = ptr1;\n };\n imports.wbg.__wbg_send_2860805104507701 = function() {\n return handleError(function(arg0, arg1, arg2) {\n getObject(arg0).send(getArrayU8FromWasm0(arg1, arg2));\n }, arguments);\n };\n imports.wbg.__wbg_instanceof_Window_cde2416cf5126a72 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Window;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_new_19676474aa414d62 = function() {\n return handleError(function() {\n const ret = new Headers();\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbg_append_feec4143bbf21904 = function() {\n return handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).append(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n }, arguments);\n };\n imports.wbg.__wbg_newwithstrandinit_29038da14d09e330 = function() {\n return handleError(function(arg0, arg1, arg2) {\n const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n }, arguments);\n };\n imports.wbg.__wbindgen_closure_wrapper1532 = function(arg0, arg1, arg2) {\n const ret = makeClosure(arg0, arg1, 76, __wbg_adapter_46);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1602 = function(arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_49);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper1834 = function(arg0, arg1, arg2) {\n const ret = makeMutClosure(arg0, arg1, 76, __wbg_adapter_52);\n return addHeapObject(ret);\n };\n return imports;\n}\nfunction __wbg_finalize_init(instance, module1) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module1;\n cachedBigInt64Memory0 = null;\n cachedFloat64Memory0 = null;\n cachedInt32Memory0 = null;\n cachedUint8Memory0 = null;\n wasm.__wbindgen_start();\n return wasm;\n}\nasync function __wbg_init(input) {\n if (wasm !== undefined) return wasm;\n if (typeof input === \"undefined\") {\n input = new URL(\"telemeter_wasm_bg.wasm\", import.meta.url);\n }\n const imports = __wbg_get_imports();\n if (typeof input === \"string\" || typeof Request === \"function\" && input instanceof Request || typeof URL === \"function\" && input instanceof URL) {\n input = fetch(input);\n }\n const { instance, module: module1 } = await __wbg_load(await input, imports);\n return __wbg_finalize_init(instance, module1);\n}\n\n/**\n * @classdesc\n * This class implements the @wiris/telemeter-wasm. A utility that helps our Solutions to send the data\n * to Telemetry in a more comfortable and homogeneous way.\n */ class Telemeter {\n /**\n * Inits Telemeter class.\n * The parameters structures are defiended on {@link [Telemeter API](https://github.com/wiris/telemeter/blob/main/docs/USAGE.md#telemeter-api)}\n * @param {Object} telemeterAttributes.solution - The product that send data to Telemetry.\n * @param {Object} telemeterAttributes.hosts - Data about the environment where solution is integrated.\n * @param {Object} telemeterAttributes.config - Configuration parameters.\n */ static init(telemeterAttributes) {\n if (!this.telemeter && !this.waitingForInit) {\n this.waitingForInit = true;\n __wbg_init(telemeterAttributes.url).then(()=>{\n this.telemeter = new Telemeter$1(telemeterAttributes.solution, telemeterAttributes.hosts, telemeterAttributes.config);\n }).catch((error)=>{\n console.log(error);\n }).finally(()=>this.waitingForInit = false);\n }\n }\n /**\n * Closes the Telemetry Session. After calling this method no data will be added to the Telemetry Session.\n */ static async finish() {\n if (!this.telemeter) return;\n try {\n let local_telemeter = this.telemeter;\n this.telemeter = undefined;\n await local_telemeter.finish();\n } catch (e) {\n console.error(e);\n }\n }\n}\n\nclass ContentManager {\n /**\n * @classdesc\n * This class represents a modal dialog, managing the following:\n * - The insertion of content into the current instance of the {@link ModalDialog} class.\n * - The actions to be done once the modal object has been submitted\n * (submitAction} method).\n * - The update of the content when the {@link ModalDialog} class is also updated,\n * for example when ModalDialog is re-opened.\n * - The communication between the {@link ModalDialog} class and itself, if the content\n * has been changed (hasChanges} method).\n * @constructs\n * @param {Object} contentManagerAttributes - Object containing all attributes needed to\n * create a new instance.\n */ constructor(contentManagerAttributes){\n /**\n * An object containing MathType editor parameters. See\n * http://docs.wiris.com/en/mathtype/mathtype_web/sdk-api/parameters for further information.\n * @type {Object}\n */ this.editorAttributes = {};\n if (\"editorAttributes\" in contentManagerAttributes) {\n this.editorAttributes = contentManagerAttributes.editorAttributes;\n } else {\n throw new Error(\"ContentManager constructor error: editorAttributes property missed.\");\n }\n /**\n * CustomEditors instance. Contains the custom editors.\n * @type {CustomEditors}\n */ this.customEditors = null;\n if (\"customEditors\" in contentManagerAttributes) {\n this.customEditors = contentManagerAttributes.customEditors;\n }\n /**\n * Environment properties. This object contains data about the integration platform.\n * @type {Object}\n * @property {String} editor - Editor name. Usually the HTML editor.\n * @property {String} mode - Save mode. Xml by default.\n * @property {String} version - Plugin version.\n */ this.environment = {};\n if (\"environment\" in contentManagerAttributes) {\n this.environment = contentManagerAttributes.environment;\n } else {\n throw new Error(\"ContentManager constructor error: environment property missed\");\n }\n /**\n * ContentManager language.\n * @type {String}\n */ this.language = \"\";\n if (\"language\" in contentManagerAttributes) {\n this.language = contentManagerAttributes.language;\n } else {\n throw new Error(\"ContentManager constructor error: language property missed\");\n }\n /**\n * {@link EditorListener} instance. Manages the changes inside the editor.\n * @type {EditorListener}\n */ this.editorListener = new EditorListener();\n /**\n * MathType editor instance.\n * @type {JsEditor}\n */ this.editor = null;\n /**\n * Navigator user agent.\n * @type {String}\n */ this.ua = navigator.userAgent.toLowerCase();\n /**\n * Mobile device properties object\n * @type {DeviceProperties}\n */ this.deviceProperties = {};\n this.deviceProperties.isAndroid = this.ua.indexOf(\"android\") > -1;\n this.deviceProperties.isIOS = ContentManager.isIOS();\n /**\n * Custom editor toolbar.\n * @type {String}\n */ this.toolbar = null;\n /**\n * Custom editor toolbar.\n * @type {String}\n */ this.dbclick = null;\n /**\n * Instance of the {@link ModalDialog} class associated with the current\n * {@link ContentManager} instance.\n * @type {ModalDialog}\n */ this.modalDialogInstance = null;\n /**\n * ContentManager listeners.\n * @type {Listeners}\n */ this.listeners = new Listeners();\n /**\n * MathML associated to the ContentManager instance.\n * @type {String}\n */ this.mathML = null;\n /**\n * Indicates if the edited element is a new one or not.\n * @type {Boolean}\n */ this.isNewElement = true;\n /**\n * {@link IntegrationModel} instance. Needed to call wrapper methods.\n * @type {IntegrationModel}\n */ this.integrationModel = null;\n }\n /**\n * Adds a new listener to the current {@link ContentManager} instance.\n * @param {Object} listener - The listener to be added.\n */ addListener(listener) {\n this.listeners.add(listener);\n }\n /**\n * Sets an instance of {@link IntegrationModel} class to the current {@link ContentManager}\n * instance.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} instance.\n */ setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n /**\n * Sets the {@link ModalDialog} instance into the current {@link ContentManager} instance.\n * @param {ModalDialog} modalDialogInstance - The {@link ModalDialog} instance\n */ setModalDialogInstance(modalDialogInstance) {\n this.modalDialogInstance = modalDialogInstance;\n }\n /**\n * Inserts the content into the current {@link ModalDialog} instance updating\n * the title and inserting the JavaScript editor.\n */ insert() {\n // Before insert the editor we update the modal object title to avoid weird render display.\n this.updateTitle(this.modalDialogInstance);\n this.insertEditor(this.modalDialogInstance);\n }\n /**\n * Inserts MathType editor into the {@link ModalDialog.contentContainer}. It waits until\n * editor's JavaScript is loaded.\n */ insertEditor() {\n if (ContentManager.isEditorLoaded()) {\n this.editor = window.com.wiris.jsEditor.JsEditor.newInstance(this.editorAttributes);\n this.editor.insertInto(this.modalDialogInstance.contentContainer);\n this.editor.focus();\n if (this.modalDialogInstance.rtl) {\n this.editor.action(\"rtl\");\n }\n // Setting div in rtl in case of it's activated.\n if (this.editor.getEditorModel().isRTL()) {\n this.editor.element.style.direction = \"rtl\";\n }\n // Editor listener: this object manages the changes logic of editor.\n this.editor.getEditorModel().addEditorListener(this.editorListener);\n // iOS events.\n if (this.modalDialogInstance.deviceProperties.isIOS) {\n setTimeout(function() {\n // Make sure the modalDialogInstance is available when the timeout is over\n // to avoid throw errors and stop execution.\n if (this.hasOwnProperty(\"modalDialogInstance\")) this.modalDialogInstance.hideKeyboard(); // eslint-disable-line no-prototype-builtins\n }, 400);\n const formulaDisplayDiv = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n Util.addEvent(formulaDisplayDiv, \"focus\", this.modalDialogInstance.handleOpenedIosSoftkeyboard);\n Util.addEvent(formulaDisplayDiv, \"blur\", this.modalDialogInstance.handleClosedIosSoftkeyboard);\n }\n // Fire onLoad event. Necessary to set the MathML into the editor\n // after is loaded.\n this.listeners.fire(\"onLoad\", {});\n } else {\n setTimeout(ContentManager.prototype.insertEditor.bind(this), 100);\n }\n }\n /**\n * Initializes the current class by loading MathType script.\n */ init() {\n if (!ContentManager.isEditorLoaded()) {\n this.addEditorAsExternalDependency();\n }\n }\n /**\n * Adds script element to the DOM to include editor externally.\n */ addEditorAsExternalDependency() {\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n let editorUrl = Configuration.get(\"editorUrl\");\n // We create an object url for parse url string and work more efficiently.\n const anchorElement = document.createElement(\"a\");\n ContentManager.setHrefToAnchorElement(anchorElement, editorUrl);\n ContentManager.setProtocolToAnchorElement(anchorElement);\n editorUrl = ContentManager.getURLFromAnchorElement(anchorElement);\n // Load editor URL. We add stats as GET params.\n const stats = this.getEditorStats();\n script.src = `${editorUrl}?lang=${this.language}&stats-editor=${stats.editor}&stats-mode=${stats.mode}&stats-version=${stats.version}`;\n document.getElementsByTagName(\"head\")[0].appendChild(script);\n }\n /**\n * Sets the specified url to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set 'url'.\n * @param {String} url - URL to set.\n */ static setHrefToAnchorElement(anchorElement, url) {\n anchorElement.href = url;\n }\n /**\n * Sets the current protocol to the anchor element.\n * @param {HTMLAnchorElement} anchorElement - Element where set its protocol.\n */ static setProtocolToAnchorElement(anchorElement) {\n // Change to https if necessary.\n if (window.location.href.indexOf(\"https://\") === 0) {\n // It check if browser is https and configuration is http.\n // If this is so, we will replace protocol.\n if (anchorElement.protocol === \"http:\") {\n anchorElement.protocol = \"https:\";\n }\n }\n }\n /**\n * Returns the url of the anchor element adding the current port\n * if it is needed.\n * @param {HTMLAnchorElement} anchorElement - Element where extract the url.\n * @returns {String}\n */ static getURLFromAnchorElement(anchorElement) {\n // Check protocol and remove port if it's standard.\n const removePort = anchorElement.port === \"80\" || anchorElement.port === \"443\" || anchorElement.port === \"\";\n return `${anchorElement.protocol}//${anchorElement.hostname}${removePort ? \"\" : `:${anchorElement.port}`}${anchorElement.pathname.startsWith(\"/\") ? anchorElement.pathname : `/${anchorElement.pathname}`}`; // eslint-disable-line max-len\n }\n /**\n * Returns object with editor stats.\n *\n * @typedef {Object} EditorStatsObject\n * @property {string} editor - Editor name.\n * @property {string} mode - Current configuration for formula save mode.\n * @property {string} version - Current plugins version.\n * @returns {EditorStatsObject}\n */ getEditorStats() {\n // Editor stats. Use environment property to set it.\n const stats = {};\n if (\"editor\" in this.environment) {\n stats.editor = this.environment.editor;\n } else {\n stats.editor = \"unknown\";\n }\n if (\"mode\" in this.environment) {\n stats.mode = this.environment.mode;\n } else {\n stats.mode = Configuration.get(\"saveMode\");\n }\n if (\"version\" in this.environment) {\n stats.version = this.environment.version;\n } else {\n stats.version = Configuration.get(\"version\");\n }\n return stats;\n }\n /**\n * Returns true if device is iOS. Otherwise, false.\n * @returns {Boolean}\n */ static isIOS() {\n return [\n \"iPad Simulator\",\n \"iPhone Simulator\",\n \"iPod Simulator\",\n \"iPad\",\n \"iPhone\",\n \"iPod\"\n ].includes(navigator.platform) || // iPad on iOS 13 detection\n navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document;\n }\n /**\n * Returns true if device is Mobile. Otherwise, false.\n * @returns {Boolean}\n */ static isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n /**\n * Returns true if editor is loaded. Otherwise, false.\n * @returns {Boolean}\n */ static isEditorLoaded() {\n // To know if editor JavaScript is loaded we need to wait until\n // window.com.wiris.jsEditor.JsEditor.newInstance is ready.\n return window.com && window.com.wiris && window.com.wiris.jsEditor && window.com.wiris.jsEditor.JsEditor && window.com.wiris.jsEditor.JsEditor.newInstance;\n }\n /**\n * Sets the {@link ContentManager.editor} initial content.\n */ setInitialContent() {\n if (!this.isNewElement) {\n this.setMathML(this.mathML);\n }\n }\n /**\n * Sets a MathML into {@link ContentManager.editor} instance.\n * @param {String} mathml - MathML string.\n * @param {Boolean} focusDisabled - If true editor don't get focus after the MathML is set.\n * False by default.\n */ setMathML(mathml, focusDisabled) {\n // By default focus is enabled.\n if (typeof focusDisabled === \"undefined\") {\n focusDisabled = false;\n }\n // Using setMathML method is not a change produced by the user but for the API\n // so we set to false the contentChange property of editorListener.\n this.editor.setMathMLWithCallback(mathml, ()=>{\n this.editorListener.setWaitingForChanges(true);\n });\n // We need to wait a little until the callback finish.\n setTimeout(()=>{\n this.editorListener.setIsContentChanged(false);\n }, 500);\n // In some scenarios - like closing modal object - editor mustn't be focused.\n if (!focusDisabled) {\n this.onFocus();\n }\n }\n /**\n * Sets the focus to the current instance of {@link ContentManager.editor}. Triggered by\n * {@link ModalDialog.focus}.\n */ onFocus() {\n if (typeof this.editor !== \"undefined\" && this.editor != null) {\n this.editor.focus();\n // On WordPress integration, the focus gets lost right after setting it.\n // To fix this, we enforce another focus some milliseconds after this behaviour.\n setTimeout(()=>{\n this.editor.focus();\n }, 100);\n }\n }\n /**\n * Updates the edition area by calling {@link IntegrationModel.updateFormula}.\n * Triggered by {@link ModalDialog.submitAction}.\n */ submitAction() {\n if (!this.editor.isFormulaEmpty()) {\n let mathML = this.editor.getMathMLWithSemantics();\n // Add class for custom editors.\n if (this.customEditors.getActiveEditor() !== null) {\n const { toolbar } = this.customEditors.getActiveEditor();\n mathML = MathML.addCustomEditorClassAttribute(mathML, toolbar);\n } else {\n // We need - if exists - the editor name from MathML\n // class attribute.\n Object.keys(this.customEditors.editors).forEach((key)=>{\n mathML = MathML.removeCustomEditorClassAttribute(mathML, key);\n });\n }\n const mathmlEntitiesEncoded = MathML.mathMLEntities(mathML);\n this.integrationModel.updateFormula(mathmlEntitiesEncoded);\n } else {\n this.integrationModel.updateFormula(null);\n }\n this.customEditors.disable();\n this.integrationModel.notifyWindowClosed();\n // Set disabled focus to prevent lost focus.\n this.setEmptyMathML();\n this.customEditors.disable();\n }\n /**\n * Sets an empty MathML as {@link ContentManager.editor} content.\n * This will open the MT/CT editor with the hand mode.\n * It adds dir rtl in case of it's activated.\n */ setEmptyMathML() {\n const isMobile = this.deviceProperties.isAndroid || this.deviceProperties.isIOS;\n const isRTL = this.editor.getEditorModel().isRTL();\n if (isMobile || this.integrationModel.forcedHandMode) {\n // For mobile devices or forced hand mode, set an empty annotation MATHML to maintain the editor in Hand mode.\n const mathML = `[]`;\n this.setMathML(mathML, true);\n } else {\n // For non-mobile devices or not forced hand mode, set the empty MathML without an annotation.\n const mathML = ``;\n this.setMathML(mathML, true);\n }\n }\n /**\n * Open event. Triggered by {@link ModalDialog.open}. Does the following:\n * - Updates the {@link ContentManager.editor} content\n * (with an empty MathML or an existing formula),\n * - Updates the {@link ContentManager.editor} toolbar.\n * - Recovers the the focus.\n */ onOpen() {\n if (this.isNewElement) {\n this.setEmptyMathML();\n } else {\n this.setMathML(this.mathML);\n }\n let toolbar = this.updateToolbar();\n this.onFocus();\n if (this.deviceProperties.isIOS) {\n const zoom = document.documentElement.clientWidth / window.innerWidth;\n if (zoom !== 1) {\n // Open editor in Keyboard mode if user use iOS, Safari and page is zoomed.\n this.setKeyboardMode();\n }\n }\n let trigger = this.dbclick ? \"formula\" : \"button\";\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"OPENED_MTCT_EDITOR\", {\n toolbar: toolbar,\n trigger: trigger\n });\n } catch (error) {\n console.error(\"Error tracking OPENED_MTCT_EDITOR\", error);\n }\n Core.globalListeners.fire(\"onModalOpen\", {});\n if (this.integrationModel.forcedHandMode) {\n this.hideHandModeButton();\n // In case we have a keyboard written formula, we still want it to be opened with handMode.\n if (this.mathML && !this.mathML.includes('') && !this.isNewElement) {\n this.openHandOnKeyboardMathML(this.mathML, this.editor);\n }\n }\n }\n /**\n * Change Editor in keyboard mode when is loaded\n */ setKeyboardMode() {\n const wrsEditor = document.getElementsByClassName(\"wrs_handOpen wrs_disablePalette\")[0];\n if (wrsEditor) {\n wrsEditor.classList.remove(\"wrs_handOpen\");\n wrsEditor.classList.remove(\"wrs_disablePalette\");\n } else {\n setTimeout(ContentManager.prototype.setKeyboardMode.bind(this), 100);\n }\n }\n /**\n * Hides the hand <-> keyboard mode switch.\n *\n * This method relies completely on the classes used on different HTML elements within the editor itself, meaning\n * any change on those classes will make this code stop working properly.\n *\n * On top of that, some of those classes are changed on runtime (for example, the one that makes some buttons change).\n * This forces us to use some delayed code (this is, a timeout) to make sure everything exists when we need it.\n * @param {*} forced (boolean) Forces the user to stay in Hand mode by hiding the keyboard mode button.\n */ hideHandModeButton(forced = true) {\n if (this.handSwitchHidden) {\n return; // hand <-> keyboard button already hidden.\n }\n // \"Open hand mode\" button takes a little bit to be available.\n // This selector gets the hand <-> keyboard mode switch\n const handModeButtonSelector = \"div.wrs_editor.wrs_flexEditor.wrs_withHand.wrs_animated .wrs_handWrapper input[type=button]\";\n // If in \"forced mode\", we hide the \"keyboard button\" so the user can't can't change between hand and keyboard modes.\n // We use an observer to ensure that the button it hidden as soon as it appears.\n if (forced) {\n const mutationInstance = new MutationObserver((mutations)=>{\n const handModeButton = document.querySelector(handModeButtonSelector);\n if (handModeButton) {\n handModeButton.hidden = true;\n this.handSwitchHidden = true;\n mutationInstance.disconnect();\n }\n });\n mutationInstance.observe(document.body, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n /**\n * It will open any formula written in Keyboard mode with the hand mode with the default hand trace.\n *\n * @param {String} mathml The original KeyBoard MathML\n * @param {Object} editor The editor object.\n */ async openHandOnKeyboardMathML(mathml, editor) {\n // First, as an editor requirement, we need to update the editor object with the current MathML formula.\n // Once the MathML formula is updated to the one we want to open with handMode, we will be able to proceed.\n await new Promise((resolve)=>{\n editor.setMathMLWithCallback(mathml, resolve);\n });\n // We wait until the hand editor object exists.\n await this.waitForHand(editor);\n // Logic to get the hand traces and open the formula in hand mode.\n // This logic comes from the editor.\n const handEditor = editor.hand;\n editor.handTemporalMathML = editor.getMathML();\n const handCoordinates = editor.editorModel.getHandStrokes();\n handEditor.setStrokes(handCoordinates);\n handEditor.fitStrokes(true);\n editor.openHand();\n }\n /**\n * Waits until the hand editor object exists.\n * @param {Obect} editor The editor object.\n */ async waitForHand(editor) {\n while(!editor.hand){\n await new Promise((resolve)=>setTimeout(resolve, 100));\n }\n }\n /**\n * Sets the correct toolbar depending if exist other custom toolbars\n * at the same time (e.g: Chemistry).\n */ updateToolbar() {\n this.updateTitle(this.modalDialogInstance);\n const customEditor = this.customEditors.getActiveEditor();\n let toolbar;\n if (customEditor) {\n toolbar = customEditor.toolbar ? customEditor.toolbar : _wrs_int_wirisProperties.toolbar;\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n }\n } else {\n toolbar = this.getToolbar();\n if (this.toolbar == null || this.toolbar !== toolbar) {\n this.setToolbar(toolbar);\n this.customEditors.disable();\n }\n }\n return toolbar;\n }\n /**\n * Updates the current {@link ModalDialog.title}. If a {@link CustomEditors} is enabled\n * sets the custom editor title. Otherwise sets the default title.\n */ updateTitle() {\n const customEditor = this.customEditors.getActiveEditor();\n if (customEditor) {\n this.modalDialogInstance.setTitle(customEditor.title);\n } else {\n this.modalDialogInstance.setTitle(\"MathType\");\n }\n }\n /**\n * Returns the editor toolbar, depending on the configuration local or server side.\n * @returns {String} - Toolbar identifier.\n */ getToolbar() {\n let toolbar = \"general\";\n if (\"toolbar\" in this.editorAttributes) {\n ({ toolbar } = this.editorAttributes);\n }\n // TODO: Change global integration variable for integration custom toolbar.\n if (toolbar === \"general\") {\n // eslint-disable-next-line camelcase\n toolbar = typeof _wrs_int_wirisProperties === \"undefined\" || typeof _wrs_int_wirisProperties.toolbar === \"undefined\" ? \"general\" : _wrs_int_wirisProperties.toolbar;\n }\n return toolbar;\n }\n /**\n * Sets the current {@link ContentManager.editor} instance toolbar.\n * @param {String} toolbar - The toolbar name.\n */ setToolbar(toolbar) {\n this.toolbar = toolbar;\n this.editor.setParams({\n toolbar: this.toolbar\n });\n }\n /**\n * Sets the custom headers added on editor requests.\n * @returns {Object} headers - key value headers.\n */ setCustomHeaders(headers) {\n let headersObj = {};\n // We control that we only get String or Object as the input.\n if (typeof headers === \"object\") {\n headersObj = headers;\n } else if (typeof headers === \"string\") {\n headersObj = Util.convertStringToObject(headers);\n }\n this.editor.setParams({\n customHeaders: headersObj\n });\n return headersObj;\n }\n /**\n * Returns true if the content of the editor has been changed. The logic of the changes\n * is delegated to {@link EditorListener} class.\n * @returns {Boolean} True if the editor content has been changed. False otherwise.\n */ hasChanges() {\n return !this.editor.isFormulaEmpty() && this.editorListener.getIsContentChanged();\n }\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */ onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined && keyboardEvent.repeat === false) {\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n // Code to detect Esc event.\n // There should be only one element with class name 'wrs_pressed' at the same time.\n let list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor3RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_expandButton wrs_expandButtonFor2RowsLayout wrs_pressed\");\n if (list.length === 0) {\n list = document.getElementsByClassName(\"wrs_select wrs_pressed\");\n if (list.length === 0) {\n this.modalDialogInstance.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.modalDialogInstance.submitButton) {\n // Focus is on OK button.\n this.editor.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.querySelector('[title=\"Manual\"]') === document.activeElement) {\n // Focus is on minimize button (_).\n this.modalDialogInstance.closeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n if (document.activeElement === this.modalDialogInstance.minimizeDiv) {\n // Focus on cancel button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n this.modalDialogInstance.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.modalDialogInstance.cancelButton) {\n // Focus is on X button.\n this.modalDialogInstance.minimizeDiv.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (document.activeElement === this.modalDialogInstance.closeDiv) {\n // Focus on help button.\n if (!(this.modalDialogInstance.properties.state === \"minimized\")) {\n const element = document.querySelector('[title=\"Manual\"]');\n element.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n } else {\n // There should be only one element with class name 'wrs_formulaDisplay'.\n const element = document.getElementsByClassName(\"wrs_formulaDisplay\")[0];\n if (element.getAttribute(\"class\") === \"wrs_formulaDisplay wrs_focused\") {\n // Focus is on formuladisplay.\n this.modalDialogInstance.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n }\n }\n}\n\n/**\n * A custom editor is MathType editor with a different\n * @typedef {Object} CustomEditor\n * @property {String} CustomEditor.name - Custom editor name.\n * @property {String} CustomEditor.toolbar - Custom editor toolbar.\n * @property {String} CustomEditor.icon - Custom editor icon.\n * @property {String} CustomEditor.confVariable - Configuration property to manage\n * the availability of the custom editor.\n * @property {String} CustomEditor.title - Custom editor modal dialog title.\n * @property {String} CustomEditor.tooltip - Custom editor icon tooltip.\n */ class CustomEditors {\n /**\n * @classdesc\n * This class represents the MathType custom editors manager.\n * A custom editor is MathType editor with a custom toolbar.\n * This class associates a {@link CustomEditor} to:\n * - It's own formulas\n * - A custom toolbar\n * - An icon to open it from a HTML editor.\n * - A tooltip for the icon.\n * - A global variable to enable or disable it globally.\n * @constructs\n */ constructor(){\n /**\n * The custom editors.\n * @type {Array.}\n */ this.editors = [];\n /**\n * The active editor name.\n * @type {String}\n */ this.activeEditor = \"default\";\n }\n /**\n * Adds a {@link CustomEditor} to editors array.\n * @param {String} editorName - The editor name.\n * @param {CustomEditor} editorParams - The custom editor parameters.\n */ addEditor(editorName, editorParams) {\n const customEditor = {};\n customEditor.name = editorParams.name;\n customEditor.toolbar = editorParams.toolbar;\n customEditor.icon = editorParams.icon;\n customEditor.confVariable = editorParams.confVariable;\n customEditor.title = editorParams.title;\n customEditor.tooltip = editorParams.tooltip;\n this.editors[editorName] = customEditor;\n }\n /**\n * Enables a {@link CustomEditor}.\n * @param {String} customEditorName - The custom editor name.\n */ enable(customEditorName) {\n this.activeEditor = customEditorName;\n }\n /**\n * Disables a {@link CustomEditor}.\n */ disable() {\n this.activeEditor = \"default\";\n }\n /**\n * Returns the active editor.\n * @return {CustomEditor} - A {@link CustomEditor} if a custom editor is enabled. Null otherwise.\n */ getActiveEditor() {\n if (this.activeEditor !== \"default\") {\n return this.editors[this.activeEditor];\n }\n return null;\n }\n}\n\n/**\n * Represents the configuration properties generated from the frontend (JavaScript variables).\n * @type {Object}\n * @property {string} imageClassName - Default MathType formula image class.\n * @property {string} imageClassName - Default MathType CAS image class.\n * @ignore\n */ const jsProperties = {\n imageCustomEditorName: \"data-custom-editor\",\n imageClassName: \"Wirisformula\",\n CASClassName: \"Wiriscas\"\n};\n\nclass Event {\n /**\n * @classdesc\n * This class represents a custom event. Events should be fired by the {@link Listener} class.\n *\n * ```js\n * let customEvent = new Event();\n * customEvent.properties = {};\n *\n * let listeners = new Listeners();\n * listeners.newListener(eventName, callback);\n *\n * listeners.fire(eventName, customEvent) *\n * ```\n * @constructs\n */ constructor(){\n /**\n * Indicates if the event should be cancelled.\n * @type {Boolean}\n */ this.cancelled = false;\n /**\n * Indicates if the event should be prevented.\n * @type {Boolean}\n */ this.defaultPrevented = false;\n }\n /**\n * Cancels the event.\n */ cancel() {\n this.cancelled = true;\n }\n /**\n * Prevents the default action.\n */ preventDefault() {\n this.defaultPrevented = true;\n }\n}\n\n/**\n\n */ class PopUpMessage {\n /**\n * @classdesc\n * This class represents a dialog message overlaying a DOM element in order to\n * accept / cancel discard changes. The dialog can be closed i.e the overlay disappears\n * o canceled. In this last case a callback function should be called.\n * @constructs\n * @param {Object} popupMessageAttributes - Object containing popup properties.\n * @param {HTMLElement} popupMessageAttributes.overlayElement - Element to overlay.\n * @param {Object} popupMessageAttributes.callbacks - Contains callback\n * methods for close and cancel actions.\n * @param {Object} popupMessageAttributes.strings - Contains all the strings needed.\n */ constructor(popupMessageAttributes){\n /**\n * Element to be overlaid when the popup appears.\n */ this.overlayElement = popupMessageAttributes.overlayElement;\n this.callbacks = popupMessageAttributes.callbacks;\n /**\n * HTMLElement element to wrap all HTML elements inside the popupMessage.\n */ this.overlayWrapper = this.overlayElement.appendChild(document.createElement(\"div\"));\n this.overlayWrapper.setAttribute(\"class\", \"wrs_popupmessage_overlay_envolture\");\n /**\n * HTMLElement to display the popup message, close button and cancel button.\n */ this.message = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n this.message.id = \"wrs_popupmessage\";\n this.message.setAttribute(\"class\", \"wrs_popupmessage_panel\");\n this.message.setAttribute(\"role\", \"dialog\");\n this.message.setAttribute(\"aria-describedby\", \"description_txt\");\n const paragraph = document.createElement(\"p\");\n const text = document.createTextNode(popupMessageAttributes.strings.message);\n paragraph.appendChild(text);\n paragraph.id = \"description_txt\";\n this.message.appendChild(paragraph);\n /**\n * HTML element overlaying the overlayElement.\n */ const overlay = this.overlayWrapper.appendChild(document.createElement(\"div\"));\n overlay.setAttribute(\"class\", \"wrs_popupmessage_overlay\");\n // We create a overlay that close popup message on click in there\n overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n /**\n * HTML element containing cancel and close buttons.\n */ this.buttonArea = this.message.appendChild(document.createElement(\"div\"));\n this.buttonArea.setAttribute(\"class\", \"wrs_popupmessage_button_area\");\n this.buttonArea.id = \"wrs_popup_button_area\";\n // Close button arguments.\n const buttonSubmitArguments = {\n class: \"wrs_button_accept\",\n innerHTML: popupMessageAttributes.strings.submitString,\n id: \"wrs_popup_accept_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-close-button\"\n };\n /**\n * Close button arguments.\n */ this.closeButton = this.createButton(buttonSubmitArguments, this.closeAction.bind(this));\n this.buttonArea.appendChild(this.closeButton);\n // Cancel button arguments.\n const buttonCancelArguments = {\n class: \"wrs_button_cancel\",\n innerHTML: popupMessageAttributes.strings.cancelString,\n id: \"wrs_popup_cancel_button\",\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cd-cancel-button\"\n };\n /**\n * Cancel button.\n */ this.cancelButton = this.createButton(buttonCancelArguments, this.cancelAction.bind(this));\n this.buttonArea.appendChild(this.cancelButton);\n }\n /**\n * This method create a button with arguments and return button dom object\n * @param {Object} parameters - An object containing id, class and innerHTML button text.\n * @param {String} parameters.id - Button id.\n * @param {String} parameters.class - Button class name.\n * @param {String} parameters.innerHTML - Button innerHTML text.\n * @param {Object} callback- Callback method to call on click event.\n * @returns {HTMLElement} HTML button.\n */ // eslint-disable-next-line class-methods-use-this\n createButton(parameters, callback) {\n let element = {};\n element = document.createElement(\"button\");\n element.setAttribute(\"id\", parameters.id);\n element.setAttribute(\"class\", parameters.class);\n element.innerHTML = parameters.innerHTML;\n element.addEventListener(\"click\", callback);\n if (parameters[\"data-testid\"]) {\n element.setAttribute(\"data-testid\", parameters[\"data-testid\"]);\n }\n return element;\n }\n /**\n * Shows the popupmessage containing a message, and two buttons\n * to cancel the action or close the modal dialog.\n */ show() {\n if (this.overlayWrapper.style.display !== \"block\") {\n // Clear focus with blur for prevent press any key.\n document.activeElement.blur();\n this.overlayWrapper.style.display = \"block\";\n this.closeButton.focus();\n } else {\n this.overlayWrapper.style.display = \"none\";\n // _wrs_modalWindow.focus(); This throws an error of not existing _wrs_modalWindow\n }\n }\n /**\n * This method cancels the popupMessage: the dialog disappears revealing the overlaid element.\n * A callback method is called (if defined). For example a method to focus the overlaid element.\n */ cancelAction() {\n this.overlayWrapper.style.display = \"none\";\n if (typeof this.callbacks.cancelCallback !== \"undefined\") {\n this.callbacks.cancelCallback();\n // Set temporal image to null to prevent loading\n // an existent formula when starting one from scratch. Make focus come back too.\n // IntegrationModel.setActionsOnCancelButtons();\n }\n }\n /**\n * This method closes the popupMessage: the dialog disappears and the close callback is called.\n * For example to close the overlaid element.\n */ closeAction() {\n this.cancelAction();\n if (typeof this.callbacks.closeCallback !== \"undefined\") {\n this.callbacks.closeCallback();\n }\n IntegrationModel.setActionsOnCancelButtons();\n }\n /**\n * Handle keyboard events detected in modal when elements of this class intervene.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */ onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Code to detect Esc event.\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n this.cancelAction();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.closeButton) {\n this.cancelButton.focus();\n } else {\n this.closeButton.focus();\n }\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n }\n }\n }\n}\n\nvar closeIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar closeHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar fullsIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar fullsHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minsIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar minsHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar maxIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\nvar maxHoverIcon = \"\\n\\n \\n \\n \\n image/svg+xml\\n \\n \\n \\n \\n \\n \\n \\n\\n\";\n\n// eslint-disable-next-line max-classes-per-file\n/**\n * @typedef {Object} DeviceProperties\n * @property {String} DeviceProperties.orientation - Indicates of the orientation of the device.\n * @property {Boolean} DeviceProperties.isAndroid - True if the device is Android. False otherwise.\n * @property {Boolean} DeviceProperties.isIOS - True if the device is iOS. False otherwise.\n * @property {Boolean} DeviceProperties.isMobile - True if the device is a mobile one.\n * False otherwise.\n * @property {Boolean} DeviceProperties.isDesktop - True if the device is a desktop one.\n * False otherwise.\n */ class ModalDialog {\n /**\n * @classdesc\n * This class represents a modal dialog. The modal dialog admits\n * a {@link ContentManager} instance to manage the content of the dialog.\n * @constructs\n * @param {Object} modalDialogAttributes - An object containing all modal dialog attributes.\n */ constructor(modalDialogAttributes){\n this.attributes = modalDialogAttributes;\n // Metrics.\n const ua = navigator.userAgent.toLowerCase();\n const isAndroid = ua.indexOf(\"android\") > -1;\n const isIOS = ContentManager.isIOS();\n this.iosSoftkeyboardOpened = false;\n this.iosMeasureUnit = ua.indexOf(\"crios\") === -1 ? \"%\" : \"vh\";\n this.iosDivHeight = `100%${this.iosMeasureUnit}`;\n const deviceWidth = window.outerWidth;\n const deviceHeight = window.outerHeight;\n const landscape = deviceWidth > deviceHeight;\n const portrait = deviceWidth < deviceHeight;\n // TODO: Detect isMobile without using editor metrics.\n landscape && this.attributes.height > deviceHeight;\n portrait && this.attributes.width > deviceWidth;\n const isMobile = ContentManager.isMobile();\n // Obtain number of current instance.\n this.instanceId = document.getElementsByClassName(\"wrs_modal_dialogContainer\").length;\n // Device object properties.\n /**\n * @type {DeviceProperties}\n */ this.deviceProperties = {\n orientation: landscape ? \"landscape\" : \"portrait\",\n isAndroid,\n isIOS,\n isMobile,\n isDesktop: !isMobile && !isIOS && !isAndroid\n };\n this.properties = {\n created: false,\n state: \"\",\n previousState: \"\",\n position: {\n bottom: 0,\n right: 10\n },\n size: {\n height: 338,\n width: 580\n }\n };\n /**\n * Object to keep website's style before change it on lock scroll for mobile devices.\n * @type {Object}\n * @property {String} bodyStylePosition - Previous body style position.\n * @property {String} bodyStyleOverflow - Previous body style overflow.\n * @property {String} htmlStyleOverflow - Previous body style overflow.\n * @property {String} windowScrollX - Previous window's scroll Y.\n * @property {String} windowScrollY - Previous window's scroll X.\n */ this.websiteBeforeLockParameters = null;\n let attributes = {};\n attributes.class = \"wrs_modal_overlay\";\n attributes.id = this.getElementId(attributes.class);\n this.overlay = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_title_bar\";\n attributes.id = this.getElementId(attributes.class);\n this.titleBar = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_title\";\n attributes.id = this.getElementId(attributes.class);\n this.title = Util.createElement(\"div\", attributes);\n this.title.innerHTML = \"offline\";\n attributes = {};\n attributes.class = \"wrs_modal_close_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"close\");\n attributes.style = {};\n this.closeDiv = Util.createElement(\"a\", attributes);\n this.closeDiv.setAttribute(\"role\", \"button\");\n this.closeDiv.setAttribute(\"tabindex\", 3);\n // Apply styles and events after the creation as createElement doesn't process them correctly\n let generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeIcon)})`;\n let hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(closeHoverIcon)})`;\n this.closeDiv.setAttribute(\"style\", generalStyle);\n this.closeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.closeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.closeDiv.setAttribute(\"data-testid\", \"mtcteditor-close-button\");\n attributes = {};\n attributes.class = \"wrs_modal_stack_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"exit_fullscreen\");\n this.stackDiv = Util.createElement(\"a\", attributes);\n this.stackDiv.setAttribute(\"role\", \"button\");\n this.stackDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsIcon)})`;\n hoverStyle = `background-size: 10px; background-image: url(data:image/svg+xml;base64,${window.btoa(minsHoverIcon)})`;\n this.stackDiv.setAttribute(\"style\", generalStyle);\n this.stackDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.stackDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.stackDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-disable-button\");\n attributes = {};\n attributes.class = \"wrs_modal_maximize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"fullscreen\");\n this.maximizeDiv = Util.createElement(\"a\", attributes);\n this.maximizeDiv.setAttribute(\"role\", \"button\");\n this.maximizeDiv.setAttribute(\"tabindex\", 2);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(fullsHoverIcon)})`;\n this.maximizeDiv.setAttribute(\"style\", generalStyle);\n this.maximizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.maximizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identifiy the element in automated testing\n this.maximizeDiv.setAttribute(\"data-testid\", \"mtcteditor-fullscreen-enable-button\");\n attributes = {};\n attributes.class = \"wrs_modal_minimize_button\";\n attributes.id = this.getElementId(attributes.class);\n attributes.title = StringManager.get(\"minimize\");\n this.minimizeDiv = Util.createElement(\"a\", attributes);\n this.minimizeDiv.setAttribute(\"role\", \"button\");\n this.minimizeDiv.setAttribute(\"tabindex\", 1);\n generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // To identify the element in automated testing\n this.minimizeDiv.setAttribute(\"data-testid\", \"mtcteditor-minimize-button\");\n attributes = {};\n attributes.class = \"wrs_modal_dialogContainer\";\n attributes.id = this.getElementId(attributes.class);\n attributes.role = \"dialog\";\n this.container = Util.createElement(\"div\", attributes);\n this.container.setAttribute(\"aria-labeledby\", \"wrs_modal_title[0]\");\n attributes = {};\n attributes.class = \"wrs_modal_wrapper\";\n attributes.id = this.getElementId(attributes.class);\n this.wrapper = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_content_container\";\n attributes.id = this.getElementId(attributes.class);\n this.contentContainer = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_controls\";\n attributes.id = this.getElementId(attributes.class);\n this.controls = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_buttons_container\";\n attributes.id = this.getElementId(attributes.class);\n this.buttonContainer = Util.createElement(\"div\", attributes);\n // Buttons: all button must be created using createSubmitButton method.\n this.submitButton = this.createSubmitButton({\n id: this.getElementId(\"wrs_modal_button_accept\"),\n class: \"wrs_modal_button_accept\",\n innerHTML: StringManager.get(\"accept\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-insert-button\"\n }, this.submitAction.bind(this));\n this.cancelButton = this.createSubmitButton({\n id: this.getElementId(\"wrs_modal_button_cancel\"),\n class: \"wrs_modal_button_cancel\",\n innerHTML: StringManager.get(\"cancel\"),\n // To identifiy the element in automated testing\n \"data-testid\": \"mtcteditor-cancel-button\"\n }, this.cancelAction.bind(this));\n this.contentManager = null;\n // Overlay popup.\n const popupStrings = {\n cancelString: StringManager.get(\"cancel\"),\n submitString: StringManager.get(\"close\"),\n message: StringManager.get(\"close_modal_warning\")\n };\n const callbacks = {\n closeCallback: ()=>{\n this.close(\"mtc_close\");\n },\n cancelCallback: ()=>{\n this.focus();\n }\n };\n const popupupProperties = {\n overlayElement: this.container,\n callbacks,\n strings: popupStrings\n };\n this.popup = new PopUpMessage(popupupProperties);\n /**\n * Indicates if directionality of the modal dialog is RTL. false by default.\n * @type {Boolean}\n */ this.rtl = false;\n if (\"rtl\" in this.attributes) {\n this.rtl = this.attributes.rtl;\n }\n // Event handlers need modal instance context.\n this.handleOpenedIosSoftkeyboard = this.handleOpenedIosSoftkeyboard.bind(this);\n this.handleClosedIosSoftkeyboard = this.handleClosedIosSoftkeyboard.bind(this);\n }\n /**\n * This method sets an ContentManager instance to ModalDialog. ContentManager\n * manages the logic of ModalDialog content: submit, update, close and changes.\n * @param {ContentManager} contentManager - ContentManager instance.\n */ setContentManager(contentManager) {\n this.contentManager = contentManager;\n }\n /**\n * Returns the modal contentElement object.\n * @returns {ContentManager} the instance of the ContentManager class.\n */ getContentManager() {\n return this.contentManager;\n }\n /**\n * This method is called when the modal object has been submitted. Calls\n * contentElement submitAction method - if exists - and closes the modal\n * object. No logic about the content should be placed here,\n * contentElement.submitAction is the responsible of the content logic.\n */ async submitAction() {\n if (typeof this.contentManager.submitAction !== \"undefined\") {\n this.contentManager.submitAction();\n }\n await this.close(\"mtc_insert\");\n }\n /**\n * Performs the cancel action.\n * If there are no changes in the content, it closes the modal.\n * Otherwise, it shows a pop-up message to confirm the cancel action.\n * @returns {Promise} - A promise that resolves when the modal is closed.\n */ async cancelAction() {\n if (typeof this.contentManager.hasChanges === \"undefined\" || !this.contentManager.hasChanges()) {\n IntegrationModel.setActionsOnCancelButtons();\n await this.close(\"mtc_close\");\n } else {\n this.showPopUpMessage();\n }\n }\n /**\n * Returns a button element.\n * @param {Object} properties - Input button properties.\n * @param {String} properties.class - Input button class.\n * @param {String} properties.innerHTML - Input button innerHTML.\n * @param {Object} callback - Callback function associated to click event.\n * @returns {HTMLButtonElement} The button element.\n *\n */ // eslint-disable-next-line class-methods-use-this\n createSubmitButton(properties, callback) {\n class SubmitButton {\n constructor(){\n this.element = document.createElement(\"button\");\n this.element.id = properties.id;\n this.element.className = properties.class;\n this.element.innerHTML = properties.innerHTML;\n this.element.dataset.testid = properties[\"data-testid\"];\n Util.addEvent(this.element, \"click\", callback);\n }\n getElement() {\n return this.element;\n }\n }\n return new SubmitButton(properties, callback).getElement();\n }\n /**\n * Creates the modal window object inserting a contentElement object.\n */ create() {\n /* Modal Window Structure\n _____________________________________________________________________________________\n |wrs_modal_dialog_Container |\n | _________________________________________________________________________________ |\n | |title_bar minimize_button stack_button close_button | |\n | |_______________________________________________________________________________| |\n | |wrapper | |\n | | _____________________________________________________________________________ | |\n | | |content | | |\n | | | | | |\n | | | | | |\n | | |___________________________________________________________________________| | |\n | | _____________________________________________________________________________ | |\n | | |controls | | |\n | | | ___________________________________ | | |\n | | | |buttonContainer | | | |\n | | | | _______________________________ | | | |\n | | | | |button_accept | button_cancel| | | | |\n | | | |_|_____________ |______________|_| | | |\n | | |___________________________________________________________________________| | |\n | |_______________________________________________________________________________| |\n |___________________________________________________________________________________| */ this.titleBar.appendChild(this.closeDiv);\n this.titleBar.appendChild(this.stackDiv);\n this.titleBar.appendChild(this.maximizeDiv);\n this.titleBar.appendChild(this.minimizeDiv);\n this.titleBar.appendChild(this.title);\n if (this.deviceProperties.isDesktop) {\n this.container.appendChild(this.titleBar);\n }\n this.wrapper.appendChild(this.contentContainer);\n this.wrapper.appendChild(this.controls);\n this.controls.appendChild(this.buttonContainer);\n this.buttonContainer.appendChild(this.submitButton);\n this.buttonContainer.appendChild(this.cancelButton);\n this.container.appendChild(this.wrapper);\n // Check if browser has scrollBar before modal has modified.\n this.recalculateScrollBar();\n document.body.appendChild(this.container);\n document.body.appendChild(this.overlay);\n if (this.deviceProperties.isDesktop) {\n // Desktop.\n this.createModalWindowDesktop();\n this.createResizeButtons();\n this.addListeners();\n // Maximize window only when the configuration is set and the device is not iOS or Android.\n if (Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n } else if (this.deviceProperties.isAndroid) {\n this.createModalWindowAndroid();\n } else if (this.deviceProperties.isIOS) {\n this.createModalWindowIos();\n }\n if (this.contentManager != null) {\n this.contentManager.insert(this);\n }\n this.properties.open = true;\n this.properties.created = true;\n // Checks language directionality.\n if (this.isRTL()) {\n this.container.style.right = `${window.innerWidth - this.scrollbarWidth - this.container.offsetWidth}px`;\n this.container.className += \" wrs_modal_rtl\";\n }\n }\n /**\n * Creates a button in the modal object to resize it.\n */ createResizeButtons() {\n // This is a definition of Resize Button Bottom-Right.\n this.resizerBR = document.createElement(\"div\");\n this.resizerBR.className = \"wrs_bottom_right_resizer\";\n this.resizerBR.innerHTML = \"◢\";\n // To identifiy the element in automated testing\n this.resizerBR.dataset.testid = \"mtcteditor-resize-button-right\";\n // This is a definition of Resize Button Top-Left.\n this.resizerTL = document.createElement(\"div\");\n this.resizerTL.className = \"wrs_bottom_left_resizer\";\n // To identifiy the element in automated testing\n this.resizerTL.dataset.testid = \"mtcteditor-resize-button-left\";\n // Append resize buttons to modal.\n this.container.appendChild(this.resizerBR);\n this.titleBar.appendChild(this.resizerTL);\n // Add events to resize on click and drag.\n Util.addEvent(this.resizerBR, \"mousedown\", this.activateResizeStateBR.bind(this));\n Util.addEvent(this.resizerTL, \"mousedown\", this.activateResizeStateTL.bind(this));\n }\n /**\n * Initialize variables for Bottom-Right resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */ activateResizeStateBR(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, false);\n }\n /**\n * Initialize variables for Top-Left resize button\n * @param {MouseEvent} mouseEvent - Mouse event.\n */ activateResizeStateTL(mouseEvent) {\n this.initializeResizeProperties(mouseEvent, true);\n }\n /**\n * Common method to initialize variables at resize.\n * @param {MouseEvent} mouseEvent - Mouse event.\n */ initializeResizeProperties(mouseEvent, leftOption) {\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n this.resizeDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y\n };\n // Save Initial state of modal to compare on drag and obtain the difference.\n this.initialWidth = parseInt(this.container.style.width, 10);\n this.initialHeight = parseInt(this.container.style.height, 10);\n if (!leftOption) {\n this.initialRight = parseInt(this.container.style.right, 10);\n this.initialBottom = parseInt(this.container.style.bottom, 10);\n } else {\n this.leftScale = true;\n }\n if (!this.initialRight) {\n this.initialRight = 0;\n }\n if (!this.initialBottom) {\n this.initialBottom = 0;\n }\n // Disable mouse events on editor when we start to drag modal.\n document.body.style[\"user-select\"] = \"none\";\n }\n /**\n * This method opens the modal window, restoring the previous state, position and metrics,\n * if exists. By default the modal object opens in stack mode.\n */ open() {\n // Removing close class.\n this.removeClass(\"wrs_closed\");\n // Hiding keyboard for mobile devices.\n const { isIOS } = this.deviceProperties;\n const { isAndroid } = this.deviceProperties;\n const { isMobile } = this.deviceProperties;\n if (isIOS || isAndroid || isMobile) {\n // Restore scale to 1.\n this.restoreWebsiteScale();\n this.lockWebsiteScroll();\n // Due to editor wait we need to wait until editor focus.\n setTimeout(()=>{\n this.hideKeyboard();\n }, 400);\n }\n // New modal window. He need to create the whole object.\n if (!this.properties.created) {\n this.create();\n } else {\n // Previous state closed. Open method can be called even the previous state is open,\n // for example updating the content of the modal object.\n if (!this.properties.open) {\n this.properties.open = true;\n // Restoring the previous open state: if the modal object has been closed\n // re-open it should preserve the state and the metrics.\n if (!this.deviceProperties.isAndroid && !this.deviceProperties.isIOS) {\n this.restoreState();\n }\n }\n // Maximize window only when the configuration is set and the device is not iOs or Android.\n if (this.deviceProperties.isDesktop && Configuration.get(\"modalWindowFullScreen\")) {\n this.maximize();\n }\n // In iOS we need to recalculate the size of the modal object because\n // iOS keyboard is a float div which can overlay the modal object.\n if (this.deviceProperties.isIOS) {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`${100 + this.iosMeasureUnit}`);\n }\n }\n if (!ContentManager.isEditorLoaded()) {\n const listener = Listeners.newListener(\"onLoad\", ()=>{\n this.contentManager.onOpen(this);\n });\n this.contentManager.addListener(listener);\n } else {\n this.contentManager.onOpen(this);\n }\n }\n /**\n * Closes the modal.\n * Removes specific CSS classes, saves modal properties, unlocks website scroll,\n * sets the 'open' property to false, and triggers the 'onModalClose' event.\n * If a close trigger is defined, it tracks the telemetry event 'CLOSED_MTCT_EDITOR' with the trigger.\n * @returns {Promise} A promise that resolves when the modal is closed.\n */ async close(trigger) {\n this.removeClass(\"wrs_maximized\");\n this.removeClass(\"wrs_minimized\");\n this.removeClass(\"wrs_stack\");\n this.addClass(\"wrs_closed\");\n this.saveModalProperties();\n this.unlockWebsiteScroll();\n this.properties.open = false;\n if (trigger) {\n try {\n await Telemeter.telemeter.track(\"CLOSED_MTCT_EDITOR\", {\n toolbar: this.contentManager.toolbar,\n trigger: trigger\n });\n } catch (error) {\n console.error(\"Error tracking CLOSED_MTCT_EDITOR\", error);\n }\n }\n Core.globalListeners.fire(\"onModalClose\", {});\n }\n /**\n * Closes modal window and destroys the object.\n */ destroy() {\n // Close modal window.\n this.close();\n // Remove listeners and destroy the object.\n this.removeListeners();\n this.overlay.remove();\n this.container.remove();\n // Reset properties to allow open again.\n this.properties.created = false;\n }\n /**\n * Sets the website scale to one.\n */ // eslint-disable-next-line class-methods-use-this\n restoreWebsiteScale() {\n let viewportmeta = document.querySelector(\"meta[name=viewport]\");\n // Let the equal symbols in order to search and make meta's final content.\n const contentAttrsToUpdate = [\n \"initial-scale=\",\n \"minimum-scale=\",\n \"maximum-scale=\"\n ];\n const contentAttrsValuesToUpdate = [\n \"1.0\",\n \"1.0\",\n \"1.0\"\n ];\n const setMetaAttrFunc = (viewportelement, contentAttrs)=>{\n const contentAttr = viewportelement.getAttribute(\"content\");\n // If it exists, we need to maintain old values and put our values.\n if (contentAttr) {\n const attrArray = contentAttr.split(\",\");\n let finalContentMeta = \"\";\n const oldAttrs = [];\n for(let i = 0; i < attrArray.length; i += 1){\n let isAttrToUpdate = false;\n let j = 0;\n while(!isAttrToUpdate && j < contentAttrs.length){\n if (attrArray[i].indexOf(contentAttrs[j])) {\n isAttrToUpdate = true;\n }\n j += 1;\n }\n if (!isAttrToUpdate) {\n oldAttrs.push(attrArray[i]);\n }\n }\n for(let i = 0; i < contentAttrs.length; i += 1){\n const attr = contentAttrs[i] + contentAttrsValuesToUpdate[i];\n finalContentMeta += i === 0 ? attr : `,${attr}`;\n }\n for(let i = 0; i < oldAttrs.length; i += 1){\n finalContentMeta += `,${oldAttrs[i]}`;\n }\n viewportelement.setAttribute(\"content\", finalContentMeta);\n // It needs to set to empty because setAttribute refresh only when attribute is different.\n viewportelement.setAttribute(\"content\", \"\");\n viewportelement.setAttribute(\"content\", contentAttr);\n } else {\n viewportelement.setAttribute(\"content\", \"initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\");\n viewportelement.removeAttribute(\"content\");\n }\n };\n if (!viewportmeta) {\n viewportmeta = document.createElement(\"meta\");\n document.getElementsByTagName(\"head\")[0].appendChild(viewportmeta);\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate);\n viewportmeta.remove();\n } else {\n setMetaAttrFunc(viewportmeta, contentAttrsToUpdate);\n }\n }\n /**\n * Locks website scroll for mobile devices.\n */ lockWebsiteScroll() {\n this.websiteBeforeLockParameters = {\n bodyStylePosition: document.body.style.position ? document.body.style.position : \"\",\n bodyStyleOverflow: document.body.style.overflow ? document.body.style.overflow : \"\",\n htmlStyleOverflow: document.documentElement.style.overflow ? document.documentElement.style.overflow : \"\",\n windowScrollX: window.scrollX,\n windowScrollY: window.scrollY\n };\n }\n /**\n * Unlocks website scroll for mobile devices.\n */ unlockWebsiteScroll() {\n if (this.websiteBeforeLockParameters) {\n document.body.style.position = this.websiteBeforeLockParameters.bodyStylePosition;\n document.body.style.overflow = this.websiteBeforeLockParameters.bodyStyleOverflow;\n document.documentElement.style.overflow = this.websiteBeforeLockParameters.htmlStyleOverflow;\n const { windowScrollX } = this.websiteBeforeLockParameters;\n const { windowScrollY } = this.websiteBeforeLockParameters;\n window.scrollTo(windowScrollX, windowScrollY);\n this.websiteBeforeLockParameters = null;\n }\n }\n /**\n * Util function to known if browser is IE11.\n * @returns {Boolean} true if the browser is IE11. false otherwise.\n */ // eslint-disable-next-line class-methods-use-this\n isIE11() {\n if (navigator.userAgent.search(\"Msie/\") >= 0 || navigator.userAgent.search(\"Trident/\") >= 0 || navigator.userAgent.search(\"Edge/\") >= 0) {\n return true;\n }\n return false;\n }\n /**\n * Returns if the current language type is RTL.\n * @return {Boolean} true if current language is RTL. false otherwise.\n */ isRTL() {\n if (this.attributes.language === \"ar\" || this.attributes.language === \"he\") {\n return true;\n }\n return this.rtl;\n }\n /**\n * Adds a class to all modal ModalDialog DOM elements.\n * @param {String} className - Class name.\n */ addClass(className) {\n Util.addClass(this.overlay, className);\n Util.addClass(this.titleBar, className);\n Util.addClass(this.overlay, className);\n Util.addClass(this.container, className);\n Util.addClass(this.contentContainer, className);\n Util.addClass(this.stackDiv, className);\n Util.addClass(this.minimizeDiv, className);\n Util.addClass(this.maximizeDiv, className);\n Util.addClass(this.wrapper, className);\n }\n /**\n * Remove a class from all modal DOM elements.\n * @param {String} className - Class name.\n */ removeClass(className) {\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.titleBar, className);\n Util.removeClass(this.overlay, className);\n Util.removeClass(this.container, className);\n Util.removeClass(this.contentContainer, className);\n Util.removeClass(this.stackDiv, className);\n Util.removeClass(this.minimizeDiv, className);\n Util.removeClass(this.maximizeDiv, className);\n Util.removeClass(this.wrapper, className);\n }\n /**\n * Create modal dialog for desktop.\n */ createModalWindowDesktop() {\n this.addClass(\"wrs_modal_desktop\");\n this.stack();\n }\n /**\n * Create modal dialog for non android devices.\n */ createModalWindowAndroid() {\n this.addClass(\"wrs_modal_android\");\n window.addEventListener(\"resize\", this.orientationChangeAndroidSoftkeyboard.bind(this));\n }\n /**\n * Create modal dialog for iOS devices.\n */ createModalWindowIos() {\n this.addClass(\"wrs_modal_ios\");\n // Refresh the size when the orientation is changed.\n window.addEventListener(\"resize\", this.orientationChangeIosSoftkeyboard.bind(this));\n }\n /**\n * Restore previous state, position and size of previous stacked modal dialog.\n */ restoreState() {\n if (this.properties.state === \"maximized\") {\n // Reset states for prevent return to stack state.\n this.maximize();\n } else if (this.properties.state === \"minimized\") {\n // Reset states for prevent return to stack state.\n this.properties.state = this.properties.previousState;\n this.properties.previousState = \"\";\n this.minimize();\n } else {\n this.stack();\n }\n }\n /**\n * Stacks the modal object.\n */ stack() {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"stack\";\n this.removeClass(\"wrs_maximized\");\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n this.addClass(\"wrs_stack\");\n // Change maximize/minimize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n this.restoreModalProperties();\n if (typeof this.resizerBR !== \"undefined\" && typeof this.resizerTL !== \"undefined\") {\n this.setResizeButtonsVisibility();\n }\n // Need recalculate position of actual modal because window can was changed in fullscreenmode.\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n this.focus();\n }\n /**\n * Minimizes the modal object.\n */ minimize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n this.title.style.cursor = \"pointer\";\n if (this.properties.state === \"minimized\" && this.properties.previousState === \"stack\") {\n this.stack();\n } else if (this.properties.state === \"minimized\" && this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n // Setting css to prevent important tag into css style.\n this.container.style.height = \"30px\";\n this.container.style.width = \"250px\";\n this.container.style.bottom = \"0px\";\n this.container.style.right = \"10px\";\n this.removeListeners();\n this.properties.previousState = this.properties.state;\n this.properties.state = \"minimized\";\n this.setResizeButtonsVisibility();\n this.minimizeDiv.title = StringManager.get(\"maximize\");\n if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.removeClass(\"wrs_stack\");\n } else {\n this.removeClass(\"wrs_maximized\");\n }\n this.addClass(\"wrs_minimized\");\n // Change minimize icon to maximize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(maxHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n }\n }\n /**\n * Maximizes the modal object.\n */ maximize() {\n // Saving width, height, top and bottom parameters to restore when opening.\n this.saveModalProperties();\n if (this.properties.state !== \"maximized\") {\n this.properties.previousState = this.properties.state;\n this.properties.state = \"maximized\";\n }\n // Don't permit resize on maximize mode.\n this.setResizeButtonsVisibility();\n if (Util.containsClass(this.overlay, \"wrs_minimized\")) {\n this.minimizeDiv.title = StringManager.get(\"minimize\");\n this.removeClass(\"wrs_minimized\");\n } else if (Util.containsClass(this.overlay, \"wrs_stack\")) {\n this.container.style.left = null;\n this.container.style.top = null;\n this.removeClass(\"wrs_stack\");\n }\n this.addClass(\"wrs_maximized\");\n // Change maximize icon to minimize icon\n const generalStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minIcon)})`;\n const hoverStyle = `background-size: 10px; background-repeat: no-repeat; background-image: url(data:image/svg+xml;base64,${window.btoa(minHoverIcon)})`;\n this.minimizeDiv.setAttribute(\"style\", generalStyle);\n this.minimizeDiv.setAttribute(\"onmouseover\", `this.style = \"${hoverStyle}\";`);\n this.minimizeDiv.setAttribute(\"onmouseout\", `this.style = \"${generalStyle}\";`);\n // Set size to 80% screen with a max size.\n this.setSize(parseInt(window.innerHeight * 0.8, 10), parseInt(window.innerWidth * 0.8, 10));\n if (this.container.clientHeight > 700) {\n this.container.style.height = \"700px\";\n }\n if (this.container.clientWidth > 1200) {\n this.container.style.width = \"1200px\";\n }\n // Setting modal position in center on screen.\n const { innerHeight } = window;\n const { innerWidth } = window;\n const { offsetHeight } = this.container;\n const { offsetWidth } = this.container;\n const bottom = innerHeight / 2 - offsetHeight / 2;\n const right = innerWidth / 2 - offsetWidth / 2;\n this.setPosition(bottom, right);\n this.recalculateScale();\n this.recalculatePosition();\n this.recalculateSize();\n this.focus();\n }\n /**\n * Expand again the modal object from a minimized state.\n */ reExpand() {\n if (this.properties.state === \"minimized\") {\n if (this.properties.previousState === \"maximized\") {\n this.maximize();\n } else {\n this.stack();\n }\n this.title.style.cursor = \"\";\n }\n }\n /**\n * Sets modal size.\n * @param {Number} height - Height of the ModalDialog\n * @param {Number} width - Width of the ModalDialog.\n */ setSize(height, width) {\n this.container.style.height = `${height}px`;\n this.container.style.width = `${width}px`;\n this.recalculateSize();\n }\n /**\n * Sets modal position using bottom and right style attributes.\n * @param {number} bottom - bottom attribute.\n * @param {number} right - right attribute.\n */ setPosition(bottom, right) {\n this.container.style.bottom = `${bottom}px`;\n this.container.style.right = `${right}px`;\n }\n /**\n * Saves position and size parameters of and open ModalDialog. This attributes\n * are needed to restore it on re-open.\n */ saveModalProperties() {\n // Saving values of modal only when modal is in stack state.\n if (this.properties.state === \"stack\") {\n this.properties.position.bottom = parseInt(this.container.style.bottom, 10);\n this.properties.position.right = parseInt(this.container.style.right, 10);\n this.properties.size.width = parseInt(this.container.style.width, 10);\n this.properties.size.height = parseInt(this.container.style.height, 10);\n }\n }\n /**\n * Restore ModalDialog position and size parameters.\n */ restoreModalProperties() {\n if (this.properties.state === \"stack\") {\n // Restoring Bottom and Right values from last modal.\n this.setPosition(this.properties.position.bottom, this.properties.position.right);\n // Restoring Height and Left values from last modal.\n this.setSize(this.properties.size.height, this.properties.size.width);\n }\n }\n /**\n * Sets the modal dialog initial size.\n */ recalculateSize() {\n this.wrapper.style.width = `${this.container.clientWidth - 12}px`;\n this.wrapper.style.height = `${this.container.clientHeight - 38}px`;\n this.contentContainer.style.height = `${parseInt(this.wrapper.offsetHeight - 50, 10)}px`;\n }\n /**\n * Enable or disable visibility of resize buttons in modal window depend on state.\n */ setResizeButtonsVisibility() {\n if (this.properties.state === \"stack\") {\n this.resizerTL.style.visibility = \"visible\";\n this.resizerBR.style.visibility = \"visible\";\n } else {\n this.resizerTL.style.visibility = \"hidden\";\n this.resizerBR.style.visibility = \"hidden\";\n }\n }\n /**\n * Makes an object draggable adding mouse and touch events.\n */ addListeners() {\n // Button events (maximize, minimize, stack and close).\n this.maximizeDiv.addEventListener(\"click\", this.maximize.bind(this), true);\n this.stackDiv.addEventListener(\"click\", this.stack.bind(this), true);\n this.minimizeDiv.addEventListener(\"click\", this.minimize.bind(this), true);\n this.closeDiv.addEventListener(\"click\", this.cancelAction.bind(this));\n this.maximizeDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n }\n }, true);\n this.stackDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n }, true);\n this.minimizeDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n }, true);\n this.closeDiv.addEventListener(\"keypress\", function(e) {\n if (e.key === \"Enter\" || e.key === \" \" || e.keyCode === 13 || e.keyCode === 32) {\n // Handle enter and space.\n e.target.click();\n e.preventDefault();\n }\n });\n this.title.addEventListener(\"click\", this.reExpand.bind(this));\n // Overlay events (close).\n this.overlay.addEventListener(\"click\", this.cancelAction.bind(this));\n // Mouse events.\n Util.addEvent(window, \"mousedown\", this.startDrag.bind(this));\n Util.addEvent(window, \"mouseup\", this.stopDrag.bind(this));\n Util.addEvent(window, \"mousemove\", this.drag.bind(this));\n Util.addEvent(window, \"resize\", this.onWindowResize.bind(this));\n // Key events.\n Util.addEvent(window, \"keydown\", this.onKeyDown.bind(this));\n }\n /**\n * Removes draggable events from an object.\n */ removeListeners() {\n // Mouse events.\n Util.removeEvent(window, \"mousedown\", this.startDrag);\n Util.removeEvent(window, \"mouseup\", this.stopDrag);\n Util.removeEvent(window, \"mousemove\", this.drag);\n Util.removeEvent(window, \"resize\", this.onWindowResize);\n // Key events.\n Util.removeEvent(window, \"keydown\", this.onKeyDown);\n }\n /**\n * Returns mouse or touch coordinates (on touch events ev.ClientX doesn't exists)\n * @param {MouseEvent} mouseEvent - Mouse event.\n * @return {Object} With the X and Y coordinates.\n */ // eslint-disable-next-line class-methods-use-this\n eventClient(mouseEvent) {\n if (typeof mouseEvent.clientX === \"undefined\" && mouseEvent.changedTouches) {\n const client = {\n X: mouseEvent.changedTouches[0].clientX,\n Y: mouseEvent.changedTouches[0].clientY\n };\n return client;\n }\n const client = {\n X: mouseEvent.clientX,\n Y: mouseEvent.clientY\n };\n return client;\n }\n /**\n * Start drag function: set the object dragDataObject with the draggable\n * object offsets coordinates.\n * when drag starts (on touchstart or mousedown events).\n * @param {MouseEvent} mouseEvent - Touchstart or mousedown event.\n */ startDrag(mouseEvent) {\n if (this.properties.state === \"minimized\") {\n return;\n }\n if (mouseEvent.target === this.title) {\n if (typeof this.dragDataObject === \"undefined\" || this.dragDataObject === null) {\n // Save first click mouse point on screen.\n this.dragDataObject = {\n x: this.eventClient(mouseEvent).X,\n y: this.eventClient(mouseEvent).Y\n };\n // Reset last drag position when start drag.\n this.lastDrag = {\n x: \"0px\",\n y: \"0px\"\n };\n // Init right and bottom values for window modal if it isn't exist.\n if (this.container.style.right === \"\") {\n this.container.style.right = \"0px\";\n }\n if (this.container.style.bottom === \"\") {\n this.container.style.bottom = \"0px\";\n }\n // Needed for IE11 for apply disabled mouse events on editor because\n // internet explorer needs a dynamic object to apply this property.\n if (this.isIE11()) ;\n // Apply class for disable involuntary select text when drag.\n Util.addClass(document.body, \"wrs_noselect\");\n Util.addClass(this.overlay, \"wrs_overlay_active\");\n // Obtain screen limits for prevent overflow.\n this.limitWindow = this.getLimitWindow();\n }\n }\n }\n /**\n * Updates dragDataObject with the draggable object coordinates when\n * the draggable object is being moved.\n * @param {MouseEvent} mouseEvent - The mouse event.\n */ drag(mouseEvent) {\n if (this.dragDataObject) {\n mouseEvent.preventDefault();\n // Calculate max and min between actual mouse position and limit of screeen.\n // It restric the movement of modal into window.\n let limitY = Math.min(this.eventClient(mouseEvent).Y, this.limitWindow.minPointer.y);\n limitY = Math.max(this.limitWindow.maxPointer.y, limitY);\n let limitX = Math.min(this.eventClient(mouseEvent).X, this.limitWindow.minPointer.x);\n limitX = Math.max(this.limitWindow.maxPointer.x, limitX);\n // Subtract limit with first position to obtain relative pixels increment\n // to the anchor point.\n const dragX = `${limitX - this.dragDataObject.x}px`;\n const dragY = `${limitY - this.dragDataObject.y}px`;\n // Save last valid position of modal before window overflow.\n this.lastDrag = {\n x: dragX,\n y: dragY\n };\n // This move modal with hardware acceleration.\n this.container.style.transform = `translate3d(${dragX},${dragY},0)`;\n }\n if (this.resizeDataObject) {\n const { innerWidth } = window;\n const { innerHeight } = window;\n let limitX = Math.min(this.eventClient(mouseEvent).X, innerWidth - this.scrollbarWidth - 7);\n let limitY = Math.min(this.eventClient(mouseEvent).Y, innerHeight - 7);\n if (limitX < 0) {\n limitX = 0;\n }\n if (limitY < 0) {\n limitY = 0;\n }\n let scaleMultiplier;\n if (this.leftScale) {\n scaleMultiplier = -1;\n } else {\n scaleMultiplier = 1;\n }\n this.container.style.width = `${this.initialWidth + scaleMultiplier * (limitX - this.resizeDataObject.x)}px`;\n this.container.style.height = `${this.initialHeight + scaleMultiplier * (limitY - this.resizeDataObject.y)}px`;\n if (!this.leftScale) {\n if (this.resizeDataObject.x - limitX - this.initialWidth < -580) {\n this.container.style.right = `${this.initialRight - (limitX - this.resizeDataObject.x)}px`;\n } else {\n this.container.style.right = `${this.initialRight + this.initialWidth - 580}px`;\n this.container.style.width = \"580px\";\n }\n if (this.resizeDataObject.y - limitY < this.initialHeight - 338) {\n this.container.style.bottom = `${this.initialBottom - (limitY - this.resizeDataObject.y)}px`;\n } else {\n this.container.style.bottom = `${this.initialBottom + this.initialHeight - 338}px`;\n this.container.style.height = \"338px\";\n }\n }\n this.recalculateScale();\n this.recalculatePosition();\n }\n }\n /**\n * Returns the boundaries of actual window to limit modal movement.\n * @return {Object} Object containing mouseX and mouseY coordinates of actual mouse on screen.\n */ getLimitWindow() {\n // Obtain dimensions of window page.\n const maxWidth = window.innerWidth;\n const maxHeight = window.innerHeight;\n // Calculate relative position of mouse point into window.\n const { offsetHeight } = this.container;\n const contStyleBottom = parseInt(this.container.style.bottom, 10);\n const contStyleRight = parseInt(this.container.style.right, 10);\n const { pageXOffset } = window;\n const dragY = this.dragDataObject.y;\n const dragX = this.dragDataObject.x;\n const offSetToolbarY = offsetHeight + contStyleBottom - (maxHeight - (dragY - pageXOffset));\n const offSetToolbarX = maxWidth - this.scrollbarWidth - (dragX - pageXOffset) - contStyleRight;\n // Calculate limits with sizes of window, modal and mouse position.\n const minPointerY = maxHeight - this.container.offsetHeight + offSetToolbarY;\n const maxPointerY = this.title.offsetHeight - (this.title.offsetHeight - offSetToolbarY);\n const minPointerX = maxWidth - offSetToolbarX - this.scrollbarWidth;\n const maxPointerX = this.container.offsetWidth - offSetToolbarX;\n const minPointer = {\n x: minPointerX,\n y: minPointerY\n };\n const maxPointer = {\n x: maxPointerX,\n y: maxPointerY\n };\n return {\n minPointer,\n maxPointer\n };\n }\n /**\n * Returns the scrollbar width size of browser\n * @returns {Number} The scrollbar width.\n */ // eslint-disable-next-line class-methods-use-this\n getScrollBarWidth() {\n // Create a paragraph with full width of page.\n const inner = document.createElement(\"p\");\n inner.style.width = \"100%\";\n inner.style.height = \"200px\";\n // Create a hidden div to compare sizes.\n const outer = document.createElement(\"div\");\n outer.style.position = \"absolute\";\n outer.style.top = \"0px\";\n outer.style.left = \"0px\";\n outer.style.visibility = \"hidden\";\n outer.style.width = \"200px\";\n outer.style.height = \"150px\";\n outer.style.overflow = \"hidden\";\n outer.appendChild(inner);\n document.body.appendChild(outer);\n const widthOuter = inner.offsetWidth;\n // Change type overflow of paragraph for measure scrollbar.\n outer.style.overflow = \"scroll\";\n let widthInner = inner.offsetWidth;\n // If measure is the same, we compare with internal div.\n if (widthOuter === widthInner) {\n widthInner = outer.clientWidth;\n }\n document.body.removeChild(outer);\n return widthOuter - widthInner;\n }\n /**\n * Set the dragDataObject to null.\n */ stopDrag() {\n // Due to we have multiple events that call this function, we need only to execute\n // the next modifiers one time,\n // when the user stops to drag and dragDataObject is not null (the object to drag is attached).\n if (this.dragDataObject || this.resizeDataObject) {\n // If modal doesn't change, it's not necessary to set position with interpolation.\n this.container.style.transform = \"\";\n if (this.dragDataObject) {\n this.container.style.right = `${parseInt(this.container.style.right, 10) - parseInt(this.lastDrag.x, 10)}px`;\n this.container.style.bottom = `${parseInt(this.container.style.bottom, 10) - parseInt(this.lastDrag.y, 10)}px`;\n }\n // We make focus on editor after drag modal windows to prevent lose focus.\n this.focus();\n // Restore mouse events on iframe.\n // this.iframe.style['pointer-events'] = 'auto';\n document.body.style[\"user-select\"] = \"\";\n // Restore static state of iframe if we use Internet Explorer.\n if (this.isIE11()) ;\n // Active text select event.\n Util.removeClass(document.body, \"wrs_noselect\");\n Util.removeClass(this.overlay, \"wrs_overlay_active\");\n }\n this.dragDataObject = null;\n this.resizeDataObject = null;\n this.initialWidth = null;\n this.leftScale = null;\n }\n /**\n * Recalculates scale for modal when resize browser window.\n */ onWindowResize() {\n this.recalculateScrollBar();\n this.recalculatePosition();\n this.recalculateScale();\n }\n /**\n * Triggers keyboard events:\n * - Tab key tab to go to submit button.\n * - Esc key to close the modal dialog.\n * @param {KeyboardEvent} keyboardEvent - The keyboard event.\n */ onKeyDown(keyboardEvent) {\n if (keyboardEvent.key !== undefined) {\n // Popupmessage is not oppened.\n if (this.popup.overlayWrapper.style.display !== \"block\") {\n // Code to detect Esc event\n if (keyboardEvent.key === \"Escape\" || keyboardEvent.key === \"Esc\") {\n if (this.properties.open) {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.shiftKey && keyboardEvent.key === \"Tab\") {\n // Code to detect shift Tab event.\n if (document.activeElement === this.cancelButton) {\n this.submitButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n } else if (keyboardEvent.key === \"Tab\") {\n // Code to detect Tab event.\n if (document.activeElement === this.submitButton) {\n this.cancelButton.focus();\n keyboardEvent.stopPropagation();\n keyboardEvent.preventDefault();\n } else {\n this.contentManager.onKeyDown(keyboardEvent);\n }\n }\n } else {\n // Popupmessage oppened.\n this.popup.onKeyDown(keyboardEvent);\n }\n }\n }\n /**\n * Recalculating position for modal dialog when the browser is resized.\n */ recalculatePosition() {\n this.container.style.right = `${Math.min(parseInt(this.container.style.right, 10), window.innerWidth - this.scrollbarWidth - this.container.offsetWidth)}px`;\n if (parseInt(this.container.style.right, 10) < 0) {\n this.container.style.right = \"0px\";\n }\n this.container.style.bottom = `${Math.min(parseInt(this.container.style.bottom, 10), window.innerHeight - this.container.offsetHeight)}px`;\n if (parseInt(this.container.style.bottom, 10) < 0) {\n this.container.style.bottom = \"0px\";\n }\n }\n /**\n * Recalculating scale for modal when the browser is resized.\n */ recalculateScale() {\n let sizeModified = false;\n if (parseInt(this.container.style.width, 10) > 580) {\n this.container.style.width = `${Math.min(parseInt(this.container.style.width, 10), window.innerWidth - this.scrollbarWidth)}px`;\n sizeModified = true;\n } else {\n this.container.style.width = \"580px\";\n sizeModified = true;\n }\n if (parseInt(this.container.style.height, 10) > 338) {\n this.container.style.height = `${Math.min(parseInt(this.container.style.height, 10), window.innerHeight)}px`;\n sizeModified = true;\n } else {\n this.container.style.height = \"338px\";\n sizeModified = true;\n }\n if (sizeModified) {\n this.recalculateSize();\n }\n }\n /**\n * Recalculating width of browser scroll bar.\n */ recalculateScrollBar() {\n this.hasScrollBar = window.innerWidth > document.documentElement.clientWidth;\n if (this.hasScrollBar) {\n this.scrollbarWidth = this.getScrollBarWidth();\n } else {\n this.scrollbarWidth = 0;\n }\n }\n /**\n * Hide soft keyboards on iOS devices.\n */ // eslint-disable-next-line class-methods-use-this\n hideKeyboard() {\n // iOS keyboard can't be detected or hide directly from JavaScript.\n // So, this method simulates that user focus a text input and blur\n // the selection.\n const inputField = document.createElement(\"input\");\n this.container.appendChild(inputField);\n inputField.focus();\n inputField.blur();\n // Is removed to not see it.\n inputField.remove();\n }\n /**\n * Focus to contentManager object.\n */ focus() {\n if (this.contentManager != null && typeof this.contentManager.onFocus !== \"undefined\") {\n this.contentManager.onFocus();\n }\n }\n /**\n * Returns true when the device is on portrait mode.\n */ // eslint-disable-next-line class-methods-use-this\n portraitMode() {\n return window.innerHeight > window.innerWidth;\n }\n /**\n * Event handler that change container size when IOS soft keyboard is opened.\n */ handleOpenedIosSoftkeyboard() {\n if (!this.iosSoftkeyboardOpened && this.iosDivHeight != null && this.iosDivHeight === `100${this.iosMeasureUnit}`) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n }\n this.iosSoftkeyboardOpened = true;\n }\n /**\n * Event handler that change container size when IOS soft keyboard is closed.\n */ handleClosedIosSoftkeyboard() {\n this.iosSoftkeyboardOpened = false;\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n /**\n * Change container sizes when orientation is changed on iOS.\n */ orientationChangeIosSoftkeyboard() {\n if (this.iosSoftkeyboardOpened) {\n if (this.portraitMode()) {\n this.setContainerHeight(`63${this.iosMeasureUnit}`);\n } else {\n this.setContainerHeight(`40${this.iosMeasureUnit}`);\n }\n } else {\n this.setContainerHeight(`100${this.iosMeasureUnit}`);\n }\n }\n /**\n * Change container sizes when orientation is changed on Android.\n */ orientationChangeAndroidSoftkeyboard() {\n this.setContainerHeight(\"100%\");\n }\n /**\n * Set iframe container height.\n * @param {Number} height - New height.\n */ setContainerHeight(height) {\n this.iosDivHeight = height;\n this.wrapper.style.height = height;\n }\n /**\n * Check content of editor before close action.\n */ showPopUpMessage() {\n if (this.properties.state === \"minimized\") {\n this.stack();\n }\n this.popup.show();\n }\n /**\n * Sets the title of the modal dialog.\n * @param {String} title - Modal dialog title.\n */ setTitle(title) {\n this.title.innerHTML = title;\n }\n /**\n * Returns the id of an element, adding the instance number to\n * the element class name:\n * className --> className[idNumber]\n * @param {String} className - The element class name.\n * @returns {String} A string appending the instance id to the className.\n */ getElementId(className) {\n return `${className}[${this.instanceId}]`;\n }\n}\n\n// Polyfills.\n/*! http://mths.be/codepointat v0.1.0 by @mathias */ if (!String.prototype.codePointAt) {\n (function() {\n var codePointAt = function(position) {\n if (this == null) {\n throw TypeError();\n }\n var string = String(this);\n var size = string.length;\n // `ToInteger`\n var index = position ? Number(position) : 0;\n if (index != index) {\n // better `isNaN`\n index = 0;\n }\n // Account for out-of-bounds indices:\n if (index < 0 || index >= size) {\n return undefined;\n }\n // Get the first code unit\n var first = string.charCodeAt(index);\n var second;\n if (// check if it’s the start of a surrogate pair\n first >= 0xd800 && first <= 0xdbff && // high surrogate\n size > index + 1 // there is a next code unit\n ) {\n second = string.charCodeAt(index + 1);\n if (second >= 0xdc00 && second <= 0xdfff) {\n // low surrogate\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xd800) * 0x400 + second - 0xdc00 + 0x10000;\n }\n }\n return first;\n };\n if (Object.defineProperty) {\n Object.defineProperty(String.prototype, \"codePointAt\", {\n value: codePointAt,\n configurable: true,\n writable: true\n });\n } else {\n String.prototype.codePointAt = codePointAt;\n }\n })();\n}\n// Object.assign polyfill.\nif (typeof Object.assign != \"function\") {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, \"assign\", {\n value: function assign(target, varArgs) {\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError(\"Cannot convert undefined or null to object\");\n }\n var to = Object(target);\n for(var index = 1; index < arguments.length; index++){\n var nextSource = arguments[index];\n if (nextSource != null) {\n // Skip over if undefined or null\n for(var nextKey in nextSource){\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nif (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, \"includes\", {\n value: function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" s null or is not defined');\n }\n // 1. Let O be ? ToObject(this value).\n var o = Object(this);\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n // 3. if len is 0, return false.\n if (len === 0) {\n return false;\n }\n // 4. Let n be ? ToInteger(fromIndex).\n // (if fromIndex is undefinedo, this step generates the value 0.)\n var n = fromIndex | 0;\n // 5. if n ≥ 0, then\n // a. Let k be n.\n // 6. Else n < 0,\n // a. Let k be len + n.\n // b. if k < 0, let k be 0.\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n function sameValueZero(x, y) {\n return x === y || typeof x === \"number\" && typeof y === \"number\" && isNaN(x) && isNaN(y);\n }\n // 7. Repeat while k < len\n while(k < len){\n // a. let element k be the result of ? Get(O, ! ToString(k)).\n // b. if SameValueZero(searchElement, elementK) is true, return true.\n if (sameValueZero(o[k], searchElement)) {\n return true;\n }\n // c. Increase k by 1.\n k++;\n }\n // 8. Return false\n return false;\n }\n });\n}\nif (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (search instanceof RegExp) {\n throw TypeError(\"first argument must not be a RegExp\");\n }\n if (start === undefined) {\n start = 0;\n }\n return this.indexOf(search, start) !== -1;\n };\n}\nif (!String.prototype.startsWith) {\n Object.defineProperty(String.prototype, \"startsWith\", {\n value: function(search, rawPos) {\n var pos = rawPos > 0 ? rawPos | 0 : 0;\n return this.substring(pos, pos + search.length) === search;\n }\n });\n}\n\n/**\n * @typedef {Object} CoreProperties\n * @property {ServiceProviderProperties} serviceProviderProperties\n * - The ServiceProvider class properties. *\n */ class Core {\n /**\n * @classdesc\n * This class represents MathType integration Core, managing the following:\n * - Integration initialization.\n * - Event managing.\n * - Insertion of formulas into the edit area.\n * ```js\n * let core = new Core();\n * core.addListener(listener);\n * core.language = 'en';\n *\n * // Initializing Core class.\n * core.init(configurationService);\n * ```\n * @constructs\n * Core constructor.\n * @param {CoreProperties}\n */ constructor(coreProperties){\n /**\n * Language. Needed for accessibility and locales. 'en' by default.\n * @type {String}\n */ this.language = \"en\";\n /**\n * Edit mode, 'images' by default. Admits the following values:\n * - images\n * - latex\n * @type {String}\n */ this.editMode = \"images\";\n /**\n * Modal dialog instance.\n * @type {ModalDialog}\n */ this.modalDialog = null;\n /**\n * The instance of {@link CustomEditors}. By default\n * the only custom editor is the Chemistry editor.\n * @type {CustomEditors}\n */ this.customEditors = new CustomEditors();\n /**\n * Chemistry editor.\n * @type {CustomEditor}\n */ const chemEditorParams = {\n name: \"Chemistry\",\n toolbar: \"chemistry\",\n icon: \"chem.png\",\n confVariable: \"chemEnabled\",\n title: \"ChemType\",\n tooltip: \"Insert a chemistry formula - ChemType\"\n };\n this.customEditors.addEditor(\"chemistry\", chemEditorParams);\n /**\n * Environment properties. This object contains data about the integration platform.\n * @typedef IntegrationEnvironment\n * @property {String} IntegrationEnvironment.editor - Editor name. For example the HTML editor.\n * @property {String} IntegrationEnvironment.mode - Integration save mode.\n * @property {String} IntegrationEnvironment.version - Integration version.\n *\n */ /**\n * The environment properties object.\n * @type {IntegrationEnvironment}\n */ this.environment = {};\n /**\n * @typedef EditionProperties\n * @property {Boolean} editionProperties.isNewElement - True if the formula is a new one.\n * False otherwise.\n * @property {HTMLImageElement} editionProperties.temporalImage- The image element.\n * Null if the formula is new.\n * @property {Range} editionProperties.latexRange - Tha range that contains the LaTeX formula.\n * @property {Range} editionProperties.range - The range that contains the image element.\n * @property {String} editionProperties.editMode - The edition mode. 'images' by default.\n */ /**\n * The properties of the current edition process.\n * @type {EditionProperties}\n */ this.editionProperties = {};\n this.editionProperties.isNewElement = true;\n this.editionProperties.temporalImage = null;\n this.editionProperties.latexRange = null;\n this.editionProperties.range = null;\n this.editionProperties.editionStartTime = null;\n /**\n * The {@link IntegrationModel} instance.\n * @type {IntegrationModel}\n */ this.integrationModel = null;\n /**\n * The {@link ContentManager} instance.\n * @type {ContentManager}\n */ this.contentManager = null;\n /**\n * The current browser.\n * @type {String}\n */ this.browser = (()=>{\n const ua = navigator.userAgent;\n let browser = \"none\";\n if (ua.search(\"Edge/\") >= 0) {\n browser = \"EDGE\";\n } else if (ua.search(\"Chrome/\") >= 0) {\n browser = \"CHROME\";\n } else if (ua.search(\"Trident/\") >= 0) {\n browser = \"IE\";\n } else if (ua.search(\"Firefox/\") >= 0) {\n browser = \"FIREFOX\";\n } else if (ua.search(\"Safari/\") >= 0) {\n browser = \"SAFARI\";\n }\n return browser;\n })();\n /**\n * Plugin listeners.\n * @type {Array.}\n */ this.listeners = new Listeners();\n /**\n * Service provider properties.\n * @type {ServiceProviderProperties}\n */ this.serviceProviderProperties = {};\n if (\"serviceProviderProperties\" in coreProperties) {\n this.serviceProviderProperties = coreProperties.serviceProviderProperties;\n } else {\n throw new Error(\"serviceProviderProperties property missing.\");\n }\n }\n /**\n * Static property.\n * Core listeners.\n * @private\n * @type {Listeners}\n */ static get globalListeners() {\n return Core._globalListeners;\n }\n /**\n * Static property setter.\n * Set core listeners.\n * @param {Listeners} value - The property value.\n * @ignore\n */ static set globalListeners(value) {\n Core._globalListeners = value;\n }\n /**\n * Core state. Says if it was loaded previously.\n * True when Core.init was called. Otherwise, false.\n * @private\n * @type {Boolean}\n */ static get initialized() {\n return Core._initialized;\n }\n /**\n * Core state. Says if it was loaded previously.\n * @param {Boolean} value - True to say that Core.init was called. Otherwise, false.\n * @ignore\n */ static set initialized(value) {\n Core._initialized = value;\n }\n /**\n * Sets the {@link Core.integrationModel} property.\n * @param {IntegrationModel} integrationModel - The {@link IntegrationModel} property.\n */ setIntegrationModel(integrationModel) {\n this.integrationModel = integrationModel;\n }\n /**\n * Sets the {@link Core.environment} property.\n * @param {IntegrationEnvironment} integrationEnvironment -\n * The {@link IntegrationEnvironment} object.\n */ setEnvironment(integrationEnvironment) {\n if (\"editor\" in integrationEnvironment) {\n this.environment.editor = integrationEnvironment.editor;\n }\n if (\"mode\" in integrationEnvironment) {\n this.environment.mode = integrationEnvironment.mode;\n }\n if (\"version\" in integrationEnvironment) {\n this.environment.version = integrationEnvironment.version;\n }\n }\n /**\n * Sets the custom headers added on editor requests if contentManager isn't undefined.\n * @returns {Object} headers - key value headers.\n */ setHeaders(headers) {\n const headerObject = this?.contentManager?.setCustomHeaders(headers) || headers;\n Configuration.set(\"customHeaders\", headerObject);\n }\n /**\n * Returns the current {@link ModalDialog} instance.\n * @returns {ModalDialog} The current {@link ModalDialog} instance.\n */ getModalDialog() {\n return this.modalDialog;\n }\n /**\n * Inits the {@link Core} class, doing the following:\n * - Calls asynchronously configuration service, retrieving the backend configuration in a JSON.\n * - Updates {@link Configuration} class with the previous configuration properties.\n * - Updates the {@link ServiceProvider} class using the configuration service path as reference.\n * - Loads language strings.\n * - Fires onLoad event.\n * @param {Object} serviceParameters - Service parameters.\n */ init() {\n if (!Core.initialized) {\n const serviceProviderListener = Listeners.newListener(\"onInit\", ()=>{\n const jsConfiguration = ServiceProvider.getService(\"configurationjs\", \"\", \"get\");\n const jsonConfiguration = JSON.parse(jsConfiguration);\n Configuration.addConfiguration(jsonConfiguration);\n // Adding JavaScript (not backend) configuration variables.\n Configuration.addConfiguration(jsProperties);\n // Fire 'onLoad' event:\n // All integration must listen this event in order to know if the plugin\n // has been properly loaded.\n StringManager.language = this.language;\n this.listeners.fire(\"onLoad\", {});\n });\n ServiceProvider.addListener(serviceProviderListener);\n ServiceProvider.init(this.serviceProviderProperties);\n Core.initialized = true;\n } else {\n // Case when there are more than two editor instances.\n // After the first editor all the other editors don't need to load any file or service.\n this.listeners.fire(\"onLoad\", {});\n }\n }\n /**\n * Adds a {@link Listener} to the current instance of the {@link Core} class.\n * @param {Listener} listener - The listener object.\n */ addListener(listener) {\n this.listeners.add(listener);\n }\n /**\n * Adds the global {@link Listener} instance to {@link Core} class.\n * @param {Listener} listener - The event listener to be added.\n * @static\n */ static addGlobalListener(listener) {\n Core.globalListeners.add(listener);\n }\n beforeUpdateFormula(mathml, wirisProperties) {\n /**\n * This event is fired before updating the formula.\n * @type {Object}\n * @property {String} mathml - MathML to be transformed.\n * @property {String} editMode - Edit mode.\n * @property {Object} wirisProperties - Extra attributes for the formula.\n * @property {String} language - Formula language.\n */ const beforeUpdateEvent = new Event();\n beforeUpdateEvent.mathml = mathml;\n // Cloning wirisProperties object\n // We don't want wirisProperties object modified.\n beforeUpdateEvent.wirisProperties = {};\n if (wirisProperties != null) {\n Object.keys(wirisProperties).forEach((attr)=>{\n beforeUpdateEvent.wirisProperties[attr] = wirisProperties[attr];\n });\n }\n // Read only.\n beforeUpdateEvent.language = this.language;\n beforeUpdateEvent.editMode = this.editMode;\n if (this.listeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n if (Core.globalListeners.fire(\"onBeforeFormulaInsertion\", beforeUpdateEvent)) {\n return {};\n }\n return {\n mathml: beforeUpdateEvent.mathml,\n wirisProperties: beforeUpdateEvent.wirisProperties\n };\n }\n /**\n * Converts a MathML into it's correspondent image and inserts the image is\n * inserted in a HTMLElement target by creating\n * a new image or updating an existing one.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the insertion.\n * @param {Window} windowTarget - The window element where the editable content is.\n * @param {String} mathml - The MathML.\n * @param {Array.} wirisProperties - The extra attributes for the formula.\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n /**\n * It is the object with the information of the node or latex to insert.\n * @typedef ReturnObject\n * @property {Node} [node] - The DOM node to insert.\n * @property {String} [latex] - The latex to insert.\n */ const returnObject = {};\n if (!mathml) {\n this.insertElementOnSelection(null, focusElement, windowTarget);\n } else if (this.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n // this.integrationModel.getNonLatexNode is an integration wrapper\n // to have special behaviours for nonLatex.\n // Not all the integrations have special behaviours for nonLatex.\n if (!!this.integrationModel.fillNonLatexNode && !returnObject.latex) {\n const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.latex = returnObject.latex;\n this.integrationModel.fillNonLatexNode(afterUpdateEvent, windowTarget, mathml);\n } else {\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n }\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n } else {\n returnObject.node = Parser.mathmlToImgObject(windowTarget.document, mathml, wirisProperties, this.language);\n this.insertElementOnSelection(returnObject.node, focusElement, windowTarget);\n }\n return returnObject;\n }\n afterUpdateFormula(focusElement, windowTarget, node, latex) {\n /**\n * This event is fired after update the formula.\n * @type {Event}\n * @param {String} editMode - edit mode.\n * @param {Object} windowTarget - target window.\n * @param {Object} focusElement - target element to be focused after update.\n * @param {String} latex - LaTeX generated by the formula (editMode=latex).\n * @param {Object} node - node generated after update the formula (text if LaTeX img otherwise).\n */ const afterUpdateEvent = new Event();\n afterUpdateEvent.editMode = this.editMode;\n afterUpdateEvent.windowTarget = windowTarget;\n afterUpdateEvent.focusElement = focusElement;\n afterUpdateEvent.node = node;\n afterUpdateEvent.latex = latex;\n if (this.listeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n if (Core.globalListeners.fire(\"onAfterFormulaInsertion\", afterUpdateEvent)) {\n return {};\n }\n return {};\n }\n /**\n * Sets the caret after a given Node and set the focus to the owner document.\n * @param {Node} node - The Node element.\n */ placeCaretAfterNode(node) {\n if (node === null) return;\n this.integrationModel.getSelection();\n const nodeDocument = node.ownerDocument;\n if (typeof nodeDocument.getSelection !== \"undefined\" && !!node.parentElement) {\n const range = nodeDocument.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const selection = nodeDocument.getSelection();\n selection.removeAllRanges();\n selection.addRange(range);\n nodeDocument.body.focus();\n }\n }\n /**\n * Replaces a Selection object with an HTMLElement.\n * @param {HTMLElement} element - The HTMLElement to replace the selection.\n * @param {HTMLElement} focusElement - The HTMLElement to be focused after the replace.\n * @param {Window} windowTarget - The window target.\n */ insertElementOnSelection(element, focusElement, windowTarget) {\n let mathmlOrigin = null;\n if (this.editionProperties.isNewElement) {\n if (element) {\n if (focusElement.type === \"textarea\") {\n Util.updateTextArea(focusElement, element.textContent);\n } else if (document.selection && document.getSelection === 0) {\n let range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n if (!(\"parentElement\" in range)) {\n windowTarget.document.execCommand(\"delete\", false);\n range = windowTarget.document.selection.createRange();\n windowTarget.document.execCommand(\"InsertImage\", false, element.src);\n }\n if (\"parentElement\" in range) {\n const temporalObject = range.parentElement();\n if (temporalObject.nodeName.toUpperCase() === \"IMG\") {\n temporalObject.parentNode.replaceChild(element, temporalObject);\n } else {\n // IE9 fix: parentNode() does not return the IMG node,\n // returns the parent DIV node. In IE < 9, pasteHTML does not work well.\n range.pasteHTML(Util.createObjectCode(element));\n }\n }\n } else {\n let range = null;\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n if (this.editionProperties.range) {\n ({ range } = this.editionProperties);\n this.editionProperties.range = null;\n } else {\n const editorSelection = this.integrationModel.getSelection();\n range = editorSelection.getRangeAt(0);\n }\n // Delete if something was surrounded.\n range.deleteContents();\n let node = range.startContainer;\n const position = range.startOffset;\n if (node.nodeType === 3) {\n // TEXT_NODE.\n node = node.splitText(position);\n node.parentNode.insertBefore(element, node);\n } else if (node.nodeType === 1) {\n // ELEMENT_NODE.\n node.insertBefore(element, node.childNodes[position]);\n }\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n focusElement.focus();\n } else {\n const editorSelection = this.integrationModel.getSelection();\n editorSelection.removeAllRanges();\n if (this.editionProperties.range) {\n const { range } = this.editionProperties;\n this.editionProperties.range = null;\n editorSelection.addRange(range);\n }\n }\n } else if (this.editionProperties.latexRange) {\n if (document.selection && document.getSelection === 0) {\n this.editionProperties.isNewElement = true;\n this.editionProperties.latexRange.select();\n this.insertElementOnSelection(element, focusElement, windowTarget);\n } else {\n this.editionProperties.latexRange.deleteContents();\n this.editionProperties.latexRange.insertNode(element);\n this.placeCaretAfterNode(element);\n }\n } else if (focusElement.type === \"textarea\") {\n let item;\n // Wrapper for some integrations that can have special behaviours to show latex.\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n item = this.integrationModel.getSelectedItem(focusElement, false);\n } else {\n item = Util.getSelectedItemOnTextarea(focusElement);\n }\n Util.updateExistingTextOnTextarea(focusElement, element.textContent, item.startPosition, item.endPosition);\n } else {\n mathmlOrigin = this.editionProperties.temporalImage?.dataset.mathml;\n if (element && element.nodeName.toLowerCase() === \"img\") {\n // Editor empty, formula has been erased on edit.\n // There are editors (e.g: CKEditor) that put attributes in images.\n // We don't allow that behaviour in our images.\n Image.removeImgDataAttributes(this.editionProperties.temporalImage);\n // Clone is needed to maintain event references to temporalImage.\n Image.clone(element, this.editionProperties.temporalImage);\n } else {\n this.editionProperties.temporalImage.remove();\n }\n this.placeCaretAfterNode(this.editionProperties.temporalImage);\n }\n // Build the telemeter payload separated to delete null/undefined entries.\n const mathml = element?.dataset?.mathml;\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.editionProperties.editionStartTime,\n editor_origin: null,\n toolbar: this.modalDialog.contentManager.toolbar,\n size: mathml?.length\n };\n // Remove the desired null keys.\n Object.keys(payload).forEach((key)=>{\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n }\n /**\n * Opens a modal dialog containing MathType editor..\n * @param {HTMLElement} target - The target HTMLElement where formulas should be inserted.\n * @param {Boolean} isIframe - True if the target HTMLElement is an iframe. False otherwise.\n */ openModalDialog(target, isIframe) {\n // Count the time since the editor is open\n this.editionProperties.editionStartTime = Date.now();\n // Textarea elements don't have normal document ranges. It only accepts latex edit.\n this.editMode = \"images\";\n // In IE is needed keep the range due to after focus the modal window\n // it can't be retrieved the last selection.\n try {\n if (isIframe) {\n // Is needed focus the target first.\n target.contentWindow.focus();\n const selection = target.contentWindow.getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n } else {\n // Is needed focus the target first.\n target.focus();\n const selection = getSelection();\n this.editionProperties.range = selection.getRangeAt(0);\n }\n } catch (e) {\n this.editionProperties.range = null;\n }\n if (isIframe === undefined) {\n isIframe = true;\n }\n this.editionProperties.latexRange = null;\n if (target) {\n let selectedItem;\n if (typeof this.integrationModel.getSelectedItem !== \"undefined\") {\n selectedItem = this.integrationModel.getSelectedItem(target, isIframe);\n } else {\n selectedItem = Util.getSelectedItem(target, isIframe);\n }\n // Check LaTeX if and only if the node is a text node (nodeType==3).\n if (selectedItem) {\n // Case when image was selected and button pressed.\n if (!selectedItem.caretPosition && Util.containsClass(selectedItem.node, Configuration.get(\"imageClassName\"))) {\n this.editionProperties.temporalImage = selectedItem.node;\n this.editionProperties.isNewElement = false;\n } else if (selectedItem.node.nodeType === 3) {\n // If it's a text node means that editor is working with LaTeX.\n if (this.integrationModel.getMathmlFromTextNode) {\n // If integration has this function it isn't set range due to we don't\n // know if it will be put into a textarea as a text or image.\n const mathml = this.integrationModel.getMathmlFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (mathml) {\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n }\n } else {\n const latexResult = Latex.getLatexFromTextNode(selectedItem.node, selectedItem.caretPosition);\n if (latexResult) {\n const mathml = Latex.getMathMLFromLatex(latexResult.latex);\n this.editMode = \"latex\";\n this.editionProperties.isNewElement = false;\n this.editionProperties.temporalImage = document.createElement(\"img\");\n this.editionProperties.temporalImage.setAttribute(Configuration.get(\"imageMathmlAttribute\"), MathML.safeXmlEncode(mathml));\n const windowTarget = isIframe ? target.contentWindow : window;\n if (target.tagName.toLowerCase() !== \"textarea\") {\n if (document.selection) {\n let leftOffset = 0;\n let previousNode = latexResult.startNode.previousSibling;\n while(previousNode){\n leftOffset += Util.getNodeLength(previousNode);\n previousNode = previousNode.previousSibling;\n }\n this.editionProperties.latexRange = windowTarget.document.selection.createRange();\n this.editionProperties.latexRange.moveToElementText(latexResult.startNode.parentNode);\n this.editionProperties.latexRange.move(\"character\", leftOffset + latexResult.startPosition);\n this.editionProperties.latexRange.moveEnd(\"character\", latexResult.latex.length + 4); // Plus 4 for the '$$' characters.\n } else {\n this.editionProperties.latexRange = windowTarget.document.createRange();\n this.editionProperties.latexRange.setStart(latexResult.startNode, latexResult.startPosition);\n this.editionProperties.latexRange.setEnd(latexResult.endNode, latexResult.endPosition);\n }\n }\n }\n }\n }\n } else if (target.tagName.toLowerCase() === \"textarea\") {\n // By default editMode is 'images', but when target is a textarea it needs to be 'latex'.\n this.editMode = \"latex\";\n }\n }\n // Setting an object with the editor parameters.\n // Editor parameters can be customized in several ways:\n // 1 - editorAttributes: Contains the default editor attributes,\n // usually the metrics in a comma separated string. Always exists.\n // 2 - editorParameters: Object containing custom editor parameters.\n // These parameters are defined in the backend. So they affects all integration instances.\n // The backend send the default editor attributes in a coma separated\n // with the following structure: key1=value1,key2=value2...\n const defaultEditorAttributesArray = Configuration.get(\"editorAttributes\").split(\", \");\n const defaultEditorAttributes = {};\n for(let i = 0, len = defaultEditorAttributesArray.length; i < len; i += 1){\n const tempAttribute = defaultEditorAttributesArray[i].split(\"=\");\n const key = tempAttribute[0];\n const value = tempAttribute[1];\n defaultEditorAttributes[key] = value;\n }\n // Custom editor parameters.\n const editorAttributes = {\n language: this.language\n };\n // Editor parameters in backend, usually configuration.ini.\n const serverEditorParameters = Configuration.get(\"editorParameters\");\n // Editor parameters through JavaScript configuration.\n const clientEditorParameters = this.integrationModel.editorParameters;\n Object.assign(editorAttributes, defaultEditorAttributes, serverEditorParameters);\n Object.assign(editorAttributes, defaultEditorAttributes, clientEditorParameters);\n // Now, update backwards: if user has set a custom language, pass that back to core properties\n this.language = editorAttributes.language;\n StringManager.language = this.language;\n editorAttributes.rtl = this.integrationModel.rtl;\n const customHeaders = Configuration.get(\"customHeaders\");\n // This is not being used in the code, we are keeping it just in case it's needed.\n // We check if it is a string since we have a setter that will make the customHeaders an object. And we do the conversion for the case when we get the headers from the backend.\n editorAttributes.customHeaders = typeof customHeaders === \"string\" ? Util.convertStringToObject(customHeaders) : customHeaders;\n const contentManagerAttributes = {};\n contentManagerAttributes.editorAttributes = editorAttributes;\n contentManagerAttributes.language = this.language;\n contentManagerAttributes.customEditors = this.customEditors;\n contentManagerAttributes.environment = this.environment;\n if (this.modalDialog == null) {\n this.modalDialog = new ModalDialog(editorAttributes);\n this.contentManager = new ContentManager(contentManagerAttributes);\n // When an instance of ContentManager is created we need to wait until\n // the ContentManager is ready by listening 'onLoad' event.\n const listener = Listeners.newListener(\"onLoad\", ()=>{\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")));\n this.contentManager.mathML = mathML;\n }\n });\n this.contentManager.addListener(listener);\n this.contentManager.init();\n this.modalDialog.setContentManager(this.contentManager);\n this.contentManager.setModalDialogInstance(this.modalDialog);\n } else {\n this.contentManager.dbclick = this.editionProperties.dbclick;\n this.contentManager.isNewElement = this.editionProperties.isNewElement;\n if (this.editionProperties.temporalImage != null) {\n const mathML = MathML.safeXmlDecode(this.editionProperties.temporalImage.getAttribute(Configuration.get(\"imageMathmlAttribute\")));\n this.contentManager.mathML = mathML;\n }\n }\n this.contentManager.setIntegrationModel(this.integrationModel);\n this.modalDialog.open();\n }\n /**\n * Returns the {@link CustomEditors} instance.\n * @return {CustomEditors} The current {@link CustomEditors} instance.\n */ getCustomEditors() {\n return this.customEditors;\n }\n}\n/**\n * Core static listeners.\n * @type {Listeners}\n * @private\n */ Core._globalListeners = new Listeners();\n/**\n * Resources state. Says if they were loaded or not.\n * @type {Boolean}\n * @private\n */ Core._initialized = false;\n\nvar warnIcon = \"\\n\\n\\n\";\n\n// eslint-disable-next-line no-unused-vars, import/named\n/**\n * @typedef {Object} IntegrationModelProperties\n * @property {string} configurationService - Configuration service path.\n * This parameter is needed to determine all services paths.\n * @property {HTMLElement} integrationModelProperties.target - HTML target.\n * @property {string} integrationModelProperties.scriptName - Integration script name.\n * Usually the name of the integration script.\n * @property {Object} integrationModelProperties.environment - integration environment properties.\n * @property {Object} [integrationModelProperties.callbackMethodArguments] - object containing\n * callback method arguments.\n * @property {string} [integrationModelProperties.version] - integration version number.\n * @property {Object} [integrationModelProperties.editorObject] - object containing\n * the integration editor instance.\n * @property {boolean} [integrationModelProperties.rtl] - true if the editor is in RTL mode.\n * false otherwise.\n * @property {ServiceProviderProperties} [integrationModelProperties.serviceProviderProperties]\n * - The service parameters.\n * @property {Object} [integrationModelProperties.integrationParameters]\n * - Overwritten integration parameters.\n */ class IntegrationModel {\n /**\n * @classdesc\n * This class represents an integration model, allowing the integration script to\n * communicate with Core class. Each integration must extend this class.\n * @constructs\n * @param {IntegrationModelProperties} integrationModelProperties\n */ constructor(integrationModelProperties){\n /**\n * Language. Needed for accessibility and locales. English by default.\n */ this.language = \"en\";\n /**\n * Service parameters\n * @type {ServiceProviderProperties}\n */ this.serviceProviderProperties = integrationModelProperties.serviceProviderProperties ?? {};\n /**\n * Configuration service path. The integration service is needed by Core class to\n * load all the backend configuration into the frontend and also to create the paths\n * of all services (all services lives in the same route). Mandatory property.\n */ this.configurationService = \"\";\n if (\"configurationService\" in integrationModelProperties) {\n this.serviceProviderProperties.URI = integrationModelProperties.configurationService;\n console.warn(\"Deprecated property configurationService. Use serviceParameters on instead.\", [\n integrationModelProperties.configurationService\n ]);\n }\n /**\n * Plugin version. Needed to stats and caching.\n * @type {string}\n */ this.version = \"version\" in integrationModelProperties ? integrationModelProperties.version : \"\";\n /**\n * DOM target in which the plugin works. Needed to associate events, insert formulas, etc.\n * Mandatory property.\n */ this.target = null;\n if (\"target\" in integrationModelProperties) {\n this.target = integrationModelProperties.target;\n } else {\n throw new Error(\"IntegrationModel constructor error: target property missed.\");\n }\n /**\n * Integration script name. Needed to know the plugin path.\n */ if (\"scriptName\" in integrationModelProperties) {\n this.scriptName = integrationModelProperties.scriptName;\n }\n /**\n * Object containing the arguments needed by the callback function.\n */ this.callbackMethodArguments = integrationModelProperties.callbackMethodArguments ?? {};\n /**\n * Contains information about the integration environment:\n * like the name of the editor, the version, etc.\n */ this.environment = integrationModelProperties.environment ?? {};\n /**\n * Indicates if the DOM target is - or not - and iframe.\n */ this.isIframe = false;\n if (this.target != null) {\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n /**\n * Instance of the integration editor object. Usually the entry point to access the API\n * of a HTML editor.\n */ this.editorObject = integrationModelProperties.editorObject ?? null;\n /**\n * Specifies if the direction of the text is RTL. false by default.\n */ this.rtl = integrationModelProperties.rtl ?? false;\n /**\n * Specifies if the integration model exposes the locale strings. false by default.\n */ this.managesLanguage = integrationModelProperties.managesLanguage ?? false;\n /**\n * Specify if editor will open in hand mode only\n */ this.forcedHandMode = integrationModelProperties?.integrationParameters?.forcedHandMode ?? false;\n /**\n * Indicates if an image is selected. Needed to resize the image to the original size in case\n * the image is resized.\n * @type {boolean}\n */ this.temporalImageResizing = false;\n /**\n * The Core class instance associated to the integration model.\n * @type {Core}\n */ this.core = null;\n /**\n * Integration model listeners.\n * @type {Listeners}\n */ this.listeners = new Listeners();\n // Parameters overwrite.\n if (\"integrationParameters\" in integrationModelProperties) {\n IntegrationModel.integrationParameters.forEach((parameter)=>{\n if (parameter in integrationModelProperties.integrationParameters) {\n // Don't add empty parameters.\n const value = integrationModelProperties.integrationParameters[parameter];\n if (Object.keys(value).length !== 0) {\n this[parameter] = value;\n }\n }\n });\n }\n }\n /**\n * Init function. Usually called from the integration side once the core.js file is loaded.\n */ init() {\n // Check if language is an object and select the property necessary\n this.language = this.getLanguage();\n // We need to wait until Core class is loaded ('onLoad' event) before\n // call the callback method.\n const listener = Listeners.newListener(\"onLoad\", ()=>{\n this.callbackFunction(this.callbackMethodArguments);\n });\n // Backwards compatibility.\n if (this.serviceProviderProperties.URI.indexOf(\"configuration\") !== -1) {\n const uri = this.serviceProviderProperties.URI;\n const server = ServiceProvider.getServerLanguageFromService(uri);\n this.serviceProviderProperties.server = server;\n const configurationIndex = this.serviceProviderProperties.URI.indexOf(\"configuration\");\n const subsTring = this.serviceProviderProperties.URI.substring(0, configurationIndex);\n this.serviceProviderProperties.URI = subsTring;\n }\n let serviceParametersURI = this.serviceProviderProperties.URI;\n serviceParametersURI = serviceParametersURI.indexOf(\"/\") === 0 || serviceParametersURI.indexOf(\"http\") === 0 ? serviceParametersURI : Util.concatenateUrl(this.getPath(), serviceParametersURI);\n this.serviceProviderProperties.URI = serviceParametersURI;\n const coreProperties = {};\n coreProperties.serviceProviderProperties = this.serviceProviderProperties;\n this.setCore(new Core(coreProperties));\n this.core.addListener(listener);\n this.core.language = this.language;\n // Initializing Core class.\n this.core.init();\n // TODO: Move to Core constructor.\n this.core.setEnvironment(this.environment);\n // No internet connection modal.\n let attributes = {};\n attributes.class = attributes.id = \"wrs_modal_offline\";\n this.offlineModal = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_content_offline\";\n this.offlineModalContent = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_offline_close\";\n this.offlineModalClose = Util.createElement(\"span\", attributes);\n this.offlineModalClose.innerHTML = \"×\";\n attributes = {};\n attributes.class = \"wrs_modal_offline_warn\";\n this.offlineModalWarn = Util.createElement(\"span\", attributes);\n let generalStyle = `background-image: url(data:image/svg+xml;base64,${window.btoa(warnIcon)})`;\n this.offlineModalWarn.setAttribute(\"style\", generalStyle);\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_container\";\n this.offlineModalMessage = Util.createElement(\"div\", attributes);\n attributes = {};\n attributes.class = \"wrs_modal_offline_text_warn\";\n this.offlineModalMessage1 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage1.innerHTML = \"You are not online!\";\n attributes = {};\n attributes.class = \"wrs_modal_offline_text\";\n this.offlineModalMessage2 = Util.createElement(\"p\", attributes);\n this.offlineModalMessage2.innerHTML = `Thank you for using MathType. We have detected you are disconnected from the network. We remind you that you'll need to be connected to use MathType.

Please refresh the page if this message continues appearing.`;\n //Append offline modal elements\n this.offlineModalContent.appendChild(this.offlineModalClose);\n this.offlineModalMessage.appendChild(this.offlineModalMessage1);\n this.offlineModalMessage.appendChild(this.offlineModalMessage2);\n this.offlineModalContent.appendChild(this.offlineModalMessage);\n this.offlineModalContent.appendChild(this.offlineModalWarn);\n this.offlineModal.appendChild(this.offlineModalContent);\n document.body.appendChild(this.offlineModal);\n let modal = document.getElementById(\"wrs_modal_offline\");\n this.offlineModalClose.addEventListener(\"click\", function() {\n modal.style.display = \"none\";\n });\n // Store editor name for telemetry purposes.\n let editorName = this.environment.editor;\n editorName = editorName.slice(0, -1); // Remove version number from editors\n if (editorName.includes(\"TinyMCE\")) editorName = \"TinyMCE\"; // Remove version from Tinymce editor.\n if (editorName.includes(\"Generic\")) editorName = \"Generic\"; // Remove version from Generic editor.\n let solutionTelemeter = editorName;\n // If moodle, add information to hosts and solution.\n let isMoodle = !!(typeof M === \"object\" && M !== null), lms;\n if (isMoodle) {\n solutionTelemeter = \"Moodle\";\n lms = {\n nam: \"moodle\",\n fam: \"lms\",\n ver: this.environment.moodleVersion,\n category: this.environment.moodleCourseCategory,\n course: this.environment.moodleCourseName\n };\n if (!editorName.includes(\"TinyMCE\")) {\n editorName = \"Atto\";\n }\n }\n // Get the OS and its version.\n let OSData = this.getOS();\n // Get the broswer and its version.\n let broswerData = this.getBrowser();\n // Create list of hosts to send to telemetry.\n let hosts = [\n {\n nam: broswerData.detectedBrowser,\n fam: \"browser\",\n ver: broswerData.versionBrowser\n },\n {\n nam: editorName.toLowerCase(),\n fam: \"html-editor\",\n ver: this.environment.editorVersion\n },\n {\n nam: OSData.detectedOS,\n fam: \"os\",\n ver: OSData.versionOS\n },\n {\n nam: window.location.hostname,\n fam: \"domain\"\n },\n lms\n ];\n // Filter hosts to remove empty objects and empty keys.\n hosts = hosts.filter(function(element) {\n if (element) Object.keys(element).forEach((key)=>element[key] === \"unknown\" ? delete element[key] : {});\n return element !== undefined;\n });\n // Initialize telemeter\n Telemeter.init({\n solution: {\n name: \"MathType for \" + solutionTelemeter,\n version: this.version\n },\n hosts: hosts,\n config: {\n test: false,\n debug: false,\n dry_run: false,\n api_key: \"eda2ce9b-0e8a-46f2-acdd-c228a615314e\"\n },\n url: undefined\n });\n }\n /**\n * Returns the Browser name and its version.\n * @return {array} - detectedBrowser = Operating System name.\n * versionBrowser = Operating System version.\n */ getBrowser() {\n // default value for OS just in case nothing is detected\n let detectedBrowser = \"unknown\", versionBrowser = \"unknown\";\n let userAgent = window.navigator.userAgent;\n if (/Brave/.test(userAgent)) {\n detectedBrowser = \"brave\";\n if (userAgent.indexOf(\"Brave/\")) {\n let start = userAgent.indexOf(\"Brave\") + 6;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n }\n } else if (userAgent.indexOf(\"Edg/\") !== -1) {\n detectedBrowser = \"edge_chromium\";\n let start = userAgent.indexOf(\"Edg/\") + 4;\n versionBrowser = userAgent.substring(start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Edg/.test(userAgent)) {\n detectedBrowser = \"edge\";\n let start = userAgent.indexOf(\"Edg\") + 3;\n start = start + userAgent.substring(start).indexOf(\"/\");\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Firefox/.test(userAgent) || /FxiOS/.test(userAgent)) {\n detectedBrowser = \"firefox\";\n let start = userAgent.indexOf(\"Firefox\");\n start = start === -1 ? userAgent.indexOf(\"FxiOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/OPR/.test(userAgent)) {\n detectedBrowser = \"opera\";\n let start = userAgent.indexOf(\"OPR/\") + 4;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Chrome/.test(userAgent) || /CriOS/.test(userAgent)) {\n detectedBrowser = \"chrome\";\n let start = userAgent.indexOf(\"Chrome\");\n start = start === -1 ? userAgent.indexOf(\"CriOS\") : start;\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n } else if (/Safari/.test(userAgent)) {\n detectedBrowser = \"safari\";\n let start = userAgent.indexOf(\"Version/\");\n start = start + userAgent.substring(start).indexOf(\"/\") + 1;\n let end = userAgent.substring(start).indexOf(\" \");\n end = end === -1 ? userAgent.lastIndexOf(\"\") : end;\n versionBrowser = userAgent.substring(start, end + start).replace(\"_\", \".\");\n }\n return {\n detectedBrowser,\n versionBrowser\n };\n }\n /**\n * Returns the operating system and its version.\n * @return {array} - detectedOS = Operating System name.\n * versionOS = Operating System version.\n */ getOS() {\n // default value for OS just in case nothing is detected\n let detectedOS = \"unknown\", versionOS = \"unknown\";\n // Retrieve properties to easily detect the OS\n let userAgent = window.navigator.userAgent, platform = window.navigator.platform, macosPlatforms = [\n \"Macintosh\",\n \"MacIntel\",\n \"MacPPC\",\n \"Mac68K\"\n ], windowsPlatforms = [\n \"Win32\",\n \"Win64\",\n \"Windows\",\n \"WinCE\"\n ], iosPlatforms = [\n \"iPhone\",\n \"iPad\",\n \"iPod\"\n ];\n // Find OS and their respective versions\n if (macosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"macos\";\n if (userAgent.indexOf(\"OS X\") !== -1) {\n let start = userAgent.indexOf(\"OS X\") + 5;\n let end = userAgent.substring(start).indexOf(\" \");\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n }\n } else if (iosPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"ios\";\n if (userAgent.indexOf(\"OS \") !== -1) {\n let start = userAgent.indexOf(\"OS \") + 3;\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n }\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\n detectedOS = \"windows\";\n let start = userAgent.indexOf(\"Windows\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/Android/.test(userAgent)) {\n detectedOS = \"android\";\n let start = userAgent.indexOf(\"Android\");\n let end = userAgent.substring(start).indexOf(\";\");\n if (end === -1) {\n end = userAgent.substring(start).indexOf(\")\");\n }\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (/CrOS/.test(userAgent)) {\n detectedOS = \"chromeos\";\n let start = userAgent.indexOf(\"CrOS \") + 5;\n start = start + userAgent.substring(start).indexOf(\" \");\n let end = userAgent.substring(start).indexOf(\")\");\n versionOS = userAgent.substring(start, end + start).replace(\"_\", \".\").replace(/[^\\d.-]/g, \"\");\n } else if (detectedOS === \"unknown\" && /Linux/.test(platform)) {\n detectedOS = \"linux\";\n }\n return {\n detectedOS,\n versionOS\n };\n }\n /**\n * Returns the absolute path of the integration script.\n * @return {string} - Absolute path for the integration script.\n */ getPath() {\n if (typeof this.scriptName === \"undefined\") {\n throw new Error(\"scriptName property needed for getPath.\");\n }\n const col = document.getElementsByTagName(\"script\");\n let path = \"\";\n for(let i = 0; i < col.length; i += 1){\n const j = col[i].src.lastIndexOf(this.scriptName);\n if (j >= 0) {\n path = col[i].src.substr(0, j - 1);\n }\n }\n return path;\n }\n /**\n * Returns integration model plugin version\n * @param {string} - Plugin version\n */ getVersion() {\n return this.version;\n }\n /**\n * Sets the language property.\n * @param {string} language - language code.\n */ setLanguage(language) {\n this.language = language;\n }\n /**\n * Sets a Core instance.\n * @param {Core} core - instance of Core class.\n */ setCore(core) {\n this.core = core;\n core.setIntegrationModel(this);\n }\n /**\n * Returns the Core instance.\n * @returns {Core} instance of Core class.\n */ getCore() {\n return this.core;\n }\n /**\n * Sets the object target and updates the iframe property.\n * @param {HTMLElement} target - target object.\n */ setTarget(target) {\n this.target = target;\n this.isIframe = this.target.tagName.toUpperCase() === \"IFRAME\";\n }\n /**\n * Sets the editor object.\n * @param {Object} editorObject - The editor object.\n */ setEditorObject(editorObject) {\n this.editorObject = editorObject;\n }\n /**\n * Opens formula editor to editing a new formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */ openNewFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.dbclick = false;\n this.core.editionProperties.isNewElement = true;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n /**\n * Opens formula editor to editing an existing formula. Can be overwritten in order to make some\n * actions from integration part before the formula is edited.\n */ openExistingFormulaEditor() {\n if (window.navigator.onLine) {\n this.core.editionProperties.isNewElement = false;\n this.core.openModalDialog(this.target, this.isIframe);\n } else {\n let modal = document.getElementById(\"wrs_modal_offline\");\n modal.style.display = \"block\";\n }\n }\n /**\n * Wrapper to Core.updateFormula method.\n * Transform a MathML into a image formula.\n * Then the image formula is inserted in the specified target, creating a new image (new formula)\n * or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n */ updateFormula(mathml) {\n if (this.editorParameters) {\n mathml = com.wiris.editor.util.EditorUtils.addAnnotation(mathml, \"application/vnd.wiris.mtweb-params+json\", JSON.stringify(this.editorParameters));\n }\n let focusElement;\n let windowTarget;\n const wirisProperties = null;\n if (this.isIframe) {\n focusElement = this.target.contentWindow;\n windowTarget = this.target.contentWindow;\n } else {\n focusElement = this.target;\n windowTarget = window;\n }\n let obj = this.core.beforeUpdateFormula(mathml, wirisProperties);\n if (!obj) {\n return \"\";\n }\n obj = this.insertFormula(focusElement, windowTarget, obj.mathml, obj.wirisProperties);\n if (!obj) {\n return \"\";\n }\n return this.core.afterUpdateFormula(obj.focusElement, obj.windowTarget, obj.node, obj.latex);\n }\n /**\n * Wrapper to Core.insertFormula method.\n * Inserts the formula in the specified target, creating\n * a new image (new formula) or updating an existing one.\n * @param {string} mathml - MathML to generate the formula.\n * @param {string} editMode - Edit Mode (LaTeX or images).\n * @returns {ReturnObject} - Object with the information of the node or latex to insert.\n */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n const obj = this.core.insertFormula(focusElement, windowTarget, mathml, wirisProperties);\n // Delete temporal image when inserted\n this.core.editionProperties.temporalImage = null;\n return obj;\n }\n /**\n * Returns the target selection.\n * @returns {Selection} target selection.\n */ getSelection() {\n if (this.isIframe) {\n this.target.contentWindow.focus();\n return this.target.contentWindow.getSelection();\n }\n this.target.focus();\n return window.getSelection();\n }\n /**\n * Add events to formulas in the DOM target. The events added are the following:\n * - doubleClickHandler: handles Double-click event on formulas by opening an editor\n * to edit them.\n * - mouseDownHandler: handles mouse down event on formulas by saving the size of the formula\n * in case the the formula is resized.\n * - mouseUpHandler: handles mouse up event on formulas by restoring the saved formula size\n * in case the formula is resized.\n */ addEvents() {\n const eventTarget = this.isIframe ? this.target.contentWindow.document : this.target;\n Util.addElementEvents(eventTarget, (element, event)=>{\n this.doubleClickHandler(element, event);\n // Avoid creating the double click listener more than once for each element.\n event.stopImmediatePropagation();\n }, (element, event)=>{\n this.mousedownHandler(element, event);\n }, (element, event)=>{\n this.mouseupHandler(element, event);\n });\n }\n /**\n * Remove events to formulas in the DOM target.\n */ removeEvents() {\n const eventTarget = this.isIframe && this.target.contentWindow?.document ? this.target.contentWindow.document : this.target;\n if (!eventTarget) {\n return;\n }\n Util.removeElementEvents(eventTarget);\n }\n /**\n * Remove events, modals and set this.editorObject to null in order to prevent memory leaks.\n */ destroy() {\n this.removeEvents();\n // Destroy modal dialog if exists.\n if (this.core.modalDialog) {\n this.core.modalDialog.destroy();\n }\n // Remove offline modal dialog if exists.\n if (this.offlineModal) {\n this.offlineModal.remove();\n }\n this.editorObject = null;\n }\n /**\n * Handles a Double-click on the target element. Opens an editor\n * to re-edit the double-clicked formula.\n * @param {HTMLElement} element - DOM object target.\n */ doubleClickHandler(element) {\n this.core.editionProperties.dbclick = true;\n if (element.nodeName.toLowerCase() === \"img\") {\n this.core.getCustomEditors().disable();\n const customEditorAttributeName = Configuration.get(\"imageCustomEditorName\");\n if (element.hasAttribute(customEditorAttributeName)) {\n const customEditor = element.getAttribute(customEditorAttributeName);\n this.core.getCustomEditors().enable(customEditor);\n }\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.core.editionProperties.temporalImage = element;\n this.core.editionProperties.isNewElement = true;\n this.openExistingFormulaEditor();\n }\n }\n }\n /**\n * Handles a mouse up event on the target element. Restores the image size to avoid\n * resizing formulas.\n */ mouseupHandler() {\n if (this.temporalImageResizing) {\n setTimeout(()=>{\n Image.fixAfterResize(this.temporalImageResizing);\n }, 10);\n }\n }\n /**\n * Handles a mouse down event on the target element. Saves the formula size to avoid\n * resizing formulas.\n * @param {HTMLElement} element - target element.\n */ mousedownHandler(element) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n this.temporalImageResizing = element;\n }\n }\n }\n /**\n * Returns the integration language. By default the browser agent. This method\n * should be overwritten to obtain the integration language, for example using the\n * plugin API of an HTML editor.\n * @returns {string} integration language.\n */ getLanguage() {\n return this.getBrowserLanguage();\n }\n /**\n * Returns the browser language.\n * @returns {string} the browser language.\n */ // eslint-disable-next-line class-methods-use-this\n getBrowserLanguage() {\n let language = \"en\";\n if (navigator.userLanguage) {\n language = navigator.userLanguage.substring(0, 2);\n } else if (navigator.language) {\n language = navigator.language.substring(0, 2);\n } else {\n language = \"en\";\n }\n return language;\n }\n /**\n * This function is called once the {@link Core} is loaded. IntegrationModel class\n * will fire this method when {@link Core} 'onLoad' event is fired.\n * This method should content all the logic to init\n * the integration.\n */ callbackFunction() {\n // It's needed to wait until the integration target is ready. The event is fired\n // from the integration side.\n const listener = Listeners.newListener(\"onTargetReady\", ()=>{\n this.addEvents(this.target);\n });\n this.listeners.add(listener);\n }\n /**\n * Function called when the content submits an action.\n */ // eslint-disable-next-line class-methods-use-this\n notifyWindowClosed() {\n // Nothing.\n }\n /**\n * Wrapper.\n * Extracts mathml of a determined text node. This function is used as a wrapper inside core.js\n * in order to get mathml from a text node that can contain normal LaTeX or other chosen text.\n * @param {string} textNode - text node to extract the MathML.\n * @param {int} caretPosition - caret position inside the text node.\n * @returns {string} MathML inside the text node.\n */ // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getMathmlFromTextNode(textNode, caretPosition) {}\n /**\n * Wrapper\n * It fills wrs event object of nonLatex with the desired data.\n * @param {Object} event - event object.\n * @param {Object} window dom window object.\n * @param {string} mathml valid mathml.\n */ // eslint-disable-next-line class-methods-use-this, no-unused-vars\n fillNonLatexNode(event, window1, mathml) {}\n /**\n Wrapper.\n * Returns selected item from the target.\n * @param {HTMLElement} target - target element\n * @param {boolean} iframe\n */ // eslint-disable-next-line class-methods-use-this, no-unused-vars\n getSelectedItem(target, isIframe) {}\n // Set temporal image to null and make focus come back.\n static setActionsOnCancelButtons() {\n // Make focus come back on the previous place it was when click cancel button\n const currentInstance = WirisPlugin.currentInstance;\n const editorSelection = currentInstance.getSelection();\n editorSelection.removeAllRanges();\n if (currentInstance.core.editionProperties.range) {\n const { range } = currentInstance.core.editionProperties;\n currentInstance.core.editionProperties.range = null;\n editorSelection.addRange(range);\n if (range.startOffset !== range.endOffset) {\n currentInstance.core.placeCaretAfterNode(currentInstance.core.editionProperties.temporalImage);\n }\n }\n // eslint-disable-next-line no-undef\n if (WirisPlugin.currentInstance) {\n WirisPlugin.currentInstance.core.editionProperties.temporalImage = null; // eslint-disable-line\n }\n }\n}\n// To know if the integration that extends this class implements\n// wrapper methods, they are set as undefined.\nIntegrationModel.prototype.getMathmlFromTextNode = undefined;\nIntegrationModel.prototype.fillNonLatexNode = undefined;\nIntegrationModel.prototype.getSelectedItem = undefined;\n/**\n * An object containing a list with the overwritable class constructor properties.\n * @type {Object}\n */ IntegrationModel.integrationParameters = [\n \"serviceProviderProperties\",\n \"editorParameters\"\n];\n\n/**\n * This class represents the MathType integration for CKEditor5.\n * @extends {IntegrationModel}\n */ class CKEditor5Integration extends IntegrationModel {\n constructor(ckeditorIntegrationModelProperties){\n const editor = ckeditorIntegrationModelProperties.editorObject;\n if (typeof editor.config !== \"undefined\" && typeof editor.config.get(\"mathTypeParameters\") !== \"undefined\") {\n ckeditorIntegrationModelProperties.integrationParameters = editor.config.get(\"mathTypeParameters\");\n }\n /**\n * CKEditor5 Integration.\n *\n * @param {integrationModelProperties} integrationModelAttributes\n */ super(ckeditorIntegrationModelProperties);\n /**\n * Folder name used for the integration inside CKEditor plugins folder.\n */ this.integrationFolderName = \"ckeditor_wiris\";\n }\n /**\n * @inheritdoc\n * @returns {string} - The CKEditor instance language.\n * @override\n */ getLanguage() {\n // Returns the CKEDitor instance language taking into account that the language can be an object.\n // Try to get editorParameters.language, fail silently otherwise\n try {\n return this.editorParameters.language;\n } catch (e) {}\n const languageObject = this.editorObject.config.get(\"language\");\n if (languageObject != null) {\n if (typeof languageObject === \"object\") {\n // eslint-disable-next-line no-prototype-builtins\n if (languageObject.hasOwnProperty(\"ui\")) {\n return languageObject.ui;\n }\n return languageObject;\n }\n return languageObject;\n }\n return super.getLanguage();\n }\n /**\n * Adds callbacks to the following CKEditor listeners:\n * - 'focus' - updates the current instance.\n * - 'contentDom' - adds 'doubleclick' callback.\n * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas.\n * - 'setData' - parses the data converting MathML into images.\n * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications.\n * - 'getData' - parses the data converting images into selected save mode (MathML by default).\n * - 'mode' - recalculates the active element.\n */ addEditorListeners() {\n const editor = this.editorObject;\n if (typeof editor.config.wirislistenersdisabled === \"undefined\" || !editor.config.wirislistenersdisabled) {\n this.checkElement();\n }\n }\n /**\n * Checks the current container and assign events in case that it doesn't have them.\n * CKEditor replaces several times the element element during its execution,\n * so we must assign the events again to editor element.\n */ checkElement() {\n const editor = this.editorObject;\n const newElement = editor.sourceElement;\n // If the element wasn't treated, add the events.\n if (!newElement.wirisActive) {\n this.setTarget(newElement);\n this.addEvents();\n // Set the element as treated\n newElement.wirisActive = true;\n }\n }\n /**\n * @inheritdoc\n * @param {HTMLElement} element - HTMLElement target.\n * @param {MouseEvent} event - event which trigger the handler.\n */ doubleClickHandler(element, event) {\n this.core.editionProperties.dbclick = true;\n if (this.editorObject.isReadOnly === false) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n // Some plugins (image2, image) open a dialog on Double-click. On formulas\n // doubleclick event ends here.\n if (typeof event.stopPropagation !== \"undefined\") {\n // old I.E compatibility.\n event.stopPropagation();\n } else {\n event.returnValue = false;\n }\n this.core.getCustomEditors().disable();\n const customEditorAttr = element.getAttribute(Configuration.get(\"imageCustomEditorName\"));\n if (customEditorAttr) {\n this.core.getCustomEditors().enable(customEditorAttr);\n }\n this.core.editionProperties.temporalImage = element;\n this.openExistingFormulaEditor();\n }\n }\n }\n }\n /** @inheritdoc */ static getCorePath() {\n return null; // TODO\n }\n /** @inheritdoc */ callbackFunction() {\n super.callbackFunction();\n this.addEditorListeners();\n }\n openNewFormulaEditor() {\n // Store the editor selection as it will be lost upon opening the modal\n this.core.editionProperties.selection = this.editorObject.editing.view.document.selection;\n // Focus on the selected editor when multiple editor instances are present\n WirisPlugin.currentInstance = this;\n return super.openNewFormulaEditor();\n }\n /**\n * Replaces old formula with new MathML or inserts it in caret position if new\n * @param {String} mathml MathML to update old one or insert\n * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image\n */ insertMathml(mathml) {\n // This returns the value returned by the callback function (writer => {...})\n return this.editorObject.model.change((writer)=>{\n const core = this.getCore();\n const selection = this.editorObject.model.document.selection;\n const modelElementNew = writer.createElement(\"mathml\", {\n formula: mathml,\n ...Object.fromEntries(selection.getAttributes())\n });\n // Obtain the DOM object corresponding to the formula\n if (core.editionProperties.isNewElement) {\n // Don't bother inserting anything at all if the MathML is empty.\n if (!mathml) return;\n const viewSelection = this.core.editionProperties.selection || this.editorObject.editing.view.document.selection;\n const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition());\n this.editorObject.model.insertObject(modelElementNew, modelPosition);\n // Remove selection\n if (!viewSelection.isCollapsed) {\n for (const range of viewSelection.getRanges()){\n writer.remove(this.editorObject.editing.mapper.toModelRange(range));\n }\n }\n // Set carret after the formula\n const position = this.editorObject.model.createPositionAfter(modelElementNew);\n writer.setSelection(position);\n } else {\n const img = core.editionProperties.temporalImage;\n const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent;\n const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement);\n // Insert the new and remove the old one\n const position = this.editorObject.model.createPositionBefore(modelElementOld);\n // If the given MathML is empty, don't insert a new formula.\n if (mathml) {\n this.editorObject.model.insertObject(modelElementNew, position);\n }\n writer.remove(modelElementOld);\n }\n // eslint-disable-next-line consistent-return\n return modelElementNew;\n });\n }\n /**\n * Finds the text node corresponding to given DOM text element.\n * @param {element} viewElement Element to find corresponding text node of.\n * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist.\n */ findText(viewElement) {\n // eslint-disable-line consistent-return\n // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down\n let pivot = viewElement;\n let element;\n while(!element){\n element = this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(pivot));\n pivot = pivot.parentElement;\n }\n // Navigate through all the subtree under `pivot` in order to find the correct text node\n const range = this.editorObject.model.createRangeIn(element);\n const descendants = Array.from(range.getItems());\n for (const node of descendants){\n let viewElementData = viewElement.data;\n if (viewElement.nodeType === 3) {\n // Remove invisible white spaces\n viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), \"\");\n }\n if (node.is(\"textProxy\") && node.data === viewElementData.replace(String.fromCharCode(160), \" \")) {\n return node.textNode;\n }\n }\n }\n /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n // eslint-disable-line no-unused-vars\n const returnObject = {};\n let mathmlOrigin;\n if (!mathml) {\n this.insertMathml(\"\");\n } else if (this.core.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n this.editorObject.model.change((writer)=>{\n const { latexRange } = this.core.editionProperties;\n const startNode = this.findText(latexRange.startContainer);\n const endNode = this.findText(latexRange.endContainer);\n let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset);\n let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset);\n let range = writer.createRange(startPosition, endPosition);\n // When Latex is next to image/formula.\n if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) {\n // Get the position of the latex to be replaced.\n let latexEdited = \"$$\" + Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + \"$$\";\n let data = latexRange.startContainer.data;\n // Remove invisible characters.\n data = data.replaceAll(String.fromCharCode(8288), \"\");\n // Get to the start of the latex we are editing.\n let offset = data.indexOf(latexEdited);\n let dataOffset = data.substring(offset);\n let second$ = dataOffset.substring(2).indexOf(\"$$\") + 4;\n let substring = dataOffset.substr(0, second$);\n data = data.replace(substring, \"\");\n if (!data) {\n startPosition = writer.createPositionBefore(startNode);\n range = startNode;\n } else {\n startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset);\n endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset);\n range = writer.createRange(startPosition, endPosition);\n }\n }\n writer.remove(range);\n writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition);\n });\n } else {\n mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml;\n try {\n returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), windowTarget.document);\n } catch (e) {\n const x = e.toString();\n if (x.includes(\"CKEditorError: Cannot read property 'parent' of undefined\")) {\n this.core.modalDialog.cancelAction();\n }\n }\n }\n // Build the telemeter payload separated to delete null/undefined entries.\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.core.editionProperties.editionStartTime,\n editor_origin: null,\n toolbar: this.core.modalDialog.contentManager.toolbar,\n size: mathml?.length\n };\n // Remove desired null keys.\n Object.keys(payload).forEach((key)=>{\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula.\n We probably should add it here as well, but we should look further into how */ // this.editorObject.fire('change');\n // Remove temporal image of inserted formula\n this.core.editionProperties.temporalImage = null;\n return returnObject;\n }\n /**\n * Function called when the content submits an action.\n */ notifyWindowClosed() {\n this.editorObject.editing.view.focus();\n }\n}\n\n/**\n * Command for opening the MathType editor\n */ class MathTypeCommand extends Command {\n execute(options = {}) {\n // Check we get a valid integration\n // eslint-disable-next-line no-prototype-builtins\n if (!options.hasOwnProperty(\"integration\") || !(options.integration instanceof CKEditor5Integration)) {\n throw 'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options';\n }\n // Save the integration instance as a property of the command.\n this.integration = options.integration;\n // Set custom editor or disable it\n this.setEditor();\n // Open the editor\n this.openEditor();\n }\n /**\n * Sets the appropriate custom editor, if any, or disables them.\n */ setEditor() {\n // It's possible that a custom editor was last used.\n // We need to disable it to avoid wrong behaviors.\n this.integration.core.getCustomEditors().disable();\n }\n /**\n * Checks whether we are editing an existing formula or a new one and opens the editor.\n */ openEditor() {\n this.integration.core.editionProperties.dbclick = false;\n const image = this._getSelectedImage();\n if (typeof image !== \"undefined\" && image !== null && image.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))) {\n this.integration.core.editionProperties.temporalImage = image;\n this.integration.openExistingFormulaEditor();\n } else {\n this.integration.openNewFormulaEditor();\n }\n }\n /**\n * Gets the currently selected formula image\n * @returns {Element} selected image, if any, undefined otherwise\n */ _getSelectedImage() {\n const { selection } = this.editor.editing.view.document;\n // If we can not extract the formula, fall back to default behavior.\n if (selection.isCollapsed || selection.rangeCount !== 1) {\n return;\n }\n // Look for the wrapping the formula and then for the inside\n const range = selection.getFirstRange();\n let image;\n for (const span of range){\n if (span.item.name !== \"span\") {\n return;\n }\n image = span.item.getChild(0);\n break;\n }\n if (!image) {\n return;\n }\n // eslint-disable-next-line consistent-return\n return this.editor.editing.view.domConverter.mapViewToDom(image);\n }\n}\n/**\n * Command for opening the ChemType editor\n */ class ChemTypeCommand extends MathTypeCommand {\n setEditor() {\n this.integration.core.getCustomEditors().enable(\"chemistry\");\n }\n}\n\nvar mathIcon = \"\\n\\n\\n\\n\\n\\n\\n\\t\\n\\t\\t\\n\\t\\n\\n\\n\\t\\n\\t\\t\\n\\t\\n\\n\\n\";\n\nvar chemIcon = \"\\n\\n\\n\\n\\n\\n\";\n\nvar name = \"@wiris/mathtype-ckeditor5\";\nvar version = \"8.10.0\";\nvar description = \"MathType Web for CKEditor5 editor\";\nvar keywords = [\n\t\"chem\",\n\t\"chemistry\",\n\t\"chemtype\",\n\t\"ckeditor\",\n\t\"ckeditor5\",\n\t\"editor\",\n\t\"equation\",\n\t\"latex\",\n\t\"math\",\n\t\"mathml\",\n\t\"maths\",\n\t\"mathtype\",\n\t\"wiris\"\n];\nvar repository = \"https://github.com/wiris/html-integrations/tree/stable/packages/mathtype-ckeditor5\";\nvar homepage = \"https://www.wiris.com/\";\nvar bugs = {\n\temail: \"support@wiris.com\"\n};\nvar license = \"MIT\";\nvar author = \"WIRIS Team (http://www.wiris.com)\";\nvar files = [\n\t\"dist\",\n\t\"src\",\n\t\"icons\",\n\t\"theme\",\n\t\"lang\"\n];\nvar main = \"src/plugin.js\";\nvar type = \"module\";\nvar exports = {\n\t\".\": \"./src/plugin.js\",\n\t\"./dist/*\": \"./dist/*\",\n\t\"./browser/*\": null,\n\t\"./src/*\": \"./src/*\",\n\t\"./theme/*\": \"./theme/*\",\n\t\"./package.json\": \"./package.json\"\n};\nvar scripts = {\n\tbuild: \"node ./scripts/build-dist.mjs\",\n\t\"build:dist\": \"node ./scripts/build-dist.mjs\",\n\tprepare: \"npm run build:dist\"\n};\nvar dependencies = {\n\t\"@wiris/mathtype-html-integration-devkit\": \"1.17.3\"\n};\nvar devDependencies = {\n\t\"@ckeditor/ckeditor5-dev-build-tools\": \"^42.0.0\",\n\tckeditor5: \">=43.0.0\"\n};\nvar peerDependencies = {\n\tckeditor5: \">=43.0.0\"\n};\nvar packageInfo = {\n\tname: name,\n\tversion: version,\n\tdescription: description,\n\tkeywords: keywords,\n\trepository: repository,\n\thomepage: homepage,\n\tbugs: bugs,\n\tlicense: license,\n\tauthor: author,\n\tfiles: files,\n\tmain: main,\n\ttype: type,\n\texports: exports,\n\tscripts: scripts,\n\tdependencies: dependencies,\n\tdevDependencies: devDependencies,\n\tpeerDependencies: peerDependencies\n};\n\n// CKEditor imports\nlet currentInstance = null; // eslint-disable-line import/no-mutable-exports\nclass MathType extends Plugin {\n static get requires() {\n return [\n Widget\n ];\n }\n static get pluginName() {\n return \"MathType\";\n }\n init() {\n // Create the MathType API Integration object\n const integration = this._addIntegration();\n currentInstance = integration;\n // Add the MathType and ChemType commands to the editor\n this._addCommands();\n // Add the buttons for MathType and ChemType\n this._addViews(integration);\n // Registers the element in the schema\n this._addSchema();\n // Add the downcast and upcast converters\n this._addConverters(integration);\n // Expose the WirisPlugin variable to the window\n this._exposeWiris();\n }\n /**\n * Inherited from Plugin class: Executed when CKEditor5 is destroyed\n */ destroy() {\n // eslint-disable-line class-methods-use-this\n currentInstance.destroy();\n }\n /**\n * Create the MathType API Integration object\n * @returns {CKEditor5Integration} the integration object\n */ _addIntegration() {\n const { editor } = this;\n /**\n * Integration model constructor attributes.\n * @type {integrationModelProperties}\n */ const integrationProperties = {};\n integrationProperties.environment = {};\n integrationProperties.environment.editor = \"CKEditor5\";\n integrationProperties.environment.editorVersion = \"5.x\";\n integrationProperties.version = packageInfo.version;\n integrationProperties.editorObject = editor;\n integrationProperties.serviceProviderProperties = {};\n integrationProperties.serviceProviderProperties.URI = \"https://www.wiris.net/demo/plugins/app\";\n integrationProperties.serviceProviderProperties.server = \"java\";\n integrationProperties.target = editor.sourceElement;\n integrationProperties.scriptName = \"bundle.js\";\n integrationProperties.managesLanguage = true;\n // etc\n // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element.\n // To avoid a wrong behaviour, this integration only starts if the workspace container exists.\n let integration;\n if (integrationProperties.target) {\n // Instance of the integration associated to this editor instance\n integration = new CKEditor5Integration(integrationProperties);\n integration.init();\n integration.listeners.fire(\"onTargetReady\", {});\n integration.checkElement();\n this.listenTo(editor.editing.view.document, \"click\", (evt, data)=>{\n // Is Double-click\n if (data.domEvent.detail === 2) {\n integration.doubleClickHandler(data.domTarget, data.domEvent);\n evt.stop();\n }\n }, {\n priority: \"highest\"\n });\n }\n return integration;\n }\n /**\n * Add the MathType and ChemType commands to the editor\n */ _addCommands() {\n const { editor } = this;\n // Add command to open the formula editor\n editor.commands.add(\"MathType\", new MathTypeCommand(editor));\n // Add command to open the chemistry formula editor\n editor.commands.add(\"ChemType\", new ChemTypeCommand(editor));\n }\n /**\n * Add the buttons for MathType and ChemType\n * @param {CKEditor5Integration} integration the integration object\n */ _addViews(integration) {\n const { editor } = this;\n // Check if MathType editor is enabled\n if (Configuration.get(\"editorEnabled\")) {\n // Add button for the formula editor\n editor.ui.componentFactory.add(\"MathType\", (locale)=>{\n const view = new ButtonView(locale);\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"MathType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_math\", integration.getLanguage()),\n icon: mathIcon,\n tooltip: true\n });\n // Callback executed once the image is clicked.\n view.on(\"execute\", ()=>{\n editor.execute(\"MathType\", {\n integration\n });\n });\n return view;\n });\n }\n // Check if ChemType editor is enabled\n if (Configuration.get(\"chemEnabled\")) {\n // Add button for the chemistry formula editor\n editor.ui.componentFactory.add(\"ChemType\", (locale)=>{\n const view = new ButtonView(locale);\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"ChemType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_chem\", integration.getLanguage()),\n icon: chemIcon,\n tooltip: true\n });\n // Callback executed once the image is clicked.\n view.on(\"execute\", ()=>{\n editor.execute(\"ChemType\", {\n integration\n });\n });\n return view;\n });\n }\n // Observer for the Double-click event\n editor.editing.view.addObserver(ClickObserver);\n }\n /**\n * Registers the element in the schema\n */ _addSchema() {\n const { schema } = this.editor.model;\n schema.register(\"mathml\", {\n inheritAllFrom: \"$inlineObject\",\n allowAttributes: [\n \"formula\"\n ]\n });\n }\n /**\n * Add the downcast and upcast converters\n */ _addConverters(integration) {\n const { editor } = this;\n // Editing view -> Model\n editor.conversion.for(\"upcast\").elementToElement({\n view: {\n name: \"span\",\n classes: \"ck-math-widget\"\n },\n model: (viewElement, { writer: modelWriter })=>{\n const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute(\"data-mathml\"));\n return modelWriter.createElement(\"mathml\", {\n formula\n });\n }\n });\n // Data view -> Model\n editor.data.upcastDispatcher.on(\"element:math\", (evt, data, conversionApi)=>{\n const { consumable, writer } = conversionApi;\n const { viewItem } = data;\n // When element was already consumed then skip it.\n if (!consumable.test(viewItem, {\n name: true\n })) {\n return;\n }\n // If we encounter any with a LaTeX annotation inside,\n // convert it into a \"$$...$$\" string.\n const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define\n // Get the formula of the (which is all its children).\n const processor = new XmlDataProcessor(editor.editing.view.document);\n // Only god knows why the following line makes viewItem lose all of its children,\n // so we obtain isLatex before doing this because we need viewItem's children for that.\n const upcastWriter = new UpcastWriter(editor.editing.view.document);\n const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren());\n // and obtain the attributes of too!\n const mathAttributes = [\n ...viewItem.getAttributes()\n ].map(([key, value])=>` ${key}=\"${value}\"`).join(\"\");\n // We process the document fragment\n let formula = processor.toData(viewDocumentFragment) || \"\";\n // And obtain the complete formula\n formula = Util.htmlSanitize(`${formula}`);\n // Replaces the < & > characters to its HTMLEntity to avoid render issues.\n formula = formula.replaceAll('\"<\"', '\"<\"').replaceAll('\">\"', '\">\"').replaceAll(\"><<\", \"><<\");\n /* Model node that contains what's going to actually be inserted. This can be either:\n - A element with a formula attribute set to the given formula, or\n - If the original had a LaTeX annotation, then the annotation surrounded by \"$$...$$\" */ const modelNode = isLatex ? writer.createText(Parser.initParse(formula, integration.getLanguage())) : writer.createElement(\"mathml\", {\n formula\n });\n // Find allowed parent for element that we are going to insert.\n // If current parent does not allow to insert element but one of the ancestors does\n // then split nodes to allowed parent.\n const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor);\n // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n if (!splitResult) {\n return;\n }\n // Insert element on allowed position.\n conversionApi.writer.insert(modelNode, splitResult.position);\n // Consume appropriate value from consumable values list.\n consumable.consume(viewItem, {\n name: true\n });\n const parts = conversionApi.getSplitParts(modelNode);\n // Set conversion result range.\n data.modelRange = writer.createRange(conversionApi.writer.createPositionBefore(modelNode), conversionApi.writer.createPositionAfter(parts[parts.length - 1]));\n // Now we need to check where the `modelCursor` should be.\n if (splitResult.cursorParent) {\n // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n //\n // before: foo[]\n // after: foo[]\n data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n } else {\n // Otherwise just continue after inserted element.\n data.modelCursor = data.modelRange.end;\n }\n });\n /**\n * Whether the given view element has a LaTeX annotation element.\n * @param {*} math\n * @returns {bool}\n */ function mathIsLatex(math) {\n const semantics = math.getChild(0);\n if (!semantics || semantics.name !== \"semantics\") return false;\n for (const child of semantics.getChildren()){\n if (child.name === \"annotation\" && child.getAttribute(\"encoding\") === \"LaTeX\") {\n return true;\n }\n }\n return false;\n }\n function createViewWidget(modelItem, { writer: viewWriter }) {\n const widgetElement = viewWriter.createContainerElement(\"span\", {\n class: \"ck-math-widget\"\n });\n const mathUIElement = createViewImage(modelItem, {\n writer: viewWriter\n }); // eslint-disable-line no-use-before-define\n if (mathUIElement) {\n viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement);\n }\n return toWidget(widgetElement, viewWriter);\n }\n function createViewImage(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n const mathString = modelItem.getAttribute(\"formula\").replaceAll('ref=\"<\"', 'ref=\"<\"');\n const imgHtml = Parser.initParse(mathString, integration.getLanguage());\n const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0);\n /* Although we use the HtmlDataProcessor to obtain the attributes,\n we must create a new EmptyElement which is independent of the\n DataProcessor being used by this editor instance */ if (imgElement) {\n return viewWriter.createEmptyElement(\"img\", imgElement.getAttributes(), {\n renderUnsafeAttributes: [\n \"src\"\n ]\n });\n }\n return null;\n }\n // Model -> Editing view\n editor.conversion.for(\"editingDowncast\").elementToElement({\n model: \"mathml\",\n view: createViewWidget\n });\n // Model -> Data view\n editor.conversion.for(\"dataDowncast\").elementToElement({\n model: \"mathml\",\n view: createDataString\n });\n /**\n * Makes a copy of the given view node.\n * @param {module:engine/view/node~Node} sourceNode Node to copy.\n * @returns {module:engine/view/node~Node} Copy of the node.\n */ function clone(viewWriter, sourceNode) {\n if (sourceNode.is(\"text\")) {\n return viewWriter.createText(sourceNode.data);\n }\n if (sourceNode.is(\"element\")) {\n if (sourceNode.is(\"emptyElement\")) {\n return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes());\n }\n const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes());\n for (const child of sourceNode.getChildren()){\n viewWriter.insert(viewWriter.createPositionAt(element, \"end\"), clone(viewWriter, child));\n }\n return element;\n }\n throw new Exception(\"Given node has unsupported type.\"); // eslint-disable-line no-undef\n }\n function createDataString(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n let mathString = Parser.endParseSaveMode(modelItem.getAttribute(\"formula\"));\n const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0);\n return clone(viewWriter, sourceMathElement);\n }\n // This stops the view selection getting into the s and messing up caret movement\n editor.editing.mapper.on(\"viewToModelPosition\", viewToModelPositionOutsideModelElement(editor.model, (viewElement)=>viewElement.hasClass(\"ck-math-widget\")));\n // Keep a reference to the original get and set function.\n editor.data;\n /**\n * Hack to transform $$latex$$ into in editor.getData()'s output.\n */ editor.data.on(\"get\", (e)=>{\n let output = e.return;\n // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any.\n // For text or latex formulas, it returns the original output.\n e.return = MathML.removeSemantics(output, \"application/json\");\n }, {\n priority: \"low\"\n });\n /**\n * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData().\n */ editor.data.on(\"set\", (e, args)=>{\n // Retrieve the data to be set on the CKEditor.\n let modifiedData = args[0];\n // Regex to find all mathml formulas.\n const regexp = //gm;\n // Get all MathML formulas and store them in an array.\n // Using the conditional operator on data.main because the data parameter has different types depending on:\n // editor.data.set can be used directly or by the source editing plugin.\n // With the source editor plugin, data is an object with the key `main` which contains the source code string.\n // When using the editor.data.set method, the data is a string with the content to be set to the editor.\n let formulas = Object.values(modifiedData)[0] ? [\n ...Object.values(modifiedData)[0].matchAll(regexp)\n ] : [\n ...modifiedData.matchAll(regexp)\n ];\n // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation.\n formulas.forEach((formula)=>{\n let mathml = formula[0];\n if (mathml.includes('encoding=\"LaTeX\"')) {\n // LaTeX found.\n let latex = \"$$$\" + Latex.getLatexFromMathML(mathml) + \"$$$\"; // We add $$$ instead of $$ because the replace function ignores one $.\n modifiedData = modifiedData.replace(mathml, latex);\n }\n });\n args[0] = modifiedData;\n }, {\n priority: \"high\"\n });\n }\n /**\n * Expose the WirisPlugin variable to the window\n */ // eslint-disable-next-line class-methods-use-this\n _exposeWiris() {\n window.WirisPlugin = {\n Core,\n Parser,\n Image,\n MathML,\n Util,\n Configuration,\n Listeners,\n IntegrationModel,\n currentInstance,\n Latex\n };\n }\n}\n\nexport { MathType as default };\n//# sourceMappingURL=index.js.map\n"],"names":["Command","exports","Plugin","Widget","ButtonView","ClickObserver","XmlDataProcessor","UpcastWriter","toWidget","HtmlDataProcessor","viewToModelPositionOutsideModelElement"],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5/dist/index.js b/packages/ckeditor5/dist/index.js index e9e24af63..e9a8be931 100644 --- a/packages/ckeditor5/dist/index.js +++ b/packages/ckeditor5/dist/index.js @@ -1,66 +1,61 @@ -import { Command, Plugin } from "@ckeditor/ckeditor5-core/dist/index.js"; -import { ButtonView } from "@ckeditor/ckeditor5-ui/dist/index.js"; -import { - ClickObserver, - XmlDataProcessor, - UpcastWriter, - HtmlDataProcessor, -} from "@ckeditor/ckeditor5-engine/dist/index.js"; -import { Widget, viewToModelPositionOutsideModelElement, toWidget } from "@ckeditor/ckeditor5-widget/dist/index.js"; -import IntegrationModel from "@wiris/mathtype-html-integration-devkit/src/integrationmodel.js"; -import Core from "@wiris/mathtype-html-integration-devkit/src/core.src.js"; -import Parser from "@wiris/mathtype-html-integration-devkit/src/parser.js"; -import Util from "@wiris/mathtype-html-integration-devkit/src/util.js"; -import Image from "@wiris/mathtype-html-integration-devkit/src/image.js"; -import Configuration from "@wiris/mathtype-html-integration-devkit/src/configuration.js"; -import Listeners from "@wiris/mathtype-html-integration-devkit/src/listeners.js"; -import MathML from "@wiris/mathtype-html-integration-devkit/src/mathml.js"; -import Latex from "@wiris/mathtype-html-integration-devkit/src/latex.js"; -import StringManager from "@wiris/mathtype-html-integration-devkit/src/stringmanager.js"; -import Telemeter from "@wiris/mathtype-html-integration-devkit/src/telemeter.js"; +import { Command, Plugin } from '@ckeditor/ckeditor5-core/dist/index.js'; +import { ButtonView } from '@ckeditor/ckeditor5-ui/dist/index.js'; +import { ClickObserver, XmlDataProcessor, UpcastWriter, HtmlDataProcessor } from '@ckeditor/ckeditor5-engine/dist/index.js'; +import { Widget, viewToModelPositionOutsideModelElement, toWidget } from '@ckeditor/ckeditor5-widget/dist/index.js'; +import IntegrationModel from '@wiris/mathtype-html-integration-devkit/src/integrationmodel.js'; +import Core from '@wiris/mathtype-html-integration-devkit/src/core.src.js'; +import Parser from '@wiris/mathtype-html-integration-devkit/src/parser.js'; +import Util from '@wiris/mathtype-html-integration-devkit/src/util.js'; +import Image from '@wiris/mathtype-html-integration-devkit/src/image.js'; +import Configuration from '@wiris/mathtype-html-integration-devkit/src/configuration.js'; +import Listeners from '@wiris/mathtype-html-integration-devkit/src/listeners.js'; +import MathML from '@wiris/mathtype-html-integration-devkit/src/mathml.js'; +import Latex from '@wiris/mathtype-html-integration-devkit/src/latex.js'; +import StringManager from '@wiris/mathtype-html-integration-devkit/src/stringmanager.js'; +import Telemeter from '@wiris/mathtype-html-integration-devkit/src/telemeter.js'; /** * This class represents the MathType integration for CKEditor5. * @extends {IntegrationModel} */ class CKEditor5Integration extends IntegrationModel { - constructor(ckeditorIntegrationModelProperties) { - const editor = ckeditorIntegrationModelProperties.editorObject; - if (typeof editor.config !== "undefined" && typeof editor.config.get("mathTypeParameters") !== "undefined") { - ckeditorIntegrationModelProperties.integrationParameters = editor.config.get("mathTypeParameters"); - } - /** + constructor(ckeditorIntegrationModelProperties){ + const editor = ckeditorIntegrationModelProperties.editorObject; + if (typeof editor.config !== "undefined" && typeof editor.config.get("mathTypeParameters") !== "undefined") { + ckeditorIntegrationModelProperties.integrationParameters = editor.config.get("mathTypeParameters"); + } + /** * CKEditor5 Integration. * * @param {integrationModelProperties} integrationModelAttributes */ super(ckeditorIntegrationModelProperties); - /** + /** * Folder name used for the integration inside CKEditor plugins folder. */ this.integrationFolderName = "ckeditor_wiris"; - } - /** + } + /** * @inheritdoc * @returns {string} - The CKEditor instance language. * @override */ getLanguage() { - // Returns the CKEDitor instance language taking into account that the language can be an object. - // Try to get editorParameters.language, fail silently otherwise - try { - return this.editorParameters.language; - } catch (e) {} - const languageObject = this.editorObject.config.get("language"); - if (languageObject != null) { - if (typeof languageObject === "object") { - // eslint-disable-next-line no-prototype-builtins - if (languageObject.hasOwnProperty("ui")) { - return languageObject.ui; + // Returns the CKEDitor instance language taking into account that the language can be an object. + // Try to get editorParameters.language, fail silently otherwise + try { + return this.editorParameters.language; + } catch (e) {} + const languageObject = this.editorObject.config.get("language"); + if (languageObject != null) { + if (typeof languageObject === "object") { + // eslint-disable-next-line no-prototype-builtins + if (languageObject.hasOwnProperty("ui")) { + return languageObject.ui; + } + return languageObject; + } + return languageObject; } - return languageObject; - } - return languageObject; + return super.getLanguage(); } - return super.getLanguage(); - } - /** + /** * Adds callbacks to the following CKEditor listeners: * - 'focus' - updates the current instance. * - 'contentDom' - adds 'doubleclick' callback. @@ -70,761 +65,740 @@ import Telemeter from "@wiris/mathtype-html-integration-devkit/src/telemeter.js" * - 'getData' - parses the data converting images into selected save mode (MathML by default). * - 'mode' - recalculates the active element. */ addEditorListeners() { - const editor = this.editorObject; - if (typeof editor.config.wirislistenersdisabled === "undefined" || !editor.config.wirislistenersdisabled) { - this.checkElement(); + const editor = this.editorObject; + if (typeof editor.config.wirislistenersdisabled === "undefined" || !editor.config.wirislistenersdisabled) { + this.checkElement(); + } } - } - /** + /** * Checks the current container and assign events in case that it doesn't have them. * CKEditor replaces several times the element element during its execution, * so we must assign the events again to editor element. */ checkElement() { - const editor = this.editorObject; - const newElement = editor.sourceElement; - // If the element wasn't treated, add the events. - if (!newElement.wirisActive) { - this.setTarget(newElement); - this.addEvents(); - // Set the element as treated - newElement.wirisActive = true; + const editor = this.editorObject; + const newElement = editor.sourceElement; + // If the element wasn't treated, add the events. + if (!newElement.wirisActive) { + this.setTarget(newElement); + this.addEvents(); + // Set the element as treated + newElement.wirisActive = true; + } } - } - /** + /** * @inheritdoc * @param {HTMLElement} element - HTMLElement target. * @param {MouseEvent} event - event which trigger the handler. */ doubleClickHandler(element, event) { - this.core.editionProperties.dbclick = true; - if (this.editorObject.isReadOnly === false) { - if (element.nodeName.toLowerCase() === "img") { - if (Util.containsClass(element, Configuration.get("imageClassName"))) { - // Some plugins (image2, image) open a dialog on Double-click. On formulas - // doubleclick event ends here. - if (typeof event.stopPropagation !== "undefined") { - // old I.E compatibility. - event.stopPropagation(); - } else { - event.returnValue = false; - } - this.core.getCustomEditors().disable(); - const customEditorAttr = element.getAttribute(Configuration.get("imageCustomEditorName")); - if (customEditorAttr) { - this.core.getCustomEditors().enable(customEditorAttr); - } - this.core.editionProperties.temporalImage = element; - this.openExistingFormulaEditor(); + this.core.editionProperties.dbclick = true; + if (this.editorObject.isReadOnly === false) { + if (element.nodeName.toLowerCase() === "img") { + if (Util.containsClass(element, Configuration.get("imageClassName"))) { + // Some plugins (image2, image) open a dialog on Double-click. On formulas + // doubleclick event ends here. + if (typeof event.stopPropagation !== "undefined") { + // old I.E compatibility. + event.stopPropagation(); + } else { + event.returnValue = false; + } + this.core.getCustomEditors().disable(); + const customEditorAttr = element.getAttribute(Configuration.get("imageCustomEditorName")); + if (customEditorAttr) { + this.core.getCustomEditors().enable(customEditorAttr); + } + this.core.editionProperties.temporalImage = element; + this.openExistingFormulaEditor(); + } + } } - } } - } - /** @inheritdoc */ static getCorePath() { - return null; // TODO - } - /** @inheritdoc */ callbackFunction() { - super.callbackFunction(); - this.addEditorListeners(); - } - openNewFormulaEditor() { - // Store the editor selection as it will be lost upon opening the modal - this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; - return super.openNewFormulaEditor(); - } - /** + /** @inheritdoc */ static getCorePath() { + return null; // TODO + } + /** @inheritdoc */ callbackFunction() { + super.callbackFunction(); + this.addEditorListeners(); + } + openNewFormulaEditor() { + // Store the editor selection as it will be lost upon opening the modal + this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; + // Focus on the selected editor when multiple editor instances are present + WirisPlugin.currentInstance = this; + return super.openNewFormulaEditor(); + } + /** * Replaces old formula with new MathML or inserts it in caret position if new * @param {String} mathml MathML to update old one or insert * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image */ insertMathml(mathml) { - // This returns the value returned by the callback function (writer => {...}) - return this.editorObject.model.change((writer) => { - const core = this.getCore(); - const selection = this.editorObject.model.document.selection; - const modelElementNew = writer.createElement("mathml", { - formula: mathml, - ...Object.fromEntries(selection.getAttributes()), - }); - // Obtain the DOM object corresponding to the formula - if (core.editionProperties.isNewElement) { - // Don't bother inserting anything at all if the MathML is empty. - if (!mathml) return; - const viewSelection = - this.core.editionProperties.selection || this.editorObject.editing.view.document.selection; - const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition()); - this.editorObject.model.insertObject(modelElementNew, modelPosition); - // Remove selection - if (!viewSelection.isCollapsed) { - for (const range of viewSelection.getRanges()) { - writer.remove(this.editorObject.editing.mapper.toModelRange(range)); - } - } - // Set carret after the formula - const position = this.editorObject.model.createPositionAfter(modelElementNew); - writer.setSelection(position); - } else { - const img = core.editionProperties.temporalImage; - const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent; - const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement); - // Insert the new and remove the old one - const position = this.editorObject.model.createPositionBefore(modelElementOld); - // If the given MathML is empty, don't insert a new formula. - if (mathml) { - this.editorObject.model.insertObject(modelElementNew, position); - } - writer.remove(modelElementOld); - } - // eslint-disable-next-line consistent-return - return modelElementNew; - }); - } - /** + // This returns the value returned by the callback function (writer => {...}) + return this.editorObject.model.change((writer)=>{ + const core = this.getCore(); + const selection = this.editorObject.model.document.selection; + const modelElementNew = writer.createElement("mathml", { + formula: mathml, + ...Object.fromEntries(selection.getAttributes()) + }); + // Obtain the DOM object corresponding to the formula + if (core.editionProperties.isNewElement) { + // Don't bother inserting anything at all if the MathML is empty. + if (!mathml) return; + const viewSelection = this.core.editionProperties.selection || this.editorObject.editing.view.document.selection; + const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition()); + this.editorObject.model.insertObject(modelElementNew, modelPosition); + // Remove selection + if (!viewSelection.isCollapsed) { + for (const range of viewSelection.getRanges()){ + writer.remove(this.editorObject.editing.mapper.toModelRange(range)); + } + } + // Set carret after the formula + const position = this.editorObject.model.createPositionAfter(modelElementNew); + writer.setSelection(position); + } else { + const img = core.editionProperties.temporalImage; + const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent; + const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement); + // Insert the new and remove the old one + const position = this.editorObject.model.createPositionBefore(modelElementOld); + // If the given MathML is empty, don't insert a new formula. + if (mathml) { + this.editorObject.model.insertObject(modelElementNew, position); + } + writer.remove(modelElementOld); + } + // eslint-disable-next-line consistent-return + return modelElementNew; + }); + } + /** * Finds the text node corresponding to given DOM text element. * @param {element} viewElement Element to find corresponding text node of. * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist. */ findText(viewElement) { - // eslint-disable-line consistent-return - // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down - let pivot = viewElement; - let element; - while (!element) { - element = this.editorObject.editing.mapper.toModelElement( - this.editorObject.editing.view.domConverter.domToView(pivot), - ); - pivot = pivot.parentElement; - } - // Navigate through all the subtree under `pivot` in order to find the correct text node - const range = this.editorObject.model.createRangeIn(element); - const descendants = Array.from(range.getItems()); - for (const node of descendants) { - let viewElementData = viewElement.data; - if (viewElement.nodeType === 3) { - // Remove invisible white spaces - viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), ""); - } - if (node.is("textProxy") && node.data === viewElementData.replace(String.fromCharCode(160), " ")) { - return node.textNode; - } - } - } - /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { - // eslint-disable-line no-unused-vars - const returnObject = {}; - let mathmlOrigin; - if (!mathml) { - this.insertMathml(""); - } else if (this.core.editMode === "latex") { - returnObject.latex = Latex.getLatexFromMathML(mathml); - returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); - this.editorObject.model.change((writer) => { - const { latexRange } = this.core.editionProperties; - const startNode = this.findText(latexRange.startContainer); - const endNode = this.findText(latexRange.endContainer); - let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset); - let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset); - let range = writer.createRange(startPosition, endPosition); - // When Latex is next to image/formula. - if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) { - // Get the position of the latex to be replaced. - let latexEdited = - "$$" + - Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + - "$$"; - let data = latexRange.startContainer.data; - // Remove invisible characters. - data = data.replaceAll(String.fromCharCode(8288), ""); - // Get to the start of the latex we are editing. - let offset = data.indexOf(latexEdited); - let dataOffset = data.substring(offset); - let second$ = dataOffset.substring(2).indexOf("$$") + 4; - let substring = dataOffset.substr(0, second$); - data = data.replace(substring, ""); - if (!data) { - startPosition = writer.createPositionBefore(startNode); - range = startNode; - } else { - startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset); - endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset); - range = writer.createRange(startPosition, endPosition); - } + // eslint-disable-line consistent-return + // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down + let pivot = viewElement; + let element; + while(!element){ + element = this.editorObject.editing.mapper.toModelElement(this.editorObject.editing.view.domConverter.domToView(pivot)); + pivot = pivot.parentElement; } - writer.remove(range); - writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition); - }); - } else { - mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml; - try { - returnObject.node = this.editorObject.editing.view.domConverter.viewToDom( - this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), - windowTarget.document, - ); - } catch (e) { - const x = e.toString(); - if (x.includes("CKEditorError: Cannot read property 'parent' of undefined")) { - this.core.modalDialog.cancelAction(); + // Navigate through all the subtree under `pivot` in order to find the correct text node + const range = this.editorObject.model.createRangeIn(element); + const descendants = Array.from(range.getItems()); + for (const node of descendants){ + let viewElementData = viewElement.data; + if (viewElement.nodeType === 3) { + // Remove invisible white spaces + viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), ""); + } + if (node.is("textProxy") && node.data === viewElementData.replace(String.fromCharCode(160), " ")) { + return node.textNode; + } } - } - } - // Build the telemeter payload separated to delete null/undefined entries. - let payload = { - mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, - mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, - elapsed_time: Date.now() - this.core.editionProperties.editionStartTime, - editor_origin: null, - toolbar: this.core.modalDialog.contentManager.toolbar, - size: mathml?.length, - }; - // Remove desired null keys. - Object.keys(payload).forEach((key) => { - if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; - }); - // Call Telemetry service to track the event. - try { - Telemeter.telemeter.track("INSERTED_FORMULA", { - ...payload, - }); - } catch (error) { - console.error("Error tracking INSERTED_FORMULA", error); } - /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula. + /** @inheritdoc */ insertFormula(focusElement, windowTarget, mathml, wirisProperties) { + // eslint-disable-line no-unused-vars + const returnObject = {}; + let mathmlOrigin; + if (!mathml) { + this.insertMathml(""); + } else if (this.core.editMode === "latex") { + returnObject.latex = Latex.getLatexFromMathML(mathml); + returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`); + this.editorObject.model.change((writer)=>{ + const { latexRange } = this.core.editionProperties; + const startNode = this.findText(latexRange.startContainer); + const endNode = this.findText(latexRange.endContainer); + let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset); + let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset); + let range = writer.createRange(startPosition, endPosition); + // When Latex is next to image/formula. + if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) { + // Get the position of the latex to be replaced. + let latexEdited = "$$" + Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) + "$$"; + let data = latexRange.startContainer.data; + // Remove invisible characters. + data = data.replaceAll(String.fromCharCode(8288), ""); + // Get to the start of the latex we are editing. + let offset = data.indexOf(latexEdited); + let dataOffset = data.substring(offset); + let second$ = dataOffset.substring(2).indexOf("$$") + 4; + let substring = dataOffset.substr(0, second$); + data = data.replace(substring, ""); + if (!data) { + startPosition = writer.createPositionBefore(startNode); + range = startNode; + } else { + startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset); + endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset); + range = writer.createRange(startPosition, endPosition); + } + } + writer.remove(range); + writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition); + }); + } else { + mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml; + try { + returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)), windowTarget.document); + } catch (e) { + const x = e.toString(); + if (x.includes("CKEditorError: Cannot read property 'parent' of undefined")) { + this.core.modalDialog.cancelAction(); + } + } + } + // Build the telemeter payload separated to delete null/undefined entries. + let payload = { + mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin, + mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml, + elapsed_time: Date.now() - this.core.editionProperties.editionStartTime, + editor_origin: null, + toolbar: this.core.modalDialog.contentManager.toolbar, + size: mathml?.length + }; + // Remove desired null keys. + Object.keys(payload).forEach((key)=>{ + if (key === "mathml_origin" || key === "editor_origin") !payload[key] ? delete payload[key] : {}; + }); + // Call Telemetry service to track the event. + try { + Telemeter.telemeter.track("INSERTED_FORMULA", { + ...payload + }); + } catch (error) { + console.error("Error tracking INSERTED_FORMULA", error); + } + /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula. We probably should add it here as well, but we should look further into how */ // this.editorObject.fire('change'); - // Remove temporal image of inserted formula - this.core.editionProperties.temporalImage = null; - return returnObject; - } - /** + // Remove temporal image of inserted formula + this.core.editionProperties.temporalImage = null; + return returnObject; + } + /** * Function called when the content submits an action. */ notifyWindowClosed() { - this.editorObject.editing.view.focus(); - } + this.editorObject.editing.view.focus(); + } } /** * Command for opening the MathType editor */ class MathTypeCommand extends Command { - execute(options = {}) { - // Check we get a valid integration - // eslint-disable-next-line no-prototype-builtins - if (!options.hasOwnProperty("integration") || !(options.integration instanceof CKEditor5Integration)) { - throw 'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'; + execute(options = {}) { + // Check we get a valid integration + // eslint-disable-next-line no-prototype-builtins + if (!options.hasOwnProperty("integration") || !(options.integration instanceof CKEditor5Integration)) { + throw 'Must pass a valid CKEditor5Integration instance as attribute "integration" of options'; + } + // Save the integration instance as a property of the command. + this.integration = options.integration; + // Set custom editor or disable it + this.setEditor(); + // Open the editor + this.openEditor(); } - // Save the integration instance as a property of the command. - this.integration = options.integration; - // Set custom editor or disable it - this.setEditor(); - // Open the editor - this.openEditor(); - } - /** + /** * Sets the appropriate custom editor, if any, or disables them. */ setEditor() { - // It's possible that a custom editor was last used. - // We need to disable it to avoid wrong behaviors. - this.integration.core.getCustomEditors().disable(); - } - /** + // It's possible that a custom editor was last used. + // We need to disable it to avoid wrong behaviors. + this.integration.core.getCustomEditors().disable(); + } + /** * Checks whether we are editing an existing formula or a new one and opens the editor. */ openEditor() { - this.integration.core.editionProperties.dbclick = false; - const image = this._getSelectedImage(); - if ( - typeof image !== "undefined" && - image !== null && - image.classList.contains(WirisPlugin.Configuration.get("imageClassName")) - ) { - this.integration.core.editionProperties.temporalImage = image; - this.integration.openExistingFormulaEditor(); - } else { - this.integration.openNewFormulaEditor(); + this.integration.core.editionProperties.dbclick = false; + const image = this._getSelectedImage(); + if (typeof image !== "undefined" && image !== null && image.classList.contains(WirisPlugin.Configuration.get("imageClassName"))) { + this.integration.core.editionProperties.temporalImage = image; + this.integration.openExistingFormulaEditor(); + } else { + this.integration.openNewFormulaEditor(); + } } - } - /** + /** * Gets the currently selected formula image * @returns {Element} selected image, if any, undefined otherwise */ _getSelectedImage() { - const { selection } = this.editor.editing.view.document; - // If we can not extract the formula, fall back to default behavior. - if (selection.isCollapsed || selection.rangeCount !== 1) { - return; - } - // Look for the wrapping the formula and then for the inside - const range = selection.getFirstRange(); - let image; - for (const span of range) { - if (span.item.name !== "span") { - return; - } - image = span.item.getChild(0); - break; - } - if (!image) { - return; + const { selection } = this.editor.editing.view.document; + // If we can not extract the formula, fall back to default behavior. + if (selection.isCollapsed || selection.rangeCount !== 1) { + return; + } + // Look for the wrapping the formula and then for the inside + const range = selection.getFirstRange(); + let image; + for (const span of range){ + if (span.item.name !== "span") { + return; + } + image = span.item.getChild(0); + break; + } + if (!image) { + return; + } + // eslint-disable-next-line consistent-return + return this.editor.editing.view.domConverter.mapViewToDom(image); } - // eslint-disable-next-line consistent-return - return this.editor.editing.view.domConverter.mapViewToDom(image); - } } /** * Command for opening the ChemType editor */ class ChemTypeCommand extends MathTypeCommand { - setEditor() { - this.integration.core.getCustomEditors().enable("chemistry"); - } + setEditor() { + this.integration.core.getCustomEditors().enable("chemistry"); + } } -var mathIcon = - '\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n'; +var mathIcon = "\n\n\n\n\n\n\n\t\n\t\t\n\t\n\n\n\t\n\t\t\n\t\n\n\n"; -var chemIcon = - '\n\n\n\n\n\n'; +var chemIcon = "\n\n\n\n\n\n"; var name = "@wiris/mathtype-ckeditor5"; -var version = "8.9.2"; +var version = "8.10.0"; var description = "MathType Web for CKEditor5 editor"; var keywords = [ - "chem", - "chemistry", - "chemtype", - "ckeditor", - "ckeditor5", - "editor", - "equation", - "latex", - "math", - "mathml", - "maths", - "mathtype", - "wiris", + "chem", + "chemistry", + "chemtype", + "ckeditor", + "ckeditor5", + "editor", + "equation", + "latex", + "math", + "mathml", + "maths", + "mathtype", + "wiris" ]; var repository = "https://github.com/wiris/html-integrations/tree/stable/packages/mathtype-ckeditor5"; var homepage = "https://www.wiris.com/"; var bugs = { - email: "support@wiris.com", + email: "support@wiris.com" }; var license = "MIT"; var author = "WIRIS Team (http://www.wiris.com)"; -var files = ["dist", "src", "icons", "theme", "lang"]; +var files = [ + "dist", + "src", + "icons", + "theme", + "lang" +]; var main = "src/plugin.js"; var type = "module"; var exports = { - ".": "./src/plugin.js", - "./dist/*.css": "./dist/*.css", - "./dist/*": "./dist/*", - "./src/*": "./src/*", - "./theme/*": "./theme/*", - "./package.json": "./package.json", + ".": "./src/plugin.js", + "./dist/*": "./dist/*", + "./browser/*": null, + "./src/*": "./src/*", + "./theme/*": "./theme/*", + "./package.json": "./package.json" }; var scripts = { - build: "node ./scripts/build-dist.mjs", - "build:dist": "node ./scripts/build-dist.mjs", - prepare: "npm run build:dist", + build: "node ./scripts/build-dist.mjs", + "build:dist": "node ./scripts/build-dist.mjs", + prepare: "npm run build:dist" }; var dependencies = { - "@wiris/mathtype-html-integration-devkit": "1.17.3", + "@wiris/mathtype-html-integration-devkit": "1.17.3" }; var devDependencies = { - "@ckeditor/ckeditor5-dev-build-tools": "^40.2.0", - ckeditor5: ">=42.0.0", + "@ckeditor/ckeditor5-dev-build-tools": "^42.0.0", + ckeditor5: ">=43.0.0" }; var peerDependencies = { - ckeditor5: ">=42.0.0", + ckeditor5: ">=43.0.0" }; var packageInfo = { - name: name, - version: version, - description: description, - keywords: keywords, - repository: repository, - homepage: homepage, - bugs: bugs, - license: license, - author: author, - files: files, - main: main, - type: type, - exports: exports, - scripts: scripts, - dependencies: dependencies, - devDependencies: devDependencies, - peerDependencies: peerDependencies, + name: name, + version: version, + description: description, + keywords: keywords, + repository: repository, + homepage: homepage, + bugs: bugs, + license: license, + author: author, + files: files, + main: main, + type: type, + exports: exports, + scripts: scripts, + dependencies: dependencies, + devDependencies: devDependencies, + peerDependencies: peerDependencies }; // CKEditor imports let currentInstance = null; // eslint-disable-line import/no-mutable-exports class MathType extends Plugin { - static get requires() { - return [Widget]; - } - static get pluginName() { - return "MathType"; - } - init() { - // Create the MathType API Integration object - const integration = this._addIntegration(); - currentInstance = integration; - // Add the MathType and ChemType commands to the editor - this._addCommands(); - // Add the buttons for MathType and ChemType - this._addViews(integration); - // Registers the element in the schema - this._addSchema(); - // Add the downcast and upcast converters - this._addConverters(integration); - // Expose the WirisPlugin variable to the window - this._exposeWiris(); - } - /** + static get requires() { + return [ + Widget + ]; + } + static get pluginName() { + return "MathType"; + } + init() { + // Create the MathType API Integration object + const integration = this._addIntegration(); + currentInstance = integration; + // Add the MathType and ChemType commands to the editor + this._addCommands(); + // Add the buttons for MathType and ChemType + this._addViews(integration); + // Registers the element in the schema + this._addSchema(); + // Add the downcast and upcast converters + this._addConverters(integration); + // Expose the WirisPlugin variable to the window + this._exposeWiris(); + } + /** * Inherited from Plugin class: Executed when CKEditor5 is destroyed */ destroy() { - // eslint-disable-line class-methods-use-this - currentInstance.destroy(); - } - /** + // eslint-disable-line class-methods-use-this + currentInstance.destroy(); + } + /** * Create the MathType API Integration object * @returns {CKEditor5Integration} the integration object */ _addIntegration() { - const { editor } = this; - /** + const { editor } = this; + /** * Integration model constructor attributes. * @type {integrationModelProperties} */ const integrationProperties = {}; - integrationProperties.environment = {}; - integrationProperties.environment.editor = "CKEditor5"; - integrationProperties.environment.editorVersion = "5.x"; - integrationProperties.version = packageInfo.version; - integrationProperties.editorObject = editor; - integrationProperties.serviceProviderProperties = {}; - integrationProperties.serviceProviderProperties.URI = "https://www.wiris.net/demo/plugins/app"; - integrationProperties.serviceProviderProperties.server = "java"; - integrationProperties.target = editor.sourceElement; - integrationProperties.scriptName = "bundle.js"; - integrationProperties.managesLanguage = true; - // etc - // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element. - // To avoid a wrong behaviour, this integration only starts if the workspace container exists. - let integration; - if (integrationProperties.target) { - // Instance of the integration associated to this editor instance - integration = new CKEditor5Integration(integrationProperties); - integration.init(); - integration.listeners.fire("onTargetReady", {}); - integration.checkElement(); - this.listenTo( - editor.editing.view.document, - "click", - (evt, data) => { - // Is Double-click - if (data.domEvent.detail === 2) { - integration.doubleClickHandler(data.domTarget, data.domEvent); - evt.stop(); - } - }, - { - priority: "highest", - }, - ); + integrationProperties.environment = {}; + integrationProperties.environment.editor = "CKEditor5"; + integrationProperties.environment.editorVersion = "5.x"; + integrationProperties.version = packageInfo.version; + integrationProperties.editorObject = editor; + integrationProperties.serviceProviderProperties = {}; + integrationProperties.serviceProviderProperties.URI = "https://www.wiris.net/demo/plugins/app"; + integrationProperties.serviceProviderProperties.server = "java"; + integrationProperties.target = editor.sourceElement; + integrationProperties.scriptName = "bundle.js"; + integrationProperties.managesLanguage = true; + // etc + // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element. + // To avoid a wrong behaviour, this integration only starts if the workspace container exists. + let integration; + if (integrationProperties.target) { + // Instance of the integration associated to this editor instance + integration = new CKEditor5Integration(integrationProperties); + integration.init(); + integration.listeners.fire("onTargetReady", {}); + integration.checkElement(); + this.listenTo(editor.editing.view.document, "click", (evt, data)=>{ + // Is Double-click + if (data.domEvent.detail === 2) { + integration.doubleClickHandler(data.domTarget, data.domEvent); + evt.stop(); + } + }, { + priority: "highest" + }); + } + return integration; } - return integration; - } - /** + /** * Add the MathType and ChemType commands to the editor */ _addCommands() { - const { editor } = this; - // Add command to open the formula editor - editor.commands.add("MathType", new MathTypeCommand(editor)); - // Add command to open the chemistry formula editor - editor.commands.add("ChemType", new ChemTypeCommand(editor)); - } - /** + const { editor } = this; + // Add command to open the formula editor + editor.commands.add("MathType", new MathTypeCommand(editor)); + // Add command to open the chemistry formula editor + editor.commands.add("ChemType", new ChemTypeCommand(editor)); + } + /** * Add the buttons for MathType and ChemType * @param {CKEditor5Integration} integration the integration object */ _addViews(integration) { - const { editor } = this; - // Check if MathType editor is enabled - if (Configuration.get("editorEnabled")) { - // Add button for the formula editor - editor.ui.componentFactory.add("MathType", (locale) => { - const view = new ButtonView(locale); - // View is enabled iff command is enabled - view.bind("isEnabled").to(editor.commands.get("MathType"), "isEnabled"); - view.set({ - label: StringManager.get("insert_math", integration.getLanguage()), - icon: mathIcon, - tooltip: true, - }); - // Callback executed once the image is clicked. - view.on("execute", () => { - editor.execute("MathType", { - integration, - }); - }); - return view; - }); - } - // Check if ChemType editor is enabled - if (Configuration.get("chemEnabled")) { - // Add button for the chemistry formula editor - editor.ui.componentFactory.add("ChemType", (locale) => { - const view = new ButtonView(locale); - // View is enabled iff command is enabled - view.bind("isEnabled").to(editor.commands.get("ChemType"), "isEnabled"); - view.set({ - label: StringManager.get("insert_chem", integration.getLanguage()), - icon: chemIcon, - tooltip: true, - }); - // Callback executed once the image is clicked. - view.on("execute", () => { - editor.execute("ChemType", { - integration, - }); - }); - return view; - }); + const { editor } = this; + // Check if MathType editor is enabled + if (Configuration.get("editorEnabled")) { + // Add button for the formula editor + editor.ui.componentFactory.add("MathType", (locale)=>{ + const view = new ButtonView(locale); + // View is enabled iff command is enabled + view.bind("isEnabled").to(editor.commands.get("MathType"), "isEnabled"); + view.set({ + label: StringManager.get("insert_math", integration.getLanguage()), + icon: mathIcon, + tooltip: true + }); + // Callback executed once the image is clicked. + view.on("execute", ()=>{ + editor.execute("MathType", { + integration + }); + }); + return view; + }); + } + // Check if ChemType editor is enabled + if (Configuration.get("chemEnabled")) { + // Add button for the chemistry formula editor + editor.ui.componentFactory.add("ChemType", (locale)=>{ + const view = new ButtonView(locale); + // View is enabled iff command is enabled + view.bind("isEnabled").to(editor.commands.get("ChemType"), "isEnabled"); + view.set({ + label: StringManager.get("insert_chem", integration.getLanguage()), + icon: chemIcon, + tooltip: true + }); + // Callback executed once the image is clicked. + view.on("execute", ()=>{ + editor.execute("ChemType", { + integration + }); + }); + return view; + }); + } + // Observer for the Double-click event + editor.editing.view.addObserver(ClickObserver); } - // Observer for the Double-click event - editor.editing.view.addObserver(ClickObserver); - } - /** + /** * Registers the element in the schema */ _addSchema() { - const { schema } = this.editor.model; - schema.register("mathml", { - inheritAllFrom: "$inlineObject", - allowAttributes: ["formula"], - }); - } - /** + const { schema } = this.editor.model; + schema.register("mathml", { + inheritAllFrom: "$inlineObject", + allowAttributes: [ + "formula" + ] + }); + } + /** * Add the downcast and upcast converters */ _addConverters(integration) { - const { editor } = this; - // Editing view -> Model - editor.conversion.for("upcast").elementToElement({ - view: { - name: "span", - classes: "ck-math-widget", - }, - model: (viewElement, { writer: modelWriter }) => { - const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute("data-mathml")); - return modelWriter.createElement("mathml", { - formula, + const { editor } = this; + // Editing view -> Model + editor.conversion.for("upcast").elementToElement({ + view: { + name: "span", + classes: "ck-math-widget" + }, + model: (viewElement, { writer: modelWriter })=>{ + const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute("data-mathml")); + return modelWriter.createElement("mathml", { + formula + }); + } }); - }, - }); - // Data view -> Model - editor.data.upcastDispatcher.on("element:math", (evt, data, conversionApi) => { - const { consumable, writer } = conversionApi; - const { viewItem } = data; - // When element was already consumed then skip it. - if ( - !consumable.test(viewItem, { - name: true, - }) - ) { - return; - } - // If we encounter any with a LaTeX annotation inside, - // convert it into a "$$...$$" string. - const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define - // Get the formula of the (which is all its children). - const processor = new XmlDataProcessor(editor.editing.view.document); - // Only god knows why the following line makes viewItem lose all of its children, - // so we obtain isLatex before doing this because we need viewItem's children for that. - const upcastWriter = new UpcastWriter(editor.editing.view.document); - const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren()); - // and obtain the attributes of too! - const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}="${value}"`).join(""); - // We process the document fragment - let formula = processor.toData(viewDocumentFragment) || ""; - // And obtain the complete formula - formula = Util.htmlSanitize(`${formula}`); - // Replaces the < & > characters to its HTMLEntity to avoid render issues. - formula = formula.replaceAll('"<"', '"<"').replaceAll('">"', '">"').replaceAll("><<", "><<"); - /* Model node that contains what's going to actually be inserted. This can be either: + // Data view -> Model + editor.data.upcastDispatcher.on("element:math", (evt, data, conversionApi)=>{ + const { consumable, writer } = conversionApi; + const { viewItem } = data; + // When element was already consumed then skip it. + if (!consumable.test(viewItem, { + name: true + })) { + return; + } + // If we encounter any with a LaTeX annotation inside, + // convert it into a "$$...$$" string. + const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define + // Get the formula of the (which is all its children). + const processor = new XmlDataProcessor(editor.editing.view.document); + // Only god knows why the following line makes viewItem lose all of its children, + // so we obtain isLatex before doing this because we need viewItem's children for that. + const upcastWriter = new UpcastWriter(editor.editing.view.document); + const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren()); + // and obtain the attributes of too! + const mathAttributes = [ + ...viewItem.getAttributes() + ].map(([key, value])=>` ${key}="${value}"`).join(""); + // We process the document fragment + let formula = processor.toData(viewDocumentFragment) || ""; + // And obtain the complete formula + formula = Util.htmlSanitize(`${formula}`); + // Replaces the < & > characters to its HTMLEntity to avoid render issues. + formula = formula.replaceAll('"<"', '"<"').replaceAll('">"', '">"').replaceAll("><<", "><<"); + /* Model node that contains what's going to actually be inserted. This can be either: - A element with a formula attribute set to the given formula, or - - If the original had a LaTeX annotation, then the annotation surrounded by "$$...$$" */ const modelNode = - isLatex - ? writer.createText(Parser.initParse(formula, integration.getLanguage())) - : writer.createElement("mathml", { - formula, + - If the original had a LaTeX annotation, then the annotation surrounded by "$$...$$" */ const modelNode = isLatex ? writer.createText(Parser.initParse(formula, integration.getLanguage())) : writer.createElement("mathml", { + formula }); - // Find allowed parent for element that we are going to insert. - // If current parent does not allow to insert element but one of the ancestors does - // then split nodes to allowed parent. - const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor); - // When there is no split result it means that we can't insert element to model tree, so let's skip it. - if (!splitResult) { - return; - } - // Insert element on allowed position. - conversionApi.writer.insert(modelNode, splitResult.position); - // Consume appropriate value from consumable values list. - consumable.consume(viewItem, { - name: true, - }); - const parts = conversionApi.getSplitParts(modelNode); - // Set conversion result range. - data.modelRange = writer.createRange( - conversionApi.writer.createPositionBefore(modelNode), - conversionApi.writer.createPositionAfter(parts[parts.length - 1]), - ); - // Now we need to check where the `modelCursor` should be. - if (splitResult.cursorParent) { - // If we split parent to insert our element then we want to continue conversion in the new part of the split parent. - // - // before: foo[] - // after: foo[] - data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0); - } else { - // Otherwise just continue after inserted element. - data.modelCursor = data.modelRange.end; - } - }); - /** + // Find allowed parent for element that we are going to insert. + // If current parent does not allow to insert element but one of the ancestors does + // then split nodes to allowed parent. + const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor); + // When there is no split result it means that we can't insert element to model tree, so let's skip it. + if (!splitResult) { + return; + } + // Insert element on allowed position. + conversionApi.writer.insert(modelNode, splitResult.position); + // Consume appropriate value from consumable values list. + consumable.consume(viewItem, { + name: true + }); + const parts = conversionApi.getSplitParts(modelNode); + // Set conversion result range. + data.modelRange = writer.createRange(conversionApi.writer.createPositionBefore(modelNode), conversionApi.writer.createPositionAfter(parts[parts.length - 1])); + // Now we need to check where the `modelCursor` should be. + if (splitResult.cursorParent) { + // If we split parent to insert our element then we want to continue conversion in the new part of the split parent. + // + // before: foo[] + // after: foo[] + data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0); + } else { + // Otherwise just continue after inserted element. + data.modelCursor = data.modelRange.end; + } + }); + /** * Whether the given view element has a LaTeX annotation element. * @param {*} math * @returns {bool} */ function mathIsLatex(math) { - const semantics = math.getChild(0); - if (!semantics || semantics.name !== "semantics") return false; - for (const child of semantics.getChildren()) { - if (child.name === "annotation" && child.getAttribute("encoding") === "LaTeX") { - return true; + const semantics = math.getChild(0); + if (!semantics || semantics.name !== "semantics") return false; + for (const child of semantics.getChildren()){ + if (child.name === "annotation" && child.getAttribute("encoding") === "LaTeX") { + return true; + } + } + return false; } - } - return false; - } - function createViewWidget(modelItem, { writer: viewWriter }) { - const widgetElement = viewWriter.createContainerElement("span", { - class: "ck-math-widget", - }); - const mathUIElement = createViewImage(modelItem, { - writer: viewWriter, - }); // eslint-disable-line no-use-before-define - if (mathUIElement) { - viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement); - } - return toWidget(widgetElement, viewWriter); - } - function createViewImage(modelItem, { writer: viewWriter }) { - const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); - const mathString = modelItem.getAttribute("formula").replaceAll('ref="<"', 'ref="<"'); - const imgHtml = Parser.initParse(mathString, integration.getLanguage()); - const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0); - /* Although we use the HtmlDataProcessor to obtain the attributes, + function createViewWidget(modelItem, { writer: viewWriter }) { + const widgetElement = viewWriter.createContainerElement("span", { + class: "ck-math-widget" + }); + const mathUIElement = createViewImage(modelItem, { + writer: viewWriter + }); // eslint-disable-line no-use-before-define + if (mathUIElement) { + viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement); + } + return toWidget(widgetElement, viewWriter); + } + function createViewImage(modelItem, { writer: viewWriter }) { + const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); + const mathString = modelItem.getAttribute("formula").replaceAll('ref="<"', 'ref="<"'); + const imgHtml = Parser.initParse(mathString, integration.getLanguage()); + const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0); + /* Although we use the HtmlDataProcessor to obtain the attributes, we must create a new EmptyElement which is independent of the DataProcessor being used by this editor instance */ if (imgElement) { - return viewWriter.createEmptyElement("img", imgElement.getAttributes(), { - renderUnsafeAttributes: ["src"], + return viewWriter.createEmptyElement("img", imgElement.getAttributes(), { + renderUnsafeAttributes: [ + "src" + ] + }); + } + return null; + } + // Model -> Editing view + editor.conversion.for("editingDowncast").elementToElement({ + model: "mathml", + view: createViewWidget }); - } - return null; - } - // Model -> Editing view - editor.conversion.for("editingDowncast").elementToElement({ - model: "mathml", - view: createViewWidget, - }); - // Model -> Data view - editor.conversion.for("dataDowncast").elementToElement({ - model: "mathml", - view: createDataString, - }); - /** + // Model -> Data view + editor.conversion.for("dataDowncast").elementToElement({ + model: "mathml", + view: createDataString + }); + /** * Makes a copy of the given view node. * @param {module:engine/view/node~Node} sourceNode Node to copy. * @returns {module:engine/view/node~Node} Copy of the node. */ function clone(viewWriter, sourceNode) { - if (sourceNode.is("text")) { - return viewWriter.createText(sourceNode.data); - } - if (sourceNode.is("element")) { - if (sourceNode.is("emptyElement")) { - return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes()); + if (sourceNode.is("text")) { + return viewWriter.createText(sourceNode.data); + } + if (sourceNode.is("element")) { + if (sourceNode.is("emptyElement")) { + return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes()); + } + const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes()); + for (const child of sourceNode.getChildren()){ + viewWriter.insert(viewWriter.createPositionAt(element, "end"), clone(viewWriter, child)); + } + return element; + } + throw new Exception("Given node has unsupported type."); // eslint-disable-line no-undef } - const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes()); - for (const child of sourceNode.getChildren()) { - viewWriter.insert(viewWriter.createPositionAt(element, "end"), clone(viewWriter, child)); + function createDataString(modelItem, { writer: viewWriter }) { + const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); + let mathString = Parser.endParseSaveMode(modelItem.getAttribute("formula")); + const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0); + return clone(viewWriter, sourceMathElement); } - return element; - } - throw new Exception("Given node has unsupported type."); // eslint-disable-line no-undef - } - function createDataString(modelItem, { writer: viewWriter }) { - const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document); - let mathString = Parser.endParseSaveMode(modelItem.getAttribute("formula")); - const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0); - return clone(viewWriter, sourceMathElement); - } - // This stops the view selection getting into the s and messing up caret movement - editor.editing.mapper.on( - "viewToModelPosition", - viewToModelPositionOutsideModelElement(editor.model, (viewElement) => viewElement.hasClass("ck-math-widget")), - ); - // Keep a reference to the original get and set function. - editor.data; - /** + // This stops the view selection getting into the s and messing up caret movement + editor.editing.mapper.on("viewToModelPosition", viewToModelPositionOutsideModelElement(editor.model, (viewElement)=>viewElement.hasClass("ck-math-widget"))); + // Keep a reference to the original get and set function. + editor.data; + /** * Hack to transform $$latex$$ into in editor.getData()'s output. - */ editor.data.on( - "get", - (e) => { - let output = e.return; - // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any. - // For text or latex formulas, it returns the original output. - e.return = MathML.removeSemantics(output, "application/json"); - }, - { - priority: "low", - }, - ); - /** + */ editor.data.on("get", (e)=>{ + let output = e.return; + // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any. + // For text or latex formulas, it returns the original output. + e.return = MathML.removeSemantics(output, "application/json"); + }, { + priority: "low" + }); + /** * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData(). - */ editor.data.on( - "set", - (e, args) => { - // Retrieve the data to be set on the CKEditor. - let modifiedData = args[0]; - // Regex to find all mathml formulas. - const regexp = //gm; - // Get all MathML formulas and store them in an array. - // Using the conditional operator on data.main because the data parameter has different types depending on: - // editor.data.set can be used directly or by the source editing plugin. - // With the source editor plugin, data is an object with the key `main` which contains the source code string. - // When using the editor.data.set method, the data is a string with the content to be set to the editor. - let formulas = Object.values(modifiedData)[0] - ? [...Object.values(modifiedData)[0].matchAll(regexp)] - : [...modifiedData.matchAll(regexp)]; - // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation. - formulas.forEach((formula) => { - let mathml = formula[0]; - if (mathml.includes('encoding="LaTeX"')) { - // LaTeX found. - let latex = "$$$" + Latex.getLatexFromMathML(mathml) + "$$$"; // We add $$$ instead of $$ because the replace function ignores one $. - modifiedData = modifiedData.replace(mathml, latex); - } + */ editor.data.on("set", (e, args)=>{ + // Retrieve the data to be set on the CKEditor. + let modifiedData = args[0]; + // Regex to find all mathml formulas. + const regexp = //gm; + // Get all MathML formulas and store them in an array. + // Using the conditional operator on data.main because the data parameter has different types depending on: + // editor.data.set can be used directly or by the source editing plugin. + // With the source editor plugin, data is an object with the key `main` which contains the source code string. + // When using the editor.data.set method, the data is a string with the content to be set to the editor. + let formulas = Object.values(modifiedData)[0] ? [ + ...Object.values(modifiedData)[0].matchAll(regexp) + ] : [ + ...modifiedData.matchAll(regexp) + ]; + // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation. + formulas.forEach((formula)=>{ + let mathml = formula[0]; + if (mathml.includes('encoding="LaTeX"')) { + // LaTeX found. + let latex = "$$$" + Latex.getLatexFromMathML(mathml) + "$$$"; // We add $$$ instead of $$ because the replace function ignores one $. + modifiedData = modifiedData.replace(mathml, latex); + } + }); + args[0] = modifiedData; + }, { + priority: "high" }); - args[0] = modifiedData; - }, - { - priority: "high", - }, - ); - } - /** + } + /** * Expose the WirisPlugin variable to the window */ // eslint-disable-next-line class-methods-use-this - _exposeWiris() { - window.WirisPlugin = { - Core, - Parser, - Image, - MathML, - Util, - Configuration, - Listeners, - IntegrationModel, - currentInstance, - Latex, - }; - } + _exposeWiris() { + window.WirisPlugin = { + Core, + Parser, + Image, + MathML, + Util, + Configuration, + Listeners, + IntegrationModel, + currentInstance, + Latex + }; + } } export { MathType as default }; diff --git a/packages/ckeditor5/dist/index.js.map b/packages/ckeditor5/dist/index.js.map index dcd7b2d66..98f1a590c 100644 --- a/packages/ckeditor5/dist/index.js.map +++ b/packages/ckeditor5/dist/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sources":["../src/integration.js","../src/commands.js","../src/plugin.js"],"sourcesContent":["import IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Telemeter from \"@wiris/mathtype-html-integration-devkit/src/telemeter.js\";\n\n/**\n * This class represents the MathType integration for CKEditor5.\n * @extends {IntegrationModel}\n */\nexport default class CKEditor5Integration extends IntegrationModel {\n constructor(ckeditorIntegrationModelProperties) {\n const editor = ckeditorIntegrationModelProperties.editorObject;\n\n if (typeof editor.config !== \"undefined\" && typeof editor.config.get(\"mathTypeParameters\") !== \"undefined\") {\n ckeditorIntegrationModelProperties.integrationParameters = editor.config.get(\"mathTypeParameters\");\n }\n /**\n * CKEditor5 Integration.\n *\n * @param {integrationModelProperties} integrationModelAttributes\n */\n super(ckeditorIntegrationModelProperties);\n\n /**\n * Folder name used for the integration inside CKEditor plugins folder.\n */\n this.integrationFolderName = \"ckeditor_wiris\";\n }\n\n /**\n * @inheritdoc\n * @returns {string} - The CKEditor instance language.\n * @override\n */\n getLanguage() {\n // Returns the CKEDitor instance language taking into account that the language can be an object.\n // Try to get editorParameters.language, fail silently otherwise\n try {\n return this.editorParameters.language;\n } catch (e) {}\n const languageObject = this.editorObject.config.get(\"language\");\n if (languageObject != null) {\n if (typeof languageObject === \"object\") {\n // eslint-disable-next-line no-prototype-builtins\n if (languageObject.hasOwnProperty(\"ui\")) {\n return languageObject.ui;\n }\n return languageObject;\n }\n return languageObject;\n }\n return super.getLanguage();\n }\n\n /**\n * Adds callbacks to the following CKEditor listeners:\n * - 'focus' - updates the current instance.\n * - 'contentDom' - adds 'doubleclick' callback.\n * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas.\n * - 'setData' - parses the data converting MathML into images.\n * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications.\n * - 'getData' - parses the data converting images into selected save mode (MathML by default).\n * - 'mode' - recalculates the active element.\n */\n addEditorListeners() {\n const editor = this.editorObject;\n\n if (typeof editor.config.wirislistenersdisabled === \"undefined\" || !editor.config.wirislistenersdisabled) {\n this.checkElement();\n }\n }\n\n /**\n * Checks the current container and assign events in case that it doesn't have them.\n * CKEditor replaces several times the element element during its execution,\n * so we must assign the events again to editor element.\n */\n checkElement() {\n const editor = this.editorObject;\n const newElement = editor.sourceElement;\n\n // If the element wasn't treated, add the events.\n if (!newElement.wirisActive) {\n this.setTarget(newElement);\n this.addEvents();\n // Set the element as treated\n newElement.wirisActive = true;\n }\n }\n\n /**\n * @inheritdoc\n * @param {HTMLElement} element - HTMLElement target.\n * @param {MouseEvent} event - event which trigger the handler.\n */\n doubleClickHandler(element, event) {\n this.core.editionProperties.dbclick = true;\n if (this.editorObject.isReadOnly === false) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n // Some plugins (image2, image) open a dialog on Double-click. On formulas\n // doubleclick event ends here.\n if (typeof event.stopPropagation !== \"undefined\") {\n // old I.E compatibility.\n event.stopPropagation();\n } else {\n event.returnValue = false;\n }\n this.core.getCustomEditors().disable();\n const customEditorAttr = element.getAttribute(Configuration.get(\"imageCustomEditorName\"));\n if (customEditorAttr) {\n this.core.getCustomEditors().enable(customEditorAttr);\n }\n this.core.editionProperties.temporalImage = element;\n this.openExistingFormulaEditor();\n }\n }\n }\n }\n\n /** @inheritdoc */\n static getCorePath() {\n return null; // TODO\n }\n\n /** @inheritdoc */\n callbackFunction() {\n super.callbackFunction();\n this.addEditorListeners();\n }\n\n openNewFormulaEditor() {\n // Store the editor selection as it will be lost upon opening the modal\n this.core.editionProperties.selection = this.editorObject.editing.view.document.selection;\n\n return super.openNewFormulaEditor();\n }\n\n /**\n * Replaces old formula with new MathML or inserts it in caret position if new\n * @param {String} mathml MathML to update old one or insert\n * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image\n */\n insertMathml(mathml) {\n // This returns the value returned by the callback function (writer => {...})\n return this.editorObject.model.change((writer) => {\n const core = this.getCore();\n const selection = this.editorObject.model.document.selection;\n\n const modelElementNew = writer.createElement(\"mathml\", {\n formula: mathml,\n ...Object.fromEntries(selection.getAttributes()), // To keep the format, such as style and font\n });\n\n // Obtain the DOM object corresponding to the formula\n if (core.editionProperties.isNewElement) {\n // Don't bother inserting anything at all if the MathML is empty.\n if (!mathml) return;\n\n const viewSelection =\n this.core.editionProperties.selection || this.editorObject.editing.view.document.selection;\n const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition());\n\n this.editorObject.model.insertObject(modelElementNew, modelPosition);\n\n // Remove selection\n if (!viewSelection.isCollapsed) {\n for (const range of viewSelection.getRanges()) {\n writer.remove(this.editorObject.editing.mapper.toModelRange(range));\n }\n }\n\n // Set carret after the formula\n const position = this.editorObject.model.createPositionAfter(modelElementNew);\n writer.setSelection(position);\n } else {\n const img = core.editionProperties.temporalImage;\n const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent;\n const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement);\n\n // Insert the new and remove the old one\n const position = this.editorObject.model.createPositionBefore(modelElementOld);\n\n // If the given MathML is empty, don't insert a new formula.\n if (mathml) {\n this.editorObject.model.insertObject(modelElementNew, position);\n }\n writer.remove(modelElementOld);\n }\n\n // eslint-disable-next-line consistent-return\n return modelElementNew;\n });\n }\n\n /**\n * Finds the text node corresponding to given DOM text element.\n * @param {element} viewElement Element to find corresponding text node of.\n * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist.\n */\n findText(viewElement) {\n // eslint-disable-line consistent-return\n // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down\n let pivot = viewElement;\n let element;\n while (!element) {\n element = this.editorObject.editing.mapper.toModelElement(\n this.editorObject.editing.view.domConverter.domToView(pivot),\n );\n pivot = pivot.parentElement;\n }\n\n // Navigate through all the subtree under `pivot` in order to find the correct text node\n const range = this.editorObject.model.createRangeIn(element);\n const descendants = Array.from(range.getItems());\n for (const node of descendants) {\n let viewElementData = viewElement.data;\n if (viewElement.nodeType === 3) {\n // Remove invisible white spaces\n viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), \"\");\n }\n if (node.is(\"textProxy\") && node.data === viewElementData.replace(String.fromCharCode(160), \" \")) {\n return node.textNode;\n }\n }\n }\n\n /** @inheritdoc */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n // eslint-disable-line no-unused-vars\n const returnObject = {};\n\n let mathmlOrigin;\n if (!mathml) {\n this.insertMathml(\"\");\n } else if (this.core.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n\n this.editorObject.model.change((writer) => {\n const { latexRange } = this.core.editionProperties;\n\n const startNode = this.findText(latexRange.startContainer);\n const endNode = this.findText(latexRange.endContainer);\n\n let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset);\n let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset);\n\n let range = writer.createRange(startPosition, endPosition);\n\n // When Latex is next to image/formula.\n if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) {\n // Get the position of the latex to be replaced.\n let latexEdited =\n \"$$\" +\n Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) +\n \"$$\";\n let data = latexRange.startContainer.data;\n\n // Remove invisible characters.\n data = data.replaceAll(String.fromCharCode(8288), \"\");\n\n // Get to the start of the latex we are editing.\n let offset = data.indexOf(latexEdited);\n let dataOffset = data.substring(offset);\n let second$ = dataOffset.substring(2).indexOf(\"$$\") + 4;\n let substring = dataOffset.substr(0, second$);\n data = data.replace(substring, \"\");\n\n if (!data) {\n startPosition = writer.createPositionBefore(startNode);\n range = startNode;\n } else {\n startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset);\n endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset);\n range = writer.createRange(startPosition, endPosition);\n }\n }\n\n writer.remove(range);\n writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition);\n });\n } else {\n mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml;\n try {\n returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(\n this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)),\n windowTarget.document,\n );\n } catch (e) {\n const x = e.toString();\n if (x.includes(\"CKEditorError: Cannot read property 'parent' of undefined\")) {\n this.core.modalDialog.cancelAction();\n }\n }\n }\n\n // Build the telemeter payload separated to delete null/undefined entries.\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.core.editionProperties.editionStartTime,\n editor_origin: null, // TODO read formula to find out whether it comes from Oxygen Desktop\n toolbar: this.core.modalDialog.contentManager.toolbar,\n size: mathml?.length,\n };\n\n // Remove desired null keys.\n Object.keys(payload).forEach((key) => {\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload,\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n\n /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula.\n We probably should add it here as well, but we should look further into how */\n // this.editorObject.fire('change');\n\n // Remove temporal image of inserted formula\n this.core.editionProperties.temporalImage = null;\n\n return returnObject;\n }\n\n /**\n * Function called when the content submits an action.\n */\n notifyWindowClosed() {\n this.editorObject.editing.view.focus();\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { Command } from \"ckeditor5/src/core.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\n/**\n * Command for opening the MathType editor\n */\nexport class MathTypeCommand extends Command {\n execute(options = {}) {\n // Check we get a valid integration\n // eslint-disable-next-line no-prototype-builtins\n if (!options.hasOwnProperty(\"integration\") || !(options.integration instanceof CKEditor5Integration)) {\n throw 'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options';\n }\n\n // Save the integration instance as a property of the command.\n this.integration = options.integration;\n\n // Set custom editor or disable it\n this.setEditor();\n\n // Open the editor\n this.openEditor();\n }\n\n /**\n * Sets the appropriate custom editor, if any, or disables them.\n */\n setEditor() {\n // It's possible that a custom editor was last used.\n // We need to disable it to avoid wrong behaviors.\n this.integration.core.getCustomEditors().disable();\n }\n\n /**\n * Checks whether we are editing an existing formula or a new one and opens the editor.\n */\n openEditor() {\n this.integration.core.editionProperties.dbclick = false;\n const image = this._getSelectedImage();\n if (\n typeof image !== \"undefined\" &&\n image !== null &&\n image.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))\n ) {\n this.integration.core.editionProperties.temporalImage = image;\n this.integration.openExistingFormulaEditor();\n } else {\n this.integration.openNewFormulaEditor();\n }\n }\n\n /**\n * Gets the currently selected formula image\n * @returns {Element} selected image, if any, undefined otherwise\n */\n _getSelectedImage() {\n const { selection } = this.editor.editing.view.document;\n\n // If we can not extract the formula, fall back to default behavior.\n if (selection.isCollapsed || selection.rangeCount !== 1) {\n return;\n }\n\n // Look for the wrapping the formula and then for the inside\n\n const range = selection.getFirstRange();\n\n let image;\n\n for (const span of range) {\n if (span.item.name !== \"span\") {\n return;\n }\n image = span.item.getChild(0);\n break;\n }\n\n if (!image) {\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return this.editor.editing.view.domConverter.mapViewToDom(image);\n }\n}\n\n/**\n * Command for opening the ChemType editor\n */\nexport class ChemTypeCommand extends MathTypeCommand {\n setEditor() {\n this.integration.core.getCustomEditors().enable(\"chemistry\");\n }\n}\n","// CKEditor imports\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView } from 'ckeditor5/src/ui.js';\nimport { ClickObserver, HtmlDataProcessor, XmlDataProcessor, UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { Widget, toWidget, viewToModelPositionOutsideModelElement } from 'ckeditor5/src/widget.js';\n\n// MathType API imports\nimport IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Core from \"@wiris/mathtype-html-integration-devkit/src/core.src.js\";\nimport Parser from \"@wiris/mathtype-html-integration-devkit/src/parser.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Image from \"@wiris/mathtype-html-integration-devkit/src/image.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Listeners from \"@wiris/mathtype-html-integration-devkit/src/listeners.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport StringManager from \"@wiris/mathtype-html-integration-devkit/src/stringmanager.js\";\n\n// Local imports\nimport { MathTypeCommand, ChemTypeCommand } from \"./commands.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\nimport mathIcon from \"../theme/icons/ckeditor5-formula.svg\";\nimport chemIcon from \"../theme/icons/ckeditor5-chem.svg\";\n\nimport packageInfo from \"../package.json\";\n\nexport let currentInstance = null; // eslint-disable-line import/no-mutable-exports\n\nexport default class MathType extends Plugin {\n static get requires() {\n return [Widget];\n }\n\n static get pluginName() {\n return \"MathType\";\n }\n\n init() {\n // Create the MathType API Integration object\n const integration = this._addIntegration();\n currentInstance = integration;\n\n // Add the MathType and ChemType commands to the editor\n this._addCommands();\n\n // Add the buttons for MathType and ChemType\n this._addViews(integration);\n\n // Registers the element in the schema\n this._addSchema();\n\n // Add the downcast and upcast converters\n this._addConverters(integration);\n\n // Expose the WirisPlugin variable to the window\n this._exposeWiris();\n }\n\n /**\n * Inherited from Plugin class: Executed when CKEditor5 is destroyed\n */\n destroy() {\n // eslint-disable-line class-methods-use-this\n currentInstance.destroy();\n }\n\n /**\n * Create the MathType API Integration object\n * @returns {CKEditor5Integration} the integration object\n */\n _addIntegration() {\n const { editor } = this;\n\n /**\n * Integration model constructor attributes.\n * @type {integrationModelProperties}\n */\n const integrationProperties = {};\n integrationProperties.environment = {};\n integrationProperties.environment.editor = \"CKEditor5\";\n integrationProperties.environment.editorVersion = \"5.x\";\n integrationProperties.version = packageInfo.version;\n integrationProperties.editorObject = editor;\n integrationProperties.serviceProviderProperties = {};\n integrationProperties.serviceProviderProperties.URI = \"https://www.wiris.net/demo/plugins/app\";\n integrationProperties.serviceProviderProperties.server = \"java\";\n integrationProperties.target = editor.sourceElement;\n integrationProperties.scriptName = \"bundle.js\";\n integrationProperties.managesLanguage = true;\n // etc\n\n // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element.\n // To avoid a wrong behaviour, this integration only starts if the workspace container exists.\n let integration;\n if (integrationProperties.target) {\n // Instance of the integration associated to this editor instance\n integration = new CKEditor5Integration(integrationProperties);\n integration.init();\n integration.listeners.fire(\"onTargetReady\", {});\n\n integration.checkElement();\n\n this.listenTo(\n editor.editing.view.document,\n \"click\",\n (evt, data) => {\n // Is Double-click\n if (data.domEvent.detail === 2) {\n integration.doubleClickHandler(data.domTarget, data.domEvent);\n evt.stop();\n }\n },\n { priority: \"highest\" },\n );\n }\n\n return integration;\n }\n\n /**\n * Add the MathType and ChemType commands to the editor\n */\n _addCommands() {\n const { editor } = this;\n\n // Add command to open the formula editor\n editor.commands.add(\"MathType\", new MathTypeCommand(editor));\n\n // Add command to open the chemistry formula editor\n editor.commands.add(\"ChemType\", new ChemTypeCommand(editor));\n }\n\n /**\n * Add the buttons for MathType and ChemType\n * @param {CKEditor5Integration} integration the integration object\n */\n _addViews(integration) {\n const { editor } = this;\n\n // Check if MathType editor is enabled\n if (Configuration.get(\"editorEnabled\")) {\n // Add button for the formula editor\n editor.ui.componentFactory.add(\"MathType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"MathType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_math\", integration.getLanguage()),\n icon: mathIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"MathType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Check if ChemType editor is enabled\n if (Configuration.get(\"chemEnabled\")) {\n // Add button for the chemistry formula editor\n editor.ui.componentFactory.add(\"ChemType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"ChemType\"), \"isEnabled\");\n\n view.set({\n label: StringManager.get(\"insert_chem\", integration.getLanguage()),\n icon: chemIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"ChemType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Observer for the Double-click event\n editor.editing.view.addObserver(ClickObserver);\n }\n\n /**\n * Registers the element in the schema\n */\n _addSchema() {\n const { schema } = this.editor.model;\n\n schema.register(\"mathml\", {\n inheritAllFrom: \"$inlineObject\",\n allowAttributes: [\"formula\"],\n });\n }\n\n /**\n * Add the downcast and upcast converters\n */\n _addConverters(integration) {\n const { editor } = this;\n\n // Editing view -> Model\n editor.conversion.for(\"upcast\").elementToElement({\n view: {\n name: \"span\",\n classes: \"ck-math-widget\",\n },\n model: (viewElement, { writer: modelWriter }) => {\n const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute(\"data-mathml\"));\n return modelWriter.createElement(\"mathml\", {\n formula,\n });\n },\n });\n\n // Data view -> Model\n editor.data.upcastDispatcher.on(\"element:math\", (evt, data, conversionApi) => {\n const { consumable, writer } = conversionApi;\n const { viewItem } = data;\n\n // When element was already consumed then skip it.\n if (!consumable.test(viewItem, { name: true })) {\n return;\n }\n\n // If we encounter any with a LaTeX annotation inside,\n // convert it into a \"$$...$$\" string.\n const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define\n\n // Get the formula of the (which is all its children).\n const processor = new XmlDataProcessor(editor.editing.view.document);\n\n // Only god knows why the following line makes viewItem lose all of its children,\n // so we obtain isLatex before doing this because we need viewItem's children for that.\n const upcastWriter = new UpcastWriter(editor.editing.view.document);\n const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren());\n\n // and obtain the attributes of too!\n const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}=\"${value}\"`).join(\"\");\n\n // We process the document fragment\n let formula = processor.toData(viewDocumentFragment) || \"\";\n\n // And obtain the complete formula\n formula = Util.htmlSanitize(`${formula}`);\n\n // Replaces the < & > characters to its HTMLEntity to avoid render issues.\n formula = formula.replaceAll('\"<\"', '\"<\"').replaceAll('\">\"', '\">\"').replaceAll(\"><<\", \"><<\");\n\n /* Model node that contains what's going to actually be inserted. This can be either:\n - A element with a formula attribute set to the given formula, or\n - If the original had a LaTeX annotation, then the annotation surrounded by \"$$...$$\" */\n const modelNode = isLatex\n ? writer.createText(Parser.initParse(formula, integration.getLanguage()))\n : writer.createElement(\"mathml\", { formula });\n\n // Find allowed parent for element that we are going to insert.\n // If current parent does not allow to insert element but one of the ancestors does\n // then split nodes to allowed parent.\n const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor);\n\n // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n if (!splitResult) {\n return;\n }\n\n // Insert element on allowed position.\n conversionApi.writer.insert(modelNode, splitResult.position);\n\n // Consume appropriate value from consumable values list.\n consumable.consume(viewItem, { name: true });\n\n const parts = conversionApi.getSplitParts(modelNode);\n\n // Set conversion result range.\n data.modelRange = writer.createRange(\n conversionApi.writer.createPositionBefore(modelNode),\n conversionApi.writer.createPositionAfter(parts[parts.length - 1]),\n );\n\n // Now we need to check where the `modelCursor` should be.\n if (splitResult.cursorParent) {\n // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n //\n // before: foo[]\n // after: foo[]\n\n data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n } else {\n // Otherwise just continue after inserted element.\n data.modelCursor = data.modelRange.end;\n }\n });\n\n /**\n * Whether the given view element has a LaTeX annotation element.\n * @param {*} math\n * @returns {bool}\n */\n function mathIsLatex(math) {\n const semantics = math.getChild(0);\n if (!semantics || semantics.name !== \"semantics\") return false;\n for (const child of semantics.getChildren()) {\n if (child.name === \"annotation\" && child.getAttribute(\"encoding\") === \"LaTeX\") {\n return true;\n }\n }\n return false;\n }\n\n function createViewWidget(modelItem, { writer: viewWriter }) {\n const widgetElement = viewWriter.createContainerElement(\"span\", {\n class: \"ck-math-widget\",\n });\n\n const mathUIElement = createViewImage(modelItem, { writer: viewWriter }); // eslint-disable-line no-use-before-define\n\n if (mathUIElement) {\n viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement);\n }\n\n return toWidget(widgetElement, viewWriter);\n }\n\n function createViewImage(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n const mathString = modelItem.getAttribute(\"formula\").replaceAll('ref=\"<\"', 'ref=\"<\"');\n const imgHtml = Parser.initParse(mathString, integration.getLanguage());\n const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0);\n\n /* Although we use the HtmlDataProcessor to obtain the attributes,\n we must create a new EmptyElement which is independent of the\n DataProcessor being used by this editor instance */\n if (imgElement) {\n return viewWriter.createEmptyElement(\"img\", imgElement.getAttributes(), {\n renderUnsafeAttributes: [\"src\"],\n });\n }\n\n return null;\n }\n\n // Model -> Editing view\n editor.conversion.for(\"editingDowncast\").elementToElement({\n model: \"mathml\",\n view: createViewWidget,\n });\n\n // Model -> Data view\n editor.conversion.for(\"dataDowncast\").elementToElement({\n model: \"mathml\",\n view: createDataString, // eslint-disable-line no-use-before-define\n });\n\n /**\n * Makes a copy of the given view node.\n * @param {module:engine/view/node~Node} sourceNode Node to copy.\n * @returns {module:engine/view/node~Node} Copy of the node.\n */\n function clone(viewWriter, sourceNode) {\n if (sourceNode.is(\"text\")) {\n return viewWriter.createText(sourceNode.data);\n }\n if (sourceNode.is(\"element\")) {\n if (sourceNode.is(\"emptyElement\")) {\n return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes());\n }\n const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes());\n for (const child of sourceNode.getChildren()) {\n viewWriter.insert(viewWriter.createPositionAt(element, \"end\"), clone(viewWriter, child));\n }\n return element;\n }\n\n throw new Exception(\"Given node has unsupported type.\"); // eslint-disable-line no-undef\n }\n\n function createDataString(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n let mathString = Parser.endParseSaveMode(modelItem.getAttribute(\"formula\"));\n\n const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0);\n\n return clone(viewWriter, sourceMathElement);\n }\n\n // This stops the view selection getting into the s and messing up caret movement\n editor.editing.mapper.on(\n \"viewToModelPosition\",\n viewToModelPositionOutsideModelElement(editor.model, (viewElement) => viewElement.hasClass(\"ck-math-widget\")),\n );\n\n // Keep a reference to the original get and set function.\n const { get, set } = editor.data;\n\n /**\n * Hack to transform $$latex$$ into in editor.getData()'s output.\n */\n editor.data.on(\n \"get\",\n (e) => {\n let output = e.return;\n // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any.\n // For text or latex formulas, it returns the original output.\n e.return = MathML.removeSemantics(output, \"application/json\");\n },\n { priority: \"low\" },\n );\n\n /**\n * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData().\n */\n editor.data.on(\n \"set\",\n (e, args) => {\n // Retrieve the data to be set on the CKEditor.\n let modifiedData = args[0];\n // Regex to find all mathml formulas.\n const regexp = //gm;\n\n // Get all MathML formulas and store them in an array.\n // Using the conditional operator on data.main because the data parameter has different types depending on:\n // editor.data.set can be used directly or by the source editing plugin.\n // With the source editor plugin, data is an object with the key `main` which contains the source code string.\n // When using the editor.data.set method, the data is a string with the content to be set to the editor.\n let formulas = Object.values(modifiedData)[0]\n ? [...Object.values(modifiedData)[0].matchAll(regexp)]\n : [...modifiedData.matchAll(regexp)];\n\n // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation.\n formulas.forEach((formula) => {\n let mathml = formula[0];\n if (mathml.includes('encoding=\"LaTeX\"')) {\n // LaTeX found.\n let latex = \"$$$\" + Latex.getLatexFromMathML(mathml) + \"$$$\"; // We add $$$ instead of $$ because the replace function ignores one $.\n modifiedData = modifiedData.replace(mathml, latex);\n }\n });\n\n args[0] = modifiedData;\n },\n { priority: \"high\" },\n );\n }\n\n /**\n * Expose the WirisPlugin variable to the window\n */\n // eslint-disable-next-line class-methods-use-this\n _exposeWiris() {\n window.WirisPlugin = {\n Core,\n Parser,\n Image,\n MathML,\n Util,\n Configuration,\n Listeners,\n IntegrationModel,\n currentInstance,\n Latex,\n };\n }\n}\n"],"names":["CKEditor5Integration","IntegrationModel","constructor","ckeditorIntegrationModelProperties","editor","editorObject","config","get","integrationParameters","integrationFolderName","getLanguage","editorParameters","language","e","languageObject","hasOwnProperty","ui","addEditorListeners","wirislistenersdisabled","checkElement","newElement","sourceElement","wirisActive","setTarget","addEvents","doubleClickHandler","element","event","core","editionProperties","dbclick","isReadOnly","nodeName","toLowerCase","Util","containsClass","Configuration","stopPropagation","returnValue","getCustomEditors","disable","customEditorAttr","getAttribute","enable","temporalImage","openExistingFormulaEditor","getCorePath","callbackFunction","openNewFormulaEditor","selection","editing","view","document","insertMathml","mathml","model","change","writer","getCore","modelElementNew","createElement","formula","Object","fromEntries","getAttributes","isNewElement","viewSelection","modelPosition","mapper","toModelPosition","getLastPosition","insertObject","isCollapsed","range","getRanges","remove","toModelRange","position","createPositionAfter","setSelection","img","viewElement","domConverter","domToView","parent","modelElementOld","toModelElement","createPositionBefore","findText","pivot","parentElement","createRangeIn","descendants","Array","from","getItems","node","viewElementData","data","nodeType","replaceAll","String","fromCharCode","is","replace","textNode","insertFormula","focusElement","windowTarget","wirisProperties","returnObject","mathmlOrigin","editMode","latex","Latex","getLatexFromMathML","createTextNode","latexRange","startNode","startContainer","endNode","endContainer","startPosition","createPositionAt","startOffset","endPosition","endOffset","createRange","previousSibling","latexEdited","MathML","safeXmlDecode","dataset","offset","indexOf","dataOffset","substring","second$","substr","insertText","viewToDom","toViewElement","x","toString","includes","modalDialog","cancelAction","payload","mathml_origin","elapsed_time","Date","now","editionStartTime","editor_origin","toolbar","contentManager","size","length","keys","forEach","key","Telemeter","telemeter","track","error","console","notifyWindowClosed","focus","MathTypeCommand","Command","execute","options","integration","setEditor","openEditor","image","_getSelectedImage","classList","contains","WirisPlugin","rangeCount","getFirstRange","span","item","name","getChild","mapViewToDom","ChemTypeCommand","currentInstance","MathType","Plugin","requires","Widget","pluginName","init","_addIntegration","_addCommands","_addViews","_addSchema","_addConverters","_exposeWiris","destroy","integrationProperties","environment","editorVersion","version","packageInfo","serviceProviderProperties","URI","server","target","scriptName","managesLanguage","listeners","fire","listenTo","evt","domEvent","detail","domTarget","stop","priority","commands","add","componentFactory","locale","ButtonView","bind","to","set","label","StringManager","icon","mathIcon","tooltip","on","chemIcon","addObserver","ClickObserver","schema","register","inheritAllFrom","allowAttributes","conversion","for","elementToElement","classes","modelWriter","upcastDispatcher","conversionApi","consumable","viewItem","test","isLatex","mathIsLatex","processor","XmlDataProcessor","upcastWriter","UpcastWriter","viewDocumentFragment","createDocumentFragment","getChildren","mathAttributes","map","value","join","toData","htmlSanitize","modelNode","createText","Parser","initParse","splitResult","splitToAllowedParent","modelCursor","insert","consume","parts","getSplitParts","modelRange","cursorParent","end","math","semantics","child","createViewWidget","modelItem","viewWriter","widgetElement","createContainerElement","class","mathUIElement","createViewImage","toWidget","htmlDataProcessor","HtmlDataProcessor","mathString","imgHtml","imgElement","toView","createEmptyElement","renderUnsafeAttributes","createDataString","clone","sourceNode","Exception","endParseSaveMode","sourceMathElement","viewToModelPositionOutsideModelElement","hasClass","output","return","removeSemantics","args","modifiedData","regexp","formulas","values","matchAll","window","Core","Image","Listeners"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sources":["../src/integration.js","../src/commands.js","../src/plugin.js"],"sourcesContent":["import IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Telemeter from \"@wiris/mathtype-html-integration-devkit/src/telemeter.js\";\n\n/**\n * This class represents the MathType integration for CKEditor5.\n * @extends {IntegrationModel}\n */\nexport default class CKEditor5Integration extends IntegrationModel {\n constructor(ckeditorIntegrationModelProperties) {\n const editor = ckeditorIntegrationModelProperties.editorObject;\n\n if (typeof editor.config !== \"undefined\" && typeof editor.config.get(\"mathTypeParameters\") !== \"undefined\") {\n ckeditorIntegrationModelProperties.integrationParameters = editor.config.get(\"mathTypeParameters\");\n }\n /**\n * CKEditor5 Integration.\n *\n * @param {integrationModelProperties} integrationModelAttributes\n */\n super(ckeditorIntegrationModelProperties);\n\n /**\n * Folder name used for the integration inside CKEditor plugins folder.\n */\n this.integrationFolderName = \"ckeditor_wiris\";\n }\n\n /**\n * @inheritdoc\n * @returns {string} - The CKEditor instance language.\n * @override\n */\n getLanguage() {\n // Returns the CKEDitor instance language taking into account that the language can be an object.\n // Try to get editorParameters.language, fail silently otherwise\n try {\n return this.editorParameters.language;\n } catch (e) {}\n const languageObject = this.editorObject.config.get(\"language\");\n if (languageObject != null) {\n if (typeof languageObject === \"object\") {\n // eslint-disable-next-line no-prototype-builtins\n if (languageObject.hasOwnProperty(\"ui\")) {\n return languageObject.ui;\n }\n return languageObject;\n }\n return languageObject;\n }\n return super.getLanguage();\n }\n\n /**\n * Adds callbacks to the following CKEditor listeners:\n * - 'focus' - updates the current instance.\n * - 'contentDom' - adds 'doubleclick' callback.\n * - 'doubleclick' - sets to null data.dialog property to avoid modifications for MathType formulas.\n * - 'setData' - parses the data converting MathML into images.\n * - 'afterSetData' - adds an observer to MathType formulas to avoid modifications.\n * - 'getData' - parses the data converting images into selected save mode (MathML by default).\n * - 'mode' - recalculates the active element.\n */\n addEditorListeners() {\n const editor = this.editorObject;\n\n if (typeof editor.config.wirislistenersdisabled === \"undefined\" || !editor.config.wirislistenersdisabled) {\n this.checkElement();\n }\n }\n\n /**\n * Checks the current container and assign events in case that it doesn't have them.\n * CKEditor replaces several times the element element during its execution,\n * so we must assign the events again to editor element.\n */\n checkElement() {\n const editor = this.editorObject;\n const newElement = editor.sourceElement;\n\n // If the element wasn't treated, add the events.\n if (!newElement.wirisActive) {\n this.setTarget(newElement);\n this.addEvents();\n // Set the element as treated\n newElement.wirisActive = true;\n }\n }\n\n /**\n * @inheritdoc\n * @param {HTMLElement} element - HTMLElement target.\n * @param {MouseEvent} event - event which trigger the handler.\n */\n doubleClickHandler(element, event) {\n this.core.editionProperties.dbclick = true;\n if (this.editorObject.isReadOnly === false) {\n if (element.nodeName.toLowerCase() === \"img\") {\n if (Util.containsClass(element, Configuration.get(\"imageClassName\"))) {\n // Some plugins (image2, image) open a dialog on Double-click. On formulas\n // doubleclick event ends here.\n if (typeof event.stopPropagation !== \"undefined\") {\n // old I.E compatibility.\n event.stopPropagation();\n } else {\n event.returnValue = false;\n }\n this.core.getCustomEditors().disable();\n const customEditorAttr = element.getAttribute(Configuration.get(\"imageCustomEditorName\"));\n if (customEditorAttr) {\n this.core.getCustomEditors().enable(customEditorAttr);\n }\n this.core.editionProperties.temporalImage = element;\n this.openExistingFormulaEditor();\n }\n }\n }\n }\n\n /** @inheritdoc */\n static getCorePath() {\n return null; // TODO\n }\n\n /** @inheritdoc */\n callbackFunction() {\n super.callbackFunction();\n this.addEditorListeners();\n }\n\n openNewFormulaEditor() {\n // Store the editor selection as it will be lost upon opening the modal\n this.core.editionProperties.selection = this.editorObject.editing.view.document.selection;\n\n // Focus on the selected editor when multiple editor instances are present\n WirisPlugin.currentInstance = this;\n\n return super.openNewFormulaEditor();\n }\n\n /**\n * Replaces old formula with new MathML or inserts it in caret position if new\n * @param {String} mathml MathML to update old one or insert\n * @returns {module:engine/model/element~Element} The model element corresponding to the inserted image\n */\n insertMathml(mathml) {\n // This returns the value returned by the callback function (writer => {...})\n return this.editorObject.model.change((writer) => {\n const core = this.getCore();\n const selection = this.editorObject.model.document.selection;\n\n const modelElementNew = writer.createElement(\"mathml\", {\n formula: mathml,\n ...Object.fromEntries(selection.getAttributes()), // To keep the format, such as style and font\n });\n\n // Obtain the DOM object corresponding to the formula\n if (core.editionProperties.isNewElement) {\n // Don't bother inserting anything at all if the MathML is empty.\n if (!mathml) return;\n\n const viewSelection =\n this.core.editionProperties.selection || this.editorObject.editing.view.document.selection;\n const modelPosition = this.editorObject.editing.mapper.toModelPosition(viewSelection.getLastPosition());\n\n this.editorObject.model.insertObject(modelElementNew, modelPosition);\n\n // Remove selection\n if (!viewSelection.isCollapsed) {\n for (const range of viewSelection.getRanges()) {\n writer.remove(this.editorObject.editing.mapper.toModelRange(range));\n }\n }\n\n // Set carret after the formula\n const position = this.editorObject.model.createPositionAfter(modelElementNew);\n writer.setSelection(position);\n } else {\n const img = core.editionProperties.temporalImage;\n const viewElement = this.editorObject.editing.view.domConverter.domToView(img).parent;\n const modelElementOld = this.editorObject.editing.mapper.toModelElement(viewElement);\n\n // Insert the new and remove the old one\n const position = this.editorObject.model.createPositionBefore(modelElementOld);\n\n // If the given MathML is empty, don't insert a new formula.\n if (mathml) {\n this.editorObject.model.insertObject(modelElementNew, position);\n }\n writer.remove(modelElementOld);\n }\n\n // eslint-disable-next-line consistent-return\n return modelElementNew;\n });\n }\n\n /**\n * Finds the text node corresponding to given DOM text element.\n * @param {element} viewElement Element to find corresponding text node of.\n * @returns {module:engine/model/text~Text|undefined} Text node corresponding to the given element or undefined if it doesn't exist.\n */\n findText(viewElement) {\n // eslint-disable-line consistent-return\n // mapper always converts text nodes to *new* model elements so we need to convert the text's parents and then come back down\n let pivot = viewElement;\n let element;\n while (!element) {\n element = this.editorObject.editing.mapper.toModelElement(\n this.editorObject.editing.view.domConverter.domToView(pivot),\n );\n pivot = pivot.parentElement;\n }\n\n // Navigate through all the subtree under `pivot` in order to find the correct text node\n const range = this.editorObject.model.createRangeIn(element);\n const descendants = Array.from(range.getItems());\n for (const node of descendants) {\n let viewElementData = viewElement.data;\n if (viewElement.nodeType === 3) {\n // Remove invisible white spaces\n viewElementData = viewElementData.replaceAll(String.fromCharCode(8288), \"\");\n }\n if (node.is(\"textProxy\") && node.data === viewElementData.replace(String.fromCharCode(160), \" \")) {\n return node.textNode;\n }\n }\n }\n\n /** @inheritdoc */\n insertFormula(focusElement, windowTarget, mathml, wirisProperties) {\n // eslint-disable-line no-unused-vars\n const returnObject = {};\n\n let mathmlOrigin;\n if (!mathml) {\n this.insertMathml(\"\");\n } else if (this.core.editMode === \"latex\") {\n returnObject.latex = Latex.getLatexFromMathML(mathml);\n returnObject.node = windowTarget.document.createTextNode(`$$${returnObject.latex}$$`);\n\n this.editorObject.model.change((writer) => {\n const { latexRange } = this.core.editionProperties;\n\n const startNode = this.findText(latexRange.startContainer);\n const endNode = this.findText(latexRange.endContainer);\n\n let startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + latexRange.startOffset);\n let endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + latexRange.endOffset);\n\n let range = writer.createRange(startPosition, endPosition);\n\n // When Latex is next to image/formula.\n if (latexRange.startContainer.nodeType === 3 && latexRange.startContainer.previousSibling?.nodeType === 1) {\n // Get the position of the latex to be replaced.\n let latexEdited =\n \"$$\" +\n Latex.getLatexFromMathML(MathML.safeXmlDecode(this.core.editionProperties.temporalImage.dataset.mathml)) +\n \"$$\";\n let data = latexRange.startContainer.data;\n\n // Remove invisible characters.\n data = data.replaceAll(String.fromCharCode(8288), \"\");\n\n // Get to the start of the latex we are editing.\n let offset = data.indexOf(latexEdited);\n let dataOffset = data.substring(offset);\n let second$ = dataOffset.substring(2).indexOf(\"$$\") + 4;\n let substring = dataOffset.substr(0, second$);\n data = data.replace(substring, \"\");\n\n if (!data) {\n startPosition = writer.createPositionBefore(startNode);\n range = startNode;\n } else {\n startPosition = startPosition = writer.createPositionAt(startNode.parent, startNode.startOffset + offset);\n endPosition = writer.createPositionAt(endNode.parent, endNode.startOffset + second$ + offset);\n range = writer.createRange(startPosition, endPosition);\n }\n }\n\n writer.remove(range);\n writer.insertText(`$$${returnObject.latex}$$`, startNode.getAttributes(), startPosition);\n });\n } else {\n mathmlOrigin = this.core.editionProperties.temporalImage?.dataset.mathml;\n try {\n returnObject.node = this.editorObject.editing.view.domConverter.viewToDom(\n this.editorObject.editing.mapper.toViewElement(this.insertMathml(mathml)),\n windowTarget.document,\n );\n } catch (e) {\n const x = e.toString();\n if (x.includes(\"CKEditorError: Cannot read property 'parent' of undefined\")) {\n this.core.modalDialog.cancelAction();\n }\n }\n }\n\n // Build the telemeter payload separated to delete null/undefined entries.\n let payload = {\n mathml_origin: mathmlOrigin ? MathML.safeXmlDecode(mathmlOrigin) : mathmlOrigin,\n mathml: mathml ? MathML.safeXmlDecode(mathml) : mathml,\n elapsed_time: Date.now() - this.core.editionProperties.editionStartTime,\n editor_origin: null, // TODO read formula to find out whether it comes from Oxygen Desktop\n toolbar: this.core.modalDialog.contentManager.toolbar,\n size: mathml?.length,\n };\n\n // Remove desired null keys.\n Object.keys(payload).forEach((key) => {\n if (key === \"mathml_origin\" || key === \"editor_origin\") !payload[key] ? delete payload[key] : {};\n });\n\n // Call Telemetry service to track the event.\n try {\n Telemeter.telemeter.track(\"INSERTED_FORMULA\", {\n ...payload,\n });\n } catch (error) {\n console.error(\"Error tracking INSERTED_FORMULA\", error);\n }\n\n /* Due to PLUGINS-1329, we add the onChange event to the CK4 insertFormula.\n We probably should add it here as well, but we should look further into how */\n // this.editorObject.fire('change');\n\n // Remove temporal image of inserted formula\n this.core.editionProperties.temporalImage = null;\n\n return returnObject;\n }\n\n /**\n * Function called when the content submits an action.\n */\n notifyWindowClosed() {\n this.editorObject.editing.view.focus();\n }\n}\n","/* eslint-disable max-classes-per-file */\nimport { Command } from \"ckeditor5/src/core.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\n/**\n * Command for opening the MathType editor\n */\nexport class MathTypeCommand extends Command {\n execute(options = {}) {\n // Check we get a valid integration\n // eslint-disable-next-line no-prototype-builtins\n if (!options.hasOwnProperty(\"integration\") || !(options.integration instanceof CKEditor5Integration)) {\n throw 'Must pass a valid CKEditor5Integration instance as attribute \"integration\" of options';\n }\n\n // Save the integration instance as a property of the command.\n this.integration = options.integration;\n\n // Set custom editor or disable it\n this.setEditor();\n\n // Open the editor\n this.openEditor();\n }\n\n /**\n * Sets the appropriate custom editor, if any, or disables them.\n */\n setEditor() {\n // It's possible that a custom editor was last used.\n // We need to disable it to avoid wrong behaviors.\n this.integration.core.getCustomEditors().disable();\n }\n\n /**\n * Checks whether we are editing an existing formula or a new one and opens the editor.\n */\n openEditor() {\n this.integration.core.editionProperties.dbclick = false;\n const image = this._getSelectedImage();\n if (\n typeof image !== \"undefined\" &&\n image !== null &&\n image.classList.contains(WirisPlugin.Configuration.get(\"imageClassName\"))\n ) {\n this.integration.core.editionProperties.temporalImage = image;\n this.integration.openExistingFormulaEditor();\n } else {\n this.integration.openNewFormulaEditor();\n }\n }\n\n /**\n * Gets the currently selected formula image\n * @returns {Element} selected image, if any, undefined otherwise\n */\n _getSelectedImage() {\n const { selection } = this.editor.editing.view.document;\n\n // If we can not extract the formula, fall back to default behavior.\n if (selection.isCollapsed || selection.rangeCount !== 1) {\n return;\n }\n\n // Look for the wrapping the formula and then for the inside\n\n const range = selection.getFirstRange();\n\n let image;\n\n for (const span of range) {\n if (span.item.name !== \"span\") {\n return;\n }\n image = span.item.getChild(0);\n break;\n }\n\n if (!image) {\n return;\n }\n\n // eslint-disable-next-line consistent-return\n return this.editor.editing.view.domConverter.mapViewToDom(image);\n }\n}\n\n/**\n * Command for opening the ChemType editor\n */\nexport class ChemTypeCommand extends MathTypeCommand {\n setEditor() {\n this.integration.core.getCustomEditors().enable(\"chemistry\");\n }\n}\n","// CKEditor imports\nimport { Plugin } from 'ckeditor5/src/core.js';\nimport { ButtonView } from 'ckeditor5/src/ui.js';\nimport { ClickObserver, HtmlDataProcessor, XmlDataProcessor, UpcastWriter } from 'ckeditor5/src/engine.js';\nimport { Widget, toWidget, viewToModelPositionOutsideModelElement } from 'ckeditor5/src/widget.js';\n\n// MathType API imports\nimport IntegrationModel from \"@wiris/mathtype-html-integration-devkit/src/integrationmodel.js\";\nimport Core from \"@wiris/mathtype-html-integration-devkit/src/core.src.js\";\nimport Parser from \"@wiris/mathtype-html-integration-devkit/src/parser.js\";\nimport Util from \"@wiris/mathtype-html-integration-devkit/src/util.js\";\nimport Image from \"@wiris/mathtype-html-integration-devkit/src/image.js\";\nimport Configuration from \"@wiris/mathtype-html-integration-devkit/src/configuration.js\";\nimport Listeners from \"@wiris/mathtype-html-integration-devkit/src/listeners.js\";\nimport MathML from \"@wiris/mathtype-html-integration-devkit/src/mathml.js\";\nimport Latex from \"@wiris/mathtype-html-integration-devkit/src/latex.js\";\nimport StringManager from \"@wiris/mathtype-html-integration-devkit/src/stringmanager.js\";\n\n// Local imports\nimport { MathTypeCommand, ChemTypeCommand } from \"./commands.js\";\nimport CKEditor5Integration from \"./integration.js\";\n\nimport mathIcon from \"../theme/icons/ckeditor5-formula.svg\";\nimport chemIcon from \"../theme/icons/ckeditor5-chem.svg\";\n\nimport packageInfo from \"../package.json\";\n\nexport let currentInstance = null; // eslint-disable-line import/no-mutable-exports\n\nexport default class MathType extends Plugin {\n static get requires() {\n return [Widget];\n }\n\n static get pluginName() {\n return \"MathType\";\n }\n\n init() {\n // Create the MathType API Integration object\n const integration = this._addIntegration();\n currentInstance = integration;\n\n // Add the MathType and ChemType commands to the editor\n this._addCommands();\n\n // Add the buttons for MathType and ChemType\n this._addViews(integration);\n\n // Registers the element in the schema\n this._addSchema();\n\n // Add the downcast and upcast converters\n this._addConverters(integration);\n\n // Expose the WirisPlugin variable to the window\n this._exposeWiris();\n }\n\n /**\n * Inherited from Plugin class: Executed when CKEditor5 is destroyed\n */\n destroy() {\n // eslint-disable-line class-methods-use-this\n currentInstance.destroy();\n }\n\n /**\n * Create the MathType API Integration object\n * @returns {CKEditor5Integration} the integration object\n */\n _addIntegration() {\n const { editor } = this;\n\n /**\n * Integration model constructor attributes.\n * @type {integrationModelProperties}\n */\n const integrationProperties = {};\n integrationProperties.environment = {};\n integrationProperties.environment.editor = \"CKEditor5\";\n integrationProperties.environment.editorVersion = \"5.x\";\n integrationProperties.version = packageInfo.version;\n integrationProperties.editorObject = editor;\n integrationProperties.serviceProviderProperties = {};\n integrationProperties.serviceProviderProperties.URI = \"https://www.wiris.net/demo/plugins/app\";\n integrationProperties.serviceProviderProperties.server = \"java\";\n integrationProperties.target = editor.sourceElement;\n integrationProperties.scriptName = \"bundle.js\";\n integrationProperties.managesLanguage = true;\n // etc\n\n // There are platforms like Drupal that initialize CKEditor but they hide or remove the container element.\n // To avoid a wrong behaviour, this integration only starts if the workspace container exists.\n let integration;\n if (integrationProperties.target) {\n // Instance of the integration associated to this editor instance\n integration = new CKEditor5Integration(integrationProperties);\n integration.init();\n integration.listeners.fire(\"onTargetReady\", {});\n\n integration.checkElement();\n\n this.listenTo(\n editor.editing.view.document,\n \"click\",\n (evt, data) => {\n // Is Double-click\n if (data.domEvent.detail === 2) {\n integration.doubleClickHandler(data.domTarget, data.domEvent);\n evt.stop();\n }\n },\n { priority: \"highest\" },\n );\n }\n\n return integration;\n }\n\n /**\n * Add the MathType and ChemType commands to the editor\n */\n _addCommands() {\n const { editor } = this;\n\n // Add command to open the formula editor\n editor.commands.add(\"MathType\", new MathTypeCommand(editor));\n\n // Add command to open the chemistry formula editor\n editor.commands.add(\"ChemType\", new ChemTypeCommand(editor));\n }\n\n /**\n * Add the buttons for MathType and ChemType\n * @param {CKEditor5Integration} integration the integration object\n */\n _addViews(integration) {\n const { editor } = this;\n\n // Check if MathType editor is enabled\n if (Configuration.get(\"editorEnabled\")) {\n // Add button for the formula editor\n editor.ui.componentFactory.add(\"MathType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"MathType\"), \"isEnabled\");\n view.set({\n label: StringManager.get(\"insert_math\", integration.getLanguage()),\n icon: mathIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"MathType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Check if ChemType editor is enabled\n if (Configuration.get(\"chemEnabled\")) {\n // Add button for the chemistry formula editor\n editor.ui.componentFactory.add(\"ChemType\", (locale) => {\n const view = new ButtonView(locale);\n\n // View is enabled iff command is enabled\n view.bind(\"isEnabled\").to(editor.commands.get(\"ChemType\"), \"isEnabled\");\n\n view.set({\n label: StringManager.get(\"insert_chem\", integration.getLanguage()),\n icon: chemIcon,\n tooltip: true,\n });\n\n // Callback executed once the image is clicked.\n view.on(\"execute\", () => {\n editor.execute(\"ChemType\", {\n integration, // Pass integration as parameter\n });\n });\n\n return view;\n });\n }\n\n // Observer for the Double-click event\n editor.editing.view.addObserver(ClickObserver);\n }\n\n /**\n * Registers the element in the schema\n */\n _addSchema() {\n const { schema } = this.editor.model;\n\n schema.register(\"mathml\", {\n inheritAllFrom: \"$inlineObject\",\n allowAttributes: [\"formula\"],\n });\n }\n\n /**\n * Add the downcast and upcast converters\n */\n _addConverters(integration) {\n const { editor } = this;\n\n // Editing view -> Model\n editor.conversion.for(\"upcast\").elementToElement({\n view: {\n name: \"span\",\n classes: \"ck-math-widget\",\n },\n model: (viewElement, { writer: modelWriter }) => {\n const formula = MathML.safeXmlDecode(viewElement.getChild(0).getAttribute(\"data-mathml\"));\n return modelWriter.createElement(\"mathml\", {\n formula,\n });\n },\n });\n\n // Data view -> Model\n editor.data.upcastDispatcher.on(\"element:math\", (evt, data, conversionApi) => {\n const { consumable, writer } = conversionApi;\n const { viewItem } = data;\n\n // When element was already consumed then skip it.\n if (!consumable.test(viewItem, { name: true })) {\n return;\n }\n\n // If we encounter any with a LaTeX annotation inside,\n // convert it into a \"$$...$$\" string.\n const isLatex = mathIsLatex(viewItem); // eslint-disable-line no-use-before-define\n\n // Get the formula of the (which is all its children).\n const processor = new XmlDataProcessor(editor.editing.view.document);\n\n // Only god knows why the following line makes viewItem lose all of its children,\n // so we obtain isLatex before doing this because we need viewItem's children for that.\n const upcastWriter = new UpcastWriter(editor.editing.view.document);\n const viewDocumentFragment = upcastWriter.createDocumentFragment(viewItem.getChildren());\n\n // and obtain the attributes of too!\n const mathAttributes = [...viewItem.getAttributes()].map(([key, value]) => ` ${key}=\"${value}\"`).join(\"\");\n\n // We process the document fragment\n let formula = processor.toData(viewDocumentFragment) || \"\";\n\n // And obtain the complete formula\n formula = Util.htmlSanitize(`${formula}`);\n\n // Replaces the < & > characters to its HTMLEntity to avoid render issues.\n formula = formula.replaceAll('\"<\"', '\"<\"').replaceAll('\">\"', '\">\"').replaceAll(\"><<\", \"><<\");\n\n /* Model node that contains what's going to actually be inserted. This can be either:\n - A element with a formula attribute set to the given formula, or\n - If the original had a LaTeX annotation, then the annotation surrounded by \"$$...$$\" */\n const modelNode = isLatex\n ? writer.createText(Parser.initParse(formula, integration.getLanguage()))\n : writer.createElement(\"mathml\", { formula });\n\n // Find allowed parent for element that we are going to insert.\n // If current parent does not allow to insert element but one of the ancestors does\n // then split nodes to allowed parent.\n const splitResult = conversionApi.splitToAllowedParent(modelNode, data.modelCursor);\n\n // When there is no split result it means that we can't insert element to model tree, so let's skip it.\n if (!splitResult) {\n return;\n }\n\n // Insert element on allowed position.\n conversionApi.writer.insert(modelNode, splitResult.position);\n\n // Consume appropriate value from consumable values list.\n consumable.consume(viewItem, { name: true });\n\n const parts = conversionApi.getSplitParts(modelNode);\n\n // Set conversion result range.\n data.modelRange = writer.createRange(\n conversionApi.writer.createPositionBefore(modelNode),\n conversionApi.writer.createPositionAfter(parts[parts.length - 1]),\n );\n\n // Now we need to check where the `modelCursor` should be.\n if (splitResult.cursorParent) {\n // If we split parent to insert our element then we want to continue conversion in the new part of the split parent.\n //\n // before: foo[]\n // after: foo[]\n\n data.modelCursor = conversionApi.writer.createPositionAt(splitResult.cursorParent, 0);\n } else {\n // Otherwise just continue after inserted element.\n data.modelCursor = data.modelRange.end;\n }\n });\n\n /**\n * Whether the given view element has a LaTeX annotation element.\n * @param {*} math\n * @returns {bool}\n */\n function mathIsLatex(math) {\n const semantics = math.getChild(0);\n if (!semantics || semantics.name !== \"semantics\") return false;\n for (const child of semantics.getChildren()) {\n if (child.name === \"annotation\" && child.getAttribute(\"encoding\") === \"LaTeX\") {\n return true;\n }\n }\n return false;\n }\n\n function createViewWidget(modelItem, { writer: viewWriter }) {\n const widgetElement = viewWriter.createContainerElement(\"span\", {\n class: \"ck-math-widget\",\n });\n\n const mathUIElement = createViewImage(modelItem, { writer: viewWriter }); // eslint-disable-line no-use-before-define\n\n if (mathUIElement) {\n viewWriter.insert(viewWriter.createPositionAt(widgetElement, 0), mathUIElement);\n }\n\n return toWidget(widgetElement, viewWriter);\n }\n\n function createViewImage(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n const mathString = modelItem.getAttribute(\"formula\").replaceAll('ref=\"<\"', 'ref=\"<\"');\n const imgHtml = Parser.initParse(mathString, integration.getLanguage());\n const imgElement = htmlDataProcessor.toView(imgHtml).getChild(0);\n\n /* Although we use the HtmlDataProcessor to obtain the attributes,\n we must create a new EmptyElement which is independent of the\n DataProcessor being used by this editor instance */\n if (imgElement) {\n return viewWriter.createEmptyElement(\"img\", imgElement.getAttributes(), {\n renderUnsafeAttributes: [\"src\"],\n });\n }\n\n return null;\n }\n\n // Model -> Editing view\n editor.conversion.for(\"editingDowncast\").elementToElement({\n model: \"mathml\",\n view: createViewWidget,\n });\n\n // Model -> Data view\n editor.conversion.for(\"dataDowncast\").elementToElement({\n model: \"mathml\",\n view: createDataString, // eslint-disable-line no-use-before-define\n });\n\n /**\n * Makes a copy of the given view node.\n * @param {module:engine/view/node~Node} sourceNode Node to copy.\n * @returns {module:engine/view/node~Node} Copy of the node.\n */\n function clone(viewWriter, sourceNode) {\n if (sourceNode.is(\"text\")) {\n return viewWriter.createText(sourceNode.data);\n }\n if (sourceNode.is(\"element\")) {\n if (sourceNode.is(\"emptyElement\")) {\n return viewWriter.createEmptyElement(sourceNode.name, sourceNode.getAttributes());\n }\n const element = viewWriter.createContainerElement(sourceNode.name, sourceNode.getAttributes());\n for (const child of sourceNode.getChildren()) {\n viewWriter.insert(viewWriter.createPositionAt(element, \"end\"), clone(viewWriter, child));\n }\n return element;\n }\n\n throw new Exception(\"Given node has unsupported type.\"); // eslint-disable-line no-undef\n }\n\n function createDataString(modelItem, { writer: viewWriter }) {\n const htmlDataProcessor = new HtmlDataProcessor(viewWriter.document);\n\n let mathString = Parser.endParseSaveMode(modelItem.getAttribute(\"formula\"));\n\n const sourceMathElement = htmlDataProcessor.toView(mathString).getChild(0);\n\n return clone(viewWriter, sourceMathElement);\n }\n\n // This stops the view selection getting into the s and messing up caret movement\n editor.editing.mapper.on(\n \"viewToModelPosition\",\n viewToModelPositionOutsideModelElement(editor.model, (viewElement) => viewElement.hasClass(\"ck-math-widget\")),\n );\n\n // Keep a reference to the original get and set function.\n const { get, set } = editor.data;\n\n /**\n * Hack to transform $$latex$$ into in editor.getData()'s output.\n */\n editor.data.on(\n \"get\",\n (e) => {\n let output = e.return;\n // This line cleans all the semantics stuff, including the handwritten data points and returns the MathML IF there is any.\n // For text or latex formulas, it returns the original output.\n e.return = MathML.removeSemantics(output, \"application/json\");\n },\n { priority: \"low\" },\n );\n\n /**\n * Hack to transform with LaTeX into $$LaTeX$$ in editor.setData().\n */\n editor.data.on(\n \"set\",\n (e, args) => {\n // Retrieve the data to be set on the CKEditor.\n let modifiedData = args[0];\n // Regex to find all mathml formulas.\n const regexp = //gm;\n\n // Get all MathML formulas and store them in an array.\n // Using the conditional operator on data.main because the data parameter has different types depending on:\n // editor.data.set can be used directly or by the source editing plugin.\n // With the source editor plugin, data is an object with the key `main` which contains the source code string.\n // When using the editor.data.set method, the data is a string with the content to be set to the editor.\n let formulas = Object.values(modifiedData)[0]\n ? [...Object.values(modifiedData)[0].matchAll(regexp)]\n : [...modifiedData.matchAll(regexp)];\n\n // Loop to find LaTeX formulas and replace the MathML for the LaTeX notation.\n formulas.forEach((formula) => {\n let mathml = formula[0];\n if (mathml.includes('encoding=\"LaTeX\"')) {\n // LaTeX found.\n let latex = \"$$$\" + Latex.getLatexFromMathML(mathml) + \"$$$\"; // We add $$$ instead of $$ because the replace function ignores one $.\n modifiedData = modifiedData.replace(mathml, latex);\n }\n });\n\n args[0] = modifiedData;\n },\n { priority: \"high\" },\n );\n }\n\n /**\n * Expose the WirisPlugin variable to the window\n */\n // eslint-disable-next-line class-methods-use-this\n _exposeWiris() {\n window.WirisPlugin = {\n Core,\n Parser,\n Image,\n MathML,\n Util,\n Configuration,\n Listeners,\n IntegrationModel,\n currentInstance,\n Latex,\n };\n }\n}\n"],"names":["CKEditor5Integration","IntegrationModel","constructor","ckeditorIntegrationModelProperties","editor","editorObject","config","get","integrationParameters","integrationFolderName","getLanguage","editorParameters","language","e","languageObject","hasOwnProperty","ui","addEditorListeners","wirislistenersdisabled","checkElement","newElement","sourceElement","wirisActive","setTarget","addEvents","doubleClickHandler","element","event","core","editionProperties","dbclick","isReadOnly","nodeName","toLowerCase","Util","containsClass","Configuration","stopPropagation","returnValue","getCustomEditors","disable","customEditorAttr","getAttribute","enable","temporalImage","openExistingFormulaEditor","getCorePath","callbackFunction","openNewFormulaEditor","selection","editing","view","document","WirisPlugin","currentInstance","insertMathml","mathml","model","change","writer","getCore","modelElementNew","createElement","formula","Object","fromEntries","getAttributes","isNewElement","viewSelection","modelPosition","mapper","toModelPosition","getLastPosition","insertObject","isCollapsed","range","getRanges","remove","toModelRange","position","createPositionAfter","setSelection","img","viewElement","domConverter","domToView","parent","modelElementOld","toModelElement","createPositionBefore","findText","pivot","parentElement","createRangeIn","descendants","Array","from","getItems","node","viewElementData","data","nodeType","replaceAll","String","fromCharCode","is","replace","textNode","insertFormula","focusElement","windowTarget","wirisProperties","returnObject","mathmlOrigin","editMode","latex","Latex","getLatexFromMathML","createTextNode","latexRange","startNode","startContainer","endNode","endContainer","startPosition","createPositionAt","startOffset","endPosition","endOffset","createRange","previousSibling","latexEdited","MathML","safeXmlDecode","dataset","offset","indexOf","dataOffset","substring","second$","substr","insertText","viewToDom","toViewElement","x","toString","includes","modalDialog","cancelAction","payload","mathml_origin","elapsed_time","Date","now","editionStartTime","editor_origin","toolbar","contentManager","size","length","keys","forEach","key","Telemeter","telemeter","track","error","console","notifyWindowClosed","focus","MathTypeCommand","Command","execute","options","integration","setEditor","openEditor","image","_getSelectedImage","classList","contains","rangeCount","getFirstRange","span","item","name","getChild","mapViewToDom","ChemTypeCommand","MathType","Plugin","requires","Widget","pluginName","init","_addIntegration","_addCommands","_addViews","_addSchema","_addConverters","_exposeWiris","destroy","integrationProperties","environment","editorVersion","version","packageInfo","serviceProviderProperties","URI","server","target","scriptName","managesLanguage","listeners","fire","listenTo","evt","domEvent","detail","domTarget","stop","priority","commands","add","componentFactory","locale","ButtonView","bind","to","set","label","StringManager","icon","mathIcon","tooltip","on","chemIcon","addObserver","ClickObserver","schema","register","inheritAllFrom","allowAttributes","conversion","for","elementToElement","classes","modelWriter","upcastDispatcher","conversionApi","consumable","viewItem","test","isLatex","mathIsLatex","processor","XmlDataProcessor","upcastWriter","UpcastWriter","viewDocumentFragment","createDocumentFragment","getChildren","mathAttributes","map","value","join","toData","htmlSanitize","modelNode","createText","Parser","initParse","splitResult","splitToAllowedParent","modelCursor","insert","consume","parts","getSplitParts","modelRange","cursorParent","end","math","semantics","child","createViewWidget","modelItem","viewWriter","widgetElement","createContainerElement","class","mathUIElement","createViewImage","toWidget","htmlDataProcessor","HtmlDataProcessor","mathString","imgHtml","imgElement","toView","createEmptyElement","renderUnsafeAttributes","createDataString","clone","sourceNode","Exception","endParseSaveMode","sourceMathElement","viewToModelPositionOutsideModelElement","hasClass","output","return","removeSemantics","args","modifiedData","regexp","formulas","values","matchAll","window","Core","Image","Listeners"],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5/package.json b/packages/ckeditor5/package.json index 1c3d57912..cc4d06bd6 100644 --- a/packages/ckeditor5/package.json +++ b/packages/ckeditor5/package.json @@ -35,8 +35,8 @@ "type": "module", "exports": { ".": "./src/plugin.js", - "./dist/*.css": "./dist/*.css", "./dist/*": "./dist/*", + "./browser/*": null, "./src/*": "./src/*", "./theme/*": "./theme/*", "./package.json": "./package.json" @@ -50,10 +50,10 @@ "@wiris/mathtype-html-integration-devkit": "1.17.3" }, "devDependencies": { - "@ckeditor/ckeditor5-dev-build-tools": "^40.2.0", - "ckeditor5": ">=42.0.0" + "@ckeditor/ckeditor5-dev-build-tools": "^42.0.0", + "ckeditor5": ">=43.0.0" }, "peerDependencies": { - "ckeditor5": ">=42.0.0" + "ckeditor5": ">=43.0.0" } } diff --git a/packages/ckeditor5/src/integration.js b/packages/ckeditor5/src/integration.js index ba83e6a65..7397be513 100644 --- a/packages/ckeditor5/src/integration.js +++ b/packages/ckeditor5/src/integration.js @@ -134,7 +134,10 @@ export default class CKEditor5Integration extends IntegrationModel { openNewFormulaEditor() { // Store the editor selection as it will be lost upon opening the modal this.core.editionProperties.selection = this.editorObject.editing.view.document.selection; + + // Focus on the selected editor when multiple editor instances are present WirisPlugin.currentInstance = this; + return super.openNewFormulaEditor(); } diff --git a/packages/devkit/src/util.js b/packages/devkit/src/util.js index 0f88b9b69..735d1accc 100644 --- a/packages/devkit/src/util.js +++ b/packages/devkit/src/util.js @@ -432,7 +432,7 @@ export default class Util { let annotation = html.match(annotationRegex); // Sanitize html code without removing our supported MathML tags and attributes. html = DOMPurify.sanitize(html, { - ADD_TAGS: ["semantics", "annotation", "mstack", "msline", "msrow"], + ADD_TAGS: ["semantics", "annotation", "mstack", "msline", "msrow", "none"], ADD_ATTR: ["linebreak", "charalign", "stackalign"], }); // Readd old annotation content.