123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473 |
- MWF.xAction.RestActions.Action["x_onlyofficefile_assemble_control"] = new Class({
- Extends: MWF.xAction.RestActions.Action
- });
- MWF.xDesktop.requireApp("process.Xform", "$Module", null, false);
- MWF.xApplication.process.Xform.OnlyOffice = MWF.APPOnlyOffice = new Class({
- Extends: MWF.APP$Module,
- isActive: false,
- options:{
- "moduleEvents": ["queryLoad","beforeOpen",
- "afterOpen",
- "afterSave"
- ]
- },
- initialize: function(node, json, form, options){
- this.node = $(node);
- this.node.store("module", this);
- this.json = json;
- this.form = form;
- this.documentId = "";
- this.mode = "edit";
- },
- _loadUserInterface: function(){
- this.node.empty();
- this.node.setStyles({
- "min-height": "100px"
- });
- },
- _afterLoaded: function(){
- this.fireEvent("queryLoad");
- if(!layout.serviceAddressList["x_onlyofficefile_assemble_control"]){
- this.node.set("html","<h3><font color=red>"+MWF.xApplication.process.Xform.LP.onlyoffice.noInstall+"</font></h3>");
- return false;
- }
- if(this.mode !== "read" && this.json.allowUpload){
- this.createUpload();
- }
- this.action = o2.Actions.load("x_onlyofficefile_assemble_control");
- if (!this.json.isNotLoadNow){
- this.data = this.getData();
- if(this.data.documentId === ""){
- if (this.json.officeType === "other" && this.json.templateType === "script"){
- this.json.template = this.form.Macro.exec(this.json.templeteScript.code, this);
- }
- this[this.json.officeType === "other"&&this.json.template !== ""? "createDocumentByTemplate":"createDocument"](function (){
- this.loadDocument();
- }.bind(this));
- }else {
- this.documentId = this.data.documentId;
- this.loadDocument();
- }
- }
- },
- getFileName : function (){
- if (this.json.fileNameType === "value"){
- return this.json.fileName;
- }else if(this.json.fileNameType === "script"){
- return this.form.Macro.exec(this.json.fileNameScript.code, this);
- }else{
- return MWF.xApplication.process.Xform.LP.onlyoffice.filetext;
- }
- },
- createDocument : function (callback){
- var data = {
- "fileName" : this.getFileName() + "." + this.json.officeType,
- "fileType" : this.json.officeType,
- "appToken" : "x_processplatform_assemble_surface",
- "workId" : this.form.businessData.work.id,
- "site" : this.json.fileSite?this.json.fileSite:"filetext"
- };
- this.action.OnlyofficeAction.createForO2(data,
- function( json ){
- this.documentId = json.data.fileId;
- this.setData();
- if (callback) callback();
- }.bind(this),null, false
- );
- },
- createDocumentByTemplate : function (callback){
- this.action.OnlyofficeAction.get(this.json.template).then(function(json) {
- var data = {
- "fileName": this.getFileName() + "." + json.data.fileModel.document.fileType,
- "fileType": json.data.fileModel.document.fileType,
- "appToken" : "x_processplatform_assemble_surface",
- "workId" : this.form.businessData.work.id,
- "site" : this.json.fileSite?this.json.fileSite:"filetext",
- "tempId": this.json.template
- };
- this.action.OnlyofficeAction.createForO2(data,
- function( json ){
- this.documentId = json.data.fileId;
- this.setData();
- if (callback) callback();
- }.bind(this),null, false
- );
- }.bind(this))
- },
- createUpload : function (){
- this.uploadNode = new Element("div",{"style":"margin:10px;"}).inject(this.node);
- var uploadBtn = new Element("button",{"text":MWF.xApplication.process.Xform.LP.ofdview.upload,"style":"margin-left: 15px; color: rgb(255, 255, 255); cursor: pointer; height: 26px; line-height: 26px; padding: 0px 10px; min-width: 40px; background-color: rgb(74, 144, 226); border: 1px solid rgb(82, 139, 204); border-radius: 15px;"}).inject(this.uploadNode);
- uploadBtn.addEvent("click",function (){
- o2.require("o2.widget.Upload", null, false);
- var upload = new o2.widget.Upload(this.content, {
- "action": o2.Actions.get("x_processplatform_assemble_surface").action,
- "method": "replaceAttachment",
- "accept" : ".docx,.xlsx,.pptx",
- "parameter": {
- "id" : this.documentId,
- "workid" : this.form.businessData.work.id,
- },
- "data":{
- },
- "onCompleted": function(data){
- this.documentId = data.id;
- this.reload();
- }.bind(this)
- });
- upload.load();
- }.bind(this));
- },
- reload : function (){
- this.setData();
- this.node.empty();
- if(this.mode !== "read" && this.json.allowUpload){
- this.createUpload();
- }
- this.loadDocument();
- },
- loadDocument: function () {
- this.getEditor(function () {
- this.loadApi(function (){
- this.loadEditor();
- }.bind(this));
- }.bind(this));
- },
- loadApi : function (callback){
- this.action.OnlyofficeConfigAction.getConfig(function( json ){
- var data = json.data;
- var docserviceApi = data.docserviceApi;
- o2.load(docserviceApi, function () {
- if (callback) callback();
- }.bind(this));
- }.bind(this),null, false);
- },
- getEditor: function (callback) {
- if (this.isReadonly()){
- this.mode = "view";
- }else{
- if (this.json.readScript && this.json.readScript.code){
- var flag = this.form.Macro.exec(this.json.readScript.code, this);
- if (flag){
- this.mode = "view";
- }
- }
- }
- if(this.data.appToken){
- this.action.OnlyofficeAction.appFileEdit({
- "appToken" : this.data.appToken,
- "mode" : this.mode,
- "fileId" : this.documentId
- }, function( json ){
- this.document = json.data;
- this.document.editor = this.document.fileModel;
- if (callback) callback();
- }.bind(this),null,false);
- }else{
- this.action.OnlyofficeAction.get(this.documentId, function( json ){
- this.document = json.data;
- this.document.editor = this.document.fileModel;
- if (callback) callback();
- }.bind(this),null,false);
- }
- },
- loadEditor: function () {
- this.fireEvent("beforeOpen");
- var docEditor;
- var _self = this;
- var innerAlert = function (message) {
- if (console && console.log)
- console.log(message);
- };
- var onAppReady = function () {
- innerAlert("Document editor ready");
- };
- var onDocumentStateChange = function (event) {
- var title = document.title.replace(/\*$/g, "");
- document.title = title + (event.data ? "*" : "");
- if(event.data){
- _self.fireEvent("afterSave");
- }
- };
- var onRequestEditRights = function () {
- location.href = location.href.replace(RegExp("mode=view\&?", "i"), "");
- };
- var onRequestHistory = function (event) {
- if (this.document.FileHistory[0] === "") {
- docEditor.refreshHistory({
- currentVersion: null,
- history: null
- });
- } else {
- var historyArr = JSON.parse(this.document.FileHistory[0]).history;
- var newHistoryArr = [];
- for (var i = 0; i < historyArr.length; i++) {
- if (historyArr[i].version > 0) {
- newHistoryArr.push(historyArr[i]);
- }
- }
- newHistoryArr.sort(function (a, b) {
- return a.version - b.version;
- });
- var historyObj = newHistoryArr || null;
- docEditor.refreshHistory({
- currentVersion: JSON.parse(this.document.FileHistory[0]).currentVersion,
- history: historyObj
- });
- }
- }.bind(this);
- var onRequestHistoryData = function (data) {
- var historyArr = [];
- var history = JSON.parse(this.document.FileHistory[1]);
- for (var key in history) {
- if (key !== "0") {
- historyArr.push(history[key]);
- }
- }
- var version = data.data;
- var historyData = historyArr || null;
- docEditor.setHistoryData(historyData[version - 1]);
- }.bind(this);
- var onRequestHistoryClose = function (event) {
- //document.location.reload();
- _self.reload();
- };
- var onError = function (event) {
- if (event) innerAlert(event.data);
- };
- var onOutdatedVersion = function (event) {
- location.reload(true);
- };
- var onDocumentReady= function() {
- console.log("Document is loaded");
- }.bind(this);
- var onPluginsReady= function() {
- console.log("Plugins is loaded");
- this.fireEvent("afterOpen");
- }.bind(this);
- this.document.editor.events = {
- "onAppReady": onAppReady,
- "onDocumentReady":onDocumentReady,
- "onPluginsReady":onPluginsReady,
- "onDocumentStateChange": onDocumentStateChange,
- 'onRequestEditRights': onRequestEditRights,
- "onError": onError,
- "onOutdatedVersion": onOutdatedVersion,
- }
- if (this.document.FileHistory[0] !== "") {
- this.document.editor.events.onRequestHistory = onRequestHistory;
- this.document.editor.events.onRequestHistoryData = onRequestHistoryData;
- this.document.editor.events.onRequestHistoryClose = onRequestHistoryClose;
- }
- if(layout.mobile){
- this.document.editor.type = "mobile";
- }
- this.officeNode = new Element("div#_" + this.documentId, {
- "styles": this.form.css.officeAreaNode
- }).inject(this.node);
- if (this.node.getSize().y<800) this.node.setStyle("height", "800px");
- this.document.editor.editorConfig.mode = this.mode;
- var lang = layout.session.user.language;
- if(lang != "en"){
- lang = "zh";
- }
- this.document.editor.editorConfig.lang = "zh";
- this.document.editor.editorConfig.location = "zh-CN";
- this.document.editor.editorConfig.region = "zh-CN";
- this.document.editor.editorConfig.customization = {
- "chat": this.json.chat,
- "commentAuthorOnly": false,
- "comments": this.json.comments,
- "autosave" : this.json.autosave,
- "compactHeader": this.json.compactHeader,
- "compactToolbar": this.json.compactToolbar,
- "compatibleFeatures": this.json.compatibleFeatures,
- "customer": {
- "address": this.json.address,
- "info": this.json.info,
- "logo": this.json.logo,
- "mail": this.json.mail,
- "name": this.json.companyName,
- "www": this.json.www
- },
- "feedback": {
- "url": this.json.feedback,
- "visible": this.json.feedbackUrl
- },
- "forcesave": this.json.forcesave,
- "help": this.json.help,
- "hideRightMenu": this.json.hideRightMenu,
- "logo": {
- "image": this.json.logoImg,
- "url": this.json.logoUrl
- },
- "macros": true,
- "macrosMode": "warn",
- "mentionShare": true,
- "plugins": this.json.plugins,
- "reviewDisplay": this.json.reviewDisplay,
- "showReviewChanges": this.json.showReviewChanges,
- "spellcheck": this.json.spellcheck,
- "toolbarHideFileName": this.json.toolbarHideFileName,
- "toolbarNoTabs": this.json.toolbarNoTabs,
- "trackChanges": this.json.trackChanges,
- "unit": this.json.unit,
- "zoom": this.json.zoom,
- "review" : {
- "trackChanges" : this.json.trackChanges,
- "reviewDisplay" : this.json.reviewDisplay,
- "showReviewChanges" : this.json.showReviewChanges
- }
- }
- docEditor = new DocsAPI.DocEditor("_" + this.documentId, this.document.editor);
- this.onlyOffice = docEditor;
- },
- hide: function(){
- this.node.hide();
- },
- show: function(){
- this.node.show();
- },
- isEmpty : function(){
- var data = this.getData();
- if(data.documentId === ""){
- return true;
- }else {
- return false;
- }
- },
- getData: function(){
- var data = {
- "documentId" : ""
- };
- var site = this.json.fileSite?this.json.fileSite:"filetext";
- if(this.form.businessData.data[this.json.id] && this.form.businessData.data[this.json.id].documentId){
- data = this.form.businessData.data[this.json.id];
- }else {
- //判断对应的site里有没有值
- var attachmentList = this.form.businessData.attachmentList;
- attachmentList = attachmentList.filter(function(att) {
- return att.site === site;
- });
- if(attachmentList.length>0){
- data = {
- "documentId": attachmentList[0].id,
- "appToken": "x_processplatform_assemble_surface"
- };
- }
- }
- return data;
- },
- setData: function() {
- var data = {
- "documentId": this.documentId,
- "appToken": "x_processplatform_assemble_surface"
- }
- this.data = data;
- this._setBusinessData(data);
- var jsonData = {}
- jsonData[this.json.id] = data;
- o2.Actions.load("x_processplatform_assemble_surface").DataAction.updateWithJob(this.form.businessData.work.job, jsonData, function (json) {
- data = json.data;
- })
- },
- setBookmark : function (name , value){
- var connector = this.onlyOffice.createConnector();
- Asc.scope.name = name;
- Asc.scope.text = value;
- connector.callCommand(function() {
- var oDocument = Api.GetDocument();
- var oRange = oDocument.GetBookmarkRange(Asc.scope.name);
- var oRangeParagraph = oRange.GetParagraph(0);
- var aSearch = oRangeParagraph.Search(oRange.GetText());
- try {
- oRange.AddText(Asc.scope.text, 'after');
- aSearch[0].Delete();
- } catch (err) {
- oRange.AddText(Asc.scope.text, 'before');
- aSearch = oRangeParagraph.Search(oRange.GetText());
- aSearch[0].AddBookmark(Asc.scope.name);
- }
- }, function() { console.log("callback command"); });
- connector.disconnect();
- },
- save : function (){
- var connector = this.onlyOffice.createConnector();
- connector.callCommand(function() {
- Api.Save();
- }, function() { console.log("callback command"); });
- connector.disconnect();
- },
- startRevisions : function (){
- //开启修订
- var connector = this.onlyOffice.createConnector();
- connector.callCommand(function() {
- var oDocument = Api.GetDocument();
- oDocument.SetTrackRevisions(true);
- }, function() { console.log("callback command"); });
- connector.disconnect();
- },
- stopRevisions : function (){
- //关闭修订
- var connector = this.onlyOffice.createConnector();
- connector.callCommand(function() {
- var oDocument = Api.GetDocument();
- oDocument.SetTrackRevisions(false);
- }, function() { console.log("callback command"); });
- connector.disconnect();
- },
- acceptAllRevisions : function (){
- var connector = this.onlyOffice.createConnector();
- connector.callCommand(function() {
- var oDocument = Api.GetDocument();
- oDocument.AcceptAllRevisionChanges();
- }, function() { console.log("callback command"); });
- connector.disconnect();
- },
- rejectAllRevisions : function (){
- var connector = this.onlyOffice.createConnector();
- connector.callCommand(function() {
- var oDocument = Api.GetDocument();
- oDocument.RejectAllRevisionChanges();
- }, function() { console.log("callback command"); });
- connector.disconnect();
- },
- });
|