diff options
Diffstat (limited to 'js')
-rw-r--r-- | js/editor.js | 16 | ||||
-rw-r--r-- | js/main.js | 20 | ||||
-rw-r--r-- | js/settings.js | 15 | ||||
-rw-r--r-- | js/share.js | 418 | ||||
-rw-r--r-- | js/viewer.js | 2 |
5 files changed, 456 insertions, 15 deletions
diff --git a/js/editor.js b/js/editor.js index 00d05cb..fdb5a2d 100644 --- a/js/editor.js +++ b/js/editor.js @@ -21,6 +21,7 @@ OCA.Onlyoffice = _.extend({ AppName: "onlyoffice", inframe: false, + inviewer: false, fileId: null, shareToken: null, insertImageType: null @@ -34,6 +35,7 @@ var directToken = $("#iframeEditor").data("directtoken"); OCA.Onlyoffice.template = $("#iframeEditor").data("template"); OCA.Onlyoffice.inframe = !!$("#iframeEditor").data("inframe"); + OCA.Onlyoffice.inviewer = !!$("#iframeEditor").data("inviewer"); OCA.Onlyoffice.filePath = $("#iframeEditor").data("path"); OCA.Onlyoffice.anchor = $("#iframeEditor").attr("data-anchor"); var guestName = localStorage.getItem("nick"); @@ -90,6 +92,10 @@ params.push("inframe=true"); } + if (OCA.Onlyoffice.inviewer) { + params.push("inviewer=true"); + } + if (OCA.Onlyoffice.Desktop) { params.push("desktop=true"); } @@ -101,6 +107,11 @@ url: configUrl, success: function onSuccess(config) { if (config) { + if (config.redirectUrl) { + location.href = config.redirectUrl; + return; + } + if (config.error != null) { OCA.Onlyoffice.showMessage(config.error, "error", {timeout: -1}); return; @@ -112,11 +123,6 @@ return; } - if (config.redirectUrl) { - location.href = config.redirectUrl; - return; - } - var docIsChanged = null; var docIsChangedTimeout = null; @@ -119,9 +119,6 @@ OCA.Files.Sidebar.close(); } - var scrollTop = $(window).scrollTop(); - $(OCA.Onlyoffice.frameSelector).css("top", scrollTop); - OCA.Onlyoffice.folderUrl = location.href; window.history.pushState(null, null, url); } @@ -166,7 +163,10 @@ OCA.Onlyoffice.FileClick = function (fileName, context) { var fileInfoModel = context.fileInfoModel || context.fileList.getModelForFile(fileName); - OCA.Onlyoffice.OpenEditor(fileInfoModel.id, context.dir, fileName); + var fileId = context.fileId || fileInfoModel.id; + var winEditor = !fileInfoModel && !OCA.Onlyoffice.setting.sameTab ? document : null; + + OCA.Onlyoffice.OpenEditor(fileId, context.dir, fileName, 0, winEditor); OCA.Onlyoffice.context = context; OCA.Onlyoffice.context.fileName = fileName; @@ -218,7 +218,7 @@ $(optionNodeOrigin).text(t(OCA.Onlyoffice.AppName, "Origin format")); dialog[0].dataset.format = extension; - selectNode.onclick = function() { + selectNode.onchange = function() { dialog[0].dataset.format = $("#onlyoffice-download-select option:selected").attr("data-value"); } @@ -472,6 +472,14 @@ } }; + OCA.Onlyoffice.TabView = { + attach(fileList) { + if (OCA.Onlyoffice.SharingTabView) { + fileList.registerTabView(new OCA.Onlyoffice.SharingTabView()) + } + } + } + var getFileExtension = function (fileName) { var extension = fileName.substr(fileName.lastIndexOf(".") + 1).toLowerCase(); return extension; @@ -561,6 +569,8 @@ } else { OC.Plugins.register("OCA.Files.NewFileMenu", OCA.Onlyoffice.NewFileMenu); + OC.Plugins.register("OCA.Files.FileList", OCA.Onlyoffice.TabView); + OCA.Onlyoffice.registerAction(); OCA.Onlyoffice.bindVersionClick(); diff --git a/js/settings.js b/js/settings.js index f8d3d42..87adadc 100644 --- a/js/settings.js +++ b/js/settings.js @@ -191,6 +191,7 @@ var sameTab = $("#onlyofficeSameTab").is(":checked"); var preview = $("#onlyofficePreview").is(":checked"); + var advanced = $("#onlyofficeAdvanced").is(":checked"); var versionHistory = $("#onlyofficeVersionHistory").is(":checked"); var limitGroupsString = $("#onlyofficeGroups").prop("checked") ? $("#onlyofficeLimitGroups").val() : ""; @@ -203,6 +204,7 @@ var help = $("#onlyofficeHelp").is(":checked"); var toolbarNoTabs = $("#onlyofficeToolbarNoTabs").is(":checked"); var reviewDisplay = $("input[type='radio'][name='reviewDisplay']:checked").attr("id").replace("onlyofficeReviewDisplay_", ""); + var theme = $("input[type='radio'][name='theme']:checked").attr("id").replace("onlyofficeTheme_", ""); $.ajax({ method: "PUT", @@ -212,6 +214,7 @@ editFormats: editFormats, sameTab: sameTab, preview: preview, + advanced: advanced, versionHistory: versionHistory, limitGroups: limitGroups, chat: chat, @@ -220,7 +223,8 @@ forcesave: forcesave, help: help, toolbarNoTabs: toolbarNoTabs, - reviewDisplay: reviewDisplay + reviewDisplay: reviewDisplay, + theme: theme }, success: function onSuccess(response) { $(".section-onlyoffice").removeClass("icon-loading"); @@ -231,9 +235,11 @@ }); }); - $("#onlyofficeWatermarkSave").click(function () { + $("#onlyofficeSecuritySave").click(function () { $(".section-onlyoffice").addClass("icon-loading"); + var macros = $("#onlyofficeMacros").is(":checked"); + var watermarkSettings = { enabled: $("#onlyofficeWatermark_enabled").is(":checked") }; @@ -263,9 +269,10 @@ $.ajax({ method: "PUT", - url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/watermark"), + url: OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings/security"), data: { - settings: watermarkSettings + watermarks: watermarkSettings, + macros: macros }, success: function onSuccess(response) { $(".section-onlyoffice").removeClass("icon-loading"); diff --git a/js/share.js b/js/share.js new file mode 100644 index 0000000..e1f6ab7 --- /dev/null +++ b/js/share.js @@ -0,0 +1,418 @@ +/** + * + * (c) Copyright Ascensio System SIA 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + (function ($, OC) { + + OCA.Onlyoffice = _.extend({ + AppName: "onlyoffice", + }, OCA.Onlyoffice); + + OCA.Onlyoffice.Permissions = { + None: 0, + Review: 1, + Comment: 2, + FillForms: 4, + ModifyFilter: 8 + }; + + var tabcontext = null; + + OCA.Onlyoffice.SharingTabView = OCA.Files.DetailTabView.extend({ + id: "onlyofficeSharingTabView", + className: "tab onlyofficeSharingTabView", + + customEvents: null, + fileInfo: null, + templateItem: null, + permissionsMenu: null, + colectionLoading: null, + collection: null, + format: null, + + events: { + "click #onlyoffice-share-action": "_onClickPermissionMenu", + "change .onlyoffice-share-action input": "_onClickSetPermissions" + }, + + initialize() { + OCA.Files.DetailTabView.prototype.initialize.apply(this, arguments); + tabcontext = this; + + this.colectionLoading = false; + }, + + getLabel() { + return t(OCA.Onlyoffice.AppName, "Advanced") + }, + + getIcon() { + return "icon-onlyoffice-sharing" + }, + + render() { + var self = this; + + if (this.customEvents === null) { + this.customEvents = this._customEvents(); + this.customEvents.on(); + } + + this._getTemplate(() => { + this.collection.forEach(extra => { + var itemNode = self.templateItem.clone(); + var descNode = itemNode.find("span"); + var avatar = itemNode.find("img"); + + var avatarSrc = "/index.php/avatar/" + extra.shareWith + "/32?v=0"; + var label = extra.shareWithName; + if (extra.type == OC.Share.SHARE_TYPE_GROUP) { + avatarSrc = "/index.php/avatar/guest/" + extra.shareWith + "/32?v=0"; + label = extra.shareWith + " (" + t(OCA.Onlyoffice.AppName, "group") + ")"; + } + + avatar[0].src = avatarSrc; + descNode[0].innerText = label; + + itemNode[0].id = extra.share_id; + + self._getContainer().append(itemNode); + }); + }); + }, + + setFileInfo(fileInfo) { + if(fileInfo) { + this.fileInfo = fileInfo; + + if (this.colectionLoading) { + return; + } + + this._getContainer().children().remove(); + + this.colectionLoading = true; + OCA.Onlyoffice.GetShares(this.fileInfo.id, (shares) => { + this.collection = shares; + + this.colectionLoading = false; + this.render(); + }); + } + }, + + canDisplay: function (fileInfo) { + var canDisplay = false; + + if (!fileInfo.isDirectory()) { + var ext = fileInfo.name.split(".").pop(); + var format = OCA.Onlyoffice.setting.formats[ext]; + if (format && (format["review"] + || format["comment"] + || format["fillForms"] + || format["modifyFilter"])) { + canDisplay = true; + tabcontext.format = format; + + if ($("#sharing").hasClass("active") + && tabcontext.fileInfo + && tabcontext.fileInfo.id == fileInfo.id) { + this.update(fileInfo); + } + } + }; + + return canDisplay; + }, + + _getContainer: function () { + return this.$el.find(".onlyoffice-share-container"); + }, + + _getTemplate: function (callback) { + if (this.templateItem) { + callback(); + return; + } + + var self = this; + $.get(OC.filePath(OCA.Onlyoffice.AppName, "templates", "share.html"), + function (tmpl) { + self.templateItem = $(tmpl); + + $("<ul>", {class: "onlyoffice-share-container"}).appendTo(self.$el) + $("<div>").html(t(OCA.Onlyoffice.AppName, "Provide advanced document permissions using ONLYOFFICE Docs")).prependTo(self.$el); + + callback(); + }); + }, + + _onClickSetPermissions: function (e) { + var permissionValues = this.permissionsMenu.getValues(); + var shareId = this.permissionsMenu.getTargetId(); + var fileId = this.fileInfo.id; + var extra = this.collection.find(item => item.share_id == shareId); + + var permissions = OCA.Onlyoffice.Permissions.None; + if (permissionValues[OCA.Onlyoffice.Permissions.Review]) { + permissions |= OCA.Onlyoffice.Permissions.Review; + } + if (permissionValues[OCA.Onlyoffice.Permissions.Comment] + && (permissions & OCA.Onlyoffice.Permissions.Review) != OCA.Onlyoffice.Permissions.Review) { + permissions |= OCA.Onlyoffice.Permissions.Comment; + } + if (permissionValues[OCA.Onlyoffice.Permissions.FillForms] + && (permissions & OCA.Onlyoffice.Permissions.Review) != OCA.Onlyoffice.Permissions.Review) { + permissions |= OCA.Onlyoffice.Permissions.FillForms; + } + if (permissionValues[OCA.Onlyoffice.Permissions.ModifyFilter]) { + permissions |= OCA.Onlyoffice.Permissions.ModifyFilter; + } + + this.permissionsMenu.block(true); + OCA.Onlyoffice.SetShares(extra.id, shareId, fileId, permissions, (extra) => { + this.collection.forEach(item => { + if (item.share_id == extra.share_id) { + item.id = extra.id; + item.permissions = extra.permissions; + item.available = extra.available + } + }); + + var attributes = this._getPermissionAttributes(extra); + + this.permissionsMenu.refresh(attributes); + this.permissionsMenu.block(false); + }); + }, + + _onClickPermissionMenu: function (e) { + if (!this.permissionsMenu) { + this.permissionsMenu = this._permissionMenu(); + } + + var shareNode = $(e.target).closest(".onlyoffice-share-item")[0]; + var shareId = shareNode.id; + + + if (this.permissionsMenu.isOpen()) { + var previousId = this.permissionsMenu.getTargetId(); + this.permissionsMenu.close(); + + if (previousId == shareId) return; + } + + var extra = this.collection.find(item => item.share_id == shareId); + + var attributes = this._getPermissionAttributes(extra); + + this.permissionsMenu.open(extra.share_id, attributes, $(e.target).position()); + }, + + _getPermissionAttributes: function (extra) { + var attributes = []; + + if (this.format["review"] + && (OCA.Onlyoffice.Permissions.Review & extra["available"]) === OCA.Onlyoffice.Permissions.Review) { + var review = (OCA.Onlyoffice.Permissions.Review & extra["permissions"]) === OCA.Onlyoffice.Permissions.Review; + attributes.push({ + checked: review, + extra: OCA.Onlyoffice.Permissions.Review, + label: t(OCA.Onlyoffice.AppName, "Review") + }); + } + if (this.format["comment"] + && (OCA.Onlyoffice.Permissions.Comment & extra["available"]) === OCA.Onlyoffice.Permissions.Comment) { + var comment = (OCA.Onlyoffice.Permissions.Comment & extra["permissions"]) === OCA.Onlyoffice.Permissions.Comment; + attributes.push({ + checked: comment, + extra: OCA.Onlyoffice.Permissions.Comment, + label: t(OCA.Onlyoffice.AppName, "Comment") + }); + } + if (this.format["fillForms"] + && (OCA.Onlyoffice.Permissions.FillForms & extra["available"]) === OCA.Onlyoffice.Permissions.FillForms) { + var fillForms = (OCA.Onlyoffice.Permissions.FillForms & extra["permissions"]) === OCA.Onlyoffice.Permissions.FillForms; + attributes.push({ + checked: fillForms, + extra: OCA.Onlyoffice.Permissions.FillForms, + label: t(OCA.Onlyoffice.AppName, "Form filling") + }); + } + + if (this.format["modifyFilter"] + && (OCA.Onlyoffice.Permissions.ModifyFilter & extra["available"]) === OCA.Onlyoffice.Permissions.ModifyFilter) { + var modifyFilter = (OCA.Onlyoffice.Permissions.ModifyFilter & extra["permissions"]) === OCA.Onlyoffice.Permissions.ModifyFilter; + attributes.push({ + checked: modifyFilter, + extra: OCA.Onlyoffice.Permissions.ModifyFilter, + label: t(OCA.Onlyoffice.AppName, "Custom filter") + }); + } + + return attributes; + }, + + _customEvents: function () { + var init = false; + var self = this; + + return { + on: function () { + if (!init) { + $("#content").on("click", function (e) { + var target = $(e.target)[0]; + if (!self.permissionsMenu + || !self.permissionsMenu.isOpen() + || target.id == "onlyoffice-share-action" + || target.className == "onlyoffice-share-label" + || target.closest(".onlyoffice-share-action")) { + return; + } + + self.permissionsMenu.close(); + }); + + init = true; + } + } + } + }, + + _permissionMenu: function () { + var popup = $("<div>", { + class: "popovermenu onlyoffice-share-popup" + }).append($("<ul>"), { + id: -1 + }); + + var appendItem = function (checked, extra, name) { + var item = $("<li>").append($("<span>", { + class: "onlyoffice-share-action" + }).append($("<input>", { + id: "extra-" + extra, + type: "checkbox", + class: "checkbox action-checkbox__checkbox focusable", + checked: checked + })).append($("<label>", { + for: "extra-" + extra, + text: name, + class: "onlyoffice-share-label" + }))); + + popup.find("ul").append(item); + }; + + var removeItems = function () { + var items = popup.find("li"); + if (items) { + items.remove(); + } + } + + var setTargetId = function (id) { + popup.find("ul").attr("id", id); + }; + + this.$el.append(popup); + + return { + isOpen: function () { + return popup.is(":visible"); + }, + + open: function (id, attributes, position) { + removeItems(); + + if (position) { + popup.css({top: position.top}); + } + + attributes.forEach(attr => { + appendItem(attr.checked, attr.extra, attr.label); + }); + + setTargetId(id); + popup.show(); + }, + + close: function () { + removeItems(); + + setTargetId(-1); + popup.hide(); + }, + + refresh: function (attributes) { + removeItems(); + + attributes.forEach(attr => { + appendItem(attr.checked, attr.extra, attr.label); + }); + }, + + block: function (value) { + popup.find("input").prop("disabled", value); + }, + + getValues: function () { + var values = []; + + var items = popup.find("input"); + for (var i = 0; i < items.length; i++) { + var extra = items[i].id.split("extra-")[1]; + values[extra] = items[i].checked; + } + + return values; + }, + + getTargetId: function () { + return popup.find("ul").attr("id"); + }, + } + } + }); + + OCA.Onlyoffice.GetShares = function(fileId, callback) { + $.ajax({ + url: OC.linkToOCS("apps/" + OCA.Onlyoffice.AppName + "/api/v1/shares", 2) + fileId + "?format=json", + success: function onSuccess(response) { + callback(response.ocs.data); + } + }) + } + + OCA.Onlyoffice.SetShares = function(id, shareId, fileId, permissions, callback) { + var data = { + extraId: id, + shareId: shareId, + fileId: fileId, + permissions: permissions + } + + $.ajax({ + method: "PUT", + url: OC.linkToOCS("apps/" + OCA.Onlyoffice.AppName + "/api/v1", 2) + "shares?format=json", + data: data, + success: function onSuccess(response) { + callback(response.ocs.data); + } + }) + } + +})(jQuery, OC);
\ No newline at end of file diff --git a/js/viewer.js b/js/viewer.js index cbd3f4a..b95f72a 100644 --- a/js/viewer.js +++ b/js/viewer.js @@ -54,7 +54,7 @@ attrs: { id: "onlyofficeViewerFrame", scrolling: "no", - src: self.url + "&inframe=true", + src: self.url + "&inframe=true&inviewer=true", }, on: { load: function () { |