DocumentServer/OfficeWeb/sdk/Word/Drawing/GlobalLoaders.js
2015-04-28 17:59:00 +03:00

518 lines
23 KiB
JavaScript

/*
* (c) Copyright Ascensio System SIA 2010-2015
*
* This program is a free software product. You can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License (AGPL)
* version 3 as published by the Free Software Foundation. In accordance with
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
* that Ascensio System SIA expressly excludes the warranty of non-infringement
* of any third-party rights.
*
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
*
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
* EU, LV-1021.
*
* The interactive user interfaces in modified source and object code versions
* of the Program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU AGPL version 3.
*
* Pursuant to Section 7(b) of the License you must retain the original Product
* logo when distributing the program. Pursuant to Section 7(e) we decline to
* grant you any rights under trademark law for use of our trademarks.
*
* All the Product's GUI elements, including illustrations and icon sets, as
* well as technical writing content are licensed under the terms of the
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
*
*/
"use strict";
(function (document) {
function CEmbeddedCutFontsLoader() {
this.Api = null;
this.font_infos = [];
this.font_files = [];
this.map_name_cutindex = null;
this.CurrentFindFileParse = -1;
this.Url = "";
this.bIsCutFontsUse = false;
var oThis = this;
this.load_cut_fonts = function () {
var scriptElem = document.createElement("script");
if (scriptElem.readyState && false) {
scriptElem.onreadystatechange = function () {
if (this.readyState == "complete" || this.readyState == "loaded") {
scriptElem.onreadystatechange = null;
setTimeout(oThis._callback_script_load, 0);
}
};
}
scriptElem.onload = scriptElem.onerror = oThis._callback_font_load;
scriptElem.setAttribute("src", this.Url);
scriptElem.setAttribute("type", "text/javascript");
document.getElementsByTagName("head")[0].appendChild(scriptElem);
this.Api.asyncFontsDocumentStartLoaded();
};
this._callback_font_load = function () {
if (undefined === embedded_fonts) {
return;
}
oThis.CurrentFindFileParse = 0;
setTimeout(oThis.parse_font, 10);
},
this.parse_font = function () {
var __font_data_idx = g_fonts_streams.length;
g_fonts_streams[__font_data_idx] = CreateFontData2(embedded_fonts[oThis.CurrentFindFileParse], undefined);
embedded_fonts[oThis.CurrentFindFileParse] = "";
oThis.font_files[oThis.CurrentFindFileParse].SetStreamIndex(__font_data_idx);
oThis.font_files[oThis.CurrentFindFileParse].Status = 0;
oThis.CurrentFindFileParse++;
if (oThis.CurrentFindFileParse >= oThis.font_files.length) {
oThis.Api.asyncFontsDocumentEndLoaded();
return;
}
setTimeout(oThis.parse_font, 10);
};
this.init_cut_fonts = function (_fonts) {
this.map_name_cutindex = {};
var _len = _fonts.length;
for (var i = 0; i < _len; i++) {
var _font = _fonts[i];
var _info = this.map_name_cutindex[_font.Name];
if (_info === undefined) {
_info = new CFontInfo(_font.Name, "", FONT_TYPE_ADDITIONAL_CUT, -1, -1, -1, -1, -1, -1, -1, -1);
this.map_name_cutindex[_font.Name] = _info;
}
switch (_font.Style) {
case 0:
_info.indexR = _font.IndexCut;
_info.faceIndexR = 0;
break;
case 1:
_info.indexB = _font.IndexCut;
_info.faceIndexB = 0;
break;
case 2:
_info.indexI = _font.IndexCut;
_info.faceIndexI = 0;
break;
case 3:
_info.indexBI = _font.IndexCut;
_info.faceIndexBI = 0;
break;
default:
break;
}
this.font_files[i] = new CFontFileLoader("embedded_cut" + i);
}
};
}
function CGlobalFontLoader() {
this.fonts_streams = [];
this.fontFilesPath = "";
this.fontFiles = window.g_font_files;
this.fontInfos = window.g_font_infos;
this.map_font_index = window.g_map_font_index;
this.embeddedFilesPath = "";
this.embeddedFontFiles = [];
this.embeddedFontInfos = [];
this.ThemeLoader = null;
this.Api = null;
this.fonts_loading = [];
this.fonts_loading_after_style = [];
this.bIsLoadDocumentFirst = false;
this.currentInfoLoaded = null;
this.loadFontCallBack = null;
this.loadFontCallBackArgs = null;
this.embedded_cut_manager = new CEmbeddedCutFontsLoader();
this.put_Api = function (_api) {
this.Api = _api;
this.embedded_cut_manager.Api = _api;
};
this.LoadEmbeddedFonts = function (url, _fonts) {
this.embeddedFilesPath = url;
var _count = _fonts.length;
if (0 == _count) {
return;
}
this.embeddedFontInfos = new Array(_count);
var map_files = {};
for (var i = 0; i < _count; i++) {
map_files[_fonts[i].id] = _fonts[i].id;
}
var index = 0;
for (var i in map_files) {
this.embeddedFontFiles[index] = new CFontFileLoader(map_files[i]);
this.embeddedFontFiles[index].CanUseOriginalFormat = false;
this.embeddedFontFiles[index].IsNeedAddJSToFontPath = false;
map_files[i] = index++;
}
for (var i = 0; i < _count; i++) {
var lStyle = 0;
if (0 == lStyle) {
this.embeddedFontInfos[i] = new CFontInfo(_fonts[i].name, "", FONT_TYPE_EMBEDDED, map_files[_fonts[i].id], 0, -1, -1, -1, -1, -1, -1);
} else {
if (2 == lStyle) {
this.embeddedFontInfos[i] = new CFontInfo(_fonts[i].name, "", FONT_TYPE_EMBEDDED, -1, -1, map_files[_fonts[i].id], _fonts[i].faceindex, -1, -1, -1, -1);
} else {
if (1 == lStyle) {
this.embeddedFontInfos[i] = new CFontInfo(_fonts[i].name, "", FONT_TYPE_EMBEDDED, -1, -1, -1, -1, map_files[_fonts[i].id], _fonts[i].faceindex, -1, -1);
} else {
this.embeddedFontInfos[i] = new CFontInfo(_fonts[i].name, "", FONT_TYPE_EMBEDDED, -1, -1, -1, -1, -1, -1, map_files[_fonts[i].id], _fonts[i].faceindex);
}
}
}
}
var _count_infos_ = this.fontInfos.length;
for (var i = 0; i < _count; i++) {
this.map_font_index[_fonts[i].name] = i + _count_infos_;
this.fontInfos[i + _count_infos_] = this.embeddedFontInfos[i];
}
};
this.SetStandartFonts = function () {
var standarts = window["standarts"];
if (undefined == standarts) {
standarts = [];
for (var i = 0; i < window.g_font_infos.length; i++) {
if (window.g_font_infos[i].Name != "ASCW3") {
standarts.push(window.g_font_infos[i].Name);
}
}
}
var _count = standarts.length;
var _infos = this.fontInfos;
var _map = this.map_font_index;
for (var i = 0; i < _count; i++) {
_infos[_map[standarts[i]]].Type = FONT_TYPE_STANDART;
}
};
this.AddLoadFonts = function (name, need_styles) {
var fontinfo = g_fontApplication.GetFontInfo(name);
this.fonts_loading[this.fonts_loading.length] = fontinfo;
this.fonts_loading[this.fonts_loading.length - 1].NeedStyles = (need_styles == undefined) ? 15 : need_styles;
return fontinfo;
};
this.AddLoadFontsNotPick = function (info, need_styles) {
this.fonts_loading[this.fonts_loading.length] = info;
this.fonts_loading[this.fonts_loading.length - 1].NeedStyles = (need_styles == undefined) ? 15 : need_styles;
};
this.LoadDocumentFonts = function (_fonts, is_default) {
if (this.embedded_cut_manager.bIsCutFontsUse) {
return this.embedded_cut_manager.load_cut_fonts();
}
var gui_fonts = [];
var gui_count = 0;
for (var i = 0; i < this.fontInfos.length; i++) {
var info = this.fontInfos[i];
if (FONT_TYPE_STANDART == info.Type) {
var __font = new CFont(info.Name, "", info.Type, info.Thumbnail);
gui_fonts[gui_count++] = __font;
}
}
for (var i in _fonts) {
if (_fonts[i].type != FONT_TYPE_EMBEDDED) {
var info = this.AddLoadFonts(_fonts[i].name, _fonts[i].NeedStyles);
if (info.Type == FONT_TYPE_ADDITIONAL) {
if (info.name != "ASCW3") {
var __font = new CFont(info.Name, "", info.Type, info.Thumbnail);
gui_fonts[gui_count++] = __font;
}
}
} else {
var ind = -1;
for (var j = 0; j < this.embeddedFontInfos.length; j++) {
if (this.embeddedFontInfos[j].Name == _fonts[i].name) {
this.AddLoadFontsNotPick(this.embeddedFontInfos[j], 15);
break;
}
}
}
}
this.Api.sync_InitEditorFonts(gui_fonts);
if (this.Api.IsNeedDefaultFonts()) {
this.AddLoadFonts("Arial", 15);
this.AddLoadFonts("Symbol", 15);
this.AddLoadFonts("Wingdings", 15);
this.AddLoadFonts("Courier New", 15);
this.AddLoadFonts("Times New Roman", 15);
}
this.Api.asyncFontsDocumentStartLoaded();
this.bIsLoadDocumentFirst = true;
this.CheckFontsNeedLoadingLoad();
this._LoadFonts();
};
this.CheckFontsNeedLoadingLoad = function () {
var _fonts = this.fonts_loading;
var _fonts_len = _fonts.length;
var _need = false;
for (var i = 0; i < _fonts_len; i++) {
if (true == _fonts[i].CheckFontLoadStyles(this)) {
_need = true;
}
}
return _need;
};
this.CheckFontsNeedLoading = function (_fonts) {
for (var i in _fonts) {
var info = g_fontApplication.GetFontInfo(_fonts[i].name);
var _isNeed = info.CheckFontLoadStylesNoLoad(this);
if (_isNeed === true) {
return true;
}
}
return false;
};
this.LoadDocumentFonts2 = function (_fonts) {
for (var i in _fonts) {
this.AddLoadFonts(_fonts[i].name, 15);
}
if (null == this.ThemeLoader) {
this.Api.asyncFontsDocumentStartLoaded();
} else {
this.ThemeLoader.asyncFontsStartLoaded();
}
this.CheckFontsNeedLoadingLoad();
this._LoadFonts();
};
var oThis = this;
this._LoadFonts = function () {
if (0 == this.fonts_loading.length) {
if (null == this.ThemeLoader) {
this.Api.asyncFontsDocumentEndLoaded();
} else {
this.ThemeLoader.asyncFontsEndLoaded();
}
if (this.bIsLoadDocumentFirst === true) {
var _count = this.fonts_loading_after_style.length;
for (var i = 0; i < _count; i++) {
var _info = this.fonts_loading_after_style[i];
_info.NeedStyles = 15;
_info.CheckFontLoadStyles(this);
}
this.fonts_loading_after_style.splice(0, this.fonts_loading_after_style.length);
this.bIsLoadDocumentFirst = false;
}
return;
}
var fontinfo = this.fonts_loading[0];
var IsNeed = fontinfo.CheckFontLoadStyles(this);
if (IsNeed) {
setTimeout(oThis._check_loaded, 50);
} else {
if (this.bIsLoadDocumentFirst === true) {
this.Api.OpenDocumentProgress.CurrentFont++;
this.Api.SendOpenProgress();
}
this.fonts_loading_after_style[this.fonts_loading_after_style.length] = this.fonts_loading[0];
this.fonts_loading.shift();
this._LoadFonts();
}
};
this._check_loaded = function () {
var IsNeed = false;
if (0 == oThis.fonts_loading.length) {
oThis._LoadFonts();
return;
}
var current = oThis.fonts_loading[0];
var IsNeed = current.CheckFontLoadStyles(oThis);
if (true === IsNeed) {
setTimeout(oThis._check_loaded, 50);
} else {
if (oThis.bIsLoadDocumentFirst === true) {
oThis.Api.OpenDocumentProgress.CurrentFont++;
oThis.Api.SendOpenProgress();
}
oThis.fonts_loading_after_style[oThis.fonts_loading_after_style.length] = oThis.fonts_loading[0];
oThis.fonts_loading.shift();
oThis._LoadFonts();
}
};
this.LoadFont = function (fontinfo, loadFontCallBack, loadFontCallBackArgs) {
this.currentInfoLoaded = fontinfo;
this.currentInfoLoaded = fontinfo;
this.currentInfoLoaded.NeedStyles = 15;
var IsNeed = this.currentInfoLoaded.CheckFontLoadStyles(this);
if (undefined === loadFontCallBack) {
this.loadFontCallBack = this.Api.asyncFontEndLoaded;
this.loadFontCallBackArgs = this.currentInfoLoaded;
} else {
this.loadFontCallBack = loadFontCallBack;
this.loadFontCallBackArgs = loadFontCallBackArgs;
}
if (IsNeed) {
this.Api.asyncFontStartLoaded();
setTimeout(this.check_loaded, 20);
return true;
} else {
this.currentInfoLoaded = null;
return false;
}
};
this.check_loaded = function () {
var current = oThis.currentInfoLoaded;
if (null == current) {
return;
}
var IsNeed = current.CheckFontLoadStyles(oThis);
if (IsNeed) {
setTimeout(oThis.check_loaded, 50);
} else {
oThis.loadFontCallBack.call(oThis.Api, oThis.loadFontCallBackArgs);
oThis.currentInfoLoaded = null;
}
};
this.LoadFontsFromServer = function (_fonts) {
var _count = _fonts.length;
for (var i = 0; i < _count; i++) {
var _info = g_fontApplication.GetFontInfo(_fonts[i]);
if (undefined !== _info) {
_info.LoadFontsFromServer(this);
}
}
};
}
CGlobalFontLoader.prototype.SetStreamIndexEmb = function (font_index, stream_index) {
this.embeddedFontFiles[font_index].SetStreamIndex(stream_index);
};
function CGlobalImageLoader() {
this.map_image_index = {};
this.imagesPath = "";
this.Api = null;
this.ThemeLoader = null;
this.images_loading = null;
this.bIsLoadDocumentFirst = false;
this.bIsAsyncLoadDocumentImages = false;
this.put_Api = function (_api) {
this.Api = _api;
if (this.Api.IsAsyncOpenDocumentImages !== undefined) {
this.bIsAsyncLoadDocumentImages = this.Api.IsAsyncOpenDocumentImages();
if (this.bIsAsyncLoadDocumentImages) {
if (undefined === this.Api.asyncImageEndLoadedBackground) {
this.bIsAsyncLoadDocumentImages = false;
}
}
}
};
this.LoadDocumentImages = function (_images, isUrl) {
if (this.ThemeLoader == null) {
this.Api.asyncImagesDocumentStartLoaded();
} else {
this.ThemeLoader.asyncImagesStartLoaded();
}
this.images_loading = [];
for (var id in _images) {
this.images_loading[this.images_loading.length] = _getFullImageSrc(_images[id]);
}
if (!this.bIsAsyncLoadDocumentImages) {
this._LoadImages();
} else {
var _len = this.images_loading.length;
for (var i = 0; i < _len; i++) {
this.LoadImageAsync(i);
}
this.images_loading.splice(0, _len);
if (this.ThemeLoader == null) {
this.Api.asyncImagesDocumentEndLoaded();
} else {
this.ThemeLoader.asyncImagesEndLoaded();
}
}
};
var oThis = this;
this._LoadImages = function () {
if (0 == this.images_loading.length) {
if (this.ThemeLoader == null) {
this.Api.asyncImagesDocumentEndLoaded();
} else {
this.ThemeLoader.asyncImagesEndLoaded();
}
return;
}
var _id = this.images_loading[0];
var oImage = new CImage(_id);
oImage.Status = ImageLoadStatus.Loading;
oImage.Image = new Image();
oThis.map_image_index[oImage.src] = oImage;
oImage.Image.onload = function () {
oImage.Status = ImageLoadStatus.Complete;
if (oThis.bIsLoadDocumentFirst === true) {
oThis.Api.OpenDocumentProgress.CurrentImage++;
oThis.Api.SendOpenProgress();
}
oThis.images_loading.shift();
oThis._LoadImages();
};
oImage.Image.onerror = function () {
oImage.Status = ImageLoadStatus.Complete;
oImage.Image = null;
if (oThis.bIsLoadDocumentFirst === true) {
oThis.Api.OpenDocumentProgress.CurrentImage++;
oThis.Api.SendOpenProgress();
}
oThis.images_loading.shift();
oThis._LoadImages();
};
oImage.Image.src = oImage.src;
};
this.LoadImage = function (src, Type) {
var _image = this.map_image_index[src];
if (undefined != _image) {
return _image;
}
this.Api.asyncImageStartLoaded();
var oImage = new CImage(src);
oImage.Type = Type;
oImage.Image = new Image();
oImage.Status = ImageLoadStatus.Loading;
oThis.map_image_index[oImage.src] = oImage;
oImage.Image.onload = function () {
oImage.Status = ImageLoadStatus.Complete;
oThis.Api.asyncImageEndLoaded(oImage);
};
oImage.Image.onerror = function () {
oImage.Image = null;
oImage.Status = ImageLoadStatus.Complete;
oThis.Api.asyncImageEndLoaded(oImage);
};
oImage.Image.src = oImage.src;
return null;
};
this.LoadImageAsync = function (i) {
var _id = oThis.images_loading[i];
var oImage = new CImage(_id);
oImage.Status = ImageLoadStatus.Loading;
oImage.Image = new Image();
oThis.map_image_index[oImage.src] = oImage;
oImage.Image.onload = function () {
oImage.Status = ImageLoadStatus.Complete;
oThis.Api.asyncImageEndLoadedBackground(oImage);
};
oImage.Image.onerror = function () {
oImage.Status = ImageLoadStatus.Complete;
oImage.Image = null;
oThis.Api.asyncImageEndLoadedBackground(oImage);
};
oImage.Image.src = oImage.src;
};
}
window.g_font_loader = new CGlobalFontLoader();
window.g_image_loader = new CGlobalImageLoader();
window.g_flow_anchor = new Image();
window.g_flow_anchor.asc_complete = false;
window.g_flow_anchor.onload = function () {
window.g_flow_anchor.asc_complete = true;
};
window.g_flow_anchor.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAPBAMAAADNDVhEAAAAIVBMVEUAAAANDQ0NDQ0NDQ0NDQ0NDQ0AAAANDQ0NDQ0NDQ0NDQ1jk7YPAAAACnRSTlMAGkD4mb9c5s9TDghpXQAAAFZJREFUCNdjYGBgW8YABlxcIBLBZ1gAEfZa5QWiGRkWMAIpAaA4iHQE0YwODEtANMsChkIwv4BBWQBICyswMC1iWADEDAzKoUuDFUAGNC9uABvIaQkkABpxD6lFb9lRAAAAAElFTkSuQmCC";
window.g_flow_anchor2 = new Image();
window.g_flow_anchor2.asc_complete = false;
window.g_flow_anchor2.onload = function () {
window.g_flow_anchor2.asc_complete = true;
};
window.g_flow_anchor2.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAeCAMAAAAFBf7qAAAAOVBMVEUAAAAAAAAAAAAAAAAJCQkAAAAJCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQknI0ZQAAAAEnRSTlMAx9ITlAfyPHxn68yecTAl5qt6y0BvAAAAt0lEQVQoz8WS0QrDIAxFk0ajtlXb+/8fuzAprltg7Gnn4aIcvAgJTSSoBiGPoIAGV60qoquvIIL110IJgPONmKIlMI73MiwGRoZvahbKVSizcDKU8QeVPDXEIr6ShVB9VUEn2FOMkwL8VwjUtuypvDWiHeVTFeyWkZHfVQZHGm4XMhKQyJB9GKMxuHQSBlioF7u2q7kzgO2AcWwW3F8mWRmGKgyu91mK1Tzh4ixVVkBzJI/EnGjyACbfCaO3eIWRAAAAAElFTkSuQmCC";
window["CGlobalFontLoader"] = CGlobalFontLoader;
CGlobalFontLoader.prototype["SetStreamIndexEmb"] = CGlobalFontLoader.prototype.SetStreamIndexEmb;
})(window.document);