Commit 40e74224 authored by Alexey Golubev's avatar Alexey Golubev Committed by GitHub

Merge pull request #13 from ONLYOFFICE/release/4.0.1

Release/4.0.1
parents f7b2b05b 552ecb0c
[![License](https://img.shields.io/badge/License-GNU%20AGPL%20V3-green.svg?style=flat)](http://www.gnu.org/licenses/agpl-3.0.ru.html) ![Release](https://img.shields.io/badge/Release-v4.0.1-blue.svg?style=flat)
## web-apps
The frontend for [ONLYOFFICE Document Server][2]. Builds the program interface and allows the user create, edit, save and export text, spreadsheet and presentation documents using the common interface of a document editor.
## Project Information
Official website: [http://www.onlyoffice.org](http://onlyoffice.org "http://www.onlyoffice.org")
......@@ -8,6 +14,11 @@ SaaS version: [http://www.onlyoffice.com](http://www.onlyoffice.com "http://www.
## User Feedback and Support
If you have any problems with or questions about this image, please contact us through a [dev.onlyoffice.org][1].
If you have any problems with or questions about [ONLYOFFICE Document Server][2], please visit our official forum to find answers to your questions: [dev.onlyoffice.org][1].
[1]: http://dev.onlyoffice.org
[2]: https://github.com/ONLYOFFICE/DocumentServer
## License
web-apps is released under an GNU AGPL v3.0 license. See the LICENSE file for more information.
......@@ -80,14 +80,17 @@ define([
setMode: function(mode) {
this.mode = mode;
if (this.api && this.mode.canCoAuthoring) {
if (this.mode.canChat)
if (this.api) {
if (this.mode.canCoAuthoring && this.mode.canChat)
this.api.asc_registerCallback('asc_onCoAuthoringChatReceiveMessage', _.bind(this.onReceiveMessage, this));
this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onUsersChanged, this));
this.api.asc_registerCallback('asc_onConnectionStateChanged', _.bind(this.onUserConnection, this));
this.api.asc_coAuthoringGetUsers();
if (this.mode.canChat)
if ( !this.mode.isEditDiagram && !this.mode.isEditMailMerge ) {
this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onUsersChanged, this));
this.api.asc_registerCallback('asc_onConnectionStateChanged', _.bind(this.onUserConnection, this));
this.api.asc_coAuthoringGetUsers();
}
if (this.mode.canCoAuthoring && this.mode.canChat)
this.api.asc_coAuthoringChatGetMessages();
}
return this;
......@@ -100,7 +103,7 @@ define([
},
onUsersChanged: function(users){
if (!this.mode.canLicense) {
if (!this.mode.canLicense || !this.mode.canCoAuthoring) {
var len = 0;
for (name in users) {
if (undefined !== name) len++;
......
......@@ -55,7 +55,10 @@ define([
initialize: function() {
},
events: {
events: function() {
return {
'click #id-plugin-close':_.bind(this.onToolClose,this)
};
},
onLaunch: function() {
......@@ -81,8 +84,9 @@ define([
}
},
onAfterRender: function(historyView) {
historyView.viewPluginsList.on('item:click', _.bind(this.onSelectPlugin, this));
onAfterRender: function(panelPlugins) {
panelPlugins.viewPluginsList.on('item:click', _.bind(this.onSelectPlugin, this));
this.bindViewEvents(this.panelPlugins, this.events);
},
updatePluginsList: function() {
......@@ -119,42 +123,114 @@ define([
this.api.asc_pluginsRegister(this.panelPlugins.pluginsPath, arr);
},
onSelectPlugin: function(picker, item, record){
this.api.asc_pluginRun(record.get('guid'), record.get('currentVariation'), '');
onSelectPlugin: function(picker, item, record, e){
var btn = $(e.target);
if (btn && btn.hasClass('plugin-caret')) {
var menu = this.panelPlugins.pluginMenu;
if (menu.isVisible()) {
menu.hide();
return;
}
var showPoint, me = this,
currentTarget = $(e.currentTarget),
parent = $(this.panelPlugins.el),
offset = currentTarget.offset(),
offsetParent = parent.offset();
showPoint = [offset.left - offsetParent.left + currentTarget.width(), offset.top - offsetParent.top + currentTarget.height()/2];
if (record != undefined) {
for (var i = 0; i < menu.items.length; i++) {
menu.removeItem(menu.items[i]); i--;
}
menu.removeAll();
var variations = record.get('variations');
for (var i=0; i<variations.length; i++) {
var variation = variations[i],
mnu = new Common.UI.MenuItem({
caption : (i>0) ? variation.get('description') : me.panelPlugins.textStart,
value : parseInt(variation.get('index'))
}).on('click', function(item, e) {
if (me.api) {
me.api.asc_pluginRun(record.get('guid'), item.value, '');
}
});
menu.addItem(mnu);
}
}
var menuContainer = parent.find('#menu-plugin-container');
if (!menu.rendered) {
if (menuContainer.length < 1) {
menuContainer = $('<div id="menu-plugin-container" style="position: absolute; z-index: 10000;"><div class="dropdown-toggle" data-toggle="dropdown"></div></div>', menu.id);
parent.append(menuContainer);
}
menu.render(menuContainer);
menu.cmpEl.attr({tabindex: "-1"});
menu.on('show:after', function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', true);
}).on('hide:after', function(cmp) {
if (cmp && cmp.menuAlignEl)
cmp.menuAlignEl.toggleClass('over', false);
});
}
menuContainer.css({left: showPoint[0], top: showPoint[1]});
menu.menuAlignEl = currentTarget;
menu.setOffset(-11, -currentTarget.height()/2 + 2);
menu.show();
_.delay(function() {
menu.cmpEl.focus();
}, 10);
e.stopPropagation();
e.preventDefault();
} else
this.api.asc_pluginRun(record.get('guid'), 0, '');
},
onPluginShow: function(plugin) {
var variation = plugin.get_Variations()[0];
onPluginShow: function(plugin, variationIndex) {
var variation = plugin.get_Variations()[variationIndex];
if (!variation.get_Visual()) return;
var me = this,
arrBtns = variation.get_Buttons(),
newBtns = {};
if (_.isArray(arrBtns)) {
_.each(arrBtns, function(b, index){
newBtns[index] = {text: b.text, cls: 'custom' + ((b.primary) ? ' primary' : '')};
if (variation.get_InsideMode()) {
this.panelPlugins.openInsideMode(plugin.get_Name(), ((plugin.get_BaseUrl().length == 0) ? this.panelPlugins.pluginsPath : plugin.get_BaseUrl()) + variation.get_Url());
} else {
var me = this,
arrBtns = variation.get_Buttons(),
newBtns = {};
if (_.isArray(arrBtns)) {
_.each(arrBtns, function(b, index){
newBtns[index] = {text: b.text, cls: 'custom' + ((b.primary) ? ' primary' : '')};
});
}
var _baseUrl = (plugin.get_BaseUrl().length == 0) ? me.panelPlugins.pluginsPath : plugin.get_BaseUrl();
me.pluginDlg = new Common.Views.PluginDlg({
title: plugin.get_Name(),
url: _baseUrl + variation.get_Url(),
buttons: newBtns,
toolcallback: _.bind(this.onToolClose, this)
});
me.pluginDlg.on('render:after', function(obj){
obj.getChild('.footer .dlg-btn').on('click', _.bind(me.onDlgBtnClick, me));
}).on('close', function(obj){
me.pluginDlg = undefined;
});
me.pluginDlg.show();
}
var _baseUrl = (plugin.get_BaseUrl().length == 0) ? me.panelPlugins.pluginsPath : plugin.get_BaseUrl();
me.pluginDlg = new Common.Views.PluginDlg({
title: plugin.get_Name(),
url: _baseUrl + variation.get_Url(),
buttons: newBtns,
toolcallback: _.bind(this.onToolClose, this)
});
me.pluginDlg.on('render:after', function(obj){
obj.getChild('.footer .dlg-btn').on('click', _.bind(me.onDlgBtnClick, me));
}).on('close', function(obj){
me.pluginDlg = undefined;
});
me.pluginDlg.show();
},
onPluginClose: function() {
if (this.pluginDlg)
this.pluginDlg.close();
else
this.panelPlugins.closeInsideMode();
},
onDlgBtnClick: function(event) {
......
......@@ -67,7 +67,7 @@ define([
'<td align="center"><label class="asc-about-version">' + options.appName.toUpperCase() + '</label></td>',
'</tr>',
'<tr>',
'<td align="center"><label class="asc-about-version">' + this.txtVersion + this.txtVersionNum + '</label></td>',
'<td align="center"><label class="asc-about-version" id="id-about-licensor-version-name">' + this.txtVersion + this.txtVersionNum + '</label></td>',
'</tr>',
'</table>',
'<table id="id-about-licensor-info" cols="3" style="width: 100%;" class="margin-bottom">',
......@@ -106,7 +106,7 @@ define([
'<td align="center"><label class="asc-about-version">' + options.appName.toUpperCase() + '</label></td>',
'</tr>',
'<tr>',
'<td align="center"><label style="padding-bottom: 29px;" class="asc-about-version">' + this.txtVersion + this.txtVersionNum + '</label></td>',
'<td align="center"><label style="padding-bottom: 29px;" class="asc-about-version" id="id-about-licensee-version-name">' + this.txtVersion + this.txtVersionNum + '</label></td>',
'</tr>',
'<tr>',
'<td align="center" class="padding-small">',
......@@ -235,6 +235,13 @@ define([
this.fireEvent('hide', this );
},
setMode: function(mode){
if (mode.isLightVersion) {
$('#id-about-licensor-version-name').text(this.txtEdition + this.txtVersion + this.txtVersionNum);
$('#id-about-licensee-version-name').text(this.txtEdition + this.txtVersion + this.txtVersionNum);
}
},
txtPoweredBy: 'Powered by',
txtVersion: 'Version ',
txtLicensor: 'LICENSOR',
......@@ -242,7 +249,8 @@ define([
txtAddress: 'address: ',
txtAscAddress: 'Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021',
txtMail: 'email: ',
txtTel: 'tel.: '
txtTel: 'tel.: ',
txtEdition: 'Integration Edition '
}, Common.Views.About || {}));
});
......@@ -58,31 +58,128 @@ define([
'<label id="plugins-header"><%= scope.strPlugins %></label>',
'<div id="plugins-list" class="">',
'</div>',
'</div>'
'</div>',
'<div id="current-plugin-box" class="layout-ct vbox hidden">',
'<div id="current-plugin-header">',
'<label></label>',
'<div id="id-plugin-close" class="plugin-close img-commonctrl"></div>',
'</div>',
'<div id="current-plugin-frame" class="">',
'</div>',
'</div>',
'<div id="plugins-mask" style="display: none;">'
].join('')),
initialize: function(options) {
_.extend(this, options);
this.pluginsPath = '../../../../sdkjs-plugins/';
this._locked = false;
this._state = {
DisabledControls: true
};
this.lockedControls = [];
Common.UI.BaseView.prototype.initialize.call(this, arguments);
},
render: function(el) {
el = el || this.el;
$(el).html(this.template({scope: this}));
this.$el = $(el);
this.viewPluginsList = new Common.UI.DataView({
el: $('#plugins-list'),
store: this.storePlugins,
enableKeyEvents: false,
itemTemplate: _.template('<div id="<%= id %>" class="item-plugins" style="background-image: url(' + '<% if (baseUrl !=="") { %>' + '<%= baseUrl %>' + '<% } else { %>' + this.pluginsPath + '<% } %>' + '<%= variations[currentVariation].get("icons")[(window.devicePixelRatio > 1) ? 1 : 0] %>); background-position: 0 0;"></div>')
itemTemplate: _.template([
'<div id="<%= id %>" class="item-plugins" style="display: block;">',
'<div class="plugin-icon" style="background-image: url(' + '<% if (baseUrl !=="") { %>' + '<%= baseUrl %>' + '<% } else { %>' + this.pluginsPath + '<% } %>' + '<%= variations[currentVariation].get("icons")[(window.devicePixelRatio > 1) ? 1 : 0] %>);"></div>',
'<% if (variations.length>1) { %>',
'<div class="plugin-caret img-commonctrl"></div>',
'<% } %>',
'<%= name %>',
'</div>'
].join(''))
});
this.lockedControls.push(this.viewPluginsList);
this.viewPluginsList.cmpEl.off('click');
this.pluginName = $('#current-plugin-header label');
this.pluginsPanel = $('#plugins-box');
this.pluginsMask = $('#plugins-mask');
this.currentPluginPanel = $('#current-plugin-box');
this.currentPluginFrame = $('#current-plugin-frame');
this.pluginMenu = new Common.UI.Menu({
menuAlign : 'tr-br',
items: []
});
this.trigger('render:after', this);
return this;
},
strPlugins: 'Plugins'
setLocked: function (locked) {
this._locked = locked;
},
ChangeSettings: function(props) {
this.disableControls(this._locked);
},
disableControls: function(disable) {
if (this._state.DisabledControls!==disable) {
this._state.DisabledControls = disable;
_.each(this.lockedControls, function(item) {
item.setDisabled(disable);
});
this.pluginsMask.css('display', disable ? 'block' : 'none');
}
},
openInsideMode: function(name, url) {
this.pluginsPanel.toggleClass('hidden', true);
this.currentPluginPanel.toggleClass('hidden', false);
this.pluginName.text(name);
if (!this.iframePlugin) {
this.iframePlugin = document.createElement("iframe");
this.iframePlugin.id = 'plugin_iframe';
this.iframePlugin.name = 'pluginFrameEditor',
this.iframePlugin.width = '100%';
this.iframePlugin.height = '100%';
this.iframePlugin.align = "top";
this.iframePlugin.frameBorder = 0;
this.iframePlugin.scrolling = "no";
this.iframePlugin.onload = _.bind(this._onLoad,this);
this.currentPluginFrame.append(this.iframePlugin);
if (!this.loadMask)
this.loadMask = new Common.UI.LoadMask({owner: this.currentPluginFrame});
this.loadMask.setTitle(this.textLoading);
this.loadMask.show();
this.iframePlugin.src = url;
}
},
closeInsideMode: function() {
if (this.iframePlugin) {
this.currentPluginFrame.empty();
this.iframePlugin = null;
}
this.currentPluginPanel.toggleClass('hidden', true);
this.pluginsPanel.toggleClass('hidden', false);
},
_onLoad: function() {
if (this.loadMask)
this.loadMask.hide();
},
strPlugins: 'Add-ons',
textLoading: 'Loading',
textStart: 'Start'
}, Common.Views.Plugins || {}));
......
......@@ -16,12 +16,104 @@
#plugins-list {
height: 100%;
overflow: hidden;
padding: 30px 0 10px 10px;
padding: 30px 0 10px 0;
.item {
display: block;
width: 100%;
.box-shadow(none);
margin: 0;
&:hover,
&.over {
background-color: @secondary;
.plugin-icon {
.box-shadow(0 0 0 2px transparent);
}
}
}
.item-plugins {
width: 40px;
height: 40px;
width: 100%;
padding: 7px 1px 7px 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.plugin-icon {
width: 31px;
height: 31px;
display: inline-block;
.box-shadow(0 0 0 1px transparent);
vertical-align: middle;
background-position: 0 0;
background-size: cover;
margin-right: 10px;
margin-top: -1px;
.background-ximage('@{common-image-path}/plugin/icon_add_on_default.png', '@{common-image-path}/plugin/icon_add_on_default@2x.png', 31px);
}
.plugin-caret {
float: right;
width: 16px;
height: 16px;
background-position: -1px -274px;
margin: 7px;
}
}
}
#current-plugin-box {
position: relative;
width: 100%;
height: 100%;
#current-plugin-header {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 38px;
padding: 10px 12px;
border-bottom: 1px solid @gray-dark;
label {
width: 100%;
padding-right: 20px;
font-weight: bold;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.plugin-close {
position: absolute;
top: 9px;
right: 7px;
width: 16px;
height: 16px;
background-position: -26px -150px;
cursor: pointer;
}
#current-plugin-frame {
width: 100%;
height: 100%;
padding-top: 38px;
}
}
#plugins-mask {
position: absolute;
top: 0;
left: 40px;
width: 100%;
height: 100%;
opacity: 0.4;
background-color: @gray-light;
z-index: @zindex-tooltip + 1;
}
\ No newline at end of file
......@@ -158,11 +158,11 @@ define([
createDelayedElements: function() {
/** coauthoring begin **/
if ( this.mode.canCoAuthoring ) {
this.leftMenu.btnComments[this.mode.isEdit&&this.mode.canComments ? 'show' : 'hide']();
this.leftMenu.btnComments[(this.mode.isEdit && this.mode.canComments && !this.mode.isLightVersion) ? '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']();
this.leftMenu.btnChat[(this.mode.canChat && !this.mode.isLightVersion) ? 'show' : 'hide']();
if (this.mode.canChat)
this.leftMenu.setOptionsPanel('chat', this.getApplication().getController('Common.Controllers.Chat').getView('Common.Views.Chat'));
} else {
......@@ -174,8 +174,6 @@ define([
if (this.mode.canUseHistory)
this.leftMenu.setOptionsPanel('history', this.getApplication().getController('Common.Controllers.History').getView('Common.Views.History'));
this.enablePlugins();
Common.util.Shortcuts.resumeEvents();
return this;
},
......@@ -560,7 +558,14 @@ define([
$.fn.dropdown.Constructor.prototype.keydown.call(menu_opened[0], e);
return false;
}
if (this.leftMenu.btnFile.pressed || this.leftMenu.btnAbout.pressed ||
if (this.mode.canPlugins && this.leftMenu.panelPlugins) {
menu_opened = this.leftMenu.panelPlugins.$el.find('#menu-plugin-container.open > [data-toggle="dropdown"]');
if (menu_opened.length) {
$.fn.dropdown.Constructor.prototype.keydown.call(menu_opened[0], e);
return false;
}
}
if (this.leftMenu.btnFile.pressed || this.leftMenu.btnAbout.pressed || this.leftMenu.btnPlugins.pressed ||
$(e.target).parents('#left-menu').length ) {
this.leftMenu.close();
Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
......@@ -569,13 +574,13 @@ define([
break;
/** coauthoring begin **/
case 'chat':
if (this.mode.canCoAuthoring && this.mode.canChat) {
if (this.mode.canCoAuthoring && this.mode.canChat && !this.mode.isLightVersion) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu('chat');
}
return false;
case 'comments':
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments) {
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments && !this.mode.isLightVersion) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu('comments');
this.getApplication().getController('Common.Controllers.Comments').onAfterShow();
......
......@@ -829,9 +829,9 @@ define([
application.getController('Common.Controllers.ExternalDiagramEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization});
application.getController('Common.Controllers.ExternalMergeEditor').setApi(this.api).loadConfig({config:this.editorConfig, customization: this.editorConfig.customization});
pluginsController.setApi(this.api);
this.updatePluginsList(this.plugins);
this.api.asc_registerCallback('asc_onPluginsInit', _.bind(this.updatePluginsList, this));
pluginsController.setApi(me.api);
me.updatePluginsList(me.plugins);
me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me));
documentHolderController.setApi(me.api);
documentHolderController.createDelayedElements();
......@@ -924,12 +924,13 @@ define([
},
onEditorPermissions: function(params) {
/** coauthoring begin **/
this.appOptions.canCoAuthoring = true;
/** coauthoring end **/
this.permissions.review = (this.permissions.review === undefined) ? (this.permissions.edit !== false) : this.permissions.review;
this.appOptions.canAnalytics = params.asc_getIsAnalyticsEnable();
this.appOptions.canLicense = params.asc_getCanLicense ? params.asc_getCanLicense() : false;
this.appOptions.isLightVersion = params.asc_getIsLight();
/** coauthoring begin **/
this.appOptions.canCoAuthoring = !this.appOptions.isLightVersion;
/** coauthoring end **/
this.appOptions.isOffline = this.api.asc_isOffline();
this.appOptions.isReviewOnly = (this.permissions.review === true) && (this.permissions.edit === false);
this.appOptions.canRequestEditRights = this.editorConfig.canRequestEditRights;
......@@ -938,7 +939,7 @@ define([
(!this.appOptions.isReviewOnly || this.appOptions.canLicense); // if isReviewOnly==true -> canLicense must be true
this.appOptions.isEdit = this.appOptions.canLicense && this.appOptions.canEdit && this.editorConfig.mode !== 'view';
this.appOptions.canReview = this.appOptions.canLicense && this.appOptions.isEdit && (this.permissions.review===true);
this.appOptions.canUseHistory = this.appOptions.canLicense && this.editorConfig.canUseHistory && (this.permissions.edit !== false) && this.appOptions.canCoAuthoring && !this.appOptions.isDesktopApp;
this.appOptions.canUseHistory = this.appOptions.canLicense && !this.appOptions.isLightVersion && this.editorConfig.canUseHistory && (this.permissions.edit !== false) && this.appOptions.canCoAuthoring && !this.appOptions.isDesktopApp;
this.appOptions.canHistoryClose = this.editorConfig.canHistoryClose;
this.appOptions.canUseMailMerge= this.appOptions.canLicense && this.appOptions.canEdit && !this.appOptions.isDesktopApp;
this.appOptions.canSendEmailAddresses = this.appOptions.canLicense && this.editorConfig.canSendEmailAddresses && this.appOptions.canEdit && this.appOptions.canCoAuthoring;
......@@ -1719,7 +1720,7 @@ define([
if (isSupported && (isEdit || itemVar.isViewer))
variationsArr.push(new Common.Models.PluginVariation({
description: itemVar.description,
index: itemVar.index,
index: variationsArr.length,
url : itemVar.url,
icons : itemVar.icons,
isViewer: itemVar.isViewer,
......
......@@ -181,10 +181,10 @@ define([
});
value = Common.localStorage.getItem("de-track-changes-tip");
this.showTrackChangesTip = !(value && parseInt(value) == 1);
this.showTrackChangesTip = !(value && parseInt(value) == 1) && !this.statusbar.mode.isLightVersion;
value = Common.localStorage.getItem("de-new-changes");
this.showNewChangesTip = !(value && parseInt(value) == 1);
this.showNewChangesTip = !(value && parseInt(value) == 1) && !this.statusbar.mode.isLightVersion;
if (this.statusbar.mode.isReviewOnly) {
var iconEl = $('.btn-icon', this.statusbar.btnReview.cmpEl);
......@@ -207,7 +207,7 @@ define([
var iconEl = $('.btn-icon', this.statusbar.btnReview.cmpEl);
(this.api.asc_HaveRevisionsChanges()) ? iconEl.removeClass(this.statusbar.btnReviewCls).addClass('btn-ic-changes') : iconEl.removeClass('btn-ic-changes').addClass(this.statusbar.btnReviewCls);
if (value!==null && parseInt(value) == 1) {
this.changeReviewStatus(true);
this.changeReviewStatus(!this.statusbar.mode.isLightVersion);
// show tooltip "track changes in this document" and change icon
if (this.showTrackChangesTip && !statusbarIsHidden){
this.statusbar.btnReview.updateHint('');
......@@ -300,7 +300,7 @@ define([
if (this.api) {
this.api.asc_SetTrackRevisions(state);
}
this.showHideReviewChangesPanel(state);
this.showHideReviewChangesPanel(state && !this.statusbar.mode.isLightVersion);
},
showHideReviewChangesPanel: function(state) {
......
......@@ -39,17 +39,22 @@
</tr>
<tr>
<td colspan=2>
<label class="header"><%= scope.textInsert %></label>
<label class="header" id="image-lbl-replace" ><%= scope.textInsert %></label>
</td>
</tr>
<tr>
<td class="padding-small" width="50%">
<td width="50%">
<button type="button" class="btn btn-text-default" id="image-button-from-file" style="width:85px;"><%= scope.textFromFile %></button>
</td>
<td class="padding-small" width="50%">
<td width="50%">
<button type="button" class="btn btn-text-default" id="image-button-from-url" style="width:85px;"><%= scope.textFromUrl %></button>
</td>
</tr>
<tr>
<td class="padding-small" colspan=2>
<button type="button" class="btn btn-text-default hidden" id="image-button-edit-object" style="width:100px;"><%= scope.textEdit %></button>
</td>
</tr>
<tr>
<td class="padding-small" colspan=2>
<div class="separator horizontal"></div>
......
......@@ -6,9 +6,9 @@
<button id="left-btn-comments" class="btn btn-category" content-target="left-panel-comments"><span class="btn-icon img-toolbarmenu btn-menu-comments">&nbsp;</span></button>
<button id="left-btn-chat" class="btn btn-category" content-target="left-panel-chat"><span class="btn-icon img-toolbarmenu btn-menu-chat">&nbsp;</span></button>
<!-- /** coauthoring end **/ -->
<button id="left-btn-plugins" class="btn btn-category" content-target=""><span class="btn-icon img-toolbarmenu btn-menu-plugin">&nbsp;</span></button>
<button id="left-btn-support" class="btn btn-category" content-target=""><span class="btn-icon img-toolbarmenu btn-menu-support">&nbsp;</span></button>
<button id="left-btn-about" class="btn btn-category" content-target=""><span class="btn-icon img-toolbarmenu btn-menu-about">&nbsp;</span></button>
<button id="left-btn-plugins" class="btn btn-category" content-target="" style="position: absolute; bottom: 0;"><span class="btn-icon img-toolbarmenu btn-menu-plugin">&nbsp;</span></button>
</div>
<div class="left-panel" style="">
<!-- /** coauthoring begin **/ -->
......
......@@ -16,8 +16,6 @@
</div>
<div id="id-textart-settings" class="settings-panel">
</div>
<div id="id-empty-settings" class="settings-panel">
</div>
</div>
<div class="tool-menu-btns">
<div class="ct-btn-category arrow-left" />
......
......@@ -73,7 +73,8 @@ define([
Width: 0,
Height: 0,
FromGroup: false,
DisabledControls: false
DisabledControls: false,
isOleObject: false
};
this.lockedControls = [];
this._locked = false;
......@@ -133,12 +134,21 @@ define([
});
this.lockedControls.push(this.btnInsertFromUrl);
this.btnEditObject = new Common.UI.Button({
el: $('#image-button-edit-object')
});
this.lockedControls.push(this.btnEditObject);
this.btnOriginalSize.on('click', _.bind(this.setOriginalSize, this));
this.btnInsertFromFile.on('click', _.bind(function(btn){
if (this.api) this.api.ChangeImageFromFile();
this.fireEvent('editcomplete', this);
}, this));
this.btnInsertFromUrl.on('click', _.bind(this.insertFromUrl, this));
this.btnEditObject.on('click', _.bind(function(btn){
if (this.api) this.api.asc_pluginRun(this._originalProps.asc_getPluginGuid(), 0, this._originalProps.asc_getPluginData());
this.fireEvent('editcomplete', this);
}, this));
$(this.el).on('click', '#image-advanced-link', _.bind(this.openAdvancedSettings, this));
},
......@@ -149,6 +159,7 @@ define([
}));
this.linkAdvanced = $('#image-advanced-link');
this.lblReplace = $('#image-lbl-replace');
},
setApi: function(api) {
......@@ -215,6 +226,24 @@ define([
}
this.btnOriginalSize.setDisabled(props.get_ImageUrl()===null || props.get_ImageUrl()===undefined || this._locked);
var pluginGuid = props.asc_getPluginGuid();
value = (pluginGuid !== null && pluginGuid !== undefined);
if (this._state.isOleObject!==value) {
this.btnInsertFromUrl.setVisible(!value);
this.btnInsertFromFile.setVisible(!value);
this.btnEditObject.setVisible(value);
this.lblReplace.text(value ? this.textEditObject : this.textInsert);
this._state.isOleObject=value;
}
if (this._state.isOleObject) {
var plugin = DE.getCollection('Common.Collections.Plugins').findWhere({guid: pluginGuid});
this.btnEditObject.setDisabled(plugin===null || plugin ===undefined);
} else {
this.btnInsertFromUrl.setDisabled(pluginGuid===null);
this.btnInsertFromFile.setDisabled(pluginGuid===null);
}
}
},
......@@ -372,7 +401,7 @@ define([
textWidth: 'Width',
textHeight: 'Height',
textOriginalSize: 'Default Size',
textInsert: 'Insert Image',
textInsert: 'Replace Image',
textFromUrl: 'From URL',
textFromFile: 'From File',
textAdvanced: 'Show advanced settings',
......@@ -382,7 +411,9 @@ define([
txtThrough: 'Through',
txtTopAndBottom: 'Top and bottom',
txtBehind: 'Behind',
txtInFront: 'In front'
txtInFront: 'In front',
textEditObject: 'Edit Object',
textEdit: 'Edit'
}, DE.Views.ImageSettings || {}));
});
\ No newline at end of file
......@@ -141,6 +141,13 @@ define([
toggleGroup: 'leftMenuGroup'
});
this.btnComments.hide();
this.btnChat.hide();
this.btnComments.on('click', _.bind(this.onBtnMenuClick, this));
this.btnChat.on('click', _.bind(this.onBtnMenuClick, this));
/** coauthoring end **/
this.btnPlugins = new Common.UI.Button({
el: $('#left-btn-plugins'),
hint: this.tipPlugins,
......@@ -148,15 +155,8 @@ define([
disabled: true,
toggleGroup: 'leftMenuGroup'
});
this.btnComments.hide();
this.btnChat.hide();
this.btnPlugins.hide();
this.btnComments.on('click', _.bind(this.onBtnMenuClick, this));
this.btnChat.on('click', _.bind(this.onBtnMenuClick, this));
this.btnPlugins.on('click', _.bind(this.onBtnMenuClick, this));
/** coauthoring end **/
this.btnSearch.on('click', _.bind(this.onBtnMenuClick, this));
this.btnAbout.on('toggle', _.bind(this.onBtnMenuToggle, this));
......@@ -227,7 +227,7 @@ define([
}
}
/** coauthoring end **/
if (this.mode.canPlugins) {
if (this.mode.canPlugins && this.panelPlugins) {
if (this.btnPlugins.pressed) {
this.panelPlugins.show();
} else
......@@ -279,12 +279,12 @@ define([
this.panelChat['hide']();
this.btnChat.toggle(false, true);
}
if (this.mode.canPlugins) {
this.panelPlugins['hide']();
this.btnPlugins.toggle(false, true);
}
}
/** coauthoring end **/
if (this.mode.canPlugins && this.panelPlugins) {
this.panelPlugins['hide']();
this.btnPlugins.toggle(false, true);
}
},
isOpened: function() {
......@@ -348,6 +348,7 @@ define([
setMode: function(mode) {
this.mode = mode;
this.btnAbout.panel.setMode(mode);
return this;
},
......@@ -365,6 +366,6 @@ define([
tipSupport : 'Feedback & Support',
tipFile : 'File',
tipSearch : 'Search',
tipPlugins : 'Plugins'
tipPlugins : 'Add-ons'
}, DE.Views.LeftMenu || {}));
});
......@@ -71,18 +71,18 @@ define([
this._initSettings = true;
this._state = {
LineRuleIdx: 1,
LineHeight: 1.5,
LineSpacingBefore: 0,
LineSpacingAfter: 0.35,
LineRuleIdx: null,
LineHeight: null,
LineSpacingBefore: null,
LineSpacingAfter: null,
AddInterval: false,
BackColor: '#000000',
DisabledControls: false,
DisabledControls: true,
HideTextOnlySettings: false
};
this.spinners = [];
this.lockedControls = [];
this._locked = false;
this._locked = true;
this.isChart = false;
this.render();
......@@ -99,19 +99,21 @@ define([
cls: 'input-group-nr',
menuStyle: 'min-width: 85px;',
editable: false,
data: this._arrLineRule
data: this._arrLineRule,
disabled: this._locked
});
this.cmbLineRule.setValue(this._arrLineRule[ this._state.LineRuleIdx].value);
this.cmbLineRule.setValue('');
this.lockedControls.push(this.cmbLineRule);
this.numLineHeight = new Common.UI.MetricSpinner({
el: $('#paragraph-spin-line-height'),
step: .01,
width: 85,
value: '1.5',
value: '',
defaultUnit : "",
maxValue: 132,
minValue: 0.5
minValue: 0.5,
disabled: this._locked
});
this.lockedControls.push(this.numLineHeight);
......@@ -119,12 +121,13 @@ define([
el: $('#paragraph-spin-spacing-before'),
step: .1,
width: 85,
value: '0 cm',
value: '',
defaultUnit : "cm",
maxValue: 55.88,
minValue: 0,
allowAuto : true,
autoText : this.txtAutoText
autoText : this.txtAutoText,
disabled: this._locked
});
this.spinners.push(this.numSpacingBefore);
this.lockedControls.push(this.numSpacingBefore);
......@@ -133,24 +136,27 @@ define([
el: $('#paragraph-spin-spacing-after'),
step: .1,
width: 85,
value: '0.35 cm',
value: '',
defaultUnit : "cm",
maxValue: 55.88,
minValue: 0,
allowAuto : true,
autoText : this.txtAutoText
autoText : this.txtAutoText,
disabled: this._locked
});
this.spinners.push(this.numSpacingAfter);
this.lockedControls.push(this.numSpacingAfter);
this.chAddInterval = new Common.UI.CheckBox({
el: $('#paragraph-checkbox-add-interval'),
labelText: this.strSomeParagraphSpace
labelText: this.strSomeParagraphSpace,
disabled: this._locked
});
this.lockedControls.push(this.chAddInterval);
this.btnColor = new Common.UI.ColorButton({
style: "width:45px;",
disabled: this._locked,
menu : new Common.UI.Menu({
items: [
{ template: _.template('<div id="paragraph-color-menu" style="width: 165px; height: 220px; margin: 10px;"></div>') },
......@@ -206,6 +212,7 @@ define([
}));
this.linkAdvanced = $('#paragraph-advanced-link');
this.linkAdvanced.toggleClass('disabled', this._locked);
},
setApi: function(api) {
......
......@@ -197,8 +197,8 @@ define([
}
if (open) {
$('#id-empty-settings').parent().css("display", "inline-block" );
$('#id-empty-settings').addClass("active");
$('#id-paragraph-settings').parent().css("display", "inline-block" );
$('#id-paragraph-settings').addClass("active");
}
this.trigger('render:after', this);
......
......@@ -380,7 +380,7 @@ define([
setMode: function(mode) {
this.mode = mode;
this.$el.find('.el-edit')[mode.isEdit?'show':'hide']();
this.$el.find('.el-review')[mode.canReview?'show':'hide']();
this.$el.find('.el-review')[(mode.canReview && !mode.isLightVersion)?'show':'hide']();
this.lblChangeRights[(!this.mode.isOffline && !this.mode.isReviewOnly && this.mode.sharingSettingsUrl&&this.mode.sharingSettingsUrl.length)?'show':'hide']();
this.panelUsers[(!this.mode.isOffline && !this.mode.isReviewOnly && this.mode.sharingSettingsUrl&&this.mode.sharingSettingsUrl.length)?'show':'hide']();
},
......
......@@ -1237,7 +1237,7 @@ define([
return this;
},
render: function () {
render: function (mode) {
var me = this;
/**
......@@ -1247,7 +1247,7 @@ define([
this.trigger('render:before', this);
var value = Common.localStorage.getItem("de-compact-toolbar");
var valueCompact = (value !== null && parseInt(value) == 1);
var valueCompact = (mode.isLightVersion || value !== null && parseInt(value) == 1);
value = Common.localStorage.getItem("de-hidden-title");
var valueTitle = (value !== null && parseInt(value) == 1);
......@@ -1258,6 +1258,7 @@ define([
value = Common.localStorage.getItem("de-hidden-rulers");
var valueRulers = (value !== null && parseInt(value) == 1);
this.mnuitemCompactToolbar.setVisible(!mode.isLightVersion);
this.mnuitemCompactToolbar.setChecked(valueCompact, true);
this.mnuitemHideTitleBar.setChecked(valueTitle, true);
this.mnuitemHideStatusBar.setChecked(valueStatus, true);
......
......@@ -140,7 +140,7 @@ define([
rightMenuView = DE.getController('RightMenu').getView('RightMenu'),
statusBarView = DE.getController('Statusbar').getView('Statusbar');
me._toolbar = toolbarView.render();
me._toolbar = toolbarView.render(this.mode);
me._rightMenu = rightMenuView.render(this.mode);
var value = Common.localStorage.getItem('de-hidden-status');
......
......@@ -157,6 +157,9 @@
"Common.Views.OpenDialog.okButtonText": "OK",
"Common.Views.OpenDialog.txtEncoding": "Encoding ",
"Common.Views.OpenDialog.txtTitle": "Choose %1 options",
"Common.Views.Plugins.strPlugins": "Add-ons",
"Common.Views.Plugins.textLoading": "Loading",
"Common.Views.Plugins.textStart": "Start",
"Common.Views.ReviewChanges.txtAccept": "Accept",
"Common.Views.ReviewChanges.txtAcceptAll": "Accept All Changes",
"Common.Views.ReviewChanges.txtAcceptCurrent": "Accept Current Change",
......@@ -943,6 +946,8 @@
"DE.Views.HyperlinkSettingsDialog.txtEmpty": "This field is required",
"DE.Views.HyperlinkSettingsDialog.txtNotUrl": "This field should be a URL in the \"http://www.example.com\" format",
"DE.Views.ImageSettings.textAdvanced": "Show advanced settings",
"DE.Views.ImageSettings.textEdit": "Edit",
"DE.Views.ImageSettings.textEditObject": "Edit Object",
"DE.Views.ImageSettings.textFromFile": "From File",
"DE.Views.ImageSettings.textFromUrl": "From URL",
"DE.Views.ImageSettings.textHeight": "Height",
......@@ -1026,6 +1031,7 @@
"DE.Views.LeftMenu.tipChat": "Chat",
"DE.Views.LeftMenu.tipComments": "Comments",
"DE.Views.LeftMenu.tipFile": "File",
"DE.Views.LeftMenu.tipPlugins": "Add-ons",
"DE.Views.LeftMenu.tipSearch": "Search",
"DE.Views.LeftMenu.tipSupport": "Feedback & Support",
"DE.Views.LeftMenu.tipTitles": "Titles",
......
......@@ -233,11 +233,11 @@
"DE.Controllers.Main.splitMaxColsErrorText": "El número de columnas debe ser menos que %1.",
"DE.Controllers.Main.splitMaxRowsErrorText": "El número de filas debe ser menos que %1.",
"DE.Controllers.Main.textAnonymous": "Anónimo",
"DE.Controllers.Main.textBuyNow": "Visit website",
"DE.Controllers.Main.textBuyNow": "Comprar ahora",
"DE.Controllers.Main.textCloseTip": "\nPulse para cerrar el consejo",
"DE.Controllers.Main.textContactUs": "Contact sales",
"DE.Controllers.Main.textContactUs": "Ponga en contacto con nosotros",
"DE.Controllers.Main.textLoadingDocument": "Cargando documento",
"DE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE open source version",
"DE.Controllers.Main.textNoLicenseTitle": "Licencia ha expirado o no ha encontrado",
"DE.Controllers.Main.textStrict": "Modo estricto",
"DE.Controllers.Main.textTryUndoRedo": "Las funciones Anular/Rehacer se desactivan para el modo co-edición rápido.<br>Haga Clic en el botón \"modo estricto\" para cambiar al modo de co-edición estricta para editar el archivo sin la interferencia de otros usuarios y enviar sus cambios sólo después de guardarlos. Se puede cambiar entre los modos de co-edición usando los ajustes avanzados de edición.",
"DE.Controllers.Main.titleUpdateVersion": "Versión ha cambiado",
......@@ -267,7 +267,7 @@
"DE.Controllers.Main.uploadImageTitleText": "Subiendo imagen",
"DE.Controllers.Main.warnBrowserIE9": "Este aplicación tiene baja capacidad en IE9. Utilice IE10 o superior",
"DE.Controllers.Main.warnBrowserZoom": "La configuración actual de zoom de su navegador no está soportada por completo. Por favor restablezca zoom predeterminado pulsando Ctrl+0.",
"DE.Controllers.Main.warnNoLicense": "You are using an open source version of ONLYOFFICE. The version has limitations for concurrent connections to the document server (20 connections at a time).<br>If you need more please consider purchasing a commercial license.",
"DE.Controllers.Main.warnNoLicense": "La licencia ha expirado o no ha sido encontrada. No puede editar archivos.<br>Haga clic en el botón 'Comprar ahora' para comprar una licencia Enterprise Edition o ´Contactar con nosotros´ si usa Intergration Edition.",
"DE.Controllers.Main.warnProcessRightsChange": "El derecho de edición del archivo es denegado",
"DE.Controllers.Statusbar.textHasChanges": "Nuevos cambios han sido encontrado",
"DE.Controllers.Statusbar.textTrackChanges": "El documento se abre con el modo de cambio de pista activado",
......@@ -909,7 +909,7 @@
"DE.Views.FileMenuPanels.Settings.textMinute": "Cada minuto",
"DE.Views.FileMenuPanels.Settings.txtAll": "Ver todo",
"DE.Views.FileMenuPanels.Settings.txtCm": "Centímetro",
"DE.Views.FileMenuPanels.Settings.txtInch": "Inch",
"DE.Views.FileMenuPanels.Settings.txtInch": "Pulgada",
"DE.Views.FileMenuPanels.Settings.txtInput": "Entrada alternativa",
"DE.Views.FileMenuPanels.Settings.txtLast": "Ver últimos",
"DE.Views.FileMenuPanels.Settings.txtLiveComment": "Demostración de Comentarios",
......@@ -961,10 +961,10 @@
"DE.Views.ImageSettingsAdvanced.cancelButtonText": "Cancelar",
"DE.Views.ImageSettingsAdvanced.okButtonText": "Aceptar",
"DE.Views.ImageSettingsAdvanced.strMargins": "Márgenes interiores",
"DE.Views.ImageSettingsAdvanced.textAbsoluteWH": "Absolute",
"DE.Views.ImageSettingsAdvanced.textAbsoluteWH": "Absoluto",
"DE.Views.ImageSettingsAdvanced.textAlignment": "Alineación",
"DE.Views.ImageSettingsAdvanced.textArrows": "Flechas",
"DE.Views.ImageSettingsAdvanced.textAspectRatio": "Lock aspect ratio",
"DE.Views.ImageSettingsAdvanced.textAspectRatio": "Bloquear relación de aspecto",
"DE.Views.ImageSettingsAdvanced.textBeginSize": "Tamaño inicial",
"DE.Views.ImageSettingsAdvanced.textBeginStyle": "Estilo inicial",
"DE.Views.ImageSettingsAdvanced.textBelow": "abajo",
......@@ -999,7 +999,7 @@
"DE.Views.ImageSettingsAdvanced.textPosition": "Posición",
"DE.Views.ImageSettingsAdvanced.textPositionPc": "Posición Relativa",
"DE.Views.ImageSettingsAdvanced.textRelative": "en relación a\n",
"DE.Views.ImageSettingsAdvanced.textRelativeWH": "Relative",
"DE.Views.ImageSettingsAdvanced.textRelativeWH": "Relativo",
"DE.Views.ImageSettingsAdvanced.textRight": "Derecho",
"DE.Views.ImageSettingsAdvanced.textRightMargin": "Margen derecho",
"DE.Views.ImageSettingsAdvanced.textRightOf": "a la derecha de",
......@@ -1307,7 +1307,7 @@
"DE.Views.TableSettingsAdvanced.okButtonText": "Aceptar",
"DE.Views.TableSettingsAdvanced.textAlign": "Alineación",
"DE.Views.TableSettingsAdvanced.textAlignment": "Alineación",
"DE.Views.TableSettingsAdvanced.textAllowSpacing": "Permitir espacio entre celdas",
"DE.Views.TableSettingsAdvanced.textAllowSpacing": "Espacio entre celdas",
"DE.Views.TableSettingsAdvanced.textAnchorText": "Texto",
"DE.Views.TableSettingsAdvanced.textAutofit": "Cambiar tamaño automáticamente para ajustar a contenido",
"DE.Views.TableSettingsAdvanced.textBackColor": "Fondo de celda",
......@@ -1317,13 +1317,13 @@
"DE.Views.TableSettingsAdvanced.textBordersBackgroung": "Bordes y fondo",
"DE.Views.TableSettingsAdvanced.textBorderWidth": "Tamaño de borde",
"DE.Views.TableSettingsAdvanced.textBottom": "Inferior",
"DE.Views.TableSettingsAdvanced.textCellOptions": "Cell Options",
"DE.Views.TableSettingsAdvanced.textCellProps": "Propiedades de la celda",
"DE.Views.TableSettingsAdvanced.textCellSize": "Cell Size",
"DE.Views.TableSettingsAdvanced.textCellOptions": "Opciones de celda",
"DE.Views.TableSettingsAdvanced.textCellProps": "Celda",
"DE.Views.TableSettingsAdvanced.textCellSize": "Tamaño de Celda",
"DE.Views.TableSettingsAdvanced.textCenter": "Al centro",
"DE.Views.TableSettingsAdvanced.textCenterTooltip": "Al centro",
"DE.Views.TableSettingsAdvanced.textCheckMargins": "Usar márgenes predeterminados",
"DE.Views.TableSettingsAdvanced.textDefaultMargins": "Márgenes predeterminados",
"DE.Views.TableSettingsAdvanced.textDefaultMargins": "Márgenes de celda predeterminados",
"DE.Views.TableSettingsAdvanced.textDistance": "Distancia del texto",
"DE.Views.TableSettingsAdvanced.textHorizontal": "Horizontal ",
"DE.Views.TableSettingsAdvanced.textIndLeft": "Sangría a la izquierda",
......@@ -1331,7 +1331,7 @@
"DE.Views.TableSettingsAdvanced.textLeftTooltip": "Izquierdo",
"DE.Views.TableSettingsAdvanced.textMargin": "Margen",
"DE.Views.TableSettingsAdvanced.textMargins": "Márgenes de celda",
"DE.Views.TableSettingsAdvanced.textMeasure": "Measure in",
"DE.Views.TableSettingsAdvanced.textMeasure": "medir en",
"DE.Views.TableSettingsAdvanced.textMove": "Desplazar objeto con texto",
"DE.Views.TableSettingsAdvanced.textNewColor": "Añadir Color Personalizado Nuevo",
"DE.Views.TableSettingsAdvanced.textOnlyCells": "Sólo para celdas seleccionadas",
......@@ -1339,17 +1339,17 @@
"DE.Views.TableSettingsAdvanced.textOverlap": "Superposición",
"DE.Views.TableSettingsAdvanced.textPage": "Página",
"DE.Views.TableSettingsAdvanced.textPosition": "Posición",
"DE.Views.TableSettingsAdvanced.textPrefWidth": "Preferred width",
"DE.Views.TableSettingsAdvanced.textPrefWidth": "Anchura Preferida",
"DE.Views.TableSettingsAdvanced.textPreview": "Vista previa",
"DE.Views.TableSettingsAdvanced.textRelative": "en relación a\n",
"DE.Views.TableSettingsAdvanced.textRight": "Derecho",
"DE.Views.TableSettingsAdvanced.textRightOf": "a la derecha de",
"DE.Views.TableSettingsAdvanced.textRightTooltip": "Derecho",
"DE.Views.TableSettingsAdvanced.textStandartColors": "Colores estándar",
"DE.Views.TableSettingsAdvanced.textTable": "Table",
"DE.Views.TableSettingsAdvanced.textTable": "Tabla",
"DE.Views.TableSettingsAdvanced.textTableBackColor": "Fondo de tabla",
"DE.Views.TableSettingsAdvanced.textTablePosition": "Table Position",
"DE.Views.TableSettingsAdvanced.textTableSize": "Table Size",
"DE.Views.TableSettingsAdvanced.textTablePosition": "Posición de la tabla",
"DE.Views.TableSettingsAdvanced.textTableSize": "Tamaño de tabla",
"DE.Views.TableSettingsAdvanced.textThemeColors": "Colores de tema",
"DE.Views.TableSettingsAdvanced.textTitle": "Tabla - Ajustes avanzados",
"DE.Views.TableSettingsAdvanced.textTop": "Superior",
......@@ -1359,8 +1359,8 @@
"DE.Views.TableSettingsAdvanced.textWrap": "Ajuste de texto",
"DE.Views.TableSettingsAdvanced.textWrapNoneTooltip": "Tabla en línea",
"DE.Views.TableSettingsAdvanced.textWrapParallelTooltip": "Tabla flujo",
"DE.Views.TableSettingsAdvanced.textWrappingStyle": "Wrapping Style",
"DE.Views.TableSettingsAdvanced.textWrapText": "Wrap text",
"DE.Views.TableSettingsAdvanced.textWrappingStyle": "Ajuste de texto",
"DE.Views.TableSettingsAdvanced.textWrapText": "Ajustar texto",
"DE.Views.TableSettingsAdvanced.tipAll": "Fijar borde exterior y todas líneas interiores ",
"DE.Views.TableSettingsAdvanced.tipCellAll": "Fijar bordes sólo para celdas interiores",
"DE.Views.TableSettingsAdvanced.tipCellInner": "Fijar líneas verticales y horizontales sólo para celdas interiores",
......@@ -1372,7 +1372,7 @@
"DE.Views.TableSettingsAdvanced.tipTableOuterCellInner": "Fijar borde exterior y líneas verticales y horizontales para celdas inferiores",
"DE.Views.TableSettingsAdvanced.tipTableOuterCellOuter": "Fijar borde de tabla exterior y bordes exteriores para celdas interiores",
"DE.Views.TableSettingsAdvanced.txtCm": "Centímetro",
"DE.Views.TableSettingsAdvanced.txtInch": "Inch",
"DE.Views.TableSettingsAdvanced.txtInch": "Pulgada",
"DE.Views.TableSettingsAdvanced.txtNoBorders": "Sin bordes",
"DE.Views.TableSettingsAdvanced.txtPercent": "Por ciento",
"DE.Views.TableSettingsAdvanced.txtPt": "Punto",
......
......@@ -155,11 +155,11 @@ define([
createDelayedElements: function() {
/** coauthoring begin **/
if ( this.mode.canCoAuthoring ) {
this.leftMenu.btnComments[this.mode.isEdit&&this.mode.canComments ? 'show' : 'hide']();
this.leftMenu.btnComments[(this.mode.isEdit&&this.mode.canComments && !this.mode.isLightVersion) ? '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']();
this.leftMenu.btnChat[(this.mode.canChat && !this.mode.isLightVersion) ? 'show' : 'hide']();
if (this.mode.canChat)
this.leftMenu.setOptionsPanel('chat', this.getApplication().getController('Common.Controllers.Chat').getView('Common.Views.Chat'));
} else {
......@@ -454,13 +454,13 @@ define([
break;
/** coauthoring begin **/
case 'chat':
if (this.mode.canCoAuthoring && this.mode.canChat && (!previewPanel || !previewPanel.isVisible())){
if (this.mode.canCoAuthoring && this.mode.canChat && !this.mode.isLightVersion && (!previewPanel || !previewPanel.isVisible())){
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu('chat');
}
return false;
case 'comments':
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments && (!previewPanel || !previewPanel.isVisible()) && !this._state.no_slides) {
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments && !this.mode.isLightVersion && (!previewPanel || !previewPanel.isVisible()) && !this._state.no_slides) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu('comments');
this.getApplication().getController('Common.Controllers.Comments').onAfterShow();
......
......@@ -707,11 +707,12 @@ define([
},
onEditorPermissions: function(params) {
/** coauthoring begin **/
this.appOptions.canCoAuthoring = true;
/** coauthoring end **/
this.appOptions.isOffline = this.api.asc_isOffline();
this.appOptions.canLicense = params.asc_getCanLicense ? params.asc_getCanLicense() : false;
this.appOptions.isLightVersion = params.asc_getIsLight();
/** coauthoring begin **/
this.appOptions.canCoAuthoring = !this.appOptions.isLightVersion;
/** coauthoring end **/
this.appOptions.canRequestEditRights = this.editorConfig.canRequestEditRights;
this.appOptions.canEdit = this.permissions.edit !== false && // can edit
(this.editorConfig.canRequestEditRights || this.editorConfig.mode !== 'view'); // if mode=="view" -> canRequestEditRights must be defined
......
......@@ -24,17 +24,22 @@
</tr>
<tr>
<td colspan=2>
<label class="header"><%= scope.textInsert %></label>
<label class="header" id="image-lbl-replace" ><%= scope.textInsert %></label>
</td>
</tr>
<tr>
<td class="padding-small" width="50%">
<td width="50%">
<button type="button" class="btn btn-text-default" id="image-button-from-file" style="width:85px;"><%= scope.textFromFile %></button>
</td>
<td class="padding-small" width="50%">
<td width="50%">
<button type="button" class="btn btn-text-default" id="image-button-from-url" style="width:85px;"><%= scope.textFromUrl %></button>
</td>
</tr>
<tr>
<td class="padding-small" colspan=2>
<button type="button" class="btn btn-text-default hidden" id="image-button-edit-object" style="width:100px;"><%= scope.textEdit %></button>
</td>
</tr>
<tr>
<td class="padding-small" colspan=2>
<div class="separator horizontal"></div>
......
......@@ -14,8 +14,6 @@
</div>
<div id="id-textart-settings" class="settings-panel">
</div>
<div id="id-empty-settings" class="settings-panel">
</div>
</div>
<div class="tool-menu-btns">
<div class="ct-btn-category arrow-left" />
......
......@@ -11,7 +11,7 @@
</tr>
<tr class="padding-small">
<td>
<div id="slide-panel-color-fill" class="padding-small" style="width: 100%;">
<div id="slide-panel-color-fill" class="settings-hidden padding-small" style="width: 100%;">
<div id="slide-back-color-btn" style=""></div>
</div>
<div id="slide-panel-image-fill" class="settings-hidden padding-small" style="width: 100%;">
......
......@@ -70,7 +70,8 @@ define([
this._state = {
Width: 0,
Height: 0,
DisabledControls: false
DisabledControls: false,
isOleObject: false
};
this.lockedControls = [];
this._locked = false;
......@@ -98,12 +99,21 @@ define([
});
this.lockedControls.push(this.btnInsertFromUrl);
this.btnEditObject = new Common.UI.Button({
el: $('#image-button-edit-object')
});
this.lockedControls.push(this.btnEditObject);
this.btnOriginalSize.on('click', _.bind(this.setOriginalSize, this));
this.btnInsertFromFile.on('click', _.bind(function(btn){
if (this.api) this.api.ChangeImageFromFile();
this.fireEvent('editcomplete', this);
}, this));
this.btnInsertFromUrl.on('click', _.bind(this.insertFromUrl, this));
this.btnEditObject.on('click', _.bind(function(btn){
// if (this.api) this.api.asc_pluginRun(this._originalProps.asc_getPluginGuid(), 0, this._originalProps.asc_getPluginData());
// this.fireEvent('editcomplete', this);
}, this));
$(this.el).on('click', '#image-advanced-link', _.bind(this.openAdvancedSettings, this));
},
......@@ -114,6 +124,7 @@ define([
}));
this.linkAdvanced = $('#image-advanced-link');
this.lblReplace = $('#image-lbl-replace');
},
setApi: function(api) {
......@@ -157,6 +168,25 @@ define([
}
this.btnOriginalSize.setDisabled(props.get_ImageUrl()===null || props.get_ImageUrl()===undefined || this._locked);
var pluginGuid = props.asc_getPluginGuid();
value = (pluginGuid !== null && pluginGuid !== undefined);
if (this._state.isOleObject!==value) {
this.btnInsertFromUrl.setVisible(!value);
this.btnInsertFromFile.setVisible(!value);
this.btnEditObject.setVisible(value);
this.lblReplace.text(value ? this.textEditObject : this.textInsert);
this._state.isOleObject=value;
}
if (this._state.isOleObject) {
// var plugin = DE.getCollection('Common.Collections.Plugins').findWhere({guid: pluginGuid});
// this.btnEditObject.setDisabled(plugin===null || plugin ===undefined);
this.btnEditObject.setDisabled(true);
} else {
this.btnInsertFromUrl.setDisabled(pluginGuid===null);
this.btnInsertFromFile.setDisabled(pluginGuid===null);
}
}
},
......@@ -253,10 +283,12 @@ define([
textWidth: 'Width',
textHeight: 'Height',
textOriginalSize: 'Default Size',
textInsert: 'Insert Image',
textInsert: 'Replace Image',
textFromUrl: 'From URL',
textFromFile: 'From File',
textAdvanced: 'Show advanced settings'
textAdvanced: 'Show advanced settings',
textEditObject: 'Edit Object',
textEdit: 'Edit'
}, PE.Views.ImageSettings || {}));
});
\ No newline at end of file
......@@ -340,6 +340,7 @@ define([
setMode: function(mode) {
this.mode = mode;
this.btnAbout.panel.setMode(mode);
return this;
},
......
......@@ -181,8 +181,8 @@ define([
}
if (open) {
$('#id-empty-settings').parent().css("display", "inline-block" );
$('#id-empty-settings').addClass("active");
$('#id-slide-settings').parent().css("display", "inline-block" );
$('#id-slide-settings').addClass("active");
}
this.trigger('render:after', this);
......
......@@ -78,13 +78,13 @@ define([
this.FillItems = [];
this._stateDisabled = {
background: false,
effects: false,
timing: false
background: true,
effects: true,
timing: true
};
this._state = {
FillType: Asc.c_oAscFill.FILL_TYPE_SOLID,
FillType:undefined,
SlideColor: 'ffffff',
BlipFillType: Asc.c_oAscFillBlipType.STRETCH,
FGColor: '000000',
......@@ -93,7 +93,7 @@ define([
GradFillType: Asc.c_oAscFillGradType.GRAD_LINEAR
};
this.OriginalFillType = Asc.c_oAscFill.FILL_TYPE_SOLID;
this.OriginalFillType = undefined;
this.SlideColor = {Value: 1, Color: 'ffffff'}; // value=1 - цвет определен - прозрачный или другой, value=0 - цвет не определен, рисуем прозрачным
this.BlipFillType = Asc.c_oAscFillBlipType.STRETCH;
this.Effect = Asc.c_oAscSlideTransitionTypes.None;
......@@ -125,13 +125,15 @@ define([
style: 'width: 100%;',
menuStyle: 'min-width: 190px;',
editable: false,
data: this._arrFillSrc
data: this._arrFillSrc,
disabled: true
});
this.cmbFillSrc.setValue(this._arrFillSrc[0].value);
this.cmbFillSrc.setValue('');
this.cmbFillSrc.on('selected', _.bind(this.onFillSrcSelect, this));
this.btnBackColor = new Common.UI.ColorButton({
style: "width:45px;",
disabled: true,
menu : new Common.UI.Menu({
items: [
{ template: _.template('<div id="slide-back-color-menu" style="width: 165px; height: 220px; margin: 10px;"></div>') },
......@@ -462,9 +464,10 @@ define([
style: 'width: 100%;',
menuStyle: 'min-width: 190px;',
editable: false,
data: this._arrEffectName
data: this._arrEffectName,
disabled: true
});
this.cmbEffectName.setValue(this._arrEffectName[0].value);
this.cmbEffectName.setValue('');
this.cmbEffectName.on('selected', _.bind(this.onEffectNameSelect, this));
this._arrEffectType = [
......@@ -496,7 +499,8 @@ define([
style: 'width: 100%;',
menuStyle: 'min-width: 190px;',
editable: false,
data: this._arrEffectType
data: this._arrEffectType,
disabled: true
});
this.cmbEffectType.setValue('');
this.cmbEffectType.on('selected', _.bind(this.onEffectTypeSelect, this));
......@@ -505,10 +509,11 @@ define([
el: $('#slide-spin-duration'),
step: 1,
width: 65,
value: '2 s',
value: '',
defaultUnit : this.textSec,
maxValue: 300,
minValue: 0
minValue: 0,
disabled: true
});
this.numDuration.on('change', _.bind(this.onDurationChange, this));
......@@ -516,7 +521,7 @@ define([
el: $('#slide-spin-delay'),
step: 1,
width: 70,
value: '2 s',
value: '',
defaultUnit : this.textSec,
maxValue: 300,
minValue: 0,
......@@ -526,18 +531,21 @@ define([
this.chStartOnClick = new Common.UI.CheckBox({
el: $('#slide-checkbox-start-click'),
labelText: this.strStartOnClick
labelText: this.strStartOnClick,
disabled: true
});
this.chStartOnClick.on('change', _.bind(this.onStartOnClickChange, this));
this.chDelay = new Common.UI.CheckBox({
el: $('#slide-checkbox-delay'),
labelText: this.strDelay
labelText: this.strDelay,
disabled: true
});
this.chDelay.on('change', _.bind(this.onCheckDelayChange, this));
this.btnPreview = new Common.UI.Button({
el: $('#slide-button-preview')
el: $('#slide-button-preview'),
disabled: true
});
this.btnPreview.on('click', _.bind(function(btn){
if (this.api) this.api.SlideTransitionPlay();
......@@ -545,7 +553,8 @@ define([
}, this));
this.btnApplyToAll = new Common.UI.Button({
el: $('#slide-button-apply-all')
el: $('#slide-button-apply-all'),
disabled: true
});
this.btnApplyToAll.on('click', _.bind(function(btn){
if (this.api) this.api.SlideTimingApplyToAll();
......
......@@ -213,7 +213,9 @@ define([
});
me.slideOnlyControls.push(me.btnChangeSlide);
me.listenTo(PE.getCollection('SlideLayouts'), 'reset', function() {
me.mnuChangeSlidePicker._needRecalcSlideLayout = me.mnuAddSlidePicker._needRecalcSlideLayout = true;
me.mnuAddSlidePicker._needRecalcSlideLayout = true;
if (me.mnuChangeSlidePicker)
me.mnuChangeSlidePicker._needRecalcSlideLayout = true;
});
me.btnPreview = new Common.UI.Button({
......@@ -1145,7 +1147,7 @@ define([
});
},
render: function () {
render: function (mode) {
var me = this,
el = $(this.el);
......@@ -1156,7 +1158,7 @@ define([
this.trigger('render:before', this);
var value = Common.localStorage.getItem('pe-compact-toolbar');
var valueCompact = (value!==null && parseInt(value) == 1);
var valueCompact = (mode.isLightVersion || value!==null && parseInt(value) == 1);
value = Common.localStorage.getItem('pe-hidden-title');
var valueTitle = (value!==null && parseInt(value) == 1);
......@@ -1167,6 +1169,7 @@ define([
value = Common.localStorage.getItem("pe-hidden-rulers");
var valueRulers = (value !== null && parseInt(value) == 1);
me.mnuitemCompactToolbar.setVisible(!mode.isLightVersion);
me.mnuitemCompactToolbar.setChecked(valueCompact);
me.mnuitemHideTitleBar.setChecked(valueTitle);
me.mnuitemHideStatusBar.setChecked(valueStatus);
......
......@@ -131,7 +131,7 @@ define([
rightMenuView = PE.getController('RightMenu').getView('RightMenu'),
statusBarView = PE.getController('Statusbar').getView('Statusbar');
me._toolbar = toolbarView.render();
me._toolbar = toolbarView.render(this.mode);
me._rightMenu = rightMenuView.render();
var value = Common.localStorage.getItem('pe-hidden-status');
......
......@@ -397,6 +397,8 @@
"PE.Views.HyperlinkSettingsDialog.txtPrev": "Previous Slide",
"PE.Views.HyperlinkSettingsDialog.txtSlide": "Slide",
"PE.Views.ImageSettings.textAdvanced": "Show advanced settings",
"PE.Views.ImageSettings.textEdit": "Edit",
"PE.Views.ImageSettings.textEditObject": "Edit Object",
"PE.Views.ImageSettings.textFromFile": "From File",
"PE.Views.ImageSettings.textFromUrl": "From URL",
"PE.Views.ImageSettings.textHeight": "Height",
......
......@@ -146,11 +146,11 @@
"PE.Controllers.Main.splitMaxColsErrorText": "El número de columnas debe ser menos que %1.",
"PE.Controllers.Main.splitMaxRowsErrorText": "El número de filas debe ser menos que %1.",
"PE.Controllers.Main.textAnonymous": "Anónimo",
"PE.Controllers.Main.textBuyNow": "Visit website",
"PE.Controllers.Main.textCloseTip": "\nPulse para cerrar el consejo",
"PE.Controllers.Main.textContactUs": "Contact sales",
"PE.Controllers.Main.textBuyNow": "Comprar ahora",
"PE.Controllers.Main.textCloseTip": "Pulse para cerrar el consejo",
"PE.Controllers.Main.textContactUs": "Ponga en contacto con nosotros",
"PE.Controllers.Main.textLoadingDocument": "Cargando presentación",
"PE.Controllers.Main.textNoLicenseTitle": "ONLYOFFICE open source version",
"PE.Controllers.Main.textNoLicenseTitle": "Licencia ha expirado o no ha encontrado",
"PE.Controllers.Main.textShape": "Forma",
"PE.Controllers.Main.textStrict": "Modo estricto",
"PE.Controllers.Main.textTryUndoRedo": "Las funciones Anular/Rehacer se desactivan para el modo co-edición rápido.<br>Haga Clic en el botón \"modo estricto\" para cambiar al modo de co-edición estricta para editar el archivo sin la interferencia de otros usuarios y enviar sus cambios sólo después de guardarlos. Se puede cambiar entre los modos de co-edición usando los ajustes avanzados de edición.",
......@@ -215,7 +215,7 @@
"PE.Controllers.Main.uploadImageTitleText": "Subiendo imagen",
"PE.Controllers.Main.warnBrowserIE9": "Este aplicación tiene baja capacidad en IE9. Utilice IE10 o superior",
"PE.Controllers.Main.warnBrowserZoom": "La configuración actual de zoom de su navegador no está soportada por completo. Por favor restablezca zoom predeterminado pulsando Ctrl+0.",
"PE.Controllers.Main.warnNoLicense": "You are using an open source version of ONLYOFFICE. The version has limitations for concurrent connections to the document server (20 connections at a time).<br>If you need more please consider purchasing a commercial license.",
"PE.Controllers.Main.warnNoLicense": "La licencia ha expirado o no ha sido encontrada. No puede editar archivos.<br>Haga clic en el botón 'Comprar ahora' para comprar una licencia Enterprise Edition o ´Contactar con nosotros´ si usa Intergration Edition.",
"PE.Controllers.Main.warnProcessRightsChange": "El derecho de edición del archivo es denegado.",
"PE.Controllers.Statusbar.zoomText": "Zoom {0}%",
"PE.Controllers.Toolbar.confirmAddFontName": "El tipo de letra que usted va a guardar no está disponible en este dispositivo.<br>El estilo de letra se mostrará usando uno de los tipos de letra del dispositivo, el tipo de letra guardado va a usarse cuando esté disponible.<br>¿Desea continuar?",
......
......@@ -157,7 +157,8 @@ require([
'Main',
'Common.Controllers.Fonts',
'Common.Controllers.Chat',
'Common.Controllers.Comments'
'Common.Controllers.Comments',
'Common.Controllers.Plugins'
]
});
......@@ -182,7 +183,8 @@ require([
'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts',
'common/main/lib/controller/Comments',
'common/main/lib/controller/Chat'
'common/main/lib/controller/Chat',
'common/main/lib/controller/Plugins'
], function() {
app.start();
});
......
......@@ -163,11 +163,11 @@ define([
createDelayedElements: function() {
/** coauthoring begin **/
if ( this.mode.canCoAuthoring ) {
this.leftMenu.btnComments[this.mode.isEdit&&this.mode.canComments ? 'show' : 'hide']();
this.leftMenu.btnComments[(this.mode.isEdit&&this.mode.canComments && !this.mode.isLightVersion) ? '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']();
this.leftMenu.btnChat[(this.mode.canChat && !this.mode.isLightVersion) ? 'show' : 'hide']();
if (this.mode.canChat)
this.leftMenu.setOptionsPanel('chat', this.getApplication().getController('Common.Controllers.Chat').getView('Common.Views.Chat'));
} else {
......@@ -181,6 +181,14 @@ define([
return this;
},
enablePlugins: function() {
if (this.mode.canPlugins) {
this.leftMenu.btnPlugins.show();
this.leftMenu.setOptionsPanel('plugins', this.getApplication().getController('Common.Controllers.Plugins').getView('Common.Views.Plugins'));
} else
this.leftMenu.btnPlugins.hide();
},
clickMenuFileItem: function(menu, action, isopts) {
var close_menu = true;
switch (action) {
......@@ -496,6 +504,7 @@ define([
this.leftMenu.btnComments.setDisabled(true);
this.leftMenu.btnChat.setDisabled(true);
/** coauthoring end **/
this.leftMenu.btnPlugins.setDisabled(true);
this.leftMenu.getMenu('file').setMode({isDisconnected: true});
if ( this.dlgSearch ) {
......@@ -605,8 +614,15 @@ define([
$.fn.dropdown.Constructor.prototype.keydown.call(menu_opened[0], e);
return false;
}
if (this.mode.canPlugins && this.leftMenu.panelPlugins && this.api.isCellEdited!==true) {
menu_opened = this.leftMenu.panelPlugins.$el.find('#menu-plugin-container.open > [data-toggle="dropdown"]');
if (menu_opened.length) {
$.fn.dropdown.Constructor.prototype.keydown.call(menu_opened[0], e);
return false;
}
}
if (this.leftMenu.btnFile.pressed || this.leftMenu.btnAbout.pressed ||
$(e.target).parents('#left-menu').length && this.api.isCellEdited!==true) {
($(e.target).parents('#left-menu').length || this.leftMenu.btnPlugins.pressed) && this.api.isCellEdited!==true) {
this.leftMenu.close();
Common.NotificationCenter.trigger('layout:changed', 'leftmenu');
return false;
......@@ -621,13 +637,13 @@ define([
break;
/** coauthoring begin **/
case 'chat':
if (this.mode.canCoAuthoring && this.mode.canChat) {
if (this.mode.canCoAuthoring && this.mode.canChat && !this.mode.isLightVersion) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu('chat');
}
return false;
case 'comments':
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments) {
if (this.mode.canCoAuthoring && this.mode.isEdit && this.mode.canComments && !this.mode.isLightVersion) {
Common.UI.Menu.Manager.hideAll();
this.leftMenu.showMenu('comments');
this.getApplication().getController('Common.Controllers.Comments').onAfterShow();
......@@ -643,6 +659,10 @@ define([
this.leftMenu.btnFile.setDisabled(isRangeSelection);
this.leftMenu.btnAbout.setDisabled(isRangeSelection);
this.leftMenu.btnSearch.setDisabled(isRangeSelection);
if (this.mode.canPlugins && this.leftMenu.panelPlugins) {
this.leftMenu.panelPlugins.setLocked(isRangeSelection);
this.leftMenu.panelPlugins.disableControls(isRangeSelection);
}
},
onApiEditCell: function(state) {
......@@ -652,6 +672,10 @@ define([
this.leftMenu.btnFile.setDisabled(isEditFormula);
this.leftMenu.btnAbout.setDisabled(isEditFormula);
this.leftMenu.btnSearch.setDisabled(isEditFormula);
if (this.mode.canPlugins && this.leftMenu.panelPlugins) {
this.leftMenu.panelPlugins.setLocked(isEditFormula);
this.leftMenu.panelPlugins.disableControls(isEditFormula);
}
},
textNoTextFound : 'Text not found',
......
......@@ -136,6 +136,7 @@ define([
// Initialize api gateway
this.editorConfig = {};
this.plugins = undefined;
Common.Gateway.on('init', _.bind(this.loadConfig, this));
Common.Gateway.on('showmessage', _.bind(this.onExternalMessage, this));
Common.Gateway.on('opendocument', _.bind(this.loadDocument, this));
......@@ -250,6 +251,8 @@ define([
this.appOptions.canBackToFolder = (this.editorConfig.canBackToFolder!==false) && (typeof (this.editorConfig.customization) == 'object')
&& (typeof (this.editorConfig.customization.goback) == 'object') && !_.isEmpty(this.editorConfig.customization.goback.url);
this.appOptions.canBack = this.editorConfig.nativeApp !== true && this.appOptions.canBackToFolder === true;
this.appOptions.canPlugins = false;
this.plugins = this.editorConfig.plugins;
this.headerView = this.getApplication().getController('Viewport').getView('Common.Views.Header');
this.headerView.setCanBack(this.appOptions.canBackToFolder === true);
......@@ -584,10 +587,18 @@ define([
statusbarView = statusbarController.getView('Statusbar'),
leftMenuView = leftmenuController.getView('LeftMenu'),
documentHolderView = documentHolderController.getView('DocumentHolder'),
chatController = application.getController('Common.Controllers.Chat');
chatController = application.getController('Common.Controllers.Chat'),
pluginsController = application.getController('Common.Controllers.Plugins');
leftMenuView.getMenu('file').loadDocument({doc:me.appOptions.spreadsheet});
leftmenuController.setMode(me.appOptions).createDelayedElements().setApi(me.api);
if (!me.appOptions.isEditMailMerge && !me.appOptions.isEditDiagram) {
pluginsController.setApi(me.api);
me.updatePluginsList(me.plugins);
me.api.asc_registerCallback('asc_onPluginsInit', _.bind(me.updatePluginsList, me));
}
leftMenuView.disableMenu('all',false);
if (!me.appOptions.isEditMailMerge && !me.appOptions.isEditDiagram && me.appOptions.canBranding) {
......@@ -722,11 +733,12 @@ define([
this.appOptions.canAutosave = true;
this.appOptions.canAnalytics = params.asc_getIsAnalyticsEnable();
/** coauthoring begin **/
this.appOptions.canCoAuthoring = true;
/** coauthoring end **/
this.appOptions.isOffline = this.api.asc_isOffline();
this.appOptions.canLicense = params.asc_getCanLicense ? params.asc_getCanLicense() : false;
this.appOptions.isLightVersion = params.asc_getIsLight();
/** coauthoring begin **/
this.appOptions.canCoAuthoring = !this.appOptions.isLightVersion;
/** coauthoring end **/
this.appOptions.canComments = this.appOptions.canLicense && !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.comments===false);
this.appOptions.canChat = this.appOptions.canLicense && !this.appOptions.isOffline && !((typeof (this.editorConfig.customization) == 'object') && this.editorConfig.customization.chat===false);
......@@ -1684,6 +1696,61 @@ define([
if (url) this.iframePrint.src = url;
},
updatePluginsList: function(plugins) {
var pluginStore = this.getApplication().getCollection('Common.Collections.Plugins'),
isEdit = this.appOptions.isEdit;
if (pluginStore && plugins) {
var arr = [];
plugins.pluginsData.forEach(function(item){
var variations = item.variations,
variationsArr = [];
variations.forEach(function(itemVar){
var isSupported = false;
for (var i=0; i<itemVar.EditorsSupport.length; i++){
if (itemVar.EditorsSupport[i]=='cell') {
isSupported = true; break;
}
}
if (isSupported && (isEdit || itemVar.isViewer))
variationsArr.push(new Common.Models.PluginVariation({
description: itemVar.description,
index: variationsArr.length,
url : itemVar.url,
icons : itemVar.icons,
isViewer: itemVar.isViewer,
EditorsSupport: itemVar.EditorsSupport,
isVisual: itemVar.isVisual,
isModal: itemVar.isModal,
isInsideMode: itemVar.isInsideMode,
initDataType: itemVar.initDataType,
initData: itemVar.initData,
isUpdateOleOnResize : itemVar.isUpdateOleOnResize,
buttons: itemVar.buttons
}));
});
if (variationsArr.length>0)
arr.push(new Common.Models.Plugin({
name : item.name,
guid: item.guid,
baseUrl : item.baseUrl,
variations: variationsArr,
currentVariation: 0
}));
});
pluginStore.reset(arr);
this.appOptions.pluginsPath = (plugins.url);
this.appOptions.canPlugins = (arr.length>0);
} else {
this.appOptions.pluginsPath = '';
this.appOptions.canPlugins = false;
}
if (this.appOptions.canPlugins)
this.getApplication().getController('Common.Controllers.Plugins').setMode(this.appOptions);
this.getApplication().getController('LeftMenu').enablePlugins();
},
leavePageText: 'You have unsaved changes in this document. Click \'Stay on this Page\' then \'Save\' to save them. Click \'Leave this Page\' to discard all the unsaved changes.',
criticalErrorTitle: 'Error',
notcriticalErrorTitle: 'Warning',
......
......@@ -31,7 +31,7 @@
</tr>
<tr>
<td colspan=2>
<label class="header"><%= scope.textInsert %></label>
<label class="header" id="image-lbl-replace"><%= scope.textInsert %></label>
</td>
</tr>
<tr>
......@@ -42,5 +42,10 @@
<button type="button" class="btn btn-text-default" id="image-button-from-url" style="width:85px;"><%= scope.textFromUrl %></button>
</td>
</tr>
<tr>
<td colspan=2>
<button type="button" class="btn btn-text-default hidden" id="image-button-edit-object" style="width:100px;"><%= scope.textEdit %></button>
</td>
</tr>
<tr class="finish-cell"></tr>
</table>
\ No newline at end of file
......@@ -6,6 +6,7 @@
<button id="left-btn-comments" class="btn btn-category" content-target="left-panel-comments"><span class="btn-icon img-toolbarmenu btn-menu-comments">&nbsp;</span></button>
<button id="left-btn-chat" class="btn btn-category" content-target="left-panel-chat"><span class="btn-icon img-toolbarmenu btn-menu-chat">&nbsp;</span></button>
<!-- /** coauthoring end **/ -->
<button id="left-btn-plugins" class="btn btn-category" content-target=""><span class="btn-icon img-toolbarmenu btn-menu-plugin">&nbsp;</span></button>
<button id="left-btn-support" class="btn btn-category" content-target=""><span class="btn-icon img-toolbarmenu btn-menu-support">&nbsp;</span></button>
<button id="left-btn-about" class="btn btn-category" content-target=""><span class="btn-icon img-toolbarmenu btn-menu-about">&nbsp;</span></button>
</div>
......@@ -14,5 +15,6 @@
<div id="left-panel-comments" class="" style="display: none;" />
<div id="left-panel-chat" class="" style="display: none;" />
<!-- /** coauthoring end **/ -->
<div id="left-panel-plugins" class="" style="display: none; height: 100%;" />
</div>
</div>
\ No newline at end of file
......@@ -72,7 +72,8 @@ define([
Width: 0,
Height: 0,
DisabledControls: false,
keepRatio: false
keepRatio: false,
isOleObject: false
};
this.spinners = [];
this.lockedControls = [];
......@@ -142,6 +143,11 @@ define([
});
this.lockedControls.push(this.btnInsertFromUrl);
this.btnEditObject = new Common.UI.Button({
el: $('#image-button-edit-object')
});
this.lockedControls.push(this.btnEditObject);
this.spnWidth.on('change', _.bind(this.onWidthChange, this));
this.spnHeight.on('change', _.bind(this.onHeightChange, this));
this.btnOriginalSize.on('click', _.bind(this.setOriginalSize, this));
......@@ -149,6 +155,10 @@ define([
if (this.api) this.api.asc_changeImageFromFile();
Common.NotificationCenter.trigger('edit:complete', this);
}, this));
this.btnEditObject.on('click', _.bind(function(btn){
if (this.api) this.api.asc_pluginRun(this._originalProps.asc_getPluginGuid(), 0, this._originalProps.asc_getPluginData());
Common.NotificationCenter.trigger('edit:complete', this);
}, this));
this.btnInsertFromUrl.on('click', _.bind(this.insertFromUrl, this));
},
......@@ -157,6 +167,7 @@ define([
el.html(this.template({
scope: this
}));
this.lblReplace = $('#image-lbl-replace');
},
setApi: function(api) {
......@@ -212,6 +223,24 @@ define([
}
this.btnOriginalSize.setDisabled(props.asc_getImageUrl()===null || props.asc_getImageUrl()===undefined || this._locked);
var pluginGuid = props.asc_getPluginGuid();
value = (pluginGuid !== null && pluginGuid !== undefined);
if (this._state.isOleObject!==value) {
this.btnInsertFromUrl.setVisible(!value);
this.btnInsertFromFile.setVisible(!value);
this.btnEditObject.setVisible(value);
this.lblReplace.text(value ? this.textEditObject : this.textInsert);
this._state.isOleObject=value;
}
if (this._state.isOleObject) {
var plugin = SSE.getCollection('Common.Collections.Plugins').findWhere({guid: pluginGuid});
this.btnEditObject.setDisabled(plugin===null || plugin ===undefined);
} else {
this.btnInsertFromUrl.setDisabled(pluginGuid===null);
this.btnInsertFromFile.setDisabled(pluginGuid===null);
}
}
},
......@@ -307,8 +336,10 @@ define([
textWidth: 'Width',
textHeight: 'Height',
textOriginalSize: 'Default Size',
textInsert: 'Insert Image',
textInsert: 'Replace Image',
textFromUrl: 'From URL',
textFromFile: 'From File'
textFromFile: 'From File',
textEditObject: 'Edit Object',
textEdit: 'Edit'
}, SSE.Views.ImageSettings || {}));
});
\ No newline at end of file
......@@ -42,6 +42,7 @@ define([
'common/main/lib/view/Chat',
/** coauthoring end **/
'common/main/lib/view/SearchDialog',
'common/main/lib/view/Plugins',
'spreadsheeteditor/main/app/view/FileMenu'
], function (menuTemplate, $, _, Backbone) {
'use strict';
......@@ -61,6 +62,7 @@ define([
'click #left-btn-comments': _.bind(this.onCoauthOptions, this),
'click #left-btn-chat': _.bind(this.onCoauthOptions, this),
/** coauthoring end **/
'click #left-btn-plugins': _.bind(this.onCoauthOptions, this),
'click #left-btn-support': function() {
var config = this.mode.customization;
config && !!config.feedback && !!config.feedback.url ?
......@@ -136,6 +138,16 @@ define([
this.btnChat.on('click', _.bind(this.onBtnMenuClick, this));
/** coauthoring end **/
this.btnPlugins = new Common.UI.Button({
el: $('#left-btn-plugins'),
hint: this.tipPlugins,
enableToggle: true,
disabled: true,
toggleGroup: 'leftMenuGroup'
});
this.btnPlugins.hide();
this.btnPlugins.on('click', _.bind(this.onBtnMenuClick, this));
this.btnSearch.on('click', _.bind(this.onBtnMenuClick, this));
this.btnAbout.on('toggle', _.bind(this.onBtnMenuToggle, this));
this.btnFile.on('toggle', _.bind(this.onBtnMenuToggle, this));
......@@ -205,6 +217,12 @@ define([
this.panelChat['hide']();
}
}
if (this.mode.canPlugins && this.panelPlugins) {
if (this.btnPlugins.pressed) {
this.panelPlugins.show();
} else
this.panelPlugins['hide']();
}
},
setOptionsPanel: function(name, panel) {
......@@ -212,6 +230,9 @@ define([
this.panelChat = panel.render('#left-panel-chat');
} else if (name == 'comment') {
this.panelComments = panel;
} else
if (name == 'plugins' && !this.panelPlugins) {
this.panelPlugins = panel.render('#left-panel-plugins');
}
},
......@@ -245,6 +266,10 @@ define([
}
}
/** coauthoring end **/
if (this.mode.canPlugins && this.panelPlugins) {
this.panelPlugins['hide']();
this.btnPlugins.toggle(false, true);
}
},
isOpened: function() {
......@@ -264,6 +289,7 @@ define([
this.btnComments.setDisabled(false);
this.btnChat.setDisabled(false);
/** coauthoring end **/
this.btnPlugins.setDisabled(false);
},
showMenu: function(menu) {
......@@ -309,6 +335,7 @@ define([
setMode: function(mode) {
this.mode = mode;
this.btnAbout.panel.setMode(mode);
return this;
},
......@@ -319,6 +346,7 @@ define([
tipAbout : 'About',
tipSupport : 'Feedback & Support',
tipFile : 'File',
tipSearch : 'Search'
tipSearch : 'Search',
tipPlugins : 'Add-ons'
}, SSE.Views.LeftMenu || {}));
});
......@@ -1567,7 +1567,7 @@ define([
});
},
render: function (isEditDiagram, isEditMailMerge) {
render: function (mode) {
var me = this,
el = $(this.el);
......@@ -1579,8 +1579,9 @@ define([
JSON.parse(Common.localStorage.getItem('sse-hidden-title')) && (options.title = true);
JSON.parse(Common.localStorage.getItem('sse-hidden-formula')) && (options.formula = true);
JSON.parse(Common.localStorage.getItem('sse-hidden-headings')) && (options.headings = true);
var isCompactView = !!JSON.parse(Common.localStorage.getItem('sse-toolbar-compact'));
var isCompactView = mode.isLightVersion || !!JSON.parse(Common.localStorage.getItem('sse-toolbar-compact'));
me.mnuitemCompactToolbar.setVisible(!mode.isLightVersion);
me.mnuitemCompactToolbar.setChecked(isCompactView);
me.mnuitemHideTitleBar.setChecked(!!options.title);
me.mnuitemHideFormulaBar.setChecked(!!options.formula);
......@@ -1589,12 +1590,12 @@ define([
this.trigger('render:before', this);
el.html(this.template({
isEditDiagram: isEditDiagram,
isEditMailMerge: isEditMailMerge,
isEditDiagram: mode.isEditDiagram,
isEditMailMerge: mode.isEditMailMerge,
isCompactView: isCompactView
}));
me.rendererComponents(isEditDiagram ? 'diagram' : (isEditMailMerge ? 'merge' : isCompactView ? 'short' : 'full'));
me.rendererComponents(mode.isEditDiagram ? 'diagram' : (mode.isEditMailMerge ? 'merge' : isCompactView ? 'short' : 'full'));
this.trigger('render:after', this);
......
......@@ -146,14 +146,9 @@ define([
var me = this,
toolbarView = SSE.getController('Toolbar').getView('Toolbar'),
rightMenuView = SSE.getController('RightMenu').getView('RightMenu');
// statusBarView = SSE.getController('Statusbar').getView('Statusbar');
//
me._toolbar = toolbarView.render(this.mode.isEditDiagram, this.mode.isEditMailMerge);
me._toolbar = toolbarView.render(this.mode);
me._rightMenu = rightMenuView.render();
//
// var value = Common.localStorage.getItem('de-hidden-status');
// if (value !== null && parseInt(value) == 1)
// statusBarView.setVisible(false);
},
setMode: function(mode, delay) {
......
......@@ -147,7 +147,8 @@ require([
'Main',
'Common.Controllers.Fonts',
'Common.Controllers.Chat',
'Common.Controllers.Comments'
'Common.Controllers.Comments',
'Common.Controllers.Plugins'
]
});
......@@ -172,7 +173,8 @@ require([
'common/main/lib/util/LocalStorage',
'common/main/lib/controller/Fonts',
'common/main/lib/controller/Comments',
'common/main/lib/controller/Chat'
'common/main/lib/controller/Chat',
'common/main/lib/controller/Plugins'
], function() {
app.start();
});
......
......@@ -84,6 +84,9 @@
"Common.Views.OpenDialog.txtSpace": "Space",
"Common.Views.OpenDialog.txtTab": "Tab",
"Common.Views.OpenDialog.txtTitle": "Choose %1 options",
"Common.Views.Plugins.strPlugins": "Add-ons",
"Common.Views.Plugins.textLoading": "Loading",
"Common.Views.Plugins.textStart": "Start",
"SSE.Controllers.DocumentHolder.guestText": "Guest",
"SSE.Controllers.DocumentHolder.textChangeColumnWidth": "Column Width {0} symbols ({1} pixels)",
"SSE.Controllers.DocumentHolder.textChangeRowHeight": "Row Height {0} points ({1} pixels)",
......@@ -613,6 +616,8 @@
"SSE.Views.HyperlinkSettingsDialog.textTitle": "Hyperlink Settings",
"SSE.Views.HyperlinkSettingsDialog.txtEmpty": "This field is required",
"SSE.Views.HyperlinkSettingsDialog.txtNotUrl": "This field should be a URL in the \"http://www.example.com\" format",
"SSE.Views.ImageSettings.textEdit": "Edit",
"SSE.Views.ImageSettings.textEditObject": "Edit Object",
"SSE.Views.ImageSettings.textFromFile": "From File",
"SSE.Views.ImageSettings.textFromUrl": "From URL",
"SSE.Views.ImageSettings.textHeight": "Height",
......@@ -625,6 +630,7 @@
"SSE.Views.LeftMenu.tipChat": "Chat",
"SSE.Views.LeftMenu.tipComments": "Comments",
"SSE.Views.LeftMenu.tipFile": "File",
"SSE.Views.LeftMenu.tipPlugins": "Add-ons",
"SSE.Views.LeftMenu.tipSearch": "Search",
"SSE.Views.LeftMenu.tipSupport": "Feedback & Support",
"SSE.Views.MainSettingsPrint.okButtonText": "Save",
......
This diff is collapsed.
......@@ -111,6 +111,7 @@
@import "../../../../common/main/resources/less/tabbar.less";
@import "../../../../common/main/resources/less/common.less";
@import "../../../../common/main/resources/less/opendialog.less";
@import "../../../../common/main/resources/less/plugins.less";
// App
// --------------------------------------------------
......
......@@ -14,6 +14,7 @@
.toolbar-btn-icon(btn-menu-chat, 59, @toolbar-icon-size);
.toolbar-btn-icon(btn-menu-about, 58, @toolbar-icon-size);
.toolbar-btn-icon(btn-menu-support, 75, @toolbar-icon-size);
.toolbar-btn-icon(btn-menu-plugin, 81, @toolbar-icon-size);
button.notify .btn-menu-chat,
button.notify.over > .btn-menu-chat {background-position: -0*@toolbar-icon-size -60*@toolbar-icon-size;}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment