This commit is contained in:
Alexander Trofimov
2015-06-25 11:27:08 +03:00
parent dbf21ee32f
commit a10605c91f
174 changed files with 24121 additions and 8908 deletions

View File

@@ -92,10 +92,13 @@
this.api.asc_registerCallback("asc_onReplaceAll", _.bind(this.onApiTextReplaced, this));
this.api.asc_registerCallback("asc_onСoAuthoringDisconnect", _.bind(this.onApiServerDisconnect, this));
Common.NotificationCenter.on("api:disconnect", _.bind(this.onApiServerDisconnect, this));
if (this.mode.canCoAuthoring) {
if (this.mode.canCoAuthoring && this.mode.canChat) {
this.api.asc_registerCallback("asc_onCoAuthoringChatReceiveMessage", _.bind(this.onApiChatMessage, this));
}
this.leftMenu.getMenu("file").setApi(api);
if (this.mode.canUseHistory) {
this.getApplication().getController("Common.Controllers.History").setApi(this.api);
}
return this;
},
setMode: function (mode) {
@@ -106,14 +109,21 @@
},
createDelayedElements: function () {
if (this.mode.canCoAuthoring) {
this.leftMenu.btnComments[this.mode.isEdit ? "show" : "hide"]();
this.leftMenu.btnChat.show();
this.leftMenu.setOptionsPanel("chat", this.getApplication().getController("Common.Controllers.Chat").getView("Common.Views.Chat"));
this.leftMenu.setOptionsPanel("comment", this.getApplication().getController("Common.Controllers.Comments").getView("Common.Views.Comments"));
this.leftMenu.btnComments[this.mode.isEdit && this.mode.canComments ? "show" : "hide"]();
if (this.mode.canComments) {
this.leftMenu.setOptionsPanel("comment", this.getApplication().getController("Common.Controllers.Comments").getView("Common.Views.Comments"));
}
this.leftMenu.btnChat[this.mode.canChat ? "show" : "hide"]();
if (this.mode.canChat) {
this.leftMenu.setOptionsPanel("chat", this.getApplication().getController("Common.Controllers.Chat").getView("Common.Views.Chat"));
}
} else {
this.leftMenu.btnChat.hide();
this.leftMenu.btnComments.hide();
}
if (this.mode.canUseHistory) {
this.leftMenu.setOptionsPanel("history", this.getApplication().getController("Common.Controllers.History").getView("Common.Views.History"));
}
Common.util.Shortcuts.resumeEvents();
return this;
},
@@ -142,6 +152,30 @@
this.onCreateNew(undefined, "blank");
}
break;
case "history":
if (this.api.isDocumentModified()) {
var me = this;
this.api.asc_stopSaving();
Common.UI.warning({
closable: false,
title: this.notcriticalErrorTitle,
msg: this.leavePageText,
buttons: ["ok", "cancel"],
primary: "ok",
callback: _.bind(function (btn) {
if (btn == "ok") {
me.api.asc_undoAllChanges();
me.showHistory();
} else {
me.api.asc_continueSaving();
}
},
this)
});
} else {
this.showHistory();
}
break;
default:
close_menu = false;
}
@@ -231,7 +265,7 @@
}
},
clickStatusbarUsers: function () {
if (this.mode.canCoAuthoring) {
if (this.mode.canCoAuthoring && this.mode.canChat) {
if (this.leftMenu.btnChat.pressed) {
this.leftMenu.close();
} else {
@@ -333,6 +367,14 @@
this.dlgSearch["hide"]();
}
},
SetDisabled: function (disable) {
this.mode.isEdit = !disable;
if (disable) {
this.leftMenu.close();
}
this.leftMenu.btnComments.setDisabled(disable);
this.leftMenu.btnChat.setDisabled(disable);
},
onApiChatMessage: function () {
this.leftMenu.markCoauthOptions();
},
@@ -405,13 +447,13 @@
}
break;
case "chat":
if (this.mode.canCoAuthoring) {
if (this.mode.canCoAuthoring && this.mode.canChat) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu("chat");
}
return false;
case "comments":
if (this.mode.canCoAuthoring && this.mode.isEdit) {
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu("comments");
this.getApplication().getController("Common.Controllers.Comments").focusOnInput();
@@ -419,11 +461,25 @@
return false;
}
},
showHistory: function () {
var maincontroller = DE.getController("Main");
if (!maincontroller.loadMask) {
maincontroller.loadMask = new Common.UI.LoadMask({
owner: $("#viewport")
});
}
maincontroller.loadMask.setTitle(this.textLoadHistory);
maincontroller.loadMask.show();
Common.Gateway.requestHistory();
},
textNoTextFound: "Text not found",
newDocumentTitle: "Unnamed document",
requestEditRightsText: "Requesting editing rights...",
textReplaceSuccess: "Search has been done. {0} occurrences have been replaced",
textReplaceSkipped: "The replacement has been made. {0} occurrences were skipped."
textReplaceSkipped: "The replacement has been made. {0} occurrences were skipped.",
textLoadHistory: "Loading versions history...",
notcriticalErrorTitle: "Warning",
leavePageText: "All unsaved changes in this document will be lost.<br> Click 'Cancel' then 'Save' to save them. Click 'OK' to discard all the unsaved changes."
},
DE.Controllers.LeftMenu || {}));
});

View File

@@ -33,9 +33,14 @@
DE.Controllers.Main = Backbone.Controller.extend(_.extend((function () {
var ApplyEditRights = -255;
var LoadingDocument = -256;
var mapCustomizationElements = {
about: "button#left-btn-about",
feedback: "button#left-btn-support",
goback: "#fm-btn-back > a, #header-back > div"
};
return {
models: [],
collections: ["ShapeGroups", "EquationGroups"],
collections: ["ShapeGroups", "EquationGroups", "Common.Collections.HistoryUsers"],
views: [],
initialize: function () {},
onLaunch: function () {
@@ -49,7 +54,9 @@
return obj1.type === obj2.type;
}
});
this._state = {};
this._state = {
isDisconnected: false
};
if (!Common.Utils.isBrowserSupported()) {
Common.Utils.showBrowserRestriction();
Common.Gateway.reportError(undefined, this.unsupportedBrowserErrorText);
@@ -161,8 +168,9 @@
this.appOptions.user = this.editorConfig.user;
this.appOptions.canBack = this.editorConfig.nativeApp !== true && this.editorConfig.canBackToFolder === true;
this.appOptions.nativeApp = this.editorConfig.nativeApp === true;
this.appOptions.canCreateNew = !_.isEmpty(this.editorConfig.createUrl);
this.appOptions.canOpenRecent = this.editorConfig.nativeApp !== true && this.editorConfig.recent !== undefined;
this.appOptions.isDesktopApp = this.editorConfig.targetApp == "desktop";
this.appOptions.canCreateNew = !_.isEmpty(this.editorConfig.createUrl) && !this.appOptions.isDesktopApp;
this.appOptions.canOpenRecent = this.editorConfig.nativeApp !== true && this.editorConfig.recent !== undefined && !this.appOptions.isDesktopApp;
this.appOptions.templates = this.editorConfig.templates;
this.appOptions.recent = this.editorConfig.recent;
this.appOptions.createUrl = this.editorConfig.createUrl;
@@ -190,7 +198,6 @@
docInfo.put_UserId(this.editorConfig.user.id);
docInfo.put_UserName(this.editorConfig.user.name);
docInfo.put_CallbackUrl(this.editorConfig.callbackUrl);
docInfo.put_OfflineApp(this.editorConfig.nativeApp === true);
}
this.api.asc_registerCallback("asc_onGetEditorPermissions", _.bind(this.onEditorPermissions, this));
this.api.asc_setDocInfo(docInfo);
@@ -211,7 +218,7 @@
onProcessRightsChange: function (data) {
if (data && data.enabled === false) {
this.api.asc_coAuthoringDisconnect();
this.getApplication().getController("LeftMenu").leftMenu.getMenu("file").panels["info"].onLostEditRights();
this.getApplication().getController("LeftMenu").leftMenu.getMenu("file").panels["rights"].onLostEditRights();
Common.UI.warning({
title: this.notcriticalErrorTitle,
msg: _.isEmpty(data.message) ? this.warnProcessRightsChange : data.message
@@ -227,6 +234,144 @@
}
}
},
onRefreshHistory: function (opts) {
this.loadMask && this.loadMask.hide();
if (opts.data.error) {
var config = {
closable: false,
title: this.notcriticalErrorTitle,
msg: opts.data.error,
iconCls: "warn",
buttons: ["ok"],
callback: _.bind(function (btn) {
this.onEditComplete();
},
this)
};
Common.UI.alert(config);
} else {
this.api.asc_coAuthoringDisconnect();
this.getApplication().getController("LeftMenu").getView("LeftMenu").showHistory();
this.disableEditing(true);
var versions = opts.data.history,
historyStore = this.getApplication().getCollection("Common.Collections.HistoryVersions"),
currentVersion = null;
if (historyStore) {
var arrVersions = [],
ver,
version,
group = -1,
prev_ver = -1,
arrColors = [],
docIdPrev = "",
usersStore = this.getApplication().getCollection("Common.Collections.HistoryUsers"),
user = null,
usersCnt = 0;
for (ver = versions.length - 1; ver >= 0; ver--) {
version = versions[ver];
if (version && version.user) {
docIdPrev = (ver > 0 && versions[ver - 1]) ? versions[ver - 1].key : version.key + "0";
user = usersStore.findUser(version.user.id);
if (!user) {
user = new Common.Models.User({
id: version.user.id,
username: version.user.name,
colorval: c_oAscArrUserColors[usersCnt],
color: this.generateUserColor(c_oAscArrUserColors[usersCnt++])
});
usersStore.add(user);
}
arrVersions.push(new Common.Models.HistoryVersion({
version: version.version_group,
revision: version.version,
userid: version.user.id,
username: version.user.name,
usercolor: user.get("color"),
created: version.created,
docId: version.key,
markedAsVersion: (group !== version.version_group),
selected: (opts.data.currentVersion == version.version)
}));
if (opts.data.currentVersion == version.version) {
currentVersion = arrVersions[arrVersions.length - 1];
}
group = version.version_group;
if (prev_ver !== version.version) {
prev_ver = version.version;
arrColors.reverse();
for (i = 0; i < arrColors.length; i++) {
arrVersions[arrVersions.length - i - 2].set("arrColors", arrColors);
}
arrColors = [];
}
arrColors.push(user.get("colorval"));
var changes = version.changes,
change, i;
if (changes) {
if (changes.length > 0) {
arrVersions[arrVersions.length - 1].set("changeid", changes.length - 1);
arrVersions[arrVersions.length - 1].set("docIdPrev", docIdPrev);
}
for (i = changes.length - 2; i >= 0; i--) {
change = changes[i];
user = usersStore.findUser(change.user.id);
if (!user) {
user = new Common.Models.User({
id: change.user.id,
username: change.user.name,
colorval: c_oAscArrUserColors[usersCnt],
color: this.generateUserColor(c_oAscArrUserColors[usersCnt++])
});
usersStore.add(user);
}
arrVersions.push(new Common.Models.HistoryVersion({
version: version.version_group,
revision: version.version,
changeid: i,
userid: change.user.id,
username: change.user.name,
usercolor: user.get("color"),
created: change.created,
docId: version.key,
docIdPrev: docIdPrev,
selected: false
}));
arrColors.push(user.get("colorval"));
}
}
}
}
if (arrColors.length > 0) {
arrColors.reverse();
for (i = 0; i < arrColors.length; i++) {
arrVersions[arrVersions.length - i - 1].set("arrColors", arrColors);
}
arrColors = [];
}
historyStore[historyStore.size() > 0 ? "add" : "reset"](arrVersions);
if (currentVersion) {
this.getApplication().getController("Common.Controllers.History").onSelectRevision(null, null, currentVersion);
}
}
}
},
generateUserColor: function (color) {
return "#" + ("000000" + color.toString(16)).substr(-6);
},
disableEditing: function (disable) {
var app = this.getApplication();
if (this.appOptions.isEdit) {
app.getController("Toolbar").DisableToolbar(disable, disable);
app.getController("RightMenu").SetDisabled(disable, false);
app.getController("Statusbar").getView("Statusbar").btnLanguage.setDisabled(disable);
app.getController("Statusbar").getView("Statusbar").btnDocLanguage.setDisabled(disable);
var tooltip = app.getController("Toolbar").getView("Toolbar").synchTooltip;
if (tooltip) {
tooltip.hide();
}
}
app.getController("LeftMenu").SetDisabled(disable);
},
goBack: function () {
Common.Gateway.goBack();
},
@@ -429,9 +574,11 @@
value = window.localStorage.getItem("de-settings-spellcheck");
me.api.asc_setSpellCheck(value === null || parseInt(value) == 1);
window.localStorage.setItem("de-settings-showsnaplines", me.api.get_ShowSnapLines() ? 1 : 0);
Common.Utils.isIE9m && tips.push(me.warnBrowserIE9); ! Common.Utils.isGecko && (Math.abs(me.getBrowseZoomLevel() - 1) > 0.1) && tips.push(Common.Utils.String.platformKey(me.warnBrowserZoom, "{0}"));
if (tips.length) {
me.showTips(tips);
if ( !! window["AscDesktopEditor"]) {
Common.Utils.isIE9m && tips.push(me.warnBrowserIE9); ! Common.Utils.isGecko && (Math.abs(me.getBrowseZoomLevel() - 1) > 0.1) && tips.push(Common.Utils.String.platformKey(me.warnBrowserZoom, "{0}"));
if (tips.length) {
me.showTips(tips);
}
}
me.api.asc_registerCallback("asc_onStartAction", _.bind(me.onLongActionBegin, me));
me.api.asc_registerCallback("asc_onEndAction", _.bind(me.onLongActionEnd, me));
@@ -463,7 +610,7 @@
statusbarController.createDelayedElements();
leftmenuController.getView("LeftMenu").disableMenu("all", false);
if (me.appOptions.canBranding) {
me.getApplication().getController("LeftMenu").leftMenu.getMenu("about").setLicInfo(me.editorConfig.branding);
me.getApplication().getController("LeftMenu").leftMenu.getMenu("about").setLicInfo(me.editorConfig.customization);
}
documentHolderController.getView("DocumentHolder").setApi(me.api).on("editcomplete", _.bind(me.onEditComplete, me));
if (me.appOptions.isEdit) {
@@ -500,26 +647,33 @@
}
me.api.asc_setAutoSaveGap(value);
if (this.appOptions.canAnalytics) {
Common.Gateway.on("applyeditrights", _.bind(me.onApplyEditRights, me));
Common.component.Analytics.initialize("UA-12442749-13", "Document Editor");
}
Common.Gateway.on("applyeditrights", _.bind(me.onApplyEditRights, me));
Common.Gateway.on("processsaveresult", _.bind(me.onProcessSaveResult, me));
Common.Gateway.on("processrightschange", _.bind(me.onProcessRightsChange, me));
Common.Gateway.on("processmouse", _.bind(me.onProcessMouse, me));
Common.Gateway.on("refreshhistory", _.bind(me.onRefreshHistory, me));
$(document).on("contextmenu", _.bind(me.onContextMenu, me));
},
onOpenDocument: function () {},
onEditorPermissions: function (params) {
this.permissions.edit !== false && (this.permissions.edit = params.asc_getCanEdit());
this.permissions.download !== false && (this.permissions.download = params.asc_getCanDownload());
this.appOptions.canCoAuthoring = params.asc_getCanCoAuthoring();
this.appOptions.canCoAuthoring = true;
this.appOptions.canEdit = this.permissions.edit === true;
this.appOptions.isEdit = this.appOptions.canEdit && this.editorConfig.mode !== "view";
this.appOptions.canDownload = !this.appOptions.nativeApp && this.permissions.download;
this.appOptions.canAutosave = this.editorConfig.canAutosave !== false && params.asc_getIsAutosaveEnable();
this.appOptions.canAnalytics = params.asc_getIsAnalyticsEnable();
this.appOptions.canBranding = params.asc_getCanBranding() && (typeof(this.editorConfig.branding) == "object");
this.appOptions.canLicense = params.asc_getCanLicense ? params.asc_getCanLicense() : false;
this.appOptions.canComments = this.appOptions.canLicense && !((typeof(this.editorConfig.customization) == "object") && this.editorConfig.customization.comments === false);
this.appOptions.canChat = this.appOptions.canLicense && !((typeof(this.editorConfig.customization) == "object") && this.editorConfig.customization.chat === false);
this.appOptions.customization = this.editorConfig.customization;
this.appOptions.canUseHistory = this.appOptions.canLicense && this.editorConfig.canUseHistory && this.appOptions.canEdit && this.appOptions.canCoAuthoring;
this.appOptions.canBranding = params.asc_getCanBranding() && (typeof(this.editorConfig.customization) == "object");
if (this.appOptions.canBranding) {
this.getApplication().getController("Viewport").getView("Common.Views.Header").setBranding(this.editorConfig.branding);
this.getApplication().getController("Viewport").getView("Common.Views.Header").setBranding(this.editorConfig.customization);
}
this.applyModeCommonElements();
this.applyModeEditorElements();
@@ -541,7 +695,7 @@
documentHolder = app.getController("DocumentHolder").getView("DocumentHolder");
if (headerView) {
headerView.setHeaderCaption(this.appOptions.isEdit ? "Document Editor" : "Document Viewer");
headerView.setVisible(!this.appOptions.nativeApp && !value);
headerView.setVisible(!this.appOptions.nativeApp && !value && !this.appOptions.isDesktopApp);
}
if (this.appOptions.nativeApp) {
$("body").removeClass("safari");
@@ -817,6 +971,10 @@
}
},
hidePreloader: function () {
if ( !! this.appOptions.customization && !this.appOptions.customization.done) {
this.appOptions.customization.done = true;
Common.Utils.applyCustomization(this.appOptions.customization, mapCustomizationElements);
}
Common.NotificationCenter.trigger("layout:changed", "main");
$("#loading-mask").hide().remove();
},

View File

@@ -209,12 +209,7 @@
this._settings[c_oAscTypeSelectElement.Shape].needShow = false;
},
onCoAuthoringDisconnect: function () {
if (this.rightmenu) {
this.rightmenu.SetDisabled("", true, true);
}
this.setMode({
isEdit: false
});
this.SetDisabled(true, false);
},
onInsertTable: function () {
this._settings[c_oAscTypeSelectElement.Table].needShow = true;
@@ -274,6 +269,32 @@
this.rightmenu.SetActivePane(type, true);
this._settings[type].panel.ChangeSettings.call(this._settings[type].panel, this._settings[type].props);
}
},
SetDisabled: function (disabled, allowMerge) {
if (this.rightmenu) {
this.rightmenu.paragraphSettings.disableControls(disabled);
this.rightmenu.shapeSettings.disableControls(disabled);
this.rightmenu.headerSettings.disableControls(disabled);
this.rightmenu.tableSettings.disableControls(disabled);
this.rightmenu.imageSettings.disableControls(disabled);
this.rightmenu.chartSettings.disableControls(disabled);
if (disabled) {
this.rightmenu.btnText.setDisabled(disabled);
this.rightmenu.btnTable.setDisabled(disabled);
this.rightmenu.btnImage.setDisabled(disabled);
this.rightmenu.btnHeaderFooter.setDisabled(disabled);
this.rightmenu.btnShape.setDisabled(disabled);
this.rightmenu.btnChart.setDisabled(disabled);
} else {
var selectedElements = this.api.getSelectedElements();
if (selectedElements.length > 0) {
this.onFocusObject(selectedElements);
}
}
}
this.setMode({
isEdit: !disabled
});
}
});
});

View File

@@ -756,20 +756,24 @@
onCopyPaste: function (copy, e) {
var me = this;
if (me.api) {
var value = window.localStorage.getItem("de-hide-copywarning");
if (! (value && parseInt(value) == 1) && this._state.show_copywarning) {
(new Common.Views.CopyWarningDialog({
handler: function (dontshow) {
copy ? me.api.Copy() : me.api.Paste();
if (dontshow) {
window.localStorage.setItem("de-hide-copywarning", 1);
}
Common.NotificationCenter.trigger("edit:complete", me.toolbar);
}
})).show();
} else {
if (typeof window["AscDesktopEditor"] === "object") {
copy ? me.api.Copy() : me.api.Paste();
Common.NotificationCenter.trigger("edit:complete", me.toolbar);
} else {
var value = window.localStorage.getItem("de-hide-copywarning");
if (! (value && parseInt(value) == 1) && this._state.show_copywarning) {
(new Common.Views.CopyWarningDialog({
handler: function (dontshow) {
copy ? me.api.Copy() : me.api.Paste();
if (dontshow) {
window.localStorage.setItem("de-hide-copywarning", 1);
}
Common.NotificationCenter.trigger("edit:complete", me.toolbar);
}
})).show();
} else {
copy ? me.api.Copy() : me.api.Paste();
Common.NotificationCenter.trigger("edit:complete", me.toolbar);
}
}
Common.component.Analytics.trackEvent("ToolBar", "Copy Warning");
} else {
@@ -2302,7 +2306,11 @@
});
this.editMode = false;
},
DisableToolbar: function (disable) {
DisableToolbar: function (disable, viewMode) {
if (viewMode !== undefined) {
this.editMode = !viewMode;
}
disable = disable || !this.editMode;
var mask = $(".toolbar-mask");
if (disable && mask.length > 0 || !disable && mask.length == 0) {
return;

View File

@@ -45,8 +45,11 @@
}).render();
Common.NotificationCenter.on("layout:changed", _.bind(this.onLayoutChanged, this));
$(window).on("resize", _.bind(this.onWindowResize, this));
var leftPanel = $("#left-menu"),
histPanel = $("#left-panel-history");
this.viewport.hlayout.on("layout:resizedrag", function () {
this.api.Resize();
localStorage.setItem("de-mainmenu-width", histPanel.is(":visible") ? (histPanel.width() + SCALE_MIN) : leftPanel.width());
},
this);
this.boxSdk = $("#editor_sdk");
@@ -59,6 +62,14 @@
case "rightmenu":
this.viewport.hlayout.doLayout();
break;
case "history":
var panel = this.viewport.hlayout.items[1];
if (panel.resize.el) {
this.boxSdk.css("border-left", "");
panel.resize.el.show();
}
this.viewport.hlayout.doLayout();
break;
case "leftmenu":
var panel = this.viewport.hlayout.items[0];
if (panel.resize.el) {