3.0 source code
This commit is contained in:
523
OfficeWeb/apps/presentationeditor/main/app/view/ChartSettings.js
Normal file
523
OfficeWeb/apps/presentationeditor/main/app/view/ChartSettings.js
Normal file
@@ -0,0 +1,523 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/ChartSettings.template", "jquery", "underscore", "backbone", "common/main/lib/component/Button"], function (menuTemplate, $, _, Backbone) {
|
||||
PE.Views.ChartSettings = Backbone.View.extend(_.extend({
|
||||
el: "#id-chart-settings",
|
||||
template: _.template(menuTemplate),
|
||||
events: {},
|
||||
options: {
|
||||
alias: "ChartSettings"
|
||||
},
|
||||
initialize: function () {
|
||||
var me = this;
|
||||
this._initSettings = true;
|
||||
this._state = {
|
||||
Width: 0,
|
||||
Height: 0,
|
||||
ChartStyle: 1,
|
||||
ChartType: -1,
|
||||
SeveralCharts: false,
|
||||
DisabledControls: false
|
||||
};
|
||||
this._nRatio = 1;
|
||||
this.spinners = [];
|
||||
this.lockedControls = [];
|
||||
this._locked = false;
|
||||
this._noApply = false;
|
||||
this._originalProps = null;
|
||||
this.render();
|
||||
this.btnChartType = new Common.UI.Button({
|
||||
cls: "btn-large-dataview",
|
||||
iconCls: "item-chartlist bar-normal",
|
||||
menu: new Common.UI.Menu({
|
||||
style: "width: 330px;",
|
||||
items: [{
|
||||
template: _.template('<div id="id-chart-menu-type" class="menu-insertchart" style="margin: 5px 5px 5px 10px;"></div>')
|
||||
}]
|
||||
})
|
||||
});
|
||||
this.btnChartType.on("render:after", function (btn) {
|
||||
me.mnuChartTypePicker = new Common.UI.DataView({
|
||||
el: $("#id-chart-menu-type"),
|
||||
parentMenu: btn.menu,
|
||||
restoreHeight: 411,
|
||||
groups: new Common.UI.DataViewGroupStore([{
|
||||
id: "menu-chart-group-bar",
|
||||
caption: me.textColumn
|
||||
},
|
||||
{
|
||||
id: "menu-chart-group-line",
|
||||
caption: me.textLine
|
||||
},
|
||||
{
|
||||
id: "menu-chart-group-pie",
|
||||
caption: me.textPie
|
||||
},
|
||||
{
|
||||
id: "menu-chart-group-hbar",
|
||||
caption: me.textBar
|
||||
},
|
||||
{
|
||||
id: "menu-chart-group-area",
|
||||
caption: me.textArea
|
||||
},
|
||||
{
|
||||
id: "menu-chart-group-scatter",
|
||||
caption: me.textPoint
|
||||
},
|
||||
{
|
||||
id: "menu-chart-group-stock",
|
||||
caption: me.textStock
|
||||
}]),
|
||||
store: new Common.UI.DataViewStore([{
|
||||
group: "menu-chart-group-bar",
|
||||
type: c_oAscChartTypeSettings.barNormal,
|
||||
iconCls: "column-normal",
|
||||
selected: true
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-bar",
|
||||
type: c_oAscChartTypeSettings.barStacked,
|
||||
iconCls: "column-stack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-bar",
|
||||
type: c_oAscChartTypeSettings.barStackedPer,
|
||||
iconCls: "column-pstack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-line",
|
||||
type: c_oAscChartTypeSettings.lineNormal,
|
||||
iconCls: "line-normal"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-line",
|
||||
type: c_oAscChartTypeSettings.lineStacked,
|
||||
iconCls: "line-stack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-line",
|
||||
type: c_oAscChartTypeSettings.lineStackedPer,
|
||||
iconCls: "line-pstack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-pie",
|
||||
type: c_oAscChartTypeSettings.pie,
|
||||
iconCls: "pie-normal"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-pie",
|
||||
type: c_oAscChartTypeSettings.doughnut,
|
||||
iconCls: "pie-doughnut"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-hbar",
|
||||
type: c_oAscChartTypeSettings.hBarNormal,
|
||||
iconCls: "bar-normal"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-hbar",
|
||||
type: c_oAscChartTypeSettings.hBarStacked,
|
||||
iconCls: "bar-stack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-hbar",
|
||||
type: c_oAscChartTypeSettings.hBarStackedPer,
|
||||
iconCls: "bar-pstack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-area",
|
||||
type: c_oAscChartTypeSettings.areaNormal,
|
||||
iconCls: "area-normal"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-area",
|
||||
type: c_oAscChartTypeSettings.areaStacked,
|
||||
iconCls: "area-stack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-area",
|
||||
type: c_oAscChartTypeSettings.areaStackedPer,
|
||||
iconCls: "area-pstack"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-scatter",
|
||||
type: c_oAscChartTypeSettings.scatter,
|
||||
iconCls: "point-normal"
|
||||
},
|
||||
{
|
||||
group: "menu-chart-group-stock",
|
||||
type: c_oAscChartTypeSettings.stock,
|
||||
iconCls: "stock-normal"
|
||||
}]),
|
||||
itemTemplate: _.template('<div id="<%= id %>" class="item-chartlist <%= iconCls %>"></div>')
|
||||
});
|
||||
});
|
||||
this.btnChartType.render($("#chart-button-type"));
|
||||
this.mnuChartTypePicker.on("item:click", _.bind(this.onSelectType, this, this.btnChartType));
|
||||
this.lockedControls.push(this.btnChartType);
|
||||
this.btnChartStyle = new Common.UI.Button({
|
||||
cls: "btn-large-dataview",
|
||||
iconCls: "item-wrap",
|
||||
menu: new Common.UI.Menu({
|
||||
menuAlign: "tr-br",
|
||||
items: [{
|
||||
template: _.template('<div id="id-chart-menu-style" style="width: 245px; margin: 0 5px;"></div>')
|
||||
}]
|
||||
})
|
||||
});
|
||||
this.btnChartStyle.on("render:after", function (btn) {
|
||||
me.mnuChartStylePicker = new Common.UI.DataView({
|
||||
el: $("#id-chart-menu-style"),
|
||||
style: "max-height: 411px;",
|
||||
parentMenu: btn.menu,
|
||||
store: new Common.UI.DataViewStore(),
|
||||
itemTemplate: _.template('<div id="<%= id %>" class="item-wrap" style="background-image: url(<%= imageUrl %>); background-position: 0 0;"></div>')
|
||||
});
|
||||
if (me.btnChartStyle.menu) {
|
||||
me.btnChartStyle.menu.on("show:after", function () {
|
||||
me.mnuChartStylePicker.scroller.update({
|
||||
alwaysVisibleY: true
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
this.btnChartStyle.render($("#chart-button-style"));
|
||||
this.mnuChartStylePicker.on("item:click", _.bind(this.onSelectStyle, this, this.btnChartStyle));
|
||||
this.lockedControls.push(this.btnChartStyle);
|
||||
this.btnEditData = new Common.UI.Button({
|
||||
el: $("#chart-button-edit-data")
|
||||
});
|
||||
this.btnEditData.on("click", _.bind(this.setEditData, this));
|
||||
this.lockedControls.push(this.btnEditData);
|
||||
this.spnWidth = new Common.UI.MetricSpinner({
|
||||
el: $("#chart-spin-width"),
|
||||
step: 0.1,
|
||||
width: 78,
|
||||
defaultUnit: "cm",
|
||||
value: "3 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0
|
||||
});
|
||||
this.spinners.push(this.spnWidth);
|
||||
this.lockedControls.push(this.spnWidth);
|
||||
this.spnHeight = new Common.UI.MetricSpinner({
|
||||
el: $("#chart-spin-height"),
|
||||
step: 0.1,
|
||||
width: 78,
|
||||
defaultUnit: "cm",
|
||||
value: "3 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0
|
||||
});
|
||||
this.spinners.push(this.spnHeight);
|
||||
this.lockedControls.push(this.spnHeight);
|
||||
this.spnWidth.on("change", _.bind(this.onWidthChange, this));
|
||||
this.spnHeight.on("change", _.bind(this.onHeightChange, this));
|
||||
this.btnRatio = new Common.UI.Button({
|
||||
cls: "btn-toolbar btn-toolbar-default",
|
||||
iconCls: "advanced-btn-ratio",
|
||||
style: "margin-bottom: 1px;",
|
||||
enableToggle: true,
|
||||
hint: this.textKeepRatio
|
||||
});
|
||||
this.btnRatio.render($("#chart-button-ratio"));
|
||||
this.lockedControls.push(this.btnRatio);
|
||||
var value = window.localStorage.getItem("pe-settings-chartratio");
|
||||
if (value !== null && parseInt(value) == 1) {
|
||||
this.btnRatio.toggle(true);
|
||||
}
|
||||
this.btnRatio.on("click", _.bind(function (btn, e) {
|
||||
if (btn.pressed && this.spnHeight.getNumberValue() > 0) {
|
||||
this._nRatio = this.spnWidth.getNumberValue() / this.spnHeight.getNumberValue();
|
||||
}
|
||||
window.localStorage.setItem("pe-settings-chartratio", (btn.pressed) ? 1 : 0);
|
||||
},
|
||||
this));
|
||||
},
|
||||
render: function () {
|
||||
var el = $(this.el);
|
||||
el.html(this.template({
|
||||
scope: this
|
||||
}));
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback("asc_onUpdateChartStyles", _.bind(this._onUpdateChartStyles, this));
|
||||
}
|
||||
return this;
|
||||
},
|
||||
ChangeSettings: function (props) {
|
||||
if (this._initSettings) {
|
||||
this.createDelayedElements();
|
||||
this._initSettings = false;
|
||||
}
|
||||
this.disableControls(this._locked);
|
||||
if (props) {
|
||||
this._originalProps = new CAscChartProp(props);
|
||||
this._noApply = true;
|
||||
var value = props.get_SeveralCharts() || this._locked;
|
||||
if (this._state.SeveralCharts !== value) {
|
||||
this.btnEditData.setDisabled(value);
|
||||
this._state.SeveralCharts = value;
|
||||
}
|
||||
value = props.get_SeveralChartTypes();
|
||||
if (this._state.SeveralCharts && value) {
|
||||
this.btnChartType.setIconCls("");
|
||||
this._state.ChartType = null;
|
||||
} else {
|
||||
var type = props.getType();
|
||||
if (this._state.ChartType !== type) {
|
||||
var record = this.mnuChartTypePicker.store.findWhere({
|
||||
type: type
|
||||
});
|
||||
this.mnuChartTypePicker.selectRecord(record, true);
|
||||
if (record) {
|
||||
this.btnChartType.setIconCls("item-chartlist " + record.get("iconCls"));
|
||||
}
|
||||
this.updateChartStyles(this.api.asc_getChartPreviews(type));
|
||||
this._state.ChartType = type;
|
||||
}
|
||||
}
|
||||
value = props.get_SeveralChartStyles();
|
||||
if (this._state.SeveralCharts && value) {
|
||||
var btnIconEl = this.btnChartStyle.cmpEl.find("span.btn-icon");
|
||||
btnIconEl.css("background-image", "none");
|
||||
this.mnuChartStylePicker.selectRecord(null, true);
|
||||
this._state.ChartStyle = null;
|
||||
} else {
|
||||
value = props.getStyle();
|
||||
if (this._state.ChartStyle !== value) {
|
||||
var record = this.mnuChartStylePicker.store.findWhere({
|
||||
data: value
|
||||
});
|
||||
this.mnuChartStylePicker.selectRecord(record, true);
|
||||
if (record) {
|
||||
var btnIconEl = this.btnChartStyle.cmpEl.find("span.btn-icon");
|
||||
btnIconEl.css("background-image", "url(" + record.get("imageUrl") + ")");
|
||||
}
|
||||
this._state.ChartStyle = value;
|
||||
}
|
||||
}
|
||||
this._noApply = false;
|
||||
value = props.get_Width();
|
||||
if (Math.abs(this._state.Width - value) > 0.001 || (this._state.Width === null || value === null) && (this._state.Width !== value)) {
|
||||
this.spnWidth.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : "", true);
|
||||
this._state.Width = value;
|
||||
}
|
||||
value = props.get_Height();
|
||||
if (Math.abs(this._state.Height - value) > 0.001 || (this._state.Height === null || value === null) && (this._state.Height !== value)) {
|
||||
this.spnHeight.setValue((value !== null) ? Common.Utils.Metric.fnRecalcFromMM(value) : "", true);
|
||||
this._state.Height = value;
|
||||
}
|
||||
if (props.get_Height() > 0) {
|
||||
this._nRatio = props.get_Width() / props.get_Height();
|
||||
}
|
||||
}
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
if (this.spinners) {
|
||||
for (var i = 0; i < this.spinners.length; i++) {
|
||||
var spinner = this.spinners[i];
|
||||
spinner.setDefaultUnit(Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()]);
|
||||
spinner.setStep(Common.Utils.Metric.getCurrentMetric() == Common.Utils.Metric.c_MetricUnits.cm ? 0.1 : 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
this.updateMetricUnit();
|
||||
},
|
||||
setEditData: function () {
|
||||
var diagramEditor = PE.getController("Common.Controllers.ExternalDiagramEditor").getView("Common.Views.ExternalDiagramEditor");
|
||||
if (diagramEditor) {
|
||||
diagramEditor.setEditMode(true);
|
||||
diagramEditor.show();
|
||||
var chart = this.api.asc_getChartObject();
|
||||
if (chart) {
|
||||
diagramEditor.setChartData(new Asc.asc_CChartBinary(chart));
|
||||
}
|
||||
}
|
||||
},
|
||||
onSelectType: function (btn, picker, itemView, record) {
|
||||
if (this._noApply) {
|
||||
return;
|
||||
}
|
||||
var rawData = {},
|
||||
isPickerSelect = _.isFunction(record.toJSON);
|
||||
if (isPickerSelect) {
|
||||
if (record.get("selected")) {
|
||||
rawData = record.toJSON();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
rawData = record;
|
||||
}
|
||||
this.btnChartType.setIconCls("item-chartlist " + rawData.iconCls);
|
||||
this._state.ChartType = -1;
|
||||
if (this.api && !this._noApply) {
|
||||
var props = new CAscChartProp();
|
||||
props.changeType(rawData.type);
|
||||
this.api.ChartApply(props);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
onSelectStyle: function (btn, picker, itemView, record) {
|
||||
if (this._noApply) {
|
||||
return;
|
||||
}
|
||||
var rawData = {},
|
||||
isPickerSelect = _.isFunction(record.toJSON);
|
||||
if (isPickerSelect) {
|
||||
if (record.get("selected")) {
|
||||
rawData = record.toJSON();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
rawData = record;
|
||||
}
|
||||
var style = "url(" + rawData.imageUrl + ")";
|
||||
var btnIconEl = this.btnChartStyle.cmpEl.find("span.btn-icon");
|
||||
btnIconEl.css("background-image", style);
|
||||
if (this.api && !this._noApply) {
|
||||
var props = new CAscChartProp();
|
||||
props.putStyle(rawData.data);
|
||||
this.api.ChartApply(props);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
_onUpdateChartStyles: function () {
|
||||
if (this.api && this._state.ChartType !== null && this._state.ChartType > -1) {
|
||||
this.updateChartStyles(this.api.asc_getChartPreviews(this._state.ChartType));
|
||||
}
|
||||
},
|
||||
updateChartStyles: function (styles) {
|
||||
var me = this;
|
||||
if (styles && styles.length > 0) {
|
||||
var stylesStore = this.mnuChartStylePicker.store;
|
||||
if (stylesStore) {
|
||||
var stylearray = [],
|
||||
selectedIdx = -1,
|
||||
selectedUrl;
|
||||
_.each(styles, function (item, index) {
|
||||
stylearray.push({
|
||||
imageUrl: item.asc_getImageUrl(),
|
||||
data: item.asc_getStyle(),
|
||||
tip: me.textStyle + " " + item.asc_getStyle()
|
||||
});
|
||||
if (me._state.ChartStyle == item.asc_getStyle()) {
|
||||
selectedIdx = index;
|
||||
selectedUrl = item.asc_getImageUrl();
|
||||
}
|
||||
});
|
||||
stylesStore.reset(stylearray, {
|
||||
silent: false
|
||||
});
|
||||
}
|
||||
}
|
||||
this.mnuChartStylePicker.selectByIndex(selectedIdx, true);
|
||||
if (selectedIdx >= 0 && this.btnChartStyle.cmpEl) {
|
||||
var style = "url(" + selectedUrl + ")";
|
||||
var btnIconEl = this.btnChartStyle.cmpEl.find("span.btn-icon");
|
||||
btnIconEl.css("background-image", style);
|
||||
}
|
||||
},
|
||||
onWidthChange: function (field, newValue, oldValue, eOpts) {
|
||||
var w = field.getNumberValue();
|
||||
var h = this.spnHeight.getNumberValue();
|
||||
if (this.btnRatio.pressed) {
|
||||
h = w / this._nRatio;
|
||||
if (h > this.spnHeight.options.maxValue) {
|
||||
h = this.spnHeight.options.maxValue;
|
||||
w = h * this._nRatio;
|
||||
this.spnWidth.setValue(w, true);
|
||||
}
|
||||
this.spnHeight.setValue(h, true);
|
||||
}
|
||||
if (this.api) {
|
||||
var props = new CAscChartProp();
|
||||
props.put_Width(Common.Utils.Metric.fnRecalcToMM(w));
|
||||
props.put_Height(Common.Utils.Metric.fnRecalcToMM(h));
|
||||
this.api.ChartApply(props);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
onHeightChange: function (field, newValue, oldValue, eOpts) {
|
||||
var h = field.getNumberValue(),
|
||||
w = this.spnWidth.getNumberValue();
|
||||
if (this.btnRatio.pressed) {
|
||||
w = h * this._nRatio;
|
||||
if (w > this.spnWidth.options.maxValue) {
|
||||
w = this.spnWidth.options.maxValue;
|
||||
h = w / this._nRatio;
|
||||
this.spnHeight.setValue(h, true);
|
||||
}
|
||||
this.spnWidth.setValue(w, true);
|
||||
}
|
||||
if (this.api) {
|
||||
var props = new CAscChartProp();
|
||||
props.put_Width(Common.Utils.Metric.fnRecalcToMM(w));
|
||||
props.put_Height(Common.Utils.Metric.fnRecalcToMM(h));
|
||||
this.api.ChartApply(props);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
setLocked: function (locked) {
|
||||
this._locked = locked;
|
||||
},
|
||||
disableControls: function (disable) {
|
||||
if (this._state.DisabledControls !== disable) {
|
||||
this._state.DisabledControls = disable;
|
||||
_.each(this.lockedControls, function (item) {
|
||||
item.setDisabled(disable);
|
||||
});
|
||||
}
|
||||
},
|
||||
textKeepRatio: "Constant Proportions",
|
||||
textSize: "Size",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
textEditData: "Edit Data",
|
||||
textChartType: "Change Chart Type",
|
||||
textLine: "Line Chart",
|
||||
textColumn: "Column Chart",
|
||||
textBar: "Bar Chart",
|
||||
textArea: "Area Chart",
|
||||
textPie: "Pie Chart",
|
||||
textPoint: "Point Chart",
|
||||
textStock: "Stock Chart",
|
||||
textStyle: "Style"
|
||||
},
|
||||
PE.Views.ChartSettings || {}));
|
||||
});
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.CreateFile", {
|
||||
extend: "Ext.panel.Panel",
|
||||
alias: "widget.pecreatenew",
|
||||
cls: "pe-file-createnew",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
requires: ["Ext.container.Container", "Ext.data.Model", "Ext.data.Store", "Ext.view.View", "Ext.XTemplate", "Common.plugin.DataViewScrollPane"],
|
||||
constructor: function (config) {
|
||||
this.initConfig(config);
|
||||
this.callParent(arguments);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this.callParent(arguments);
|
||||
var me = this;
|
||||
me.add({
|
||||
xtype: "container",
|
||||
html: "<h3>" + me.fromBlankText + "</h3>" + "<hr noshade>" + '<div class="blank-document">' + '<div id="id-create-blank-document" class="btn-blank-document"></div>' + '<div class="blank-document-info">' + "<h3>" + me.newDocumentText + "</h3>" + me.newDescriptionText + "</div>" + "</div>" + '<div style="clear: both;"></div>' + "<h3>" + me.fromTemplateText + "</h3>" + "<hr noshade>"
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: "fit",
|
||||
cls: "container-template-list",
|
||||
items: [{
|
||||
xtype: "dataview",
|
||||
store: "FileTemplates",
|
||||
tpl: Ext.create("Ext.XTemplate", '<tpl for=".">', '<div class="thumb-wrap">', '<tpl if="this.isEmptyIcon(icon)">', '<div class="thumb"></div>', "</tpl>", '<tpl if="this.isEmptyIcon(icon) == false">', '<div class="thumb" style="background-image: url(' + "'{icon}'" + ');"></div>', "</tpl>", '<div class="title">{name:htmlEncode}</div>', "</div>", "</tpl>", {
|
||||
isEmptyIcon: function (icon) {
|
||||
return icon == "";
|
||||
}
|
||||
}),
|
||||
singleSelect: true,
|
||||
trackOver: true,
|
||||
autoScroll: true,
|
||||
overItemCls: "x-item-over",
|
||||
itemSelector: "div.thumb-wrap",
|
||||
cls: "x-view-context",
|
||||
emptyText: '<div class="empty-text">' + this.noTemplatesText + "</div>",
|
||||
deferEmptyText: false,
|
||||
plugins: [{
|
||||
ptype: "dataviewscrollpane",
|
||||
pluginId: "scrollpane",
|
||||
areaSelector: ".x-view-context",
|
||||
settings: {
|
||||
enableKeyboardNavigation: true
|
||||
}
|
||||
}]
|
||||
}]
|
||||
});
|
||||
},
|
||||
fromBlankText: "From Blank",
|
||||
newDocumentText: "New Presentation",
|
||||
newDescriptionText: "Create a new blank presentation which you will be able to style and format after it is created during the editing. Or choose one of the templates to start a document of a certain type or purpose where some styles have already been pre-applied.",
|
||||
fromTemplateText: "From Template",
|
||||
noTemplatesText: "There are no templates"
|
||||
});
|
||||
@@ -1,231 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.DockableTabPanel", {
|
||||
extend: "Ext.panel.Panel",
|
||||
alias: "widget.pedockabletabpanel",
|
||||
requires: ["PE.view.UndockedWindow"],
|
||||
draggable: true,
|
||||
tolerance: 5,
|
||||
layout: "card",
|
||||
constructor: function (config) {
|
||||
this.controls = [];
|
||||
this.callParent(arguments);
|
||||
this.initConfig(config);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
me.tools = [{
|
||||
type: "pin",
|
||||
qtip: this.textUndock,
|
||||
handler: function () {
|
||||
var pos = me.ownerCt.ownerCt.getPosition();
|
||||
if (me.actionConfig) {
|
||||
me.undock.apply(me, [me.actionConfig.undockPos[0], me.actionConfig.undockPos[1]]);
|
||||
} else {
|
||||
me.undock.apply(me, [pos[0] - 20, pos[1] + 10]);
|
||||
}
|
||||
},
|
||||
scope: me
|
||||
}];
|
||||
me.addEvents("docked", "undocked");
|
||||
me.callParent(arguments);
|
||||
},
|
||||
initDraggable: function () {
|
||||
var me = this;
|
||||
me.draggable = {
|
||||
delegate: me.getHeader().getEl(),
|
||||
tolerance: 100,
|
||||
constrain: true,
|
||||
constrainTo: document.body,
|
||||
listeners: {
|
||||
dragstart: function () {
|
||||
me.startDragPos = me.getPosition(true);
|
||||
},
|
||||
dragend: function () {
|
||||
var owner_pos = me.ownerCt.getPosition(),
|
||||
pos = me.getPosition(true);
|
||||
if (pos[0] < owner_pos[0] - 20) {
|
||||
var calcSizeObj = me.getPanelSize.apply(me);
|
||||
me.hide();
|
||||
Ext.defer(me.undock, 5, me, [pos[0], pos[1], false, null, calcSizeObj]);
|
||||
} else {
|
||||
me.setPosition(me.startDragPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
if (me.tabButtons) {
|
||||
me.getHeader().insert(0, me.tabButtons);
|
||||
}
|
||||
Ext.Component.prototype.initDraggable.call(me);
|
||||
},
|
||||
dock: function (suspend) {
|
||||
var me = this,
|
||||
ownerCt, size, win;
|
||||
if (me.dockConfig) {
|
||||
ownerCt = me.dockConfig.ownerCt;
|
||||
win = me.dockConfig.win;
|
||||
size = me.dockConfig.size;
|
||||
win.remove(me, false);
|
||||
if (me.tabButtons) {
|
||||
me.getHeader().insert(0, me.tabButtons);
|
||||
}
|
||||
me.getHeader().show();
|
||||
me.setSize(size);
|
||||
ownerCt.add(me);
|
||||
win.hide();
|
||||
delete me.dockConfig;
|
||||
if (!suspend) {
|
||||
me.fireEvent("docked", me);
|
||||
}
|
||||
}
|
||||
},
|
||||
getPanelSize: function () {
|
||||
return {
|
||||
size: this.getSize(),
|
||||
bodySize: this.body.getSize(),
|
||||
header: this.getHeader().getHeight()
|
||||
};
|
||||
},
|
||||
undock: function (x, y, suspend, ownerWidth, calcSizeObj) {
|
||||
var me = this,
|
||||
ownerCt = me.ownerCt,
|
||||
ownerPos = (ownerCt) ? ownerCt.ownerCt.getPosition() : [0, 0],
|
||||
ctWidth = (ownerWidth > 0) ? ownerWidth : ownerCt.ownerCt.getWidth(),
|
||||
size = (calcSizeObj) ? calcSizeObj.size : me.getSize(),
|
||||
bodySize = (calcSizeObj) ? calcSizeObj.bodySize : me.body.getSize(),
|
||||
header = (calcSizeObj) ? calcSizeObj.header : me.getHeader().getHeight();
|
||||
if (me.dockConfig) {
|
||||
return;
|
||||
}
|
||||
size.width = ctWidth;
|
||||
bodySize.width = ctWidth;
|
||||
ownerCt.remove(me, false);
|
||||
me.show();
|
||||
me.getHeader().hide();
|
||||
me.setPosition(0, 0);
|
||||
if (me.isVisible()) {
|
||||
me.setSize(bodySize);
|
||||
me.body.setSize(bodySize);
|
||||
} else {
|
||||
me.setWidth(ctWidth);
|
||||
}
|
||||
if (me.win === undefined) {
|
||||
me.win = Ext.create("PE.view.UndockedWindow", {
|
||||
items: me,
|
||||
title: me.title,
|
||||
tools: [{
|
||||
type: "pin",
|
||||
qtip: me.textRedock,
|
||||
handler: function () {
|
||||
me.dock();
|
||||
}
|
||||
}],
|
||||
listeners: {
|
||||
move: function (cmp, x, y) {
|
||||
var xy = ownerCt.getPosition();
|
||||
if (ownerCt.isVisible(true)) {
|
||||
if ((xy[0] - x) <= me.tolerance) {
|
||||
Ext.defer(me.dock, 10, me);
|
||||
}
|
||||
}
|
||||
},
|
||||
afterrender: function () {
|
||||
me.win.dd.addListener("dragend", Ext.bind(function () {
|
||||
var xy = me.win.getPosition();
|
||||
me.actionConfig = {
|
||||
undockPos: [xy[0], xy[1]]
|
||||
};
|
||||
me.fireEvent("changeposition", me);
|
||||
},
|
||||
this), this);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
me.win.add(me);
|
||||
}
|
||||
if (me.tabButtons) {
|
||||
me.win.getHeader().insert(0, me.tabButtons);
|
||||
}
|
||||
me.dockConfig = {
|
||||
ownerCt: ownerCt,
|
||||
win: me.win,
|
||||
size: size,
|
||||
headerHeight: header
|
||||
};
|
||||
me.win.show();
|
||||
if (Ext.isNumber(x) && Ext.isNumber(y)) {
|
||||
var pos = this.checkWindowPosition({
|
||||
x: x,
|
||||
y: y
|
||||
},
|
||||
{
|
||||
width: me.win.getWidth(),
|
||||
height: me.win.getHeight()
|
||||
});
|
||||
me.win.setPagePosition(pos.x, (pos.y + me.win.getHeight() > Ext.getBody().getSize().height) ? 0 : pos.y);
|
||||
me.actionConfig = {
|
||||
undockPos: [pos.x, pos.y]
|
||||
};
|
||||
}
|
||||
ownerCt.doLayout();
|
||||
me.doLayout();
|
||||
if (!suspend) {
|
||||
me.fireEvent("undocked", me, ownerPos, ctWidth);
|
||||
}
|
||||
},
|
||||
isUndocked: function () {
|
||||
return typeof this.dockConfig !== "undefined";
|
||||
},
|
||||
checkWindowPosition: function (position, size) {
|
||||
var bodypos = Ext.getBody().getSize();
|
||||
if (position.x > bodypos.width - 10) {
|
||||
position.x = Math.max(bodypos.width - 10 - size.width, 0);
|
||||
} else {
|
||||
if (position.x < 0) {
|
||||
position.x = 10;
|
||||
}
|
||||
}
|
||||
if (position.y > bodypos.height - 10) {
|
||||
position.y = Math.max(bodypos.height - 10 - size.height, 0);
|
||||
} else {
|
||||
if (position.y < 0) {
|
||||
position.y = 10;
|
||||
}
|
||||
}
|
||||
return position;
|
||||
},
|
||||
textRedock: "Redock to original panel",
|
||||
textUndock: "Undock panel"
|
||||
});
|
||||
@@ -1,246 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.model.ModelHelpMenu", {
|
||||
extend: "Ext.data.Model",
|
||||
fields: [{
|
||||
type: "string",
|
||||
name: "name"
|
||||
},
|
||||
{
|
||||
type: "string",
|
||||
name: "src"
|
||||
},
|
||||
{
|
||||
type: "string",
|
||||
name: "headername"
|
||||
}]
|
||||
});
|
||||
Ext.define("PE.view.DocumentHelp", {
|
||||
extend: "Ext.container.Container",
|
||||
alias: "widget.pedocumenthelp",
|
||||
cls: "pe-documenthelp-body",
|
||||
autoScroll: true,
|
||||
requires: ["Ext.container.Container", "Ext.XTemplate", "Ext.view.View", "Ext.data.Model", "Ext.data.Store", "Common.plugin.DataViewScrollPane"],
|
||||
constructor: function (config) {
|
||||
this.initConfig(config);
|
||||
this.callParent(arguments);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
this.urlPref = "resources/help/en/";
|
||||
var en_data = [{
|
||||
src: "UsageInstructions/SetPageParameters.htm",
|
||||
name: "Set page parameters",
|
||||
headername: "Usage Instructions"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/CopyPasteUndoRedo.htm",
|
||||
name: "Copy/paste text passages, undo/redo your actions"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/AlignText.htm",
|
||||
name: "Align your text in a line or paragraph"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/LineSpacing.htm",
|
||||
name: "Set paragraph line spacing"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/CopyClearFormatting.htm",
|
||||
name: "Copy/clear text formatting"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/CreateLists.htm",
|
||||
name: "Create lists"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/InsertImages.htm",
|
||||
name: "Insert images"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/ViewDocInfo.htm",
|
||||
name: "View document information"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/SavePrintDownload.htm",
|
||||
name: "Save/print/download your document"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/OpenCreateNew.htm",
|
||||
name: "Create a new document or open an existing one"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/About.htm",
|
||||
name: "About ONLYOFFICE Document Editor",
|
||||
headername: "Helpful Hints"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/SupportedFormats.htm",
|
||||
name: "Supported Formats of Electronic Documents"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/Navigation.htm",
|
||||
name: "Navigation through Your Document"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/Search.htm",
|
||||
name: "Search Function"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/KeyboardShortcuts.htm",
|
||||
name: "Keyboard Shortcuts"
|
||||
}];
|
||||
this.menuStore = Ext.create("Ext.data.Store", {
|
||||
model: "PE.model.ModelHelpMenu",
|
||||
proxy: {
|
||||
type: "ajax",
|
||||
url: "help/Contents.json",
|
||||
noCache: false
|
||||
},
|
||||
listeners: {
|
||||
load: function (store, records, successful) {
|
||||
if (!successful) {
|
||||
if (me.urlPref.indexOf("resources/help/en/") < 0) {
|
||||
me.urlPref = "resources/help/en/";
|
||||
store.getProxy().url = "resources/help/en/Contents.json";
|
||||
store.load();
|
||||
} else {
|
||||
me.urlPref = "resources/help/en/";
|
||||
store.loadData(en_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var menuTpl = new Ext.XTemplate('<tpl for=".">', '<tpl if="headername">', '<div class="header-wrap">', '<span class="header">{headername}</span>', "</div>", "</tpl>", '<div class="thumb-wrap">', '<span class="caption">{name}</span>', "</div>", "</tpl>", '<div class="x-clear"></div>');
|
||||
this.cntMenu = Ext.create("Ext.container.Container", {
|
||||
layout: "fit",
|
||||
cls: "help-menu-container",
|
||||
width: 200,
|
||||
items: [this.menuView = Ext.create("Ext.view.View", {
|
||||
store: this.menuStore,
|
||||
tpl: menuTpl,
|
||||
singleSelect: true,
|
||||
trackOver: true,
|
||||
width: "100%",
|
||||
overItemCls: "x-item-over",
|
||||
itemSelector: "div.thumb-wrap",
|
||||
cls: "help-menu-view",
|
||||
listeners: {
|
||||
afterrender: function (view) {
|
||||
view.getSelectionModel().deselectOnContainerClick = false;
|
||||
if (view.getStore().getCount()) {
|
||||
view.select(0);
|
||||
me.iFrame.src = me.urlPref + view.getStore().getAt(0).data.src;
|
||||
}
|
||||
},
|
||||
selectionchange: function (model, selections) {
|
||||
var record = model.getLastSelected();
|
||||
if (record) {
|
||||
me.iFrame.src = me.urlPref + record.data.src;
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: [{
|
||||
ptype: "dataviewscrollpane",
|
||||
areaSelector: ".help-menu-view",
|
||||
pluginId: "docHelpPluginId",
|
||||
settings: {
|
||||
enableKeyboardNavigation: true,
|
||||
keyboardSpeed: 0.001
|
||||
}
|
||||
}]
|
||||
})]
|
||||
});
|
||||
this.iFrame = document.createElement("iframe");
|
||||
this.iFrame.src = "";
|
||||
this.iFrame.align = "top";
|
||||
this.iFrame.frameBorder = "0";
|
||||
this.iFrame.width = "100%";
|
||||
this.iFrame.height = "100%";
|
||||
this.iFrame.onload = Ext.bind(function () {
|
||||
var src = arguments[0].currentTarget.contentDocument.URL;
|
||||
Ext.each(this.menuStore.data.items, function (item, index) {
|
||||
var res = src.indexOf(item.data.src);
|
||||
if (res > 0) {
|
||||
this.menuView.select(index);
|
||||
var node = this.menuView.getNode(index),
|
||||
plugin = this.menuView.getPlugin("docHelpPluginId");
|
||||
if (plugin) {
|
||||
plugin.scrollToElement(node);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
},
|
||||
this);
|
||||
},
|
||||
this);
|
||||
this.items = [{
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
height: "100%",
|
||||
items: [this.cntMenu, {
|
||||
xtype: "tbspacer",
|
||||
width: 2,
|
||||
style: "border-left: 1px solid #C7C7C7"
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: "fit",
|
||||
listeners: {
|
||||
afterrender: function (cmp) {
|
||||
cmp.getEl().appendChild(me.iFrame);
|
||||
}
|
||||
}
|
||||
}]
|
||||
}];
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setApi: function (o) {
|
||||
if (o) {
|
||||
this.api = o;
|
||||
}
|
||||
},
|
||||
setLangConfig: function (lang) {
|
||||
if (lang) {
|
||||
lang = lang.split("-")[0];
|
||||
this.menuStore.getProxy().url = "resources/help/" + lang + "/Contents.json";
|
||||
this.menuStore.load();
|
||||
this.urlPref = "resources/help/" + lang + "/";
|
||||
}
|
||||
}
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,249 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.DocumentInfo", {
|
||||
extend: "Ext.container.Container",
|
||||
alias: "widget.pedocumentinfo",
|
||||
cls: "pe-documentinfo-body",
|
||||
autoScroll: true,
|
||||
requires: ["Ext.button.Button", "Ext.container.Container", "Common.plugin.ScrollPane", "Ext.form.Label", "Ext.XTemplate", "Ext.Date"],
|
||||
uses: ["Common.view.DocumentAccessDialog"],
|
||||
listeners: {
|
||||
afterrender: function (cmp, eOpts) {
|
||||
cmp.updateInfo(cmp.doc);
|
||||
}
|
||||
},
|
||||
constructor: function (config) {
|
||||
this.initConfig(config);
|
||||
this.callParent(arguments);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this.infoObj = {
|
||||
PageCount: 0,
|
||||
WordsCount: 0,
|
||||
ParagraphCount: 0,
|
||||
SymbolsCount: 0,
|
||||
SymbolsWSCount: 0
|
||||
};
|
||||
this.inProgress = false;
|
||||
this.lblTitle = Ext.create("Ext.form.Label", {
|
||||
text: "-",
|
||||
height: 14
|
||||
});
|
||||
this.lblPlacement = Ext.create("Ext.form.Label", {
|
||||
text: "-",
|
||||
width: 150,
|
||||
height: 14,
|
||||
style: "text-align:left",
|
||||
hideId: "element-to-hide"
|
||||
});
|
||||
this.lblDate = Ext.create("Ext.form.Label", {
|
||||
text: "-",
|
||||
width: 150,
|
||||
height: 14,
|
||||
style: "text-align:left",
|
||||
hideId: "element-to-hide"
|
||||
});
|
||||
var userTpl = Ext.create("Ext.XTemplate", '<span class="userLink">{text:htmlEncode}</span>');
|
||||
this.cntAuthor = Ext.create("Ext.container.Container", {
|
||||
tpl: userTpl,
|
||||
data: {
|
||||
text: "-"
|
||||
},
|
||||
hideId: "element-to-hide"
|
||||
});
|
||||
var rightsTpl = Ext.create("Ext.XTemplate", "<table>", '<tpl for=".">', "<tr>", '<td style="padding: 0 20px 5px 0;"><span class="userLink">{user:htmlEncode}</span></td>', '<td style="padding: 0 20px 5px 0;">{permissions:htmlEncode}</td>', "</tr>", "</tpl>", "</table>");
|
||||
this.cntRights = Ext.create("Ext.container.Container", {
|
||||
tpl: rightsTpl,
|
||||
hideId: "element-to-hide"
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "tbspacer",
|
||||
height: 30
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tableAttrs: {
|
||||
style: "width: 100%;"
|
||||
},
|
||||
tdAttrs: {
|
||||
style: "padding: 5px 10px;vertical-align: top;"
|
||||
}
|
||||
},
|
||||
items: [{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.txtTitle,
|
||||
style: "display: block;text-align: right;",
|
||||
width: "100%"
|
||||
},
|
||||
this.lblTitle, {
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.txtAuthor,
|
||||
style: "display: block;text-align: right;",
|
||||
width: "100%"
|
||||
},
|
||||
this.cntAuthor, {
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.txtPlacement,
|
||||
style: "display: block;text-align: right;",
|
||||
width: "100%"
|
||||
},
|
||||
this.lblPlacement, {
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.txtDate,
|
||||
style: "display: block;text-align: right;",
|
||||
width: "100%"
|
||||
},
|
||||
this.lblDate, {
|
||||
xtype: "tbspacer",
|
||||
colspan: 2,
|
||||
height: 5
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.txtRights,
|
||||
style: "display: block;text-align: right;",
|
||||
width: "100%"
|
||||
},
|
||||
this.cntRights, this.tbsRights = Ext.create("Ext.toolbar.Spacer", {
|
||||
colspan: 2,
|
||||
height: 5,
|
||||
hideId: "element-to-hide"
|
||||
}), {
|
||||
xtype: "box"
|
||||
},
|
||||
this.btnEditRights = Ext.widget("button", {
|
||||
id: "doc-info-set-rights",
|
||||
cls: "asc-blue-button",
|
||||
text: this.txtBtnAccessRights,
|
||||
hideId: "element-to-hide",
|
||||
listeners: {
|
||||
click: Ext.bind(this._changeAccessRights, this)
|
||||
}
|
||||
})]
|
||||
}];
|
||||
Ext.apply(this, {
|
||||
plugins: [{
|
||||
ptype: "scrollpane",
|
||||
areaSelector: ".x-container",
|
||||
pluginId: "docInfoPluginId",
|
||||
settings: {
|
||||
enableKeyboardNavigation: true
|
||||
}
|
||||
}]
|
||||
});
|
||||
this.callParent(arguments);
|
||||
},
|
||||
updateInfo: function (doc) {
|
||||
this.doc = doc;
|
||||
if (!this.rendered) {
|
||||
return;
|
||||
}
|
||||
doc = doc || {};
|
||||
this.lblTitle.setText((doc.title) ? doc.title : "-");
|
||||
if (doc.info) {
|
||||
if (doc.info.author) {
|
||||
this.cntAuthor.update({
|
||||
text: doc.info.author
|
||||
});
|
||||
}
|
||||
this._ShowHideInfoItem(this.cntAuthor, doc.info.author !== undefined && doc.info.author !== null);
|
||||
if (doc.info.created) {
|
||||
this.lblDate.setText(doc.info.created);
|
||||
}
|
||||
this._ShowHideInfoItem(this.lblDate, doc.info.created !== undefined && doc.info.created !== null);
|
||||
if (doc.info.folder) {
|
||||
this.lblPlacement.setText(doc.info.folder);
|
||||
}
|
||||
this._ShowHideInfoItem(this.lblPlacement, doc.info.folder !== undefined && doc.info.folder !== null);
|
||||
if (doc.info.sharingSettings) {
|
||||
this.cntRights.update(doc.info.sharingSettings);
|
||||
}
|
||||
this._ShowHideInfoItem(this.cntRights, doc.info.sharingSettings !== undefined && doc.info.sharingSettings !== null && this._readonlyRights !== true);
|
||||
this._ShowHideInfoItem(this.tbsRights, doc.info.sharingSettings !== undefined && doc.info.sharingSettings !== null && this._readonlyRights !== true);
|
||||
this._ShowHideInfoItem(this.btnEditRights, !!this.sharingSettingsUrl && this.sharingSettingsUrl.length && this._readonlyRights !== true);
|
||||
} else {
|
||||
this._ShowHideDocInfo(false);
|
||||
}
|
||||
},
|
||||
_ShowHideInfoItem: function (cmp, visible) {
|
||||
var tr = cmp.getEl().up("tr");
|
||||
if (tr) {
|
||||
tr.setDisplayed(visible);
|
||||
}
|
||||
},
|
||||
_ShowHideDocInfo: function (visible) {
|
||||
var components = Ext.ComponentQuery.query('[hideId="element-to-hide"]', this);
|
||||
for (var i = 0; i < components.length; i++) {
|
||||
this._ShowHideInfoItem(components[i], visible);
|
||||
}
|
||||
},
|
||||
setApi: function (o) {},
|
||||
loadConfig: function (data) {
|
||||
this.sharingSettingsUrl = data.config.sharingSettingsUrl;
|
||||
return this;
|
||||
},
|
||||
_changeAccessRights: function (btn, event, opts) {
|
||||
var win = Ext.widget("commondocumentaccessdialog", {
|
||||
settingsurl: this.sharingSettingsUrl
|
||||
});
|
||||
var me = this;
|
||||
win.on("accessrights", function (obj, rights) {
|
||||
me.doc.info.sharingSettings = rights;
|
||||
me.cntRights.update(rights);
|
||||
});
|
||||
win.show();
|
||||
},
|
||||
onLostEditRights: function () {
|
||||
this._readonlyRights = true;
|
||||
if (!this.rendered) {
|
||||
return;
|
||||
}
|
||||
this._ShowHideInfoItem(this.cntRights, false);
|
||||
this._ShowHideInfoItem(this.tbsRights, false);
|
||||
this._ShowHideInfoItem(this.btnEditRights, false);
|
||||
},
|
||||
txtTitle: "Document Title",
|
||||
txtAuthor: "Author",
|
||||
txtPlacement: "Placement",
|
||||
txtDate: "Creation Date",
|
||||
txtRights: "Persons who have rights",
|
||||
txtBtnAccessRights: "Change access rights"
|
||||
});
|
||||
@@ -1,363 +1,257 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.DocumentPreview", {
|
||||
extend: "Ext.container.Container",
|
||||
alias: "widget.pedocumentpreview",
|
||||
layout: "fit",
|
||||
shadow: false,
|
||||
floating: true,
|
||||
toFrontOnShow: true,
|
||||
hidden: true,
|
||||
modal: true,
|
||||
requires: ["Ext.container.Container", "Ext.button.Button", "Ext.form.Label"],
|
||||
constructor: function (config) {
|
||||
this.initConfig(config);
|
||||
this.callParent(arguments);
|
||||
return this;
|
||||
},
|
||||
listeners: {
|
||||
afterrender: function () {
|
||||
var parent = this.floatParent;
|
||||
if (Ext.isDefined(parent)) {
|
||||
parent.addListener("resize", Ext.bind(this.resizePreview, this));
|
||||
}
|
||||
},
|
||||
hide: function (cmp, eOpts) {
|
||||
this.controlsContainer.hide();
|
||||
Ext.getCmp("pe-applicationUI").show();
|
||||
if (this.api) {
|
||||
setTimeout(Ext.bind(function () {
|
||||
this.api.Resize();
|
||||
var tb = Ext.getCmp("toolbar-combo-view-themes");
|
||||
if (tb) {
|
||||
tb.doComponentLayout();
|
||||
tb.fillComboView(tb.dataMenu.picker.getSelectedRec(), true, true);
|
||||
tb.dataMenu.picker.updateScrollPane();
|
||||
}
|
||||
},
|
||||
this), 50);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
show: function (cmp, eOpts) {
|
||||
this.controlsContainer.show();
|
||||
this.controlsContainer.setPosition(0, this.getHeight() - this._ControlPanelHeight);
|
||||
var span = this.btnPlay.getEl().down(".asc-slide-preview-btn");
|
||||
if (span.hasCls("btn-play")) {
|
||||
span.removeCls("btn-play");
|
||||
span.addCls("btn-pause");
|
||||
this.btnPlay.getEl().set({
|
||||
"data-qtip": this.txtPause,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
me.btnPrev = Ext.create("Ext.button.Button", {
|
||||
iconCls: "asc-slide-preview-btn btn-prev",
|
||||
listeners: {
|
||||
click: function () {
|
||||
if (me.api) {
|
||||
me.api.DemonstrationPrevSlide();
|
||||
}
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.txtPrev,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
me.btnNext = Ext.create("Ext.button.Button", {
|
||||
iconCls: "asc-slide-preview-btn btn-next",
|
||||
listeners: {
|
||||
click: function () {
|
||||
if (me.api) {
|
||||
me.api.DemonstrationNextSlide();
|
||||
}
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.txtNext,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
me.btnClose = Ext.create("Ext.button.Button", {
|
||||
iconCls: "asc-slide-preview-btn btn-close",
|
||||
listeners: {
|
||||
click: function () {
|
||||
if (me.api) {
|
||||
me.api.EndDemonstration();
|
||||
}
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.txtClose,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
me.btnPlay = Ext.create("Ext.button.Button", {
|
||||
iconCls: "asc-slide-preview-btn btn-play",
|
||||
listeners: {
|
||||
click: function () {
|
||||
var span = me.btnPlay.getEl().down(".asc-slide-preview-btn");
|
||||
if (span.hasCls("btn-play")) {
|
||||
span.removeCls("btn-play");
|
||||
span.addCls("btn-pause");
|
||||
me.btnPlay.getEl().set({
|
||||
"data-qtip": me.txtPause,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
if (me.api) {
|
||||
me.api.DemonstrationPlay();
|
||||
}
|
||||
} else {
|
||||
if (span.hasCls("btn-pause")) {
|
||||
span.removeCls("btn-pause");
|
||||
span.addCls("btn-play");
|
||||
me.btnPlay.getEl().set({
|
||||
"data-qtip": me.txtPlay,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
if (me.api) {
|
||||
me.api.DemonstrationPause();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.txtPlay,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
me.txtPages = Ext.widget("label", {
|
||||
cls: "preview-slides",
|
||||
listeners: {
|
||||
afterrender: Ext.bind(function (ct) {
|
||||
ct.getEl().on("mousedown", onShowPageMenu, this);
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
var txtGoToPage = Ext.widget("label", {
|
||||
text: me.goToSlideText
|
||||
});
|
||||
var fieldPageNumber = Ext.widget("numberfield", {
|
||||
id: "preview-field-slide",
|
||||
width: 40,
|
||||
minValue: 1,
|
||||
maxValue: 10000,
|
||||
value: 1,
|
||||
allowDecimals: false,
|
||||
hideTrigger: true,
|
||||
keyNavEnabled: false,
|
||||
mouseWheelEnabled: false,
|
||||
enableKeyEvents: true,
|
||||
selectOnFocus: true,
|
||||
listeners: {
|
||||
specialkey: function (field, event, eOpts) {
|
||||
if (event.getKey() == event.ENTER) {
|
||||
if (me.api) {
|
||||
var page = fieldPageNumber.getValue();
|
||||
if (Ext.isNumber(page)) {
|
||||
if (page > fieldPageNumber.maxValue) {
|
||||
page = fieldPageNumber.maxValue;
|
||||
}
|
||||
if (page < fieldPageNumber.minValue) {
|
||||
page = fieldPageNumber.minValue;
|
||||
}
|
||||
fieldPageNumber.setValue(page);
|
||||
fieldPageNumber.selectText();
|
||||
me.api.DemonstrationGoToSlide(page - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var defaultPadding = 20;
|
||||
var defaultContainerOffset = 7;
|
||||
me.menuGoToPage = Ext.widget("menu", {
|
||||
id: "preview-menu-slide",
|
||||
autoHeight: true,
|
||||
autoWidth: true,
|
||||
plain: true,
|
||||
items: [{
|
||||
xtype: "container",
|
||||
cls: "pe-documentstatusinfo-menu-inner",
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle",
|
||||
padding: defaultPadding / 2 + "px " + defaultPadding + "px"
|
||||
},
|
||||
items: [txtGoToPage, {
|
||||
xtype: "tbspacer",
|
||||
width: defaultContainerOffset
|
||||
},
|
||||
fieldPageNumber],
|
||||
listeners: {
|
||||
afterrender: function (ct) {
|
||||
var textWidth = txtGoToPage.getWidth();
|
||||
ct.getEl().setWidth(defaultContainerOffset + 2 * defaultPadding + textWidth + fieldPageNumber.getWidth());
|
||||
}
|
||||
}
|
||||
}],
|
||||
listeners: {
|
||||
show: function (ct) {
|
||||
if (me.api) {
|
||||
fieldPageNumber.setValue(me.api.getCurrentPage() + 1);
|
||||
fieldPageNumber.focus(true, 300);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var onShowPageMenu = function () {
|
||||
me.menuGoToPage.show();
|
||||
me.menuGoToPage.showBy(me.txtPages, "bl-tl", [0, -10]);
|
||||
};
|
||||
me.onCountSlides = function (count) {
|
||||
fieldPageNumber.setMinValue((count > 0) ? 1 : 0);
|
||||
fieldPageNumber.setMaxValue(count);
|
||||
};
|
||||
me.onDemonstrationSlideChanged = function (slideNum) {
|
||||
if (me.api && Ext.isNumber(slideNum)) {
|
||||
var count = me.api.getCountPages();
|
||||
me.txtPages.setText(Ext.String.format(me.slideIndexText, slideNum + 1, count));
|
||||
me.btnPrev.setDisabled(slideNum <= 0);
|
||||
me.btnNext.setDisabled(slideNum >= count - 1);
|
||||
fieldPageNumber.setValue(slideNum + 1);
|
||||
var w = me.txtPages.getWidth();
|
||||
if (me._PagesPanelSize !== w) {
|
||||
me.controlsContainer.setWidth(me._ControlPanelWidth + w);
|
||||
me._PagesPanelSize = w;
|
||||
}
|
||||
me.controlsContainer.doLayout();
|
||||
}
|
||||
};
|
||||
me.items = [{
|
||||
xtype: "container",
|
||||
id: "presentation-preview",
|
||||
listeners: {
|
||||
resize: function (Component, adjWidth, adjHeight, eOpts) {
|
||||
if (this.api) {
|
||||
setTimeout(Ext.bind(function () {
|
||||
this.api.Resize();
|
||||
},
|
||||
this), 50);
|
||||
}
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}];
|
||||
this.controlsContainer = Ext.create("Ext.container.Container", {
|
||||
id: "preview-controls-panel",
|
||||
cls: "pe-documentpreview",
|
||||
floating: true,
|
||||
shadow: false,
|
||||
toFrontOnShow: true,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle"
|
||||
},
|
||||
height: me._ControlPanelHeight = 35,
|
||||
width: me._ControlPanelWidth = 122,
|
||||
items: [{
|
||||
xtype: "tbspacer",
|
||||
width: 3
|
||||
},
|
||||
me.btnPrev, me.btnPlay, me.btnNext, {
|
||||
xtype: "tbseparator",
|
||||
width: 2,
|
||||
height: "100%",
|
||||
style: "padding-top:8px; padding-bottom:8px;",
|
||||
html: '<div style="width: 100%; height: 100%; border-right: 1px solid #DADADA"></div>'
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
width: 8
|
||||
},
|
||||
me.txtPages, {
|
||||
xtype: "tbspacer",
|
||||
width: 8
|
||||
},
|
||||
{
|
||||
xtype: "tbseparator",
|
||||
width: 6,
|
||||
height: "100%",
|
||||
style: "padding-top:8px; padding-bottom:8px;",
|
||||
html: '<div style="width: 100%; height: 100%; border-left: 1px solid #DADADA"></div>'
|
||||
},
|
||||
me.btnClose]
|
||||
});
|
||||
this.addEvents("editcomplete");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setApi: function (o) {
|
||||
this.api = o;
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback("asc_onCountPages", Ext.bind(this.onCountSlides, this));
|
||||
this.api.asc_registerCallback("asc_onEndDemonstration", Ext.bind(this.onEndDemonstration, this));
|
||||
this.api.asc_registerCallback("asc_onDemonstrationSlideChanged", Ext.bind(this.onDemonstrationSlideChanged, this));
|
||||
this.api.DemonstrationEndShowMessage(this.txtFinalMessage);
|
||||
}
|
||||
return this;
|
||||
},
|
||||
resizePreview: function (Component, adjWidth, adjHeight, eOpts) {
|
||||
this.setSize(adjWidth, adjHeight);
|
||||
this.controlsContainer.setPosition(0, adjHeight - this._ControlPanelHeight);
|
||||
if (this.menuGoToPage.isVisible()) {
|
||||
this.menuGoToPage.showBy(this.txtPages, "bl-tl", [0, -10]);
|
||||
}
|
||||
},
|
||||
onEndDemonstration: function () {
|
||||
this.hide();
|
||||
},
|
||||
txtPrev: "Previous Slide",
|
||||
txtNext: "Next Slide",
|
||||
txtClose: "Close Preview",
|
||||
goToSlideText: "Go to Slide",
|
||||
slideIndexText: "Slide {0} of {1}",
|
||||
txtPlay: "Start Presentation",
|
||||
txtPause: "Pause Presentation",
|
||||
txtFinalMessage: "The end of slide preview. Click to exit."
|
||||
/**
|
||||
* DocumentPreview.js
|
||||
*
|
||||
* Created by Julia Radzhabova on 4/18/14
|
||||
* Copyright (c) 2014 Ascensio System SIA. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
define([
|
||||
'jquery',
|
||||
'underscore',
|
||||
'backbone',
|
||||
'common/main/lib/component/BaseView',
|
||||
'presentationeditor/main/app/model/Pages'
|
||||
], function () {
|
||||
'use strict';
|
||||
|
||||
function _updatePagesCaption(model,value,opts) {
|
||||
var curr = model.get('current'),
|
||||
cnt = model.get('count');
|
||||
$('#preview-label-slides').text(
|
||||
Common.Utils.String.format(this.slideIndexText, (curr<cnt) ? curr : cnt , cnt) );
|
||||
}
|
||||
|
||||
PE.Views.DocumentPreview = Common.UI.BaseView.extend(_.extend({
|
||||
el: '#pe-preview',
|
||||
|
||||
// Delegated events for creating new items, and clearing completed ones.
|
||||
events: {
|
||||
},
|
||||
|
||||
options: {
|
||||
alias: 'DocumentPreview'
|
||||
},
|
||||
|
||||
initialize : function(options) {
|
||||
_.extend(this.options, options || {});
|
||||
|
||||
this.template = [
|
||||
'<div id="presentation-preview" style="width:100%; height:100%"></div>',
|
||||
'<div id="preview-controls-panel" class="preview-controls" style="position: absolute; bottom: 0;">',
|
||||
'<div class="preview-group" style="">',
|
||||
'<button id="btn-preview-prev" type="button" class="btn small btn-toolbar btn-toolbar-default"><span class="btn-icon"> </span></button>',
|
||||
'<button id="btn-preview-play" type="button" class="btn small btn-toolbar btn-toolbar-default"><span class="btn-icon"> </span></button>',
|
||||
'<button id="btn-preview-next" type="button" class="btn small btn-toolbar btn-toolbar-default"><span class="btn-icon"> </span></button>',
|
||||
'<div class="separator"/>',
|
||||
'</div>',
|
||||
'<div class="preview-group dropup">',
|
||||
'<label id="preview-label-slides" class="status-label" data-toggle="dropdown">Slide 1 of 1</label>',
|
||||
'<div id="preview-goto-box" class="dropdown-menu">',
|
||||
'<label style="float:left;line-height:22px;">' + this.goToSlideText + '</label>',
|
||||
'<div id="preview-goto-page" style="display:inline-block;"></div>',
|
||||
'</div>',
|
||||
'</div>',
|
||||
'<div class="preview-group" style="">',
|
||||
'<div class="separator"/>',
|
||||
'<button id="btn-preview-close" type="button" class="btn small btn-toolbar btn-toolbar-default"><span class="btn-icon"> </span></button>',
|
||||
'</div>',
|
||||
'</div>'
|
||||
].join('');
|
||||
|
||||
this.pages = new PE.Models.Pages({current:1, count:1});
|
||||
this.pages.on('change', _.bind(_updatePagesCaption,this));
|
||||
},
|
||||
|
||||
render: function () {
|
||||
var el = $(this.el),
|
||||
me = this;
|
||||
el.html(_.template(this.template, {
|
||||
scope: this
|
||||
}));
|
||||
|
||||
this.btnPrev = new Common.UI.Button({
|
||||
el: $('#btn-preview-prev',this.el),
|
||||
hint: this.txtPrev,
|
||||
hintAnchor: 'top'
|
||||
});
|
||||
this.btnPrev.on('click', _.bind(function() {
|
||||
if (this.api) this.api.DemonstrationPrevSlide();
|
||||
}, this));
|
||||
|
||||
this.btnNext = new Common.UI.Button({
|
||||
el: $('#btn-preview-next',this.el),
|
||||
hint: this.txtNext,
|
||||
hintAnchor: 'top'
|
||||
});
|
||||
this.btnNext.on('click', _.bind(function() {
|
||||
if (this.api) this.api.DemonstrationNextSlide();
|
||||
}, this));
|
||||
|
||||
this.btnPlay = new Common.UI.Button({
|
||||
el: $('#btn-preview-play',this.el),
|
||||
hint: this.txtPlay,
|
||||
hintAnchor: 'top'
|
||||
});
|
||||
this.btnPlay.on('click', _.bind(function(btn) {
|
||||
var iconEl = $('.btn-icon', this.btnPlay.cmpEl);
|
||||
if (iconEl.hasClass('btn-pause')) {
|
||||
iconEl.removeClass('btn-pause');
|
||||
this.btnPlay.updateHint(this.txtPlay);
|
||||
if (this.api)
|
||||
this.api.DemonstrationPause();
|
||||
} else {
|
||||
iconEl.addClass('btn-pause');
|
||||
this.btnPlay.updateHint(this.txtPause);
|
||||
if (this.api)
|
||||
this.api.DemonstrationPlay ();
|
||||
}
|
||||
}, this));
|
||||
|
||||
this.btnClose = new Common.UI.Button({
|
||||
el: $('#btn-preview-close',this.el),
|
||||
hint: this.txtClose,
|
||||
hintAnchor: 'top'
|
||||
});
|
||||
this.btnClose.on('click', _.bind(function() {
|
||||
if (this.api) this.api.EndDemonstration();
|
||||
}, this));
|
||||
|
||||
this.txtGoToPage = new Common.UI.InputField({
|
||||
el : $('#preview-goto-page'),
|
||||
allowBlank : true,
|
||||
validateOnChange: true,
|
||||
style : 'width: 60px;',
|
||||
maskExp: /[0-9]/,
|
||||
validation : function(value) {
|
||||
if (/(^[0-9]+$)/.test(value)) {
|
||||
value = parseInt(value);
|
||||
if (undefined !== value && value > 0 && value <= me.pages.get('count'))
|
||||
return true;
|
||||
}
|
||||
|
||||
return me.txtPageNumInvalid;
|
||||
}
|
||||
}).on('keypress:after', function(input, e) {
|
||||
var box = me.$el.find('#preview-goto-box');
|
||||
if (e.keyCode === Common.UI.Keys.RETURN) {
|
||||
var edit = box.find('input[type=text]'), page = parseInt(edit.val());
|
||||
if (!page || page-- > me.pages.get('count') || page < 0) {
|
||||
edit.select();
|
||||
return false;
|
||||
}
|
||||
|
||||
box.focus(); // for IE
|
||||
box.parent().removeClass('open');
|
||||
|
||||
me.api.DemonstrationGoToSlide(page);
|
||||
me.api.asc_enableKeyEvents(true);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
var goto = this.$el.find('#preview-goto-box');
|
||||
goto.on('click', function() {
|
||||
return false;
|
||||
});
|
||||
goto.parent().on('show.bs.dropdown',
|
||||
function () {
|
||||
// me.txtGoToPage.setValue(me.api.getCurrentPage() + 1);
|
||||
// me.txtGoToPage.checkValidate();
|
||||
var edit = me.txtGoToPage.$el.find('input');
|
||||
_.defer(function(){edit.focus(); edit.select();}, 100);
|
||||
|
||||
}
|
||||
);
|
||||
goto.parent().on('hide.bs.dropdown',
|
||||
function () { var box = me.$el.find('#preview-goto-box');
|
||||
if (me.api && box) {
|
||||
box.focus(); // for IE
|
||||
box.parent().removeClass('open');
|
||||
|
||||
me.api.asc_enableKeyEvents(true);
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
show: function() {
|
||||
var toolbar = PE.getController('Toolbar').getView('Toolbar');
|
||||
if (toolbar._state.hasCollaborativeChanges) {
|
||||
toolbar._state.hasCollaborativeChanges = false;
|
||||
if (toolbar.synchTooltip) toolbar.synchTooltip.hide();
|
||||
toolbar.needShowSynchTip = true;
|
||||
}
|
||||
|
||||
Common.UI.BaseView.prototype.show.call(this,arguments);
|
||||
|
||||
var iconEl = $('.btn-icon', this.btnPlay.cmpEl);
|
||||
if (!iconEl.hasClass('btn-pause')) {
|
||||
iconEl.addClass('btn-pause');
|
||||
this.btnPlay.updateHint(this.txtPause);
|
||||
}
|
||||
$('#viewport-vbox-layout').css('z-index','0');
|
||||
this.fireEvent('editcomplete', this);
|
||||
},
|
||||
|
||||
hide: function() {
|
||||
Common.UI.BaseView.prototype.hide.call(this,arguments);
|
||||
|
||||
$('#viewport-vbox-layout').css('z-index','auto');
|
||||
Common.NotificationCenter.trigger('layout:changed', 'preview');
|
||||
|
||||
var toolbar = PE.getController('Toolbar').getView('Toolbar');
|
||||
if (toolbar.needShowSynchTip) {
|
||||
toolbar.needShowSynchTip = false;
|
||||
toolbar.onCollaborativeChanges();
|
||||
}
|
||||
|
||||
this.fireEvent('editcomplete', this);
|
||||
},
|
||||
|
||||
setApi: function(o) {
|
||||
this.api = o;
|
||||
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback('asc_onCountPages', _.bind(this.onCountSlides, this));
|
||||
this.api.asc_registerCallback('asc_onEndDemonstration', _.bind(this.onEndDemonstration, this));
|
||||
this.api.asc_registerCallback('asc_onDemonstrationSlideChanged', _.bind(this.onDemonstrationSlideChanged, this));
|
||||
this.api.DemonstrationEndShowMessage(this.txtFinalMessage);
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
onCountSlides: function(count){
|
||||
this.pages.set('count', count);
|
||||
},
|
||||
|
||||
onDemonstrationSlideChanged: function(slideNum) {
|
||||
this.pages.set('current', slideNum+1);
|
||||
if (this.api && _.isNumber(slideNum)) {
|
||||
var count = this.api.getCountPages();
|
||||
if (count !== this.pages.get('count'))
|
||||
this.pages.set('count', count);
|
||||
this.btnPrev.setDisabled(slideNum<=0);
|
||||
this.btnNext.setDisabled(slideNum>=count-1);
|
||||
this.txtGoToPage.setValue(slideNum + 1);
|
||||
this.txtGoToPage.checkValidate();
|
||||
}
|
||||
},
|
||||
|
||||
onEndDemonstration: function( ) {
|
||||
this.hide();
|
||||
},
|
||||
|
||||
txtPrev: 'Previous Slide',
|
||||
txtNext: 'Next Slide',
|
||||
txtClose: 'Close Preview',
|
||||
goToSlideText : 'Go to Slide',
|
||||
slideIndexText : 'Slide {0} of {1}',
|
||||
txtPlay: 'Start Presentation',
|
||||
txtPause: 'Pause Presentation',
|
||||
txtFinalMessage: 'The end of slide preview. Click to exit.',
|
||||
txtPageNumInvalid: 'Slide number invalid'
|
||||
}, PE.Views.DocumentPreview || {}));
|
||||
});
|
||||
@@ -1,360 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.DocumentSettings", {
|
||||
extend: "Ext.container.Container",
|
||||
alias: "widget.pedocumentsettings",
|
||||
cls: "pe-documentsettings-body",
|
||||
requires: ["Ext.button.Button", "Ext.container.Container", "Ext.form.Label", "Ext.form.field.Checkbox"],
|
||||
listeners: {
|
||||
show: function (cmp, eOpts) {
|
||||
cmp.updateSettings();
|
||||
}
|
||||
},
|
||||
constructor: function (config) {
|
||||
this.initConfig(config);
|
||||
this.callParent(arguments);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this._changedProps = {
|
||||
zoomIdx: 0,
|
||||
unitIdx: 0,
|
||||
saveVal: 600,
|
||||
showchangesIdx: 1
|
||||
};
|
||||
this._oldUnit = undefined;
|
||||
this.chInputMode = Ext.create("Ext.form.field.Checkbox", {
|
||||
id: "docsettings-input-mode",
|
||||
boxLabel: this.strInputMode,
|
||||
width: 500
|
||||
});
|
||||
this.chLiveComment = Ext.create("Ext.form.field.Checkbox", {
|
||||
id: "docsettings-live-comment",
|
||||
checked: true,
|
||||
boxLabel: this.strLiveComment,
|
||||
width: 500
|
||||
});
|
||||
this._arrZoom = [[-1, this.txtFitSlide], [50, "50%"], [60, "60%"], [70, "70%"], [80, "80%"], [90, "90%"], [100, "100%"], [110, "110%"], [120, "120%"], [150, "150%"], [175, "175%"], [200, "200%"]];
|
||||
this.cmbZoom = Ext.create("Ext.form.field.ComboBox", {
|
||||
id: "docsettings-combo-zoom",
|
||||
width: 150,
|
||||
editable: false,
|
||||
store: this._arrZoom,
|
||||
mode: "local",
|
||||
triggerAction: "all",
|
||||
value: this._arrZoom[0][1],
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
this._changedProps.zoomIdx = records[0].index;
|
||||
combo.blur();
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this._arrUnit = [[Common.MetricSettings.c_MetricUnits.cm, this.txtCm], [Common.MetricSettings.c_MetricUnits.pt, this.txtPt]];
|
||||
this.cmbUnit = Ext.create("Ext.form.field.ComboBox", {
|
||||
id: "docsettings-combo-unit",
|
||||
width: 150,
|
||||
editable: false,
|
||||
store: this._arrUnit,
|
||||
mode: "local",
|
||||
triggerAction: "all",
|
||||
value: this._arrUnit[0][1],
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
this._changedProps.unitIdx = records[0].index;
|
||||
combo.blur();
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this._arrAutoSave = [[0, this.textDisabled], [60, this.textMinute], [300, this.text5Minutes], [600, this.text10Minutes], [1800, this.text30Minutes], [3600, this.text60Minutes]];
|
||||
this.cmbAutoSave = Ext.create("Ext.form.field.ComboBox", {
|
||||
id: "docsettings-combo-save",
|
||||
width: 150,
|
||||
editable: false,
|
||||
store: this._arrAutoSave,
|
||||
mode: "local",
|
||||
triggerAction: "all",
|
||||
value: this._arrAutoSave[3][1],
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
this._changedProps.saveVal = records[0].data.field1;
|
||||
combo.blur();
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this._arrShowChanges = [this.txtAll, this.txtLast];
|
||||
this.cmbShowChanges = Ext.create("Ext.form.field.ComboBox", {
|
||||
id: "docsettings-show-changes",
|
||||
width: 150,
|
||||
editable: false,
|
||||
store: this._arrShowChanges,
|
||||
mode: "local",
|
||||
triggerAction: "all",
|
||||
value: this._arrShowChanges[1],
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
this._changedProps.showchangesIdx = records[0].index;
|
||||
combo.blur();
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.btnOk = Ext.widget("button", {
|
||||
cls: "asc-blue-button",
|
||||
width: 90,
|
||||
height: 22,
|
||||
text: this.okButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.applySettings();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tableAttrs: {
|
||||
style: "width: 100%;"
|
||||
},
|
||||
tdAttrs: {
|
||||
style: "padding: 5px 10px;"
|
||||
}
|
||||
},
|
||||
items: [{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.txtInput,
|
||||
style: "display: block;text-align: right; margin-bottom: 1px;",
|
||||
width: "100%",
|
||||
hideId: "element-edit-mode"
|
||||
},
|
||||
this.chInputMode, {
|
||||
xtype: "tbspacer",
|
||||
hideId: "element-edit-mode"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer"
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.strZoom,
|
||||
style: "display: block;text-align: right; margin-bottom: 5px;",
|
||||
width: "100%"
|
||||
},
|
||||
this.cmbZoom, {
|
||||
xtype: "tbspacer",
|
||||
hideId: "element-edit-mode"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer"
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.strShowChanges,
|
||||
style: "display: block;text-align: right; margin-bottom: 5px;",
|
||||
width: "100%",
|
||||
hideId: "element-coauthoring"
|
||||
},
|
||||
this.cmbShowChanges, {
|
||||
xtype: "tbspacer",
|
||||
hideId: "element-coauthoring"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer"
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.textAutoSave,
|
||||
style: "display: block;text-align: right; margin-bottom: 5px;",
|
||||
width: "100%",
|
||||
hideId: "element-autosave"
|
||||
},
|
||||
this.cmbAutoSave, {
|
||||
xtype: "tbspacer",
|
||||
hideId: "element-autosave"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer"
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
cellCls: "doc-info-label-cell",
|
||||
text: this.strUnit,
|
||||
style: "display: block;text-align: right; margin-bottom: 5px;",
|
||||
width: "100%",
|
||||
hideId: "element-edit-mode"
|
||||
},
|
||||
this.cmbUnit, {
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer"
|
||||
},
|
||||
this.btnOk]
|
||||
}];
|
||||
this.addEvents("savedocsettings");
|
||||
this.addEvents("changemeasureunit");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setApi: function (o) {
|
||||
this.api = o;
|
||||
return this;
|
||||
},
|
||||
applySettings: function () {
|
||||
this.api.SetTextBoxInputMode(this.chInputMode.getValue());
|
||||
if (this.mode.canAutosave > -1) {
|
||||
this.api.asc_setAutoSaveGap(this._changedProps.saveVal);
|
||||
}
|
||||
this.api.SetCollaborativeMarksShowType((this._changedProps.showchangesIdx == 0) ? c_oAscCollaborativeMarksShowType.All : c_oAscCollaborativeMarksShowType.LastChanges);
|
||||
window.localStorage.setItem("pe-settings-inputmode", this.chInputMode.getValue() ? 1 : 0);
|
||||
window.localStorage.setItem("pe-settings-zoom", this._arrZoom[this._changedProps.zoomIdx][0]);
|
||||
window.localStorage.setItem("pe-settings-showchanges", this._changedProps.showchangesIdx);
|
||||
window.localStorage.setItem("pe-settings-livecomment", this.chLiveComment.getValue() ? 1 : 0);
|
||||
window.localStorage.setItem("pe-settings-unit", this._arrUnit[this._changedProps.unitIdx][0]);
|
||||
window.localStorage.setItem("pe-settings-autosave", this._changedProps.saveVal);
|
||||
Common.component.Analytics.trackEvent("File Menu", "SaveSettings");
|
||||
this.fireEvent("savedocsettings", this);
|
||||
if (this._oldUnit !== this._arrUnit[this._changedProps.unitIdx][0]) {
|
||||
this.fireEvent("changemeasureunit", this);
|
||||
}
|
||||
},
|
||||
updateSettings: function () {
|
||||
var value = window.localStorage.getItem("pe-settings-inputmode");
|
||||
this.chInputMode.setValue(value !== null && parseInt(value) == 1);
|
||||
value = window.localStorage.getItem("pe-settings-livecomment");
|
||||
this.chLiveComment.setValue(!(value !== null && parseInt(value) == 0));
|
||||
value = window.localStorage.getItem("pe-settings-zoom");
|
||||
this._changedProps.zoomIdx = 0;
|
||||
if (value !== null) {
|
||||
for (var i = 0; i < this._arrZoom.length; i++) {
|
||||
if (this._arrZoom[i][0] == parseInt(value)) {
|
||||
this._changedProps.zoomIdx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.cmbZoom.setValue(this._arrZoom[this._changedProps.zoomIdx][1]);
|
||||
value = window.localStorage.getItem("pe-settings-showchanges");
|
||||
this._changedProps.showchangesIdx = (value !== null && parseInt(value) == 0) ? 0 : 1;
|
||||
this.cmbShowChanges.setValue(this._arrShowChanges[this._changedProps.showchangesIdx]);
|
||||
value = window.localStorage.getItem("pe-settings-unit");
|
||||
this._changedProps.unitIdx = 0;
|
||||
if (value !== null) {
|
||||
for (var i = 0; i < this._arrUnit.length; i++) {
|
||||
if (this._arrUnit[i][0] == parseInt(value)) {
|
||||
this._changedProps.unitIdx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.cmbUnit.setValue(this._arrUnit[this._changedProps.unitIdx][1]);
|
||||
this._oldUnit = this._arrUnit[this._changedProps.unitIdx][0];
|
||||
value = window.localStorage.getItem("pe-settings-autosave");
|
||||
value = (value !== null) ? parseInt(value) : 600;
|
||||
this._changedProps.saveVal = 600;
|
||||
var idx = 3;
|
||||
for (var i = 0; i < this._arrAutoSave.length; i++) {
|
||||
if (this._arrAutoSave[i][0] == value) {
|
||||
this._changedProps.saveVal = value;
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.cmbAutoSave.setValue(this._arrAutoSave[idx][1]);
|
||||
this._ShowHideDocSettings("element-edit-mode", this.mode.isEdit);
|
||||
this._ShowHideDocSettings("element-coauthoring", this.mode.canCoAuthoring && this.mode.isEdit);
|
||||
this._ShowHideDocSettings("element-autosave", this.mode.isEdit && (this.mode.canAutosave > -1));
|
||||
},
|
||||
_ShowHideSettingsItem: function (cmp, visible) {
|
||||
var tr = cmp.getEl().up("tr");
|
||||
if (tr) {
|
||||
tr.setDisplayed(visible);
|
||||
}
|
||||
},
|
||||
_ShowHideDocSettings: function (id, visible) {
|
||||
var components = Ext.ComponentQuery.query('[hideId="' + id + '"]', this);
|
||||
for (var i = 0; i < components.length; i++) {
|
||||
this._ShowHideSettingsItem(components[i], visible);
|
||||
}
|
||||
},
|
||||
setMode: function (mode) {
|
||||
this.mode = mode;
|
||||
if (this.mode.canAutosave > -1) {
|
||||
var idx = 0;
|
||||
for (idx = 1; idx < this._arrAutoSave.length; idx++) {
|
||||
if (this.mode.canAutosave < this._arrAutoSave[idx][0]) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
var arr = [];
|
||||
arr = this._arrAutoSave.slice(idx, this._arrAutoSave.length);
|
||||
arr.unshift(this._arrAutoSave[0]);
|
||||
if (arr.length > 0) {
|
||||
this.cmbAutoSave.getStore().loadData(arr);
|
||||
}
|
||||
},
|
||||
strInputMode: "Turn on hieroglyphs",
|
||||
strZoom: "Default Zoom Value",
|
||||
okButtonText: "Apply",
|
||||
txtFitSlide: "Fit Slide",
|
||||
txtInput: "Alternate Input",
|
||||
strLiveComment: "Turn on option",
|
||||
txtLiveComment: "Live Commenting",
|
||||
strUnit: "Unit of Measurement",
|
||||
txtCm: "Centimeter",
|
||||
txtPt: "Point",
|
||||
textDisabled: "Disabled",
|
||||
textMinute: "Every Minute",
|
||||
text5Minutes: "Every 5 Minutes",
|
||||
text10Minutes: "Every 10 Minutes",
|
||||
text30Minutes: "Every 30 Minutes",
|
||||
text60Minutes: "Every Hour",
|
||||
textAutoSave: "Autosave",
|
||||
strShowChanges: "Realtime Collaboration Changes",
|
||||
txtAll: "View All",
|
||||
txtLast: "View Last"
|
||||
});
|
||||
@@ -1,367 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.DocumentStatusInfo", {
|
||||
extend: "Ext.container.Container",
|
||||
alias: "widget.documentstatusinfo",
|
||||
requires: ["Ext.form.field.Number", "Ext.button.Button", "Ext.form.Label", "Ext.toolbar.Spacer", "Ext.util.Cookies"],
|
||||
uses: ["Ext.tip.ToolTip", "Ext.menu.Menu", "Common.view.Participants"],
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle"
|
||||
},
|
||||
config: {
|
||||
caption: ""
|
||||
},
|
||||
cls: "pe-documentstatusinfo",
|
||||
height: 27,
|
||||
initComponent: function () {
|
||||
var me = this,
|
||||
cfg = Ext.apply({},
|
||||
me.initialConfig);
|
||||
this.addEvents("editcomplete");
|
||||
var txtPages = Ext.widget("label", {
|
||||
id: "status-label-pages",
|
||||
text: Ext.String.format(me.pageIndexText, 0, 0),
|
||||
cls: "statusinfo-pages",
|
||||
style: "cursor: pointer;margin:0 40px;",
|
||||
listeners: {
|
||||
afterrender: function (ct) {
|
||||
ct.getEl().on("mousedown", onShowPageMenu, me);
|
||||
}
|
||||
}
|
||||
});
|
||||
var txtCaption = Ext.widget("label", {
|
||||
id: "status-label-caption",
|
||||
text: this.getCaption(),
|
||||
cls: "statusinfo-caption",
|
||||
height: 14
|
||||
});
|
||||
var txtZoom = Ext.widget("label", {
|
||||
id: "status-label-zoom",
|
||||
text: Ext.String.format(me.zoomText, 0),
|
||||
cls: "statusinfo-pages",
|
||||
style: "cursor: pointer; white-space:nowrap; text-align: center; margin: 0 5px;",
|
||||
listeners: {
|
||||
afterrender: Ext.bind(function (ct) {
|
||||
ct.getEl().on("mousedown", onShowZoomMenu, this);
|
||||
ct.getEl().set({
|
||||
"data-qtip": me.tipZoomFactor,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
ct.setWidth(Ext.util.TextMetrics.measure(ct.getEl(), Ext.String.format(me.zoomText, 999)).width);
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
var btnFitToPage = Ext.widget("button", {
|
||||
id: "status-button-fit-page",
|
||||
cls: "asc-statusbar-icon-btn",
|
||||
iconCls: "asc-statusbar-btn btn-fittopage",
|
||||
enableToggle: true,
|
||||
listeners: {
|
||||
toggle: function (btn, pressed) {
|
||||
if (me.api) {
|
||||
if (pressed) {
|
||||
me.api.zoomFitToPage();
|
||||
} else {
|
||||
me.api.zoomCustomMode();
|
||||
}
|
||||
}
|
||||
btnFitToWidth.toggle(false, true);
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.tipFitPage,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
var btnFitToWidth = Ext.widget("button", {
|
||||
id: "status-button-fit-width",
|
||||
cls: "asc-statusbar-icon-btn",
|
||||
iconCls: "asc-statusbar-btn btn-fittowidth",
|
||||
enableToggle: true,
|
||||
style: "margin: 0 20px 0 5px;",
|
||||
listeners: {
|
||||
toggle: function (btn, pressed) {
|
||||
if (me.api) {
|
||||
if (pressed) {
|
||||
me.api.zoomFitToWidth();
|
||||
} else {
|
||||
me.api.zoomCustomMode();
|
||||
}
|
||||
}
|
||||
btnFitToPage.toggle(false, true);
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.tipFitWidth,
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
var btnZoomIn = Ext.widget("button", {
|
||||
id: "status-button-zoom-in",
|
||||
cls: "asc-btn-zoom asc-statusbar-icon-btn",
|
||||
iconCls: "asc-statusbar-btn btn-zoomin",
|
||||
style: "margin-right:40px",
|
||||
listeners: {
|
||||
click: function () {
|
||||
if (me.api) {
|
||||
me.api.zoomIn();
|
||||
}
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.tipZoomIn + " (Ctrl++)",
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
var btnZoomOut = Ext.widget("button", {
|
||||
id: "status-button-zoom-out",
|
||||
cls: "asc-btn-zoom asc-statusbar-icon-btn",
|
||||
iconCls: "asc-statusbar-btn btn-zoomout",
|
||||
listeners: {
|
||||
click: function () {
|
||||
if (me.api) {
|
||||
me.api.zoomOut();
|
||||
}
|
||||
},
|
||||
render: function (obj) {
|
||||
obj.getEl().set({
|
||||
"data-qtip": me.tipZoomOut + " (Ctrl+-)",
|
||||
"data-qalign": "bl-tl?"
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
this.userPanel = Ext.widget("statusinfoparticipants", {
|
||||
userIconCls: "pe-icon-statusinfo-users"
|
||||
});
|
||||
this.fieldPageNumber = Ext.widget("numberfield", {
|
||||
id: "status-field-page",
|
||||
width: 40,
|
||||
minValue: 1,
|
||||
maxValue: 10000,
|
||||
value: 1,
|
||||
allowDecimals: false,
|
||||
hideTrigger: true,
|
||||
keyNavEnabled: false,
|
||||
mouseWheelEnabled: false,
|
||||
enableKeyEvents: true,
|
||||
selectOnFocus: true,
|
||||
listeners: {
|
||||
specialkey: function (field, event, eOpts) {
|
||||
if (event.getKey() == event.ENTER) {
|
||||
if (me.api) {
|
||||
var page = me.fieldPageNumber.getValue();
|
||||
if (Ext.isNumber(page)) {
|
||||
if (page > me.fieldPageNumber.maxValue) {
|
||||
page = me.fieldPageNumber.maxValue;
|
||||
}
|
||||
if (page < me.fieldPageNumber.minValue) {
|
||||
page = me.fieldPageNumber.minValue;
|
||||
}
|
||||
me.fieldPageNumber.setValue(page);
|
||||
me.fieldPageNumber.selectText();
|
||||
me.api.goToPage(page - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
var onShowPageMenu = function () {
|
||||
this.menuGoToPage.show();
|
||||
this.menuGoToPage.showBy(txtPages, "bl-tl", [0, -10]);
|
||||
};
|
||||
var onShowZoomMenu = function () {
|
||||
me.menuZoomTo.show();
|
||||
me.menuZoomTo.showBy(txtZoom, "b-t", [0, -10]);
|
||||
};
|
||||
var onZoomChange = function (percent, type) {
|
||||
btnFitToPage.toggle(type == 2, true);
|
||||
btnFitToWidth.toggle(type == 1, true);
|
||||
txtZoom.setText(Ext.String.format(me.zoomText, percent));
|
||||
txtZoom.zf = percent;
|
||||
me.doLayout();
|
||||
};
|
||||
var onCountPages = function (count) {
|
||||
if (me.api) {
|
||||
txtPages.setText(Ext.String.format(me.pageIndexText, me.api.getCurrentPage() + 1, count));
|
||||
}
|
||||
me.fieldPageNumber.setMinValue((count > 0) ? 1 : 0);
|
||||
me.fieldPageNumber.setMaxValue(count);
|
||||
};
|
||||
var onCurrentPage = function (number) {
|
||||
if (me.api) {
|
||||
txtPages.setText(Ext.String.format(me.pageIndexText, number + 1, me.api.getCountPages()));
|
||||
}
|
||||
me.fieldPageNumber.setValue(number + 1);
|
||||
};
|
||||
this.setApi = function (o) {
|
||||
this.api = o;
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback("asc_onZoomChange", Ext.bind(onZoomChange, this));
|
||||
this.api.asc_registerCallback("asc_onCountPages", Ext.bind(onCountPages, this));
|
||||
this.api.asc_registerCallback("asc_onCurrentPage", Ext.bind(onCurrentPage, this));
|
||||
this.userPanel.setApi(this.api);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
this.items = [txtPages, me.userPanel, {
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
pack: "center"
|
||||
},
|
||||
items: [txtCaption]
|
||||
},
|
||||
btnFitToPage, btnFitToWidth, btnZoomOut, txtZoom, btnZoomIn];
|
||||
me.callParent(arguments);
|
||||
},
|
||||
applyCaption: function (value) {
|
||||
var c = Ext.get("status-label-caption");
|
||||
if (c) {
|
||||
Ext.DomHelper.overwrite(c, value);
|
||||
}
|
||||
this.doLayout();
|
||||
return value;
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
var me = this;
|
||||
var txtGoToPage = Ext.widget("label", {
|
||||
id: "status-label-page",
|
||||
text: me.goToPageText
|
||||
});
|
||||
var defaultPadding = 20;
|
||||
var defaultContainerOffset = 7;
|
||||
this.menuGoToPage = Ext.widget("menu", {
|
||||
id: "status-menu-page",
|
||||
autoHeight: true,
|
||||
autoWidth: true,
|
||||
plain: true,
|
||||
items: [{
|
||||
xtype: "container",
|
||||
cls: "pe-documentstatusinfo-menu-inner",
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle",
|
||||
padding: defaultPadding / 2 + "px " + defaultPadding + "px"
|
||||
},
|
||||
items: [txtGoToPage, {
|
||||
xtype: "tbspacer",
|
||||
width: defaultContainerOffset
|
||||
},
|
||||
me.fieldPageNumber],
|
||||
listeners: {
|
||||
afterrender: function (ct) {
|
||||
var textWidth = txtGoToPage.getWidth();
|
||||
ct.getEl().setWidth(defaultContainerOffset + 2 * defaultPadding + textWidth + me.fieldPageNumber.getWidth());
|
||||
}
|
||||
}
|
||||
}],
|
||||
listeners: {
|
||||
show: function (ct) {
|
||||
if (me.api) {
|
||||
me.fieldPageNumber.setValue(me.api.getCurrentPage() + 1);
|
||||
me.fieldPageNumber.focus(true, 300);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
function onItemClick(item) {
|
||||
if (me.api) {
|
||||
me.api.zoom(item.zf);
|
||||
}
|
||||
}
|
||||
this.menuZoomTo = Ext.widget("menu", {
|
||||
plain: true,
|
||||
bodyCls: "status-zoom-menu",
|
||||
minWidth: 100,
|
||||
defaults: {
|
||||
listeners: {
|
||||
click: onItemClick
|
||||
}
|
||||
},
|
||||
listeners: {
|
||||
hide: function () {
|
||||
me.fireEvent("editcomplete", me);
|
||||
}
|
||||
},
|
||||
items: [{
|
||||
text: "50%",
|
||||
zf: 50
|
||||
},
|
||||
{
|
||||
text: "75%",
|
||||
zf: 75
|
||||
},
|
||||
{
|
||||
text: "100%",
|
||||
zf: 100
|
||||
},
|
||||
{
|
||||
text: "125%",
|
||||
zf: 125
|
||||
},
|
||||
{
|
||||
text: "150%",
|
||||
zf: 150
|
||||
},
|
||||
{
|
||||
text: "175%",
|
||||
zf: 175
|
||||
},
|
||||
{
|
||||
text: "200%",
|
||||
zf: 200
|
||||
}]
|
||||
});
|
||||
},
|
||||
setMode: function (m) {
|
||||
this.userPanel.setMode(m);
|
||||
},
|
||||
zoomText: "Zoom {0}%",
|
||||
goToPageText: "Go to Slide",
|
||||
pageIndexText: "Slide {0} of {1}",
|
||||
tipFitPage: "Fit Slide",
|
||||
tipFitWidth: "Fit Width",
|
||||
tipZoomIn: "Zoom In",
|
||||
tipZoomOut: "Zoom Out",
|
||||
tipZoomFactor: "Magnification"
|
||||
});
|
||||
@@ -1,425 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.File", {
|
||||
extend: "Ext.panel.Panel",
|
||||
alias: "widget.pefile",
|
||||
cls: "pe-file-body",
|
||||
layout: "card",
|
||||
toolbarWidth: 260,
|
||||
activeBtn: undefined,
|
||||
requires: ["Ext.toolbar.Toolbar", "Ext.button.Button", "Ext.container.Container"],
|
||||
uses: ["PE.view.DocumentInfo", "PE.view.DocumentHelp", "PE.view.DocumentSettings", "Common.view.About"],
|
||||
listeners: {
|
||||
afterrender: function (Component, eOpts) {
|
||||
var cnt = this.ownerCt;
|
||||
if (Ext.isDefined(cnt)) {
|
||||
cnt.addListener("show", Ext.Function.bind(this._onShow, this));
|
||||
}
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
this.addEvents("editdocument");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
loadConfig: function (data) {
|
||||
this.editorConfig = data.config;
|
||||
},
|
||||
loadDocument: function (data) {
|
||||
this.document = data.doc;
|
||||
},
|
||||
_onShow: function () {
|
||||
if (this.activeBtn === undefined) {
|
||||
var btn = this[this.btnDomnloadAs.isVisible() ? "btnDomnloadAs" : "btnDocumentInfo"];
|
||||
this.activeBtn = btn.toggle(true);
|
||||
} else {
|
||||
this.redrawButton(this.activeBtn);
|
||||
}
|
||||
if (this.activeBtn == this.btnDocumentInfo) {
|
||||
this.getLayout().setActiveItem(this.cardDocumentInfo);
|
||||
} else {
|
||||
if (this.activeBtn == this.btnDocumentSettings) {
|
||||
this.getLayout().setActiveItem(this.cardDocumentSettings);
|
||||
this.cardDocumentSettings.updateSettings();
|
||||
}
|
||||
}
|
||||
},
|
||||
buildItems: function () {
|
||||
var docInfo = [{
|
||||
name: "PDF",
|
||||
imgCls: "doc-format btn-pdf",
|
||||
type: c_oAscFileType.PDF
|
||||
},
|
||||
{
|
||||
name: "PPTX",
|
||||
imgCls: "doc-format btn-pptx",
|
||||
type: c_oAscFileType.PPTX
|
||||
}];
|
||||
this.cardDownloadAs = Ext.widget("container", {
|
||||
cls: "pe-file-table",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 4
|
||||
}
|
||||
});
|
||||
var me = this;
|
||||
Ext.each(docInfo, function (item) {
|
||||
this.cardDownloadAs.add({
|
||||
xtype: "container",
|
||||
items: [{
|
||||
xtype: "button",
|
||||
id: "file-format-" + item.name,
|
||||
cls: item.imgCls + " download-button-style",
|
||||
docType: item.type,
|
||||
width: 102,
|
||||
height: 129,
|
||||
margin: "65px 25px 0 25px",
|
||||
listeners: {
|
||||
click: Ext.bind(function (btn) {
|
||||
var api = me.ownerCt.getApi();
|
||||
if (api) {
|
||||
api.asc_DownloadAs(btn.docType);
|
||||
me.closeMenu();
|
||||
}
|
||||
Common.component.Analytics.trackEvent("Download As", item.name);
|
||||
},
|
||||
this)
|
||||
}
|
||||
}]
|
||||
});
|
||||
},
|
||||
this);
|
||||
this.cardDocumentInfo = Ext.widget("pedocumentinfo");
|
||||
this.cardCreateNew = Ext.widget("pecreatenew");
|
||||
this.cardRecentFiles = Ext.widget("perecentfiles");
|
||||
this.cardHelp = Ext.widget("pedocumenthelp");
|
||||
this.cardDocumentSettings = Ext.widget("pedocumentsettings");
|
||||
this.cardDocumentSettings.addListener("savedocsettings", Ext.bind(this.closeMenu, this));
|
||||
return [this.cardDownloadAs, this.cardDocumentInfo, this.cardCreateNew, this.cardRecentFiles, this.cardHelp, this.cardDocumentSettings];
|
||||
},
|
||||
buildDockedItems: function () {
|
||||
this.btnSave = Ext.create("Ext.button.Button", {
|
||||
id: "file-button-save",
|
||||
text: this.btnSaveCaption,
|
||||
textAlign: "left",
|
||||
enableToggle: true,
|
||||
cls: "asc-filemenu-btn",
|
||||
padding: "0 27px",
|
||||
height: 27,
|
||||
listeners: {
|
||||
click: Ext.bind(function (btnCall) {
|
||||
if (btnCall.pressed) {
|
||||
this.api = this.ownerCt.getApi();
|
||||
if (this.api) {
|
||||
this.redrawButton(btnCall);
|
||||
this.api.asc_Save();
|
||||
this.closeMenu();
|
||||
}
|
||||
Common.component.Analytics.trackEvent("Save");
|
||||
Common.component.Analytics.trackEvent("File Menu", "Save");
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.btnPrint = this.btnSave.cloneConfig({
|
||||
id: "file-button-print",
|
||||
text: this.btnPrintCaption,
|
||||
listeners: {
|
||||
click: Ext.bind(function (btnCall) {
|
||||
if (btnCall.pressed) {
|
||||
this.api = this.ownerCt.getApi();
|
||||
if (this.api) {
|
||||
this.api.asc_Print();
|
||||
this.closeMenu();
|
||||
}
|
||||
Common.component.Analytics.trackEvent("Print");
|
||||
Common.component.Analytics.trackEvent("File Menu", "Print");
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.btnToEdit = this.btnSave.cloneConfig({
|
||||
id: "file-button-edit",
|
||||
text: this.btnToEditCaption,
|
||||
listeners: {
|
||||
click: Ext.bind(function (btnCall) {
|
||||
this.redrawButton(btnCall);
|
||||
if (btnCall.pressed) {
|
||||
this.closeMenu();
|
||||
this.fireEvent("editdocument");
|
||||
Common.component.Analytics.trackEvent("Edit");
|
||||
Common.component.Analytics.trackEvent("File Menu", "Edit");
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.btnDomnloadAs = Ext.create("Ext.button.Button", Ext.applyIf(this.getFileMenuButton(this.btnDownloadCaption, this.cardDownloadAs), {
|
||||
id: "file-button-download"
|
||||
}));
|
||||
this.btnDocumentInfo = Ext.create("Ext.button.Button", Ext.applyIf(this.getFileMenuButton(this.btnInfoCaption, this.cardDocumentInfo), {
|
||||
id: "file-button-info"
|
||||
}));
|
||||
this.btnDocumentSettings = Ext.create("Ext.button.Button", Ext.applyIf(this.getFileMenuButton(this.btnSettingsCaption, this.cardDocumentSettings), {
|
||||
id: "file-button-settings"
|
||||
}));
|
||||
this.btnBack = this.btnSave.cloneConfig({
|
||||
id: "file-button-back",
|
||||
text: this.btnBackCaption,
|
||||
listeners: {
|
||||
click: Ext.bind(function (btnCall) {
|
||||
this.redrawButton(btnCall);
|
||||
if (btnCall.pressed) {
|
||||
Common.Gateway.goBack();
|
||||
this.closeMenu();
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.btnHelp = Ext.create("Ext.button.Button", this.getFileMenuButton(this.btnHelpCaption, this.cardHelp));
|
||||
this.btnReturn = Ext.create("Ext.button.Button", {
|
||||
id: "file-button-return",
|
||||
text: this.btnReturnCaption,
|
||||
textAlign: "left",
|
||||
enableToggle: true,
|
||||
cls: "asc-filemenu-btn",
|
||||
padding: "0 27px",
|
||||
height: 27,
|
||||
listeners: {
|
||||
click: Ext.bind(function (btnCall) {
|
||||
if (btnCall.pressed) {
|
||||
this.closeMenu();
|
||||
Common.component.Analytics.trackEvent("File Menu", "Return");
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.btnCreateNew = Ext.create("Ext.button.Button", {
|
||||
id: "file-button-createnew",
|
||||
text: this.btnCreateNewCaption,
|
||||
textAlign: "left",
|
||||
enableToggle: true,
|
||||
cls: "asc-filemenu-btn",
|
||||
padding: "0 27px",
|
||||
height: 27
|
||||
});
|
||||
this.btnOpenRecent = Ext.create("Ext.button.Button", Ext.applyIf(this.getFileMenuButton(this.btnRecentFilesCaption, this.cardRecentFiles), {
|
||||
id: "file-button-recentfiles",
|
||||
label: "Recent"
|
||||
}));
|
||||
this.tbFileMenu = Ext.create("Ext.toolbar.Toolbar", {
|
||||
dock: "left",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
cls: "pe-file-toolbar",
|
||||
vertical: true,
|
||||
width: this.toolbarWidth,
|
||||
defaults: {
|
||||
height: 22,
|
||||
width: "100%"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
height: 15
|
||||
},
|
||||
this.btnReturn, this.getSeparator(), this.btnSave, this.btnToEdit, this.btnDomnloadAs, this.btnPrint, this.getSeparator(), this.btnOpenRecent, this.btnCreateNew, this.getSeparator(), this.btnDocumentInfo, this.getSeparator(), this.btnDocumentSettings, this.getSeparator(), this.btnHelp, this.getSeparator(), this.btnBack]
|
||||
});
|
||||
return this.tbFileMenu;
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
},
|
||||
getSeparator: function () {
|
||||
return {
|
||||
xtype: "container",
|
||||
html: '<hr class="pe-file-separator" />'
|
||||
};
|
||||
},
|
||||
getFileMenuButton: function (caption, card) {
|
||||
return {
|
||||
text: caption,
|
||||
textAlign: "left",
|
||||
enableToggle: true,
|
||||
cls: "asc-filemenu-btn",
|
||||
padding: "0 27px",
|
||||
height: 27,
|
||||
listeners: {
|
||||
click: Ext.Function.bind(function (btnCall) {
|
||||
if (btnCall.pressed) {
|
||||
if (this.activeBtn != btnCall) {
|
||||
this.getLayout().setActiveItem(card);
|
||||
this.activeBtn = btnCall;
|
||||
}
|
||||
Common.component.Analytics.trackEvent("File Menu", btnCall.label);
|
||||
}
|
||||
},
|
||||
this),
|
||||
toggle: Ext.Function.bind(function (btnCall) {
|
||||
this.redrawButton(btnCall);
|
||||
},
|
||||
this)
|
||||
}
|
||||
};
|
||||
},
|
||||
redrawButton: function (btnCall) {
|
||||
var tb = this.tbFileMenu;
|
||||
for (var i = 0; i < tb.items.length; i++) {
|
||||
var btn = tb.items.items[i];
|
||||
if (btn.componentCls === "x-btn") {
|
||||
if (btn.id != btnCall.id && btn.pressed) {
|
||||
btn.toggle(false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
btnCall.toggle(true, true);
|
||||
},
|
||||
closeMenu: function () {
|
||||
this.ownerCt.closeMenu();
|
||||
},
|
||||
applyMode: function () {
|
||||
this.cardDocumentInfo.updateInfo(this.document);
|
||||
this.btnBack.setVisible(this.mode.canBack);
|
||||
this.tbFileMenu.items.items[16].setVisible(this.mode.canBack);
|
||||
this.btnOpenRecent.setVisible(this.mode.canOpenRecent);
|
||||
this.btnCreateNew.setVisible(this.mode.canCreateNew);
|
||||
this.tbFileMenu.items.items[10].setVisible(this.mode.canCreateNew);
|
||||
this.btnDomnloadAs.setVisible(this.mode.canDownload);
|
||||
this.hkSaveAs[this.mode.canDownload ? "enable" : "disable"]();
|
||||
this.btnSave.setVisible(this.mode.isEdit);
|
||||
this.btnToEdit.setVisible(this.mode.canEdit && this.mode.isEdit === false);
|
||||
this.cardDocumentSettings.setMode(this.mode);
|
||||
},
|
||||
setMode: function (mode, delay) {
|
||||
if (mode.isDisconnected) {
|
||||
this.mode.canEdit = this.mode.isEdit = false;
|
||||
this.mode.canOpenRecent = this.mode.canCreateNew = false;
|
||||
} else {
|
||||
this.mode = mode;
|
||||
}
|
||||
if (!delay) {
|
||||
this.applyMode();
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
this.hkSaveAs = new Ext.util.KeyMap(document, {
|
||||
key: "s",
|
||||
ctrl: true,
|
||||
shift: true,
|
||||
defaultEventAction: "stopEvent",
|
||||
scope: this,
|
||||
fn: function () {
|
||||
if (this.ownerCt && this.ownerCt.isVisible()) {
|
||||
this.btnDomnloadAs.toggle(true);
|
||||
this.btnDomnloadAs.fireEvent("click", this.btnDomnloadAs);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.hkHelp = new Ext.util.KeyMap(document, {
|
||||
key: Ext.EventObject.F1,
|
||||
ctrl: false,
|
||||
shift: false,
|
||||
defaultEventAction: "stopEvent",
|
||||
scope: this,
|
||||
fn: function () {
|
||||
if (this.ownerCt && this.ownerCt.isVisible()) {
|
||||
this.btnHelp.toggle(true);
|
||||
this.btnHelp.fireEvent("click", this.btnHelp);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.add(this.buildItems.call(this));
|
||||
this.addDocked(this.buildDockedItems());
|
||||
this.setConfig();
|
||||
this.applyMode();
|
||||
},
|
||||
setConfig: function () {
|
||||
var me = this;
|
||||
if (this.editorConfig.templates && this.editorConfig.templates.length > 0) {
|
||||
this.btnCreateNew.setText(this.btnCreateNew.getText() + "...");
|
||||
this.btnCreateNew.enableToggle = true;
|
||||
this.btnCreateNew.on("click", function (btnCall) {
|
||||
if (btnCall.pressed) {
|
||||
if (me.activeBtn != btnCall) {
|
||||
me.getLayout().setActiveItem(me.cardCreateNew);
|
||||
me.activeBtn = btnCall;
|
||||
}
|
||||
Common.component.Analytics.trackEvent("File Menu", "Create");
|
||||
}
|
||||
});
|
||||
this.btnCreateNew.on("toggle", function (btnCall) {
|
||||
me.redrawButton(btnCall);
|
||||
});
|
||||
} else {
|
||||
this.btnCreateNew.on("click", function (btnCall) {
|
||||
if (Ext.isEmpty(me.editorConfig.createUrl)) {
|
||||
Ext.MessageBox.show({
|
||||
title: me.textError,
|
||||
msg: me.textCanNotCreateNewDoc,
|
||||
buttons: Ext.Msg.OK,
|
||||
icon: Ext.Msg.ERROR,
|
||||
width: 300
|
||||
});
|
||||
} else {
|
||||
if (btnCall.pressed) {
|
||||
var newDocumentPage = window.open(Ext.String.format("{0}?title={1}&action=create&doctype=presentation", me.editorConfig.createUrl, me.newDocumentTitle));
|
||||
if (newDocumentPage) {
|
||||
newDocumentPage.focus();
|
||||
}
|
||||
Common.component.Analytics.trackEvent("Create New", "Blank");
|
||||
}
|
||||
}
|
||||
this.closeMenu();
|
||||
});
|
||||
}
|
||||
this.cardHelp.setLangConfig(this.editorConfig.lang);
|
||||
},
|
||||
btnSaveCaption: "Save",
|
||||
btnDownloadCaption: "Download as...",
|
||||
btnInfoCaption: "Document Info...",
|
||||
btnCreateNewCaption: "Create New",
|
||||
btnRecentFilesCaption: "Open Recent...",
|
||||
btnPrintCaption: "Print",
|
||||
btnHelpCaption: "Help...",
|
||||
btnReturnCaption: "Back to Document",
|
||||
btnToEditCaption: "Edit Document",
|
||||
btnBackCaption: "Go to Documents",
|
||||
newDocumentTitle: "Unnamed presentation",
|
||||
textError: "Error",
|
||||
textCanNotCreateNewDoc: "Can not create a new presentation. Address to create a document is not configured.",
|
||||
btnSettingsCaption: "Advanced Settings...",
|
||||
btnAboutCaption: "About"
|
||||
});
|
||||
254
OfficeWeb/apps/presentationeditor/main/app/view/FileMenu.js
Normal file
254
OfficeWeb/apps/presentationeditor/main/app/view/FileMenu.js
Normal file
@@ -0,0 +1,254 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/FileMenu.template", "underscore", "common/main/lib/component/BaseView"], function (tpl, _) {
|
||||
PE.Views.FileMenu = Common.UI.BaseView.extend(_.extend({
|
||||
el: "#file-menu-panel",
|
||||
template: _.template(tpl),
|
||||
events: function () {
|
||||
return {
|
||||
"click .fm-btn": _.bind(function (event) {
|
||||
var $item = $(event.currentTarget);
|
||||
if ($item.hasClass("disabled")) {
|
||||
return;
|
||||
} else {
|
||||
if (!$item.hasClass("active")) {
|
||||
$(".fm-btn", this.el).removeClass("active");
|
||||
$item.addClass("active");
|
||||
}
|
||||
}
|
||||
var item = _.findWhere(this.items, {
|
||||
el: event.currentTarget
|
||||
});
|
||||
if (item) {
|
||||
var panel = this.panels[item.options.action];
|
||||
this.fireEvent("item:click", [this, item.options.action, !!panel]);
|
||||
if (panel) {
|
||||
this.$el.find(".content-box:visible").hide();
|
||||
this.active = item.options.action;
|
||||
panel.show();
|
||||
}
|
||||
}
|
||||
},
|
||||
this)
|
||||
};
|
||||
},
|
||||
initialize: function () {},
|
||||
render: function () {
|
||||
this.$el = $(this.el);
|
||||
this.$el.html(this.template());
|
||||
this.items = [];
|
||||
this.items.push(new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-return", this.el),
|
||||
action: "back",
|
||||
caption: this.btnReturnCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-save", this.el),
|
||||
action: "save",
|
||||
caption: this.btnSaveCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-edit", this.el),
|
||||
action: "edit",
|
||||
caption: this.btnToEditCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-download", this.el),
|
||||
action: "saveas",
|
||||
caption: this.btnDownloadCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-print", this.el),
|
||||
action: "print",
|
||||
caption: this.btnPrintCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-recent", this.el),
|
||||
action: "recent",
|
||||
caption: this.btnRecentFilesCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-create", this.el),
|
||||
action: "new",
|
||||
caption: this.btnCreateNewCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-info", this.el),
|
||||
action: "info",
|
||||
caption: this.btnInfoCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-settings", this.el),
|
||||
action: "opts",
|
||||
caption: this.btnSettingsCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-help", this.el),
|
||||
action: "help",
|
||||
caption: this.btnHelpCaption,
|
||||
canFocused: false
|
||||
}), new Common.UI.MenuItem({
|
||||
el: $("#fm-btn-back", this.el),
|
||||
action: "exit",
|
||||
caption: this.btnBackCaption,
|
||||
canFocused: false
|
||||
}));
|
||||
var me = this;
|
||||
this.panels = {};
|
||||
require(["presentationeditor/main/app/view/FileMenuPanels"], function () {
|
||||
me.panels = {
|
||||
"saveas": (new PE.Views.FileMenuPanels.ViewSaveAs({
|
||||
menu: me
|
||||
})).render(),
|
||||
"opts": (new PE.Views.FileMenuPanels.Settings({
|
||||
menu: me
|
||||
})).render(),
|
||||
"info": (new PE.Views.FileMenuPanels.DocumentInfo({
|
||||
menu: me
|
||||
})).render(),
|
||||
"help": (new PE.Views.FileMenuPanels.Help({
|
||||
menu: me
|
||||
})).render()
|
||||
};
|
||||
me.$el.find(".content-box").hide();
|
||||
});
|
||||
return this;
|
||||
},
|
||||
show: function (panel) {
|
||||
if (this.isVisible() && panel === undefined) {
|
||||
return;
|
||||
}
|
||||
if (!panel) {
|
||||
panel = this.active || (this.mode.canDownload ? "saveas" : "info");
|
||||
}
|
||||
this.$el.show();
|
||||
this.selectMenu(panel);
|
||||
if (this.mode.isEdit) {
|
||||
PE.getController("Toolbar").DisableToolbar(true);
|
||||
}
|
||||
this.api.asc_enableKeyEvents(false);
|
||||
},
|
||||
hide: function () {
|
||||
this.$el.hide();
|
||||
if (this.mode.isEdit) {
|
||||
PE.getController("Toolbar").DisableToolbar(false);
|
||||
}
|
||||
this.fireEvent("filemenu:hide", [this]);
|
||||
this.api.asc_enableKeyEvents(true);
|
||||
},
|
||||
applyMode: function () {
|
||||
this.items[0][this.mode.canBack ? "show" : "hide"]();
|
||||
this.items[0].$el.find("+.devider")[this.mode.canBack ? "show" : "hide"]();
|
||||
this.items[5][this.mode.canOpenRecent ? "show" : "hide"]();
|
||||
this.items[6][this.mode.canCreateNew ? "show" : "hide"]();
|
||||
this.items[6].$el.find("+.devider")[this.mode.canCreateNew ? "show" : "hide"]();
|
||||
this.items[3][this.mode.canDownload ? "show" : "hide"]();
|
||||
this.items[1][this.mode.isEdit ? "show" : "hide"]();
|
||||
this.items[2][!this.mode.isEdit && this.mode.canEdit ? "show" : "hide"]();
|
||||
this.panels["opts"].setMode(this.mode);
|
||||
this.panels["info"].setMode(this.mode).updateInfo(this.document);
|
||||
if (this.mode.canCreateNew) {
|
||||
if (this.mode.templates && this.mode.templates.length) {
|
||||
$("a", this.items[6].$el).text(this.btnCreateNewCaption + "...");
|
||||
this.panels["new"] = ((new PE.Views.FileMenuPanels.CreateNew({
|
||||
menu: this,
|
||||
docs: this.mode.templates
|
||||
})).render());
|
||||
}
|
||||
}
|
||||
if (this.mode.canOpenRecent) {
|
||||
if (this.mode.recent) {
|
||||
this.panels["recent"] = (new PE.Views.FileMenuPanels.RecentFiles({
|
||||
menu: this,
|
||||
recent: this.mode.recent
|
||||
})).render();
|
||||
}
|
||||
}
|
||||
this.panels["help"].setLangConfig(this.mode.lang);
|
||||
},
|
||||
setMode: function (mode, delay) {
|
||||
if (mode.isDisconnected) {
|
||||
this.mode.canEdit = this.mode.isEdit = false;
|
||||
this.mode.canOpenRecent = this.mode.canCreateNew = false;
|
||||
} else {
|
||||
this.mode = mode;
|
||||
}
|
||||
if (!delay) {
|
||||
this.applyMode();
|
||||
}
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
},
|
||||
loadDocument: function (data) {
|
||||
this.document = data.doc;
|
||||
},
|
||||
selectMenu: function (menu) {
|
||||
if (menu) {
|
||||
var item = this._getMenuItem(menu),
|
||||
panel = this.panels[menu];
|
||||
if (item && panel) {
|
||||
$(".fm-btn", this.el).removeClass("active");
|
||||
item.$el.addClass("active");
|
||||
this.$el.find(".content-box:visible").hide();
|
||||
panel.show();
|
||||
this.active = menu;
|
||||
}
|
||||
}
|
||||
},
|
||||
disableMenu: function (menu, status) {
|
||||
if (menu) {
|
||||
var item = this._getMenuItem(menu);
|
||||
if (item) {
|
||||
item.setDisabled(status);
|
||||
}
|
||||
}
|
||||
},
|
||||
_getMenuItem: function (action) {
|
||||
return _.find(this.items, function (item) {
|
||||
return item.options.action == action;
|
||||
});
|
||||
},
|
||||
btnSaveCaption: "Save",
|
||||
btnDownloadCaption: "Download as...",
|
||||
btnInfoCaption: "Document Info...",
|
||||
btnCreateNewCaption: "Create New",
|
||||
btnRecentFilesCaption: "Open Recent...",
|
||||
btnPrintCaption: "Print",
|
||||
btnHelpCaption: "Help...",
|
||||
btnReturnCaption: "Back to Document",
|
||||
btnToEditCaption: "Edit Document",
|
||||
btnBackCaption: "Go to Documents",
|
||||
btnSettingsCaption: "Advanced Settings..."
|
||||
},
|
||||
PE.Views.FileMenu || {}));
|
||||
});
|
||||
@@ -0,0 +1,602 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["common/main/lib/view/DocumentAccessDialog", "common/main/lib/component/CheckBox"], function () { ! PE.Views.FileMenuPanels && (PE.Views.FileMenuPanels = {});
|
||||
PE.Views.FileMenuPanels.ViewSaveAs = Common.UI.BaseView.extend({
|
||||
el: "#panel-saveas",
|
||||
menu: undefined,
|
||||
formats: [[{
|
||||
name: "PDF",
|
||||
imgCls: "pdf",
|
||||
type: c_oAscFileType.PDF
|
||||
},
|
||||
{
|
||||
name: "PPTX",
|
||||
imgCls: "pptx",
|
||||
type: c_oAscFileType.PPTX
|
||||
}]],
|
||||
template: _.template(["<table><tbody>", "<% _.each(rows, function(row) { %>", "<tr>", "<% _.each(row, function(item) { %>", '<td><span class="btn-doc-format <%= item.imgCls %>" /></td>', "<% }) %>", "</tr>", "<% }) %>", "</tbody></table>"].join("")),
|
||||
initialize: function (options) {
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
this.menu = options.menu;
|
||||
},
|
||||
render: function () {
|
||||
$(this.el).html(this.template({
|
||||
rows: this.formats
|
||||
}));
|
||||
$(".btn-doc-format", this.el).on("click", _.bind(this.onFormatClick, this));
|
||||
if (_.isUndefined(this.scroller)) {
|
||||
this.scroller = new Common.UI.Scroller({
|
||||
el: $(this.el),
|
||||
suppressScrollX: true
|
||||
});
|
||||
}
|
||||
this.flatFormats = _.flatten(this.formats);
|
||||
return this;
|
||||
},
|
||||
onFormatClick: function (e) {
|
||||
var format = /\s(\w+)/.exec(e.currentTarget.className);
|
||||
if (format) {
|
||||
format = format[1];
|
||||
var item = _.findWhere(this.flatFormats, {
|
||||
imgCls: format
|
||||
});
|
||||
if (item && this.menu) {
|
||||
this.menu.fireEvent("saveas:format", [this.menu, item.type]);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
PE.Views.FileMenuPanels.Settings = Common.UI.BaseView.extend(_.extend({
|
||||
el: "#panel-settings",
|
||||
menu: undefined,
|
||||
template: _.template(["<table><tbody>", '<tr class="edit">', '<td class="left"><label><%= scope.txtInput %></label></td>', '<td class="right"><div id="fms-chb-input-mode"/></td>', "</tr>", '<tr class="divider edit"></tr>', "<tr>", '<td class="left"><label><%= scope.strZoom %></label></td>', '<td class="right"><div id="fms-cmb-zoom" class="input-group-nr" /></td>', "</tr>", '<tr class="divider"></tr>', '<tr class="coauth">', '<td class="left"><label><%= scope.strShowChanges %></label></td>', '<td class="right"><span id="fms-cmb-show-changes" /></td>', "</tr>", '<tr class="divider coauth"></tr>', '<tr class="autosave">', '<td class="left"><label><%= scope.textAutoSave %></label></td>', '<td class="right"><span id="fms-chb-autosave" /></td>', "</tr>", '<tr class="divider autosave"></tr>', "<tr>", '<td class="left"><label><%= scope.textAlignGuides %></label></td>', '<td class="right"><span id="fms-chb-align-guides" /></td>', "</tr>", '<tr class="divider"></tr>', '<tr class="edit">', '<td class="left"><label><%= scope.strUnit %></label></td>', '<td class="right"><span id="fms-cmb-unit" /></td>', "</tr>", '<tr class="divider edit"></tr>', "<tr>", '<td class="left"></td>', '<td class="right"><button id="fms-btn-apply" class="btn normal dlg-btn primary"><%= scope.okButtonText %></button></td>', "</tr>", "</tbody></table>"].join("")),
|
||||
initialize: function (options) {
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
this.menu = options.menu;
|
||||
},
|
||||
render: function () {
|
||||
$(this.el).html(this.template({
|
||||
scope: this
|
||||
}));
|
||||
this.chInputMode = new Common.UI.CheckBox({
|
||||
el: $("#fms-chb-input-mode"),
|
||||
labelText: this.strInputMode
|
||||
});
|
||||
this.cmbZoom = new Common.UI.ComboBox({
|
||||
el: $("#fms-cmb-zoom"),
|
||||
style: "width: 160px;",
|
||||
editable: false,
|
||||
cls: "input-group-nr",
|
||||
data: [{
|
||||
value: -1,
|
||||
displayValue: this.txtFitSlide
|
||||
},
|
||||
{
|
||||
value: 50,
|
||||
displayValue: "50%"
|
||||
},
|
||||
{
|
||||
value: 60,
|
||||
displayValue: "60%"
|
||||
},
|
||||
{
|
||||
value: 70,
|
||||
displayValue: "70%"
|
||||
},
|
||||
{
|
||||
value: 80,
|
||||
displayValue: "80%"
|
||||
},
|
||||
{
|
||||
value: 90,
|
||||
displayValue: "90%"
|
||||
},
|
||||
{
|
||||
value: 100,
|
||||
displayValue: "100%"
|
||||
},
|
||||
{
|
||||
value: 110,
|
||||
displayValue: "110%"
|
||||
},
|
||||
{
|
||||
value: 120,
|
||||
displayValue: "120%"
|
||||
},
|
||||
{
|
||||
value: 150,
|
||||
displayValue: "150%"
|
||||
},
|
||||
{
|
||||
value: 175,
|
||||
displayValue: "175%"
|
||||
},
|
||||
{
|
||||
value: 200,
|
||||
displayValue: "200%"
|
||||
}]
|
||||
});
|
||||
this.cmbShowChanges = new Common.UI.ComboBox({
|
||||
el: $("#fms-cmb-show-changes"),
|
||||
style: "width: 160px;",
|
||||
editable: false,
|
||||
cls: "input-group-nr",
|
||||
data: [{
|
||||
value: "all",
|
||||
displayValue: this.txtAll
|
||||
},
|
||||
{
|
||||
value: "last",
|
||||
displayValue: this.txtLast
|
||||
}]
|
||||
});
|
||||
this.chAutosave = new Common.UI.CheckBox({
|
||||
el: $("#fms-chb-autosave"),
|
||||
labelText: this.strAutosave
|
||||
});
|
||||
this.chAlignGuides = new Common.UI.CheckBox({
|
||||
el: $("#fms-chb-align-guides"),
|
||||
labelText: this.strAlignGuides
|
||||
});
|
||||
this.cmbUnit = new Common.UI.ComboBox({
|
||||
el: $("#fms-cmb-unit"),
|
||||
style: "width: 160px;",
|
||||
editable: false,
|
||||
cls: "input-group-nr",
|
||||
data: [{
|
||||
value: Common.Utils.Metric.c_MetricUnits["cm"],
|
||||
displayValue: this.txtCm
|
||||
},
|
||||
{
|
||||
value: Common.Utils.Metric.c_MetricUnits["pt"],
|
||||
displayValue: this.txtPt
|
||||
}]
|
||||
});
|
||||
this.btnApply = new Common.UI.Button({
|
||||
el: "#fms-btn-apply"
|
||||
});
|
||||
this.btnApply.on("click", _.bind(this.applySettings, this));
|
||||
if (_.isUndefined(this.scroller)) {
|
||||
this.scroller = new Common.UI.Scroller({
|
||||
el: $(this.el),
|
||||
suppressScrollX: true
|
||||
});
|
||||
}
|
||||
return this;
|
||||
},
|
||||
show: function () {
|
||||
Common.UI.BaseView.prototype.show.call(this, arguments);
|
||||
this.updateSettings();
|
||||
},
|
||||
setMode: function (mode) {
|
||||
$("tr.edit", this.el)[mode.isEdit ? "show" : "hide"]();
|
||||
$("tr.autosave", this.el)[mode.isEdit && mode.canAutosave ? "show" : "hide"]();
|
||||
$("tr.coauth", this.el)[mode.canCoAuthoring && mode.isEdit ? "show" : "hide"]();
|
||||
},
|
||||
updateSettings: function () {
|
||||
var value = window.localStorage.getItem("pe-settings-inputmode");
|
||||
this.chInputMode.setValue(value !== null && parseInt(value) == 1);
|
||||
value = window.localStorage.getItem("pe-settings-zoom");
|
||||
value = (value !== null) ? parseInt(value) : -1;
|
||||
var item = this.cmbZoom.store.findWhere({
|
||||
value: value
|
||||
});
|
||||
this.cmbZoom.setValue(item ? parseInt(item.get("value")) : 100);
|
||||
value = window.localStorage.getItem("pe-settings-showchanges");
|
||||
item = this.cmbShowChanges.store.findWhere({
|
||||
value: value
|
||||
});
|
||||
this.cmbShowChanges.setValue(item ? item.get("value") : "last");
|
||||
value = window.localStorage.getItem("pe-settings-unit");
|
||||
item = this.cmbUnit.store.findWhere({
|
||||
value: parseInt(value)
|
||||
});
|
||||
this.cmbUnit.setValue(item ? parseInt(item.get("value")) : 0);
|
||||
this._oldUnits = this.cmbUnit.getValue();
|
||||
value = window.localStorage.getItem("pe-settings-autosave");
|
||||
this.chAutosave.setValue(value === null || parseInt(value) == 1);
|
||||
value = window.localStorage.getItem("pe-settings-showsnaplines");
|
||||
this.chAlignGuides.setValue(value === null || parseInt(value) == 1);
|
||||
},
|
||||
applySettings: function () {
|
||||
window.localStorage.setItem("pe-settings-inputmode", this.chInputMode.isChecked() ? 1 : 0);
|
||||
window.localStorage.setItem("pe-settings-zoom", this.cmbZoom.getValue());
|
||||
window.localStorage.setItem("pe-settings-showchanges", this.cmbShowChanges.getValue());
|
||||
window.localStorage.setItem("pe-settings-unit", this.cmbUnit.getValue());
|
||||
window.localStorage.setItem("pe-settings-autosave", this.chAutosave.isChecked() ? 1 : 0);
|
||||
window.localStorage.setItem("pe-settings-showsnaplines", this.chAlignGuides.isChecked() ? 1 : 0);
|
||||
if (this.menu) {
|
||||
this.menu.fireEvent("settings:apply", [this.menu]);
|
||||
if (this._oldUnits !== this.cmbUnit.getValue()) {
|
||||
Common.NotificationCenter.trigger("settings:unitschanged", this);
|
||||
}
|
||||
}
|
||||
},
|
||||
strInputMode: "Turn on hieroglyphs",
|
||||
strZoom: "Default Zoom Value",
|
||||
okButtonText: "Apply",
|
||||
txtFitSlide: "Fit Slide",
|
||||
txtInput: "Alternate Input",
|
||||
strUnit: "Unit of Measurement",
|
||||
txtCm: "Centimeter",
|
||||
txtPt: "Point",
|
||||
textAutoSave: "Autosave",
|
||||
strAutosave: "Turn on autosave",
|
||||
strShowChanges: "Realtime Collaboration Changes",
|
||||
txtAll: "View All",
|
||||
txtLast: "View Last",
|
||||
textAlignGuides: "Alignment Guides",
|
||||
strAlignGuides: "Turn on alignment guides"
|
||||
},
|
||||
PE.Views.FileMenuPanels.Settings || {}));
|
||||
PE.Views.FileMenuPanels.RecentFiles = Common.UI.BaseView.extend({
|
||||
el: "#panel-recentfiles",
|
||||
menu: undefined,
|
||||
template: _.template(['<div id="id-recent-view" style="margin: 20px 0;"></div>'].join("")),
|
||||
initialize: function (options) {
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
this.menu = options.menu;
|
||||
this.recent = options.recent;
|
||||
},
|
||||
render: function () {
|
||||
$(this.el).html(this.template());
|
||||
this.viewRecentPicker = new Common.UI.DataView({
|
||||
el: $("#id-recent-view"),
|
||||
store: new Common.UI.DataViewStore(this.recent),
|
||||
itemTemplate: _.template(['<div class="recent-wrap">', '<div class="recent-icon"></div>', '<div class="file-name"><%= Common.Utils.String.htmlEncode(title) %></div>', '<div class="file-info"><%= Common.Utils.String.htmlEncode(folder) %></div>', "</div>"].join(""))
|
||||
});
|
||||
this.viewRecentPicker.on("item:click", _.bind(this.onRecentFileClick, this));
|
||||
if (_.isUndefined(this.scroller)) {
|
||||
this.scroller = new Common.UI.Scroller({
|
||||
el: $(this.el),
|
||||
suppressScrollX: true
|
||||
});
|
||||
}
|
||||
return this;
|
||||
},
|
||||
onRecentFileClick: function (view, itemview, record) {
|
||||
if (this.menu) {
|
||||
this.menu.fireEvent("recent:open", [this.menu, record.get("url")]);
|
||||
}
|
||||
}
|
||||
});
|
||||
PE.Views.FileMenuPanels.CreateNew = Common.UI.BaseView.extend(_.extend({
|
||||
el: "#panel-createnew",
|
||||
menu: undefined,
|
||||
events: function () {
|
||||
return {
|
||||
"click .blank-document-btn": _.bind(this._onBlankDocument, this),
|
||||
"click .thumb-list .thumb-wrap": _.bind(this._onDocumentTemplate, this)
|
||||
};
|
||||
},
|
||||
template: _.template(['<h3 style="margin-top: 20px;"><%= scope.fromBlankText %></h3><hr noshade />', '<div class="blank-document">', '<div class="blank-document-btn"></div>', '<div class="blank-document-info">', "<h3><%= scope.newDocumentText %></h3>", "<%= scope.newDescriptionText %>", "</div>", "</div>", "<h3><%= scope.fromTemplateText %></h3><hr noshade />", '<div class="thumb-list">', "<% _.each(docs, function(item) { %>", '<div class="thumb-wrap" template="<%= item.name %>">', '<div class="thumb"<% if (!_.isEmpty(item.icon)) { %> style="background-image: url(<%= item.icon %>);" <% } %> />', '<div class="title"><%= item.name %></div>', "</div>", "<% }) %>", "</div>"].join("")),
|
||||
initialize: function (options) {
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
this.menu = options.menu;
|
||||
},
|
||||
render: function () {
|
||||
$(this.el).html(this.template({
|
||||
scope: this,
|
||||
docs: this.options[0].docs
|
||||
}));
|
||||
if (_.isUndefined(this.scroller)) {
|
||||
this.scroller = new Common.UI.Scroller({
|
||||
el: $(this.el),
|
||||
suppressScrollX: true
|
||||
});
|
||||
}
|
||||
return this;
|
||||
},
|
||||
_onBlankDocument: function () {
|
||||
if (this.menu) {
|
||||
this.menu.fireEvent("create:new", [this.menu, "blank"]);
|
||||
}
|
||||
},
|
||||
_onDocumentTemplate: function (e) {
|
||||
if (this.menu) {
|
||||
this.menu.fireEvent("create:new", [this.menu, e.currentTarget.attributes["template"].value]);
|
||||
}
|
||||
},
|
||||
fromBlankText: "From Blank",
|
||||
newDocumentText: "New Presentation",
|
||||
newDescriptionText: "Create a new blank presentation which you will be able to style and format after it is created during the editing. Or choose one of the templates to start a document of a certain type or purpose where some styles have already been pre-applied.",
|
||||
fromTemplateText: "From Template",
|
||||
noTemplatesText: "There are no templates"
|
||||
},
|
||||
PE.Views.FileMenuPanels.CreateNew || {}));
|
||||
PE.Views.FileMenuPanels.DocumentInfo = Common.UI.BaseView.extend(_.extend({
|
||||
el: "#panel-info",
|
||||
menu: undefined,
|
||||
initialize: function (options) {
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
this.rendered = false;
|
||||
this.template = _.template(['<table class="main">', "<tr>", '<td class="left"><label>' + this.txtTitle + "</label></td>", '<td class="right"><label id="id-info-title">-</label></td>', "</tr>", '<tr class="author">', '<td class="left"><label>' + this.txtAuthor + "</label></td>", '<td class="right"><span class="userLink" id="id-info-author">-</span></td>', "</tr>", '<tr class="placement">', '<td class="left"><label>' + this.txtPlacement + "</label></td>", '<td class="right"><label id="id-info-placement">-</label></td>', "</tr>", '<tr class="date">', '<td class="left"><label>' + this.txtDate + "</label></td>", '<td class="right"><label id="id-info-date">-</label></td>', "</tr>", '<tr class="divider date"></tr>', '<tr class="rights">', '<td class="left" style="vertical-align: top;"><label>' + this.txtRights + "</label></td>", '<td class="right"><div id="id-info-rights"></div></td>', "</tr>", '<tr class="edit-rights">', '<td class="left"></td><td class="right"><button id="id-info-btn-edit" class="btn normal dlg-btn primary" style="margin-right: 10px;width: auto;">' + this.txtBtnAccessRights + "</button></td>", "</tr>", "</table>"].join(""));
|
||||
this.templateRights = _.template(["<table>", "<% _.each(users, function(item) { %>", "<tr>", '<td><span class="userLink"><%= Common.Utils.String.htmlEncode(item.user) %></span></td>', "<td><%= Common.Utils.String.htmlEncode(item.permissions) %></td>", "</tr>", "<% }); %>", "</table>"].join(""));
|
||||
this.menu = options.menu;
|
||||
},
|
||||
render: function () {
|
||||
$(this.el).html(this.template());
|
||||
this.lblTitle = $("#id-info-title");
|
||||
this.lblPlacement = $("#id-info-placement");
|
||||
this.lblDate = $("#id-info-date");
|
||||
this.lblAuthor = $("#id-info-author");
|
||||
this.cntRights = $("#id-info-rights");
|
||||
this.btnEditRights = new Common.UI.Button({
|
||||
el: "#id-info-btn-edit"
|
||||
});
|
||||
this.btnEditRights.on("click", _.bind(this.changeAccessRights, this));
|
||||
this.rendered = true;
|
||||
this.updateInfo(this.doc);
|
||||
if (_.isUndefined(this.scroller)) {
|
||||
this.scroller = new Common.UI.Scroller({
|
||||
el: $(this.el),
|
||||
suppressScrollX: true
|
||||
});
|
||||
}
|
||||
return this;
|
||||
},
|
||||
show: function () {
|
||||
Common.UI.BaseView.prototype.show.call(this, arguments);
|
||||
},
|
||||
hide: function () {
|
||||
Common.UI.BaseView.prototype.hide.call(this, arguments);
|
||||
},
|
||||
updateInfo: function (doc) {
|
||||
this.doc = doc;
|
||||
if (!this.rendered) {
|
||||
return;
|
||||
}
|
||||
doc = doc || {};
|
||||
this.lblTitle.text((doc.title) ? doc.title : "-");
|
||||
if (doc.info) {
|
||||
if (doc.info.author) {
|
||||
this.lblAuthor.text(doc.info.author);
|
||||
}
|
||||
this._ShowHideInfoItem("author", doc.info.author !== undefined && doc.info.author !== null);
|
||||
if (doc.info.created) {
|
||||
this.lblDate.text(doc.info.created);
|
||||
}
|
||||
this._ShowHideInfoItem("date", doc.info.created !== undefined && doc.info.created !== null);
|
||||
if (doc.info.folder) {
|
||||
this.lblPlacement.text(doc.info.folder);
|
||||
}
|
||||
this._ShowHideInfoItem("placement", doc.info.folder !== undefined && doc.info.folder !== null);
|
||||
if (doc.info.sharingSettings) {
|
||||
this.cntRights.html(this.templateRights({
|
||||
users: doc.info.sharingSettings
|
||||
}));
|
||||
}
|
||||
this._ShowHideInfoItem("rights", doc.info.sharingSettings !== undefined && doc.info.sharingSettings !== null && this._readonlyRights !== true);
|
||||
this._ShowHideInfoItem("edit-rights", !!this.sharingSettingsUrl && this.sharingSettingsUrl.length && this._readonlyRights !== true);
|
||||
} else {
|
||||
this._ShowHideDocInfo(false);
|
||||
}
|
||||
},
|
||||
_ShowHideInfoItem: function (cls, visible) {
|
||||
$("tr." + cls, this.el)[visible ? "show" : "hide"]();
|
||||
},
|
||||
_ShowHideDocInfo: function (visible) {
|
||||
this._ShowHideInfoItem("date", visible);
|
||||
this._ShowHideInfoItem("placement", visible);
|
||||
this._ShowHideInfoItem("author", visible);
|
||||
this._ShowHideInfoItem("rights", visible);
|
||||
this._ShowHideInfoItem("edit-rights", visible);
|
||||
},
|
||||
setMode: function (mode) {
|
||||
this.sharingSettingsUrl = mode.sharingSettingsUrl;
|
||||
return this;
|
||||
},
|
||||
changeAccessRights: function (btn, event, opts) {
|
||||
var me = this;
|
||||
var win = new Common.Views.DocumentAccessDialog({
|
||||
settingsurl: this.sharingSettingsUrl
|
||||
});
|
||||
win.on("accessrights", function (obj, rights) {
|
||||
me.doc.info.sharingSettings = rights;
|
||||
me.cntRights.html(me.templateRights({
|
||||
users: me.doc.info.sharingSettings
|
||||
}));
|
||||
});
|
||||
win.show();
|
||||
},
|
||||
onLostEditRights: function () {
|
||||
this._readonlyRights = true;
|
||||
if (!this.rendered) {
|
||||
return;
|
||||
}
|
||||
this._ShowHideInfoItem("rights", false);
|
||||
this._ShowHideInfoItem("edit-rights", false);
|
||||
},
|
||||
txtTitle: "Document Title",
|
||||
txtAuthor: "Author",
|
||||
txtPlacement: "Placement",
|
||||
txtDate: "Creation Date",
|
||||
txtRights: "Persons who have rights",
|
||||
txtBtnAccessRights: "Change access rights"
|
||||
},
|
||||
PE.Views.FileMenuPanels.DocumentInfo || {}));
|
||||
PE.Views.FileMenuPanels.Help = Common.UI.BaseView.extend({
|
||||
el: "#panel-help",
|
||||
menu: undefined,
|
||||
template: _.template(['<div style="width:100%; height:100%; position: relative;">', '<div id="id-help-contents" style="position: absolute; width:200px; top: 0; bottom: 0;" class="no-padding"></div>', '<div id="id-help-frame" style="position: absolute; left: 200px; top: 0; right: 0; bottom: 0;" class="no-padding"></div>', "</div>"].join("")),
|
||||
initialize: function (options) {
|
||||
Common.UI.BaseView.prototype.initialize.call(this, arguments);
|
||||
this.menu = options.menu;
|
||||
this.urlPref = "resources/help/en/";
|
||||
this.itemclicked = false;
|
||||
this.en_data = [{
|
||||
src: "UsageInstructions/SetPageParameters.htm",
|
||||
name: "Set page parameters",
|
||||
headername: "Usage Instructions"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/CopyPasteUndoRedo.htm",
|
||||
name: "Copy/paste text passages, undo/redo your actions"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/AlignText.htm",
|
||||
name: "Align your text in a line or paragraph"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/LineSpacing.htm",
|
||||
name: "Set paragraph line spacing"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/CopyClearFormatting.htm",
|
||||
name: "Copy/clear text formatting"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/CreateLists.htm",
|
||||
name: "Create lists"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/InsertImages.htm",
|
||||
name: "Insert images"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/ViewDocInfo.htm",
|
||||
name: "View document information"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/SavePrintDownload.htm",
|
||||
name: "Save/print/download your document"
|
||||
},
|
||||
{
|
||||
src: "UsageInstructions/OpenCreateNew.htm",
|
||||
name: "Create a new document or open an existing one"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/About.htm",
|
||||
name: "About ONLYOFFICE Document Editor",
|
||||
headername: "Helpful Hints"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/SupportedFormats.htm",
|
||||
name: "Supported Formats of Electronic Documents"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/Navigation.htm",
|
||||
name: "Navigation through Your Document"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/Search.htm",
|
||||
name: "Search Function"
|
||||
},
|
||||
{
|
||||
src: "HelpfulHints/KeyboardShortcuts.htm",
|
||||
name: "Keyboard Shortcuts"
|
||||
}];
|
||||
if (Common.Utils.isIE) {
|
||||
window.onhelp = function () {
|
||||
return false;
|
||||
};
|
||||
}
|
||||
},
|
||||
render: function () {
|
||||
$(this.el).html(this.template());
|
||||
this.viewHelpPicker = new Common.UI.DataView({
|
||||
el: $("#id-help-contents"),
|
||||
store: new Common.UI.DataViewStore([]),
|
||||
keyMoveDirection: "vertical",
|
||||
itemTemplate: _.template(['<div id="<%= id %>" class="help-item-wrap">', '<div class="caption"><%= name %></div>', "</div>"].join(""))
|
||||
});
|
||||
this.viewHelpPicker.on("item:add", _.bind(function (dataview, itemview, record) {
|
||||
if (record.has("headername")) {
|
||||
$(itemview.el).before('<div class="header-name">' + record.get("headername") + "</div>");
|
||||
}
|
||||
},
|
||||
this));
|
||||
this.viewHelpPicker.on("item:select", _.bind(function (dataview, itemview, record) {
|
||||
this.itemclicked = true;
|
||||
this.iFrame.src = this.urlPref + record.get("src");
|
||||
},
|
||||
this));
|
||||
this.iFrame = document.createElement("iframe");
|
||||
this.iFrame.src = "";
|
||||
this.iFrame.align = "top";
|
||||
this.iFrame.frameBorder = "0";
|
||||
this.iFrame.width = "100%";
|
||||
this.iFrame.height = "100%";
|
||||
this.iFrame.onload = _.bind(function () {
|
||||
if (!this.itemclicked) {
|
||||
var src = arguments[0].currentTarget.contentDocument.URL;
|
||||
var rec = this.viewHelpPicker.store.find(function (record) {
|
||||
return (src.indexOf(record.get("src")) > 0);
|
||||
});
|
||||
if (rec) {
|
||||
this.viewHelpPicker.selectRecord(rec, true);
|
||||
this.viewHelpPicker.scrollToRecord(rec);
|
||||
}
|
||||
}
|
||||
this.itemclicked = false;
|
||||
},
|
||||
this);
|
||||
$("#id-help-frame").append(this.iFrame);
|
||||
return this;
|
||||
},
|
||||
setLangConfig: function (lang) {
|
||||
var me = this;
|
||||
var store = this.viewHelpPicker.store;
|
||||
if (lang) {
|
||||
lang = lang.split("-")[0];
|
||||
var config = {
|
||||
dataType: "json",
|
||||
error: function () {
|
||||
if (me.urlPref.indexOf("resources/help/en/") < 0) {
|
||||
me.urlPref = "resources/help/en/";
|
||||
store.url = "resources/help/en/Contents.json";
|
||||
store.fetch(config);
|
||||
} else {
|
||||
me.urlPref = "resources/help/en/";
|
||||
store.reset(me.en_data);
|
||||
}
|
||||
},
|
||||
success: function () {
|
||||
var rec = store.at(0);
|
||||
me.viewHelpPicker.selectRecord(rec);
|
||||
me.iFrame.src = me.urlPref + rec.get("src");
|
||||
}
|
||||
};
|
||||
store.url = "resources/help/" + lang + "/Contents.json";
|
||||
store.fetch(config);
|
||||
this.urlPref = "resources/help/" + lang + "/";
|
||||
}
|
||||
},
|
||||
show: function () {
|
||||
Common.UI.BaseView.prototype.show.call(this);
|
||||
if (!this._scrollerInited) {
|
||||
this.viewHelpPicker.scroller.update();
|
||||
this._scrollerInited = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1,440 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
var c_oHyperlinkType = {
|
||||
InternalLink: 0,
|
||||
WebLink: 1
|
||||
};
|
||||
Ext.define("PE.view.HyperlinkSettings", {
|
||||
extend: "Ext.window.Window",
|
||||
alias: "widget.pehyperlinksettings",
|
||||
requires: ["Ext.window.Window", "Ext.form.field.ComboBox", "Ext.form.field.Text", "Ext.Array", "Ext.form.field.Radio", "Common.plugin.ComboBoxScrollPane"],
|
||||
cls: "asc-advanced-settings-window",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
plain: true,
|
||||
constrain: true,
|
||||
height: 410,
|
||||
width: 366,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
listeners: {
|
||||
show: function () {
|
||||
if (this.contExtLink.isVisible()) {
|
||||
this.txtLink.focus(false, 500);
|
||||
} else {
|
||||
this.txtLinkText.focus(false, 500);
|
||||
}
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
this.addEvents("onmodalresult");
|
||||
this.isTextChanged = false;
|
||||
this._spacer = Ext.create("Ext.toolbar.Spacer", {
|
||||
width: "100%",
|
||||
height: 10,
|
||||
html: '<div style="width: 100%; height: 40%; border-bottom: 1px solid #C7C7C7"></div>'
|
||||
});
|
||||
this.cmbLinkType = Ext.widget("combo", {
|
||||
store: Ext.create("Ext.data.Store", {
|
||||
fields: ["description", "type"],
|
||||
data: [{
|
||||
type: c_oHyperlinkType.InternalLink,
|
||||
description: me.textInternalLink
|
||||
},
|
||||
{
|
||||
type: c_oHyperlinkType.WebLink,
|
||||
description: me.textExternalLink
|
||||
}]
|
||||
}),
|
||||
displayField: "description",
|
||||
valueField: "type",
|
||||
queryMode: "local",
|
||||
editable: false,
|
||||
value: me.textExternalLink,
|
||||
listeners: {
|
||||
change: function (o, nV, oV) {
|
||||
var isinter = nV == c_oHyperlinkType.InternalLink;
|
||||
me.contIntLink.setVisible(isinter);
|
||||
me.contExtLink.setVisible(!isinter);
|
||||
}
|
||||
}
|
||||
});
|
||||
this.cmbSlides = Ext.create("Ext.form.field.ComboBox", {
|
||||
store: this.slides,
|
||||
mode: "local",
|
||||
triggerAction: "all",
|
||||
editable: false,
|
||||
width: 50,
|
||||
listConfig: {
|
||||
maxHeight: 200
|
||||
},
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
this.slideNum = records[0].index + 1;
|
||||
combo.blur();
|
||||
me.radioSlide.setValue(true);
|
||||
},
|
||||
this)
|
||||
},
|
||||
plugins: [{
|
||||
ptype: "comboboxscrollpane",
|
||||
pluginId: "scrollpane",
|
||||
settings: {
|
||||
enableKeyboardNavigation: true
|
||||
}
|
||||
}]
|
||||
});
|
||||
this.txtLink = Ext.widget("textfield", {
|
||||
allowBlank: false,
|
||||
blankText: me.txtEmpty,
|
||||
emptyText: me.textEmptyLink,
|
||||
validateOnChange: false,
|
||||
msgTarget: "side",
|
||||
regex: /(([\-\wа-яё]+\.)+[\wа-яё]{2,3}(\/[%\-\wа-яё]+(\.[\wа-яё]{2,})?)*(([\wа-яё\-\.\?\\\/+@&#;`~=%!]*)(\.[\wа-яё]{2,})?)*\/?)/i,
|
||||
regexText: me.txtNotUrl,
|
||||
listeners: {
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
me.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
me.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.txtLinkText = Ext.widget("textfield", {
|
||||
allowBlank: false,
|
||||
blankText: me.txtEmpty,
|
||||
msgTarget: "side",
|
||||
emptyText: me.textEmptyDesc,
|
||||
listeners: {
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
me.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
me.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
},
|
||||
change: function (field, newValue, oldValue) {
|
||||
me.isTextChanged = true;
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this.txtLinkTip = Ext.widget("textfield", {
|
||||
emptyText: me.textEmptyTooltip,
|
||||
listeners: {
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
me.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
me.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.label = Ext.widget("label", {
|
||||
width: "100%",
|
||||
margin: "0 0 2 0",
|
||||
style: "font-weight: bold;"
|
||||
});
|
||||
this.contExtLink = Ext.widget("container", {
|
||||
height: 44,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.label.cloneConfig({
|
||||
text: me.strLinkTo
|
||||
}), this.txtLink]
|
||||
});
|
||||
this.contIntLink = Ext.widget("container", {
|
||||
height: 120,
|
||||
hidden: true,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.radioNext = Ext.create("Ext.form.field.Radio", {
|
||||
boxLabel: this.txtNext,
|
||||
name: "asc-radio-slide",
|
||||
checked: true
|
||||
}), this.radioPrev = Ext.create("Ext.form.field.Radio", {
|
||||
boxLabel: this.txtPrev,
|
||||
name: "asc-radio-slide"
|
||||
}), this.radioFirst = Ext.create("Ext.form.field.Radio", {
|
||||
boxLabel: this.txtFirst,
|
||||
name: "asc-radio-slide"
|
||||
}), this.radioLast = Ext.create("Ext.form.field.Radio", {
|
||||
boxLabel: this.txtLast,
|
||||
name: "asc-radio-slide"
|
||||
}), {
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.radioSlide = Ext.create("Ext.form.field.Radio", {
|
||||
boxLabel: this.txtSlide,
|
||||
name: "asc-radio-slide"
|
||||
}), {
|
||||
xtype: "tbspacer",
|
||||
width: 10
|
||||
},
|
||||
this.cmbSlides]
|
||||
}]
|
||||
}]
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "container",
|
||||
height: 316,
|
||||
padding: "18 25",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.label.cloneConfig({
|
||||
text: me.textLinkType
|
||||
}), this.cmbLinkType, {
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
this.contExtLink, this.contIntLink, {
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
this.labelDisplay = this.label.cloneConfig({
|
||||
text: me.strDisplay
|
||||
}), this.txtLinkText, {
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
this.label.cloneConfig({
|
||||
text: me.textTipText
|
||||
}), this.txtLinkTip]
|
||||
},
|
||||
this._spacer.cloneConfig(), {
|
||||
xtype: "container",
|
||||
height: 40,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "center",
|
||||
pack: "center"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
width: 182,
|
||||
height: 24,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle"
|
||||
},
|
||||
items: [this.btnOk = Ext.widget("button", {
|
||||
cls: "asc-blue-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
margin: "0 5px 0 0",
|
||||
text: this.okButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
if (me.cmbLinkType.getValue() == c_oHyperlinkType.WebLink && !me.txtLink.isValid()) {
|
||||
me.txtLink.focus(true, 500);
|
||||
return;
|
||||
}
|
||||
if (!me.txtLinkText.isValid()) {
|
||||
me.txtLinkText.focus(true, 500);
|
||||
return;
|
||||
}
|
||||
this.fireEvent("onmodalresult", 1);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}), this.btnCancel = Ext.widget("button", {
|
||||
cls: "asc-darkgray-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
text: this.cancelButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.fireEvent("onmodalresult", 0);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
})]
|
||||
}]
|
||||
}];
|
||||
this.callParent(arguments);
|
||||
this.setTitle(this.textTitle);
|
||||
},
|
||||
afterRender: function () {
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setSettings: function (props, currentPage) {
|
||||
if (props) {
|
||||
var type = this.parseUrl(props.get_Value());
|
||||
this.cmbLinkType.setValue(type);
|
||||
if (props.get_Text() !== null) {
|
||||
this.txtLinkText.setValue(props.get_Text());
|
||||
this.txtLinkText.setDisabled(false);
|
||||
} else {
|
||||
this.txtLinkText.setValue(this.textDefault);
|
||||
this.txtLinkText.setDisabled(true);
|
||||
}
|
||||
this.isTextChanged = false;
|
||||
this.txtLinkTip.setValue(props.get_ToolTip());
|
||||
}
|
||||
},
|
||||
getSettings: function () {
|
||||
var props = new CHyperlinkProperty();
|
||||
if (this.cmbLinkType.getValue() == c_oHyperlinkType.InternalLink) {
|
||||
var url = "ppaction://hlink";
|
||||
var tip = "";
|
||||
var txttip = this.txtLinkTip.getValue();
|
||||
if (this.radioSlide.getValue()) {
|
||||
url = url + "sldjumpslide" + (this.cmbSlides.getValue() - 1);
|
||||
tip = this.txtSlide + " " + this.cmbSlides.getValue();
|
||||
} else {
|
||||
if (this.radioFirst.getValue()) {
|
||||
url = url + "showjump?jump=firstslide";
|
||||
tip = this.txtFirst;
|
||||
} else {
|
||||
if (this.radioLast.getValue()) {
|
||||
url = url + "showjump?jump=lastslide";
|
||||
tip = this.txtLast;
|
||||
} else {
|
||||
if (this.radioNext.getValue()) {
|
||||
url = url + "showjump?jump=nextslide";
|
||||
tip = this.txtNext;
|
||||
} else {
|
||||
if (this.radioPrev.getValue()) {
|
||||
url = url + "showjump?jump=previousslide";
|
||||
tip = this.txtPrev;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
props.put_Value(url);
|
||||
props.put_ToolTip((txttip !== "") ? txttip : tip);
|
||||
} else {
|
||||
var url = this.txtLink.getValue();
|
||||
if (!/(((^https?)|(^ftp)):\/\/)/i.test(url)) {
|
||||
url = "http://" + url;
|
||||
}
|
||||
props.put_Value(url);
|
||||
props.put_ToolTip(this.txtLinkTip.getValue());
|
||||
}
|
||||
if (!this.txtLinkText.isDisabled() && this.isTextChanged) {
|
||||
props.put_Text(this.txtLinkText.getValue());
|
||||
} else {
|
||||
props.put_Text(null);
|
||||
}
|
||||
return props;
|
||||
},
|
||||
parseUrl: function (url) {
|
||||
if (url === null || url === undefined || url == "") {
|
||||
return c_oHyperlinkType.WebLink;
|
||||
}
|
||||
var indAction = url.indexOf("ppaction://hlink");
|
||||
if (0 == indAction) {
|
||||
if (url == "ppaction://hlinkshowjump?jump=firstslide") {
|
||||
this.radioFirst.setValue(true);
|
||||
} else {
|
||||
if (url == "ppaction://hlinkshowjump?jump=lastslide") {
|
||||
this.radioLast.setValue(true);
|
||||
} else {
|
||||
if (url == "ppaction://hlinkshowjump?jump=nextslide") {
|
||||
this.radioNext.setValue(true);
|
||||
} else {
|
||||
if (url == "ppaction://hlinkshowjump?jump=previousslide") {
|
||||
this.radioPrev.setValue(true);
|
||||
} else {
|
||||
this.radioSlide.setValue(true);
|
||||
var mask = "ppaction://hlinksldjumpslide";
|
||||
var indSlide = url.indexOf(mask);
|
||||
if (0 == indSlide) {
|
||||
var slideNum = parseInt(url.substring(mask.length));
|
||||
if (slideNum >= 0 && slideNum < this.slides.length) {
|
||||
this.cmbSlides.setValue(slideNum + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return c_oHyperlinkType.InternalLink;
|
||||
} else {
|
||||
this.txtLink.setValue(url ? url : "");
|
||||
return c_oHyperlinkType.WebLink;
|
||||
}
|
||||
},
|
||||
textTitle: "Hyperlink Settings",
|
||||
textInternalLink: "Place In This Document",
|
||||
textExternalLink: "File or Web Page",
|
||||
textEmptyLink: "Enter link here",
|
||||
textEmptyDesc: "Enter caption here",
|
||||
textEmptyTooltip: "Enter tooltip here",
|
||||
txtSlide: "Slide",
|
||||
textLinkType: "Link Type",
|
||||
strDisplay: "Display",
|
||||
textTipText: "Screen Tip Text",
|
||||
strLinkTo: "Link To",
|
||||
txtEmpty: "This field is required",
|
||||
textInvalidRange: "ERROR! Invalid cells range",
|
||||
txtNotUrl: 'This field should be a URL in the format "http://www.example.com"',
|
||||
strPlaceInDocument: "Select a Place in This Document",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok",
|
||||
txtNext: "Next Slide",
|
||||
txtPrev: "Previous Slide",
|
||||
txtFirst: "First Slide",
|
||||
txtLast: "Last Slide"
|
||||
});
|
||||
@@ -1,259 +1,321 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.HyperlinkSettingsDialog", {
|
||||
extend: "Ext.window.Window",
|
||||
alias: "widget.pehyperlinksettingsdialog",
|
||||
requires: ["Ext.window.Window"],
|
||||
modal: true,
|
||||
closable: true,
|
||||
resizable: false,
|
||||
preventHeader: true,
|
||||
plain: true,
|
||||
height: 215,
|
||||
width: 350,
|
||||
padding: "20px",
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
listeners: {
|
||||
show: function () {
|
||||
this.txtUrl.focus(false, 500);
|
||||
}
|
||||
},
|
||||
constructor: function (config) {
|
||||
this.callParent(arguments);
|
||||
this.initConfig(config);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this.isTextChanged = false;
|
||||
var _btnOk = Ext.create("Ext.Button", {
|
||||
id: "addhyperlink-button-ok",
|
||||
text: this.okButtonText,
|
||||
width: 80,
|
||||
cls: "asc-blue-button",
|
||||
listeners: {
|
||||
click: function () {
|
||||
if (!this.txtUrl.isValid() || !this.txtDisplay.isValid()) {
|
||||
return;
|
||||
}
|
||||
this._modalresult = 1;
|
||||
this.fireEvent("onmodalresult", this._modalresult);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
var _btnCancel = Ext.create("Ext.Button", {
|
||||
id: "addhyperlink-button-cancel",
|
||||
text: this.cancelButtonText,
|
||||
width: 80,
|
||||
cls: "asc-darkgray-button",
|
||||
listeners: {
|
||||
click: function () {
|
||||
this._modalresult = 0;
|
||||
this.fireEvent("onmodalresult", this._modalresult);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this.txtUrl = Ext.create("Ext.form.Text", {
|
||||
id: "addhyperlink-text-url",
|
||||
width: 310,
|
||||
msgTarget: "side",
|
||||
validateOnChange: false,
|
||||
allowBlank: false,
|
||||
value: "http://",
|
||||
blankText: this.txtEmpty,
|
||||
regex: /(([\-\wа-яё]+\.)+[\wа-яё]{2,3}(\/[%\-\wа-яё]+(\.[\wа-яё]{2,})?)*(([\wа-яё\-\.\?\\\/+@&#;`~=%!]*)(\.[\wа-яё]{2,})?)*\/?)/i,
|
||||
regexText: this.txtNotUrl,
|
||||
listeners: {
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
_btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
_btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.txtDisplay = Ext.create("Ext.form.Text", {
|
||||
id: "addhyperlink-text-display",
|
||||
width: 310,
|
||||
msgTarget: "side",
|
||||
validateOnBlur: false,
|
||||
allowBlank: false,
|
||||
blankText: this.txtEmpty,
|
||||
value: "",
|
||||
listeners: {
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
_btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
_btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
},
|
||||
change: function (field, newValue, oldValue) {
|
||||
this.isTextChanged = true;
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this.txtTooltip = Ext.create("Ext.form.Text", {
|
||||
id: "addhyperlink-text-tooltip",
|
||||
width: 310,
|
||||
msgTarget: "side",
|
||||
validateOnBlur: false,
|
||||
allowBlank: true,
|
||||
value: "",
|
||||
listeners: {
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
_btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
_btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.addEvents("onmodalresult");
|
||||
this.items = [{
|
||||
xtype: "label",
|
||||
text: this.textUrl,
|
||||
width: "100%",
|
||||
style: "text-align:left"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this.txtUrl, {
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
text: this.textDisplay,
|
||||
width: "100%",
|
||||
style: "text-align:left"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this.txtDisplay, {
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
text: this.textTooltip,
|
||||
width: "100%",
|
||||
style: "text-align:left"
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this.txtTooltip, {
|
||||
xtype: "tbspacer",
|
||||
height: 8
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
width: 310,
|
||||
layout: "hbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "tbspacer",
|
||||
flex: 1
|
||||
},
|
||||
_btnOk, {
|
||||
xtype: "tbspacer",
|
||||
width: 5
|
||||
},
|
||||
_btnCancel]
|
||||
}];
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setSettings: function (props) {
|
||||
if (props) {
|
||||
if (props.get_Value()) {
|
||||
this.txtUrl.setValue(props.get_Value());
|
||||
} else {
|
||||
this.txtUrl.setValue("");
|
||||
}
|
||||
if (props.get_Text() !== null) {
|
||||
this.txtDisplay.setValue(props.get_Text());
|
||||
this.txtDisplay.setDisabled(false);
|
||||
} else {
|
||||
this.txtDisplay.setValue(this.textDefault);
|
||||
this.txtDisplay.setDisabled(true);
|
||||
}
|
||||
this.isTextChanged = false;
|
||||
this.txtTooltip.setValue(props.get_ToolTip());
|
||||
}
|
||||
},
|
||||
getSettings: function () {
|
||||
var props = new CHyperlinkProperty();
|
||||
var url = this.txtUrl.getValue().trim();
|
||||
if (!/(((^https?)|(^ftp)):\/\/)/i.test(url)) {
|
||||
url = "http://" + url;
|
||||
}
|
||||
props.put_Value(url);
|
||||
if (!this.txtDisplay.isDisabled() && this.isTextChanged) {
|
||||
props.put_Text(this.txtDisplay.getValue());
|
||||
} else {
|
||||
props.put_Text(null);
|
||||
}
|
||||
props.put_ToolTip(this.txtTooltip.getValue());
|
||||
return props;
|
||||
},
|
||||
textUrl: "Link to",
|
||||
textDisplay: "Display",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok",
|
||||
txtEmpty: "This field is required",
|
||||
txtNotUrl: 'This field should be a URL in the format "http://www.example.com"',
|
||||
textTooltip: "ScreenTip text",
|
||||
textDefault: "Selected text"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
if (Common === undefined) {
|
||||
var Common = {};
|
||||
}
|
||||
var c_oHyperlinkType = {
|
||||
InternalLink: 0,
|
||||
WebLink: 1
|
||||
};
|
||||
define(["common/main/lib/util/utils", "common/main/lib/component/InputField", "common/main/lib/component/ComboBox", "common/main/lib/component/RadioBox", "common/main/lib/component/Window"], function () {
|
||||
PE.Views.HyperlinkSettingsDialog = Common.UI.Window.extend(_.extend({
|
||||
options: {
|
||||
width: 350,
|
||||
style: "min-width: 230px;",
|
||||
cls: "modal-dlg",
|
||||
id: "window-hyperlink-settings"
|
||||
},
|
||||
initialize: function (options) {
|
||||
_.extend(this.options, {
|
||||
title: this.textTitle
|
||||
},
|
||||
options || {});
|
||||
this.template = ['<div class="box" style="height: 270px;">', '<div class="input-row">', '<label style="font-weight: bold;">' + this.textLinkType + "</label>", "</div>", '<div id="id-dlg-hyperlink-type" class="input-row" style="margin-bottom: 5px;"></div>', '<div id="id-external-link">', '<div class="input-row">', '<label style="font-weight: bold;">' + this.strLinkTo + " *</label>", "</div>", '<div id="id-dlg-hyperlink-url" class="input-row" style="margin-bottom: 5px;"></div>', "</div>", '<div id="id-internal-link" class="hidden" style="margin-top: 15px;">', '<div id="id-dlg-hyperlink-radio-next" style="display: block;margin-bottom: 5px;"></div>', '<div id="id-dlg-hyperlink-radio-prev" style="display: block;margin-bottom: 5px;"></div>', '<div id="id-dlg-hyperlink-radio-first" style="display: block;margin-bottom: 5px;"></div>', '<div id="id-dlg-hyperlink-radio-last" style="display: block;margin-bottom: 5px;"></div>', '<div id="id-dlg-hyperlink-radio-slide" style="display: inline-block;margin-bottom: 5px;margin-right: 10px;"></div>', '<div id="id-dlg-hyperlink-slide" style="display: inline-block;margin-bottom: 10px;"></div>', "</div>", '<div class="input-row">', '<label style="font-weight: bold;">' + this.strDisplay + "</label>", "</div>", '<div id="id-dlg-hyperlink-display" class="input-row" style="margin-bottom: 5px;"></div>', '<div class="input-row">', '<label style="font-weight: bold;">' + this.textTipText + "</label>", "</div>", '<div id="id-dlg-hyperlink-tip" class="input-row" style="margin-bottom: 5px;"></div>', "</div>", '<div class="footer right">', '<button class="btn normal dlg-btn primary" result="ok" style="margin-right: 10px;">' + this.okButtonText + "</button>", '<button class="btn normal dlg-btn" result="cancel">' + this.cancelButtonText + "</button>", "</div>"].join("");
|
||||
this.options.tpl = _.template(this.template, this.options);
|
||||
this.slides = this.options.slides;
|
||||
Common.UI.Window.prototype.initialize.call(this, this.options);
|
||||
},
|
||||
render: function () {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
var me = this,
|
||||
$window = this.getChild();
|
||||
me._arrTypeSrc = [{
|
||||
displayValue: me.textInternalLink,
|
||||
value: c_oHyperlinkType.InternalLink
|
||||
},
|
||||
{
|
||||
displayValue: me.textExternalLink,
|
||||
value: c_oHyperlinkType.WebLink
|
||||
}];
|
||||
me.cmbLinkType = new Common.UI.ComboBox({
|
||||
el: $("#id-dlg-hyperlink-type"),
|
||||
cls: "input-group-nr",
|
||||
style: "width: 100%;",
|
||||
menuStyle: "min-width: 318px;",
|
||||
editable: false,
|
||||
data: this._arrTypeSrc
|
||||
});
|
||||
me.cmbLinkType.setValue(me._arrTypeSrc[1].value);
|
||||
me.cmbLinkType.on("selected", _.bind(function (combo, record) {
|
||||
this.ShowHideElem(record.value);
|
||||
},
|
||||
me));
|
||||
me.inputUrl = new Common.UI.InputField({
|
||||
el: $("#id-dlg-hyperlink-url"),
|
||||
allowBlank: false,
|
||||
blankError: me.txtEmpty,
|
||||
validateOnBlur: false,
|
||||
style: "width: 100%;",
|
||||
validation: function (value) {
|
||||
me.isEmail = false;
|
||||
var isvalid = value.strongMatch(Common.Utils.hostnameRe); ! isvalid && (me.isEmail = isvalid = value.strongMatch(Common.Utils.emailRe)); ! isvalid && (isvalid = value.strongMatch(Common.Utils.ipRe)); ! isvalid && (isvalid = value.strongMatch(Common.Utils.localRe));
|
||||
if (isvalid) {
|
||||
return true;
|
||||
} else {
|
||||
return me.txtNotUrl;
|
||||
}
|
||||
}
|
||||
});
|
||||
me.inputDisplay = new Common.UI.InputField({
|
||||
el: $("#id-dlg-hyperlink-display"),
|
||||
allowBlank: true,
|
||||
validateOnBlur: false,
|
||||
style: "width: 100%;"
|
||||
}).on("changed:after", function () {
|
||||
me.isTextChanged = true;
|
||||
});
|
||||
me.inputTip = new Common.UI.InputField({
|
||||
el: $("#id-dlg-hyperlink-tip"),
|
||||
style: "width: 100%;"
|
||||
});
|
||||
me.radioNext = new Common.UI.RadioBox({
|
||||
el: $("#id-dlg-hyperlink-radio-next"),
|
||||
labelText: this.txtNext,
|
||||
name: "asc-radio-slide",
|
||||
checked: true
|
||||
});
|
||||
me.radioPrev = new Common.UI.RadioBox({
|
||||
el: $("#id-dlg-hyperlink-radio-prev"),
|
||||
labelText: this.txtPrev,
|
||||
name: "asc-radio-slide"
|
||||
});
|
||||
me.radioFirst = new Common.UI.RadioBox({
|
||||
el: $("#id-dlg-hyperlink-radio-first"),
|
||||
labelText: this.txtFirst,
|
||||
name: "asc-radio-slide"
|
||||
});
|
||||
me.radioLast = new Common.UI.RadioBox({
|
||||
el: $("#id-dlg-hyperlink-radio-last"),
|
||||
labelText: this.txtLast,
|
||||
name: "asc-radio-slide"
|
||||
});
|
||||
me.radioSlide = new Common.UI.RadioBox({
|
||||
el: $("#id-dlg-hyperlink-radio-slide"),
|
||||
labelText: this.txtSlide,
|
||||
name: "asc-radio-slide"
|
||||
});
|
||||
me.cmbSlides = new Common.UI.ComboBox({
|
||||
el: $("#id-dlg-hyperlink-slide"),
|
||||
cls: "input-group-nr",
|
||||
style: "width: 50px;",
|
||||
menuStyle: "min-width: 50px; max-height: 200px;",
|
||||
editable: false,
|
||||
data: this.slides
|
||||
});
|
||||
me.cmbSlides.setValue(0);
|
||||
me.cmbSlides.on("selected", _.bind(function (combo, record) {
|
||||
me.radioSlide.setValue(true);
|
||||
},
|
||||
me));
|
||||
$window.find(".dlg-btn").on("click", _.bind(this.onBtnClick, this));
|
||||
$window.find("input").on("keypress", _.bind(this.onKeyPress, this));
|
||||
me.externalPanel = $window.find("#id-external-link");
|
||||
me.internalPanel = $window.find("#id-internal-link");
|
||||
},
|
||||
setSettings: function (props) {
|
||||
if (props) {
|
||||
var me = this;
|
||||
var type = me.parseUrl(props.get_Value());
|
||||
me.cmbLinkType.setValue(type);
|
||||
me.ShowHideElem(type);
|
||||
if (props.get_Text() !== null) {
|
||||
me.inputDisplay.setValue(props.get_Text());
|
||||
me.inputDisplay.setDisabled(false);
|
||||
} else {
|
||||
this.inputDisplay.setValue(this.textDefault);
|
||||
this.inputDisplay.setDisabled(true);
|
||||
}
|
||||
this.isTextChanged = false;
|
||||
this.inputTip.setValue(props.get_ToolTip());
|
||||
if (type == c_oHyperlinkType.WebLink) {
|
||||
me.inputUrl.cmpEl.find("input").focus();
|
||||
}
|
||||
}
|
||||
},
|
||||
getSettings: function () {
|
||||
var me = this,
|
||||
props = new CHyperlinkProperty();
|
||||
var def_display = "";
|
||||
if (me.cmbLinkType.getValue() == c_oHyperlinkType.InternalLink) {
|
||||
var url = "ppaction://hlink";
|
||||
var tip = "";
|
||||
var txttip = me.inputTip.getValue();
|
||||
if (this.radioSlide.getValue()) {
|
||||
url = url + "sldjumpslide" + (this.cmbSlides.getValue());
|
||||
tip = this.txtSlide + " " + (this.cmbSlides.getValue() + 1);
|
||||
} else {
|
||||
if (this.radioFirst.getValue()) {
|
||||
url = url + "showjump?jump=firstslide";
|
||||
tip = this.txtFirst;
|
||||
} else {
|
||||
if (this.radioLast.getValue()) {
|
||||
url = url + "showjump?jump=lastslide";
|
||||
tip = this.txtLast;
|
||||
} else {
|
||||
if (this.radioNext.getValue()) {
|
||||
url = url + "showjump?jump=nextslide";
|
||||
tip = this.txtNext;
|
||||
} else {
|
||||
if (this.radioPrev.getValue()) {
|
||||
url = url + "showjump?jump=previousslide";
|
||||
tip = this.txtPrev;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
props.put_Value(url);
|
||||
props.put_ToolTip(_.isEmpty(txttip) ? tip : txttip);
|
||||
def_display = tip;
|
||||
} else {
|
||||
var url = $.trim(me.inputUrl.getValue());
|
||||
if (!/(((^https?)|(^ftp)):\/\/)|(^mailto:)/i.test(url)) {
|
||||
url = ((me.isEmail) ? "mailto:": "http://") + url;
|
||||
}
|
||||
props.put_Value(url);
|
||||
props.put_ToolTip(me.inputTip.getValue());
|
||||
def_display = url;
|
||||
}
|
||||
if (!me.inputDisplay.isDisabled() && (me.isTextChanged || _.isEmpty(me.inputDisplay.getValue()))) {
|
||||
if (_.isEmpty(me.inputDisplay.getValue())) {
|
||||
me.inputDisplay.setValue(def_display);
|
||||
}
|
||||
props.put_Text(me.inputDisplay.getValue());
|
||||
} else {
|
||||
props.put_Text(null);
|
||||
}
|
||||
return props;
|
||||
},
|
||||
onBtnClick: function (event) {
|
||||
if (event.currentTarget && event.currentTarget.attributes["result"]) {
|
||||
this._handleInput(event.currentTarget.attributes["result"].value);
|
||||
}
|
||||
},
|
||||
onKeyPress: function (event) {
|
||||
if (event.keyCode == Common.UI.Keys.RETURN) {
|
||||
this._handleInput("ok");
|
||||
return false;
|
||||
}
|
||||
},
|
||||
_handleInput: function (state) {
|
||||
if (this.options.handler) {
|
||||
if (state == "ok") {
|
||||
var checkurl = (this.cmbLinkType.getValue() == c_oHyperlinkType.WebLink) ? this.inputUrl.checkValidate() : true,
|
||||
checkdisp = this.inputDisplay.checkValidate();
|
||||
if (checkurl !== true) {
|
||||
this.inputUrl.cmpEl.find("input").focus();
|
||||
return;
|
||||
}
|
||||
if (checkdisp !== true) {
|
||||
this.inputDisplay.cmpEl.find("input").focus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
this.options.handler.call(this, this, state);
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
ShowHideElem: function (value) {
|
||||
this.externalPanel.toggleClass("hidden", value !== c_oHyperlinkType.WebLink);
|
||||
this.internalPanel.toggleClass("hidden", value !== c_oHyperlinkType.InternalLink);
|
||||
},
|
||||
parseUrl: function (url) {
|
||||
if (url === null || url === undefined || url == "") {
|
||||
return c_oHyperlinkType.WebLink;
|
||||
}
|
||||
var indAction = url.indexOf("ppaction://hlink");
|
||||
if (0 == indAction) {
|
||||
if (url == "ppaction://hlinkshowjump?jump=firstslide") {
|
||||
this.radioFirst.setValue(true);
|
||||
} else {
|
||||
if (url == "ppaction://hlinkshowjump?jump=lastslide") {
|
||||
this.radioLast.setValue(true);
|
||||
} else {
|
||||
if (url == "ppaction://hlinkshowjump?jump=nextslide") {
|
||||
this.radioNext.setValue(true);
|
||||
} else {
|
||||
if (url == "ppaction://hlinkshowjump?jump=previousslide") {
|
||||
this.radioPrev.setValue(true);
|
||||
} else {
|
||||
this.radioSlide.setValue(true);
|
||||
var mask = "ppaction://hlinksldjumpslide";
|
||||
var indSlide = url.indexOf(mask);
|
||||
if (0 == indSlide) {
|
||||
var slideNum = parseInt(url.substring(mask.length));
|
||||
if (slideNum >= 0 && slideNum < this.slides.length) {
|
||||
this.cmbSlides.setValue(slideNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return c_oHyperlinkType.InternalLink;
|
||||
} else {
|
||||
this.inputUrl.setValue(url ? url : "");
|
||||
return c_oHyperlinkType.WebLink;
|
||||
}
|
||||
},
|
||||
textTitle: "Hyperlink Settings",
|
||||
textInternalLink: "Place In This Document",
|
||||
textExternalLink: "File or Web Page",
|
||||
textEmptyLink: "Enter link here",
|
||||
textEmptyDesc: "Enter caption here",
|
||||
textEmptyTooltip: "Enter tooltip here",
|
||||
txtSlide: "Slide",
|
||||
textLinkType: "Link Type",
|
||||
strDisplay: "Display",
|
||||
textTipText: "Screen Tip Text",
|
||||
strLinkTo: "Link To",
|
||||
txtEmpty: "This field is required",
|
||||
txtNotUrl: 'This field should be a URL in the format "http://www.example.com"',
|
||||
strPlaceInDocument: "Select a Place in This Document",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok",
|
||||
txtNext: "Next Slide",
|
||||
txtPrev: "Previous Slide",
|
||||
txtFirst: "First Slide",
|
||||
txtLast: "Last Slide",
|
||||
textDefault: "Selected text"
|
||||
},
|
||||
PE.Views.HyperlinkSettingsDialog || {}));
|
||||
});
|
||||
@@ -1,338 +1,213 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.ImageSettings", {
|
||||
extend: "Common.view.AbstractSettingsPanel",
|
||||
alias: "widget.peimagesettings",
|
||||
height: 202,
|
||||
requires: ["Ext.ComponentQuery", "Ext.container.Container", "Ext.button.Button", "Ext.form.Label", "Ext.toolbar.Spacer", "Common.view.ImageFromUrlDialog", "PE.view.ImageSettingsAdvanced"],
|
||||
constructor: function (config) {
|
||||
this.callParent(arguments);
|
||||
this.initConfig(config);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this.title = this.txtTitle;
|
||||
this._initSettings = true;
|
||||
this._nRatio = 1;
|
||||
this._state = {
|
||||
Width: 0,
|
||||
Height: 0
|
||||
};
|
||||
this._btnOriginalSize = Ext.create("Ext.Button", {
|
||||
id: "image-button-original-size",
|
||||
text: this.textOriginalSize,
|
||||
width: 100,
|
||||
listeners: {
|
||||
click: this.setOriginalSize,
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this._btnInsertFromFile = Ext.create("Ext.Button", {
|
||||
id: "image-button-from-file",
|
||||
text: this.textFromFile,
|
||||
width: 85,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
if (this.api) {
|
||||
this.api.ChangeImageFromFile();
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this._btnInsertFromUrl = Ext.create("Ext.Button", {
|
||||
id: "image-button-from-url",
|
||||
text: this.textFromUrl,
|
||||
width: 85,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
var w = Ext.create("Common.view.ImageFromUrlDialog");
|
||||
w.addListener("onmodalresult", Ext.bind(this._onOpenImageFromURL, [this, w]), false);
|
||||
w.addListener("close", Ext.bind(function (cnt, eOpts) {
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
this));
|
||||
w.show();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this._SizePanel = Ext.create("Ext.container.Container", {
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 61,
|
||||
width: 200,
|
||||
items: [{
|
||||
xtype: "tbspacer",
|
||||
height: 8
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tdAttrs: {
|
||||
style: "padding-right: 8px;"
|
||||
}
|
||||
},
|
||||
defaults: {
|
||||
xtype: "container",
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 16,
|
||||
style: "float:left;"
|
||||
},
|
||||
items: [{
|
||||
items: [this.labelWidth = Ext.create("Ext.form.Label", {
|
||||
text: this.textWidth,
|
||||
width: 85
|
||||
})]
|
||||
},
|
||||
{
|
||||
items: [this.labelHeight = Ext.create("Ext.form.Label", {
|
||||
text: this.textHeight,
|
||||
width: 85
|
||||
})]
|
||||
}]
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 7
|
||||
},
|
||||
this._btnOriginalSize, {
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
}]
|
||||
});
|
||||
this._UrlPanel = Ext.create("Ext.container.Container", {
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 36,
|
||||
width: 200,
|
||||
items: [{
|
||||
xtype: "tbspacer",
|
||||
height: 8
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tdAttrs: {
|
||||
style: "padding-right: 8px;"
|
||||
}
|
||||
},
|
||||
items: [this._btnInsertFromFile, this._btnInsertFromUrl]
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 2
|
||||
}]
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "tbspacer",
|
||||
height: 9
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
style: "font-weight: bold;margin-top: 1px;",
|
||||
text: this.textSize
|
||||
},
|
||||
this._SizePanel, {
|
||||
xtype: "tbspacer",
|
||||
height: 5
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
width: "100%",
|
||||
height: 10,
|
||||
style: "padding-right: 10px;",
|
||||
html: '<div style="width: 100%; height: 40%; border-bottom: 1px solid #C7C7C7"></div>'
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
style: "font-weight: bold;margin-top: 1px;",
|
||||
text: this.textInsert
|
||||
},
|
||||
this._UrlPanel, {
|
||||
xtype: "tbspacer",
|
||||
height: 8
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
width: "100%",
|
||||
height: 10,
|
||||
style: "padding-right: 10px;",
|
||||
html: '<div style="width: 100%; height: 40%; border-bottom: 1px solid #C7C7C7"></div>'
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 20,
|
||||
width: 200,
|
||||
items: [{
|
||||
xtype: "box",
|
||||
html: '<div style="width:100%;text-align:center;padding-right:15px;"><label id="image-advanced-link" class="asc-advanced-link">' + this.textAdvanced + "</label></div>",
|
||||
listeners: {
|
||||
afterrender: function (cmp) {
|
||||
document.getElementById("image-advanced-link").onclick = Ext.bind(this._openAdvancedSettings, this);
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}]
|
||||
}];
|
||||
this.addEvents("editcomplete");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setOriginalSize: function () {
|
||||
if (this.api) {
|
||||
var imgsize = this.api.get_OriginalSizeImage();
|
||||
if (imgsize) {
|
||||
var w = imgsize.get_ImageWidth();
|
||||
var h = imgsize.get_ImageHeight();
|
||||
this.labelWidth.setText(this.textWidth + ": " + Ext.util.Format.round(Common.MetricSettings.fnRecalcFromMM(w), 1) + " " + Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
this.labelHeight.setText(this.textHeight + ": " + Ext.util.Format.round(Common.MetricSettings.fnRecalcFromMM(h), 1) + " " + Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
var properties = new CImgProperty();
|
||||
properties.put_Width(w);
|
||||
properties.put_Height(h);
|
||||
this.api.ImgApply(properties);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
}
|
||||
},
|
||||
setApi: function (api) {
|
||||
if (api == undefined) {
|
||||
return;
|
||||
}
|
||||
this.api = api;
|
||||
},
|
||||
ChangeSettings: function (props) {
|
||||
if (this._initSettings) {
|
||||
this.createDelayedElements();
|
||||
this._initSettings = false;
|
||||
}
|
||||
if (props) {
|
||||
var value = props.get_Width();
|
||||
if (Math.abs(this._state.Width - value) > 0.001 || (this._state.Width === null || value === null) && (this._state.Width !== value)) {
|
||||
this.labelWidth.setText(this.textWidth + ": " + ((value !== null) ? (Ext.util.Format.round(Common.MetricSettings.fnRecalcFromMM(value), 1) + " " + Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]) : "-"));
|
||||
this._state.Width = value;
|
||||
}
|
||||
value = props.get_Height();
|
||||
if (Math.abs(this._state.Height - value) > 0.001 || (this._state.Height === null || value === null) && (this._state.Height !== value)) {
|
||||
this.labelHeight.setText(this.textHeight + ": " + ((value !== null) ? (Ext.util.Format.round(Common.MetricSettings.fnRecalcFromMM(value), 1) + " " + Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]) : "-"));
|
||||
this._state.Height = value;
|
||||
}
|
||||
this._btnOriginalSize.setDisabled(props.get_ImageUrl() === null || props.get_ImageUrl() === undefined);
|
||||
}
|
||||
},
|
||||
_onOpenImageFromURL: function (mr) {
|
||||
var self = this[0];
|
||||
var url = this[1].txtUrl;
|
||||
if (mr == 1 && self.api) {
|
||||
var checkurl = url.value.replace(/ /g, "");
|
||||
if (checkurl != "") {
|
||||
var props = new CImgProperty();
|
||||
props.put_ImageUrl(url.value);
|
||||
self.api.ImgApply(props);
|
||||
}
|
||||
}
|
||||
},
|
||||
_openAdvancedSettings: function (e) {
|
||||
var me = this;
|
||||
var win;
|
||||
if (me.api) {
|
||||
var selectedElements = me.api.getSelectedElements();
|
||||
if (selectedElements && Ext.isArray(selectedElements)) {
|
||||
var elType, elValue;
|
||||
for (var i = selectedElements.length - 1; i >= 0; i--) {
|
||||
elType = selectedElements[i].get_ObjectType();
|
||||
elValue = selectedElements[i].get_ObjectValue();
|
||||
if (c_oAscTypeSelectElement.Image == elType) {
|
||||
win = Ext.create("PE.view.ImageSettingsAdvanced", {});
|
||||
win.updateMetricUnit();
|
||||
win.setSettings(elValue);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (win) {
|
||||
if (!me._btnOriginalSize.isDisabled()) {
|
||||
var imgsize = this.api.get_OriginalSizeImage();
|
||||
if (imgsize) {
|
||||
win.setSizeOriginal({
|
||||
width: imgsize.get_ImageWidth(),
|
||||
height: imgsize.get_ImageHeight()
|
||||
});
|
||||
}
|
||||
}
|
||||
win.addListener("onmodalresult", Ext.bind(function (o, mr, s) {
|
||||
if (mr == 1 && s) {
|
||||
me.api.ImgApply(s);
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
this), false);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
var value = Common.MetricSettings.fnRecalcFromMM(this._state.Width);
|
||||
this.labelWidth.setText(this.textWidth + ": " + Ext.util.Format.round(value, 1) + " " + Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
value = Common.MetricSettings.fnRecalcFromMM(this._state.Height);
|
||||
this.labelHeight.setText(this.textHeight + ": " + Ext.util.Format.round(value, 1) + " " + Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
this.updateMetricUnit();
|
||||
},
|
||||
textSize: "Size",
|
||||
textKeepRatio: "Constant Proportions",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
textOriginalSize: "Default Size",
|
||||
textUrl: "Image URL",
|
||||
textInsert: "Change Image",
|
||||
textFromUrl: "From URL",
|
||||
textFromFile: "From File",
|
||||
textAdvanced: "Show advanced settings",
|
||||
txtTitle: "Picture"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/ImageSettings.template", "jquery", "underscore", "backbone", "common/main/lib/component/Button", "common/main/lib/view/ImageFromUrlDialog", "presentationeditor/main/app/view/ImageSettingsAdvanced"], function (menuTemplate, $, _, Backbone) {
|
||||
PE.Views.ImageSettings = Backbone.View.extend(_.extend({
|
||||
el: "#id-image-settings",
|
||||
template: _.template(menuTemplate),
|
||||
events: {},
|
||||
options: {
|
||||
alias: "ImageSettings"
|
||||
},
|
||||
initialize: function () {
|
||||
var me = this;
|
||||
this._initSettings = true;
|
||||
this._state = {
|
||||
Width: 0,
|
||||
Height: 0,
|
||||
DisabledControls: false
|
||||
};
|
||||
this.lockedControls = [];
|
||||
this._locked = false;
|
||||
this._noApply = false;
|
||||
this._originalProps = null;
|
||||
this.render();
|
||||
this.labelWidth = $(this.el).find("#image-label-width");
|
||||
this.labelHeight = $(this.el).find("#image-label-height");
|
||||
this.btnOriginalSize = new Common.UI.Button({
|
||||
el: $("#image-button-original-size")
|
||||
});
|
||||
this.lockedControls.push(this.btnOriginalSize);
|
||||
this.btnInsertFromFile = new Common.UI.Button({
|
||||
el: $("#image-button-from-file")
|
||||
});
|
||||
this.lockedControls.push(this.btnInsertFromFile);
|
||||
this.btnInsertFromUrl = new Common.UI.Button({
|
||||
el: $("#image-button-from-url")
|
||||
});
|
||||
this.lockedControls.push(this.btnInsertFromUrl);
|
||||
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.el).on("click", "#image-advanced-link", _.bind(this.openAdvancedSettings, this));
|
||||
},
|
||||
render: function () {
|
||||
var el = $(this.el);
|
||||
el.html(this.template({
|
||||
scope: this
|
||||
}));
|
||||
this.linkAdvanced = $("#image-advanced-link");
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
return this;
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
var value = Common.Utils.Metric.fnRecalcFromMM(this._state.Width);
|
||||
this.labelWidth[0].innerHTML = this.textWidth + ": " + value.toFixed(1) + " " + Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
value = Common.Utils.Metric.fnRecalcFromMM(this._state.Height);
|
||||
this.labelHeight[0].innerHTML = this.textHeight + ": " + value.toFixed(1) + " " + Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
this.updateMetricUnit();
|
||||
},
|
||||
ChangeSettings: function (props) {
|
||||
if (this._initSettings) {
|
||||
this.createDelayedElements();
|
||||
this._initSettings = false;
|
||||
}
|
||||
this.disableControls(this._locked);
|
||||
if (props) {
|
||||
this._originalProps = new CImgProperty(props);
|
||||
var value = props.get_Width();
|
||||
if (Math.abs(this._state.Width - value) > 0.001) {
|
||||
this.labelWidth[0].innerHTML = this.textWidth + ": " + Common.Utils.Metric.fnRecalcFromMM(value).toFixed(1) + " " + Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
this._state.Width = value;
|
||||
}
|
||||
value = props.get_Height();
|
||||
if (Math.abs(this._state.Height - value) > 0.001) {
|
||||
this.labelHeight[0].innerHTML = this.textHeight + ": " + Common.Utils.Metric.fnRecalcFromMM(value).toFixed(1) + " " + Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
this._state.Height = value;
|
||||
}
|
||||
this.btnOriginalSize.setDisabled(props.get_ImageUrl() === null || props.get_ImageUrl() === undefined || this._locked);
|
||||
}
|
||||
},
|
||||
setOriginalSize: function () {
|
||||
if (this.api) {
|
||||
var imgsize = this.api.get_OriginalSizeImage();
|
||||
var w = imgsize.get_ImageWidth();
|
||||
var h = imgsize.get_ImageHeight();
|
||||
this.labelWidth[0].innerHTML = this.textWidth + ": " + Common.Utils.Metric.fnRecalcFromMM(w).toFixed(1) + " " + Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
this.labelHeight[0].innerHTML = this.textHeight + ": " + Common.Utils.Metric.fnRecalcFromMM(h).toFixed(1) + " " + Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
var properties = new CImgProperty();
|
||||
properties.put_Width(w);
|
||||
properties.put_Height(h);
|
||||
this.api.ImgApply(properties);
|
||||
this.fireEvent("editcomplete", this);
|
||||
}
|
||||
},
|
||||
insertFromUrl: function () {
|
||||
var me = this;
|
||||
(new Common.Views.ImageFromUrlDialog({
|
||||
handler: function (result, value) {
|
||||
if (result == "ok") {
|
||||
if (me.api) {
|
||||
var checkUrl = value.replace(/ /g, "");
|
||||
if (!_.isEmpty(checkUrl)) {
|
||||
var props = new CImgProperty();
|
||||
props.put_ImageUrl(checkUrl);
|
||||
me.api.ImgApply(props);
|
||||
}
|
||||
}
|
||||
}
|
||||
me.fireEvent("editcomplete", me);
|
||||
}
|
||||
})).show();
|
||||
},
|
||||
openAdvancedSettings: function (e) {
|
||||
if (this.linkAdvanced.hasClass("disabled")) {
|
||||
return;
|
||||
}
|
||||
var me = this;
|
||||
if (me.api && !this._locked) {
|
||||
var selectedElements = me.api.getSelectedElements();
|
||||
if (selectedElements && selectedElements.length > 0) {
|
||||
var elType, elValue;
|
||||
for (var i = selectedElements.length - 1; i >= 0; i--) {
|
||||
elType = selectedElements[i].get_ObjectType();
|
||||
elValue = selectedElements[i].get_ObjectValue();
|
||||
if (c_oAscTypeSelectElement.Image == elType) {
|
||||
var imgsizeOriginal;
|
||||
if (!me.btnOriginalSize.isDisabled()) {
|
||||
imgsizeOriginal = me.api.get_OriginalSizeImage();
|
||||
if (imgsizeOriginal) {
|
||||
imgsizeOriginal = {
|
||||
width: imgsizeOriginal.get_ImageWidth(),
|
||||
height: imgsizeOriginal.get_ImageHeight()
|
||||
};
|
||||
}
|
||||
} (new PE.Views.ImageSettingsAdvanced({
|
||||
imageProps: elValue,
|
||||
sizeOriginal: imgsizeOriginal,
|
||||
handler: function (result, value) {
|
||||
if (result == "ok") {
|
||||
if (me.api) {
|
||||
me.api.ImgApply(value.imageProps);
|
||||
}
|
||||
}
|
||||
me.fireEvent("editcomplete", me);
|
||||
}
|
||||
})).show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
setLocked: function (locked) {
|
||||
this._locked = locked;
|
||||
},
|
||||
disableControls: function (disable) {
|
||||
if (this._state.DisabledControls !== disable) {
|
||||
this._state.DisabledControls = disable;
|
||||
_.each(this.lockedControls, function (item) {
|
||||
item.setDisabled(disable);
|
||||
});
|
||||
this.linkAdvanced.toggleClass("disabled", disable);
|
||||
}
|
||||
},
|
||||
textSize: "Size",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
textOriginalSize: "Default Size",
|
||||
textInsert: "Insert Image",
|
||||
textFromUrl: "From URL",
|
||||
textFromFile: "From File",
|
||||
textAdvanced: "Show advanced settings"
|
||||
},
|
||||
PE.Views.ImageSettings || {}));
|
||||
});
|
||||
@@ -1,484 +1,240 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.ImageSettingsAdvanced", {
|
||||
extend: "Ext.window.Window",
|
||||
alias: "widget.peimagesettingsadvanced",
|
||||
requires: ["Common.component.MetricSpinner", "Ext.window.Window", "Ext.util.Cookies"],
|
||||
cls: "asc-advanced-settings-window",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
plain: true,
|
||||
constrain: true,
|
||||
height: 253,
|
||||
width: 516,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
_defaults: {
|
||||
sizeOriginal: {
|
||||
width: 0,
|
||||
height: 0
|
||||
},
|
||||
sizeMax: {
|
||||
width: 55.88,
|
||||
height: 55.88
|
||||
},
|
||||
properties: null
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
this.addEvents("onmodalresult");
|
||||
this._nRatio = 1;
|
||||
this._spnWidth = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "image-advanced-spin-width",
|
||||
readOnly: false,
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
step: 0.1,
|
||||
defaultUnit: "cm",
|
||||
value: "3 cm",
|
||||
width: 80,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (this._btnRatio.pressed) {
|
||||
var w = field.getNumberValue();
|
||||
var h = w / this._nRatio;
|
||||
if (h > this._defaults.sizeMax.height) {
|
||||
h = this._defaults.sizeMax.height;
|
||||
w = h * this._nRatio;
|
||||
this._spnWidth.suspendEvents(false);
|
||||
this._spnWidth.setValue(w);
|
||||
this._spnWidth.resumeEvents();
|
||||
}
|
||||
this._spnHeight.suspendEvents(false);
|
||||
this._spnHeight.setValue(h);
|
||||
this._spnHeight.resumeEvents();
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this._spnHeight = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "image-advanced-span-height",
|
||||
readOnly: false,
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
step: 0.1,
|
||||
defaultUnit: "cm",
|
||||
value: "3 cm",
|
||||
width: 80,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
var h = field.getNumberValue(),
|
||||
w = null;
|
||||
if (this._btnRatio.pressed) {
|
||||
w = h * this._nRatio;
|
||||
if (w > this._defaults.sizeMax.width) {
|
||||
w = this._defaults.sizeMax.width;
|
||||
h = w / this._nRatio;
|
||||
this._spnHeight.suspendEvents(false);
|
||||
this._spnHeight.setValue(h);
|
||||
this._spnHeight.resumeEvents();
|
||||
}
|
||||
this._spnWidth.suspendEvents(false);
|
||||
this._spnWidth.setValue(w);
|
||||
this._spnWidth.resumeEvents();
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this._btnOriginalSize = Ext.create("Ext.Button", {
|
||||
id: "image-advanced-button-original-size",
|
||||
text: this.textOriginalSize,
|
||||
width: 100,
|
||||
height: 22,
|
||||
style: "margin: 0 0 0 7px",
|
||||
listeners: {
|
||||
click: function (o, e) {
|
||||
this._spnWidth.suspendEvents(false);
|
||||
this._spnHeight.suspendEvents(false);
|
||||
this._spnWidth.setValue(this._defaults.sizeOriginal.width);
|
||||
this._spnHeight.setValue(this._defaults.sizeOriginal.height);
|
||||
this._spnWidth.resumeEvents();
|
||||
this._spnHeight.resumeEvents();
|
||||
this._nRatio = this._defaults.sizeOriginal.width / this._defaults.sizeOriginal.height;
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
});
|
||||
this._btnRatio = Ext.create("Ext.Button", {
|
||||
id: "image-advanced-button-ratio",
|
||||
iconCls: "advanced-btn-ratio",
|
||||
enableToggle: true,
|
||||
width: 22,
|
||||
height: 22,
|
||||
style: "margin: 0 0 0 6px;",
|
||||
tooltip: this.textKeepRatio,
|
||||
toggleHandler: Ext.bind(function (btn) {
|
||||
if (btn.pressed && this._spnHeight.getNumberValue() > 0) {
|
||||
this._nRatio = this._spnWidth.getNumberValue() / this._spnHeight.getNumberValue();
|
||||
}
|
||||
},
|
||||
this)
|
||||
});
|
||||
this._spacer = Ext.create("Ext.toolbar.Spacer", {
|
||||
width: "100%",
|
||||
height: 10,
|
||||
html: '<div style="width: 100%; height: 40%; border-bottom: 1px solid #C7C7C7"></div>'
|
||||
});
|
||||
this._spnX = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "image-span-x",
|
||||
readOnly: false,
|
||||
maxValue: 55.87,
|
||||
minValue: -55.87,
|
||||
step: 0.1,
|
||||
defaultUnit: "cm",
|
||||
value: "0 cm",
|
||||
width: 85
|
||||
});
|
||||
this._spnY = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "image-span-y",
|
||||
readOnly: false,
|
||||
maxValue: 55.87,
|
||||
minValue: -55.87,
|
||||
step: 0.1,
|
||||
defaultUnit: "cm",
|
||||
value: "0 cm",
|
||||
width: 85
|
||||
});
|
||||
this._contPosition = Ext.create("Ext.Container", {
|
||||
cls: "image-advanced-container",
|
||||
padding: "0 10",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tdAttrs: {
|
||||
style: "padding-right: 8px;"
|
||||
}
|
||||
},
|
||||
defaults: {
|
||||
xtype: "container",
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 40,
|
||||
style: "float:left;"
|
||||
},
|
||||
items: [{
|
||||
width: 113,
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: "X",
|
||||
width: 85
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this._spnX]
|
||||
},
|
||||
{
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: "Y",
|
||||
width: 85
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this._spnY]
|
||||
}]
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "container",
|
||||
height: 157,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
width: 160,
|
||||
padding: "18 0 0 0",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
defaults: {
|
||||
xtype: "container",
|
||||
padding: "0 10 0 0",
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle",
|
||||
pack: "end"
|
||||
}
|
||||
},
|
||||
items: [{
|
||||
height: 54,
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.textSize,
|
||||
style: "font-weight: bold;"
|
||||
}]
|
||||
},
|
||||
{
|
||||
height: 80,
|
||||
cls: "image-advanced-container",
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.textPosition,
|
||||
style: "font-weight: bold;"
|
||||
}]
|
||||
}]
|
||||
},
|
||||
{
|
||||
xtype: "box",
|
||||
cls: "advanced-settings-separator",
|
||||
height: "100%",
|
||||
width: 8
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
padding: "18 0 0 10",
|
||||
width: 330,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
padding: "0 10",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2
|
||||
},
|
||||
defaults: {
|
||||
xtype: "container",
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 43,
|
||||
style: "float:left;"
|
||||
},
|
||||
items: [{
|
||||
width: 108,
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.textWidth,
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
width: 108,
|
||||
layout: {
|
||||
type: "hbox"
|
||||
},
|
||||
items: [this._spnWidth, this._btnRatio]
|
||||
}]
|
||||
},
|
||||
{
|
||||
width: 195,
|
||||
margin: "0 0 0 7",
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.textHeight,
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
width: 195,
|
||||
layout: {
|
||||
type: "hbox"
|
||||
},
|
||||
items: [this._spnHeight, this._btnOriginalSize]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
this._spacer.cloneConfig({
|
||||
style: "margin: 16px 0 11px 0;",
|
||||
height: 6
|
||||
}), this._contPosition]
|
||||
}]
|
||||
},
|
||||
this._spacer.cloneConfig({
|
||||
style: "margin: 0 18px"
|
||||
}), {
|
||||
xtype: "container",
|
||||
height: 40,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "center",
|
||||
pack: "center"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
width: 182,
|
||||
height: 24,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle"
|
||||
},
|
||||
items: [this.btnOk = Ext.widget("button", {
|
||||
cls: "asc-blue-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
margin: "0 5px 0 0",
|
||||
text: this.okButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.fireEvent("onmodalresult", this, 1, this.getSettings());
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}), this.btnCancel = Ext.widget("button", {
|
||||
cls: "asc-darkgray-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
text: this.cancelButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.fireEvent("onmodalresult", this, 0);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
})]
|
||||
}]
|
||||
}];
|
||||
this.callParent(arguments);
|
||||
},
|
||||
afterRender: function () {
|
||||
this.callParent(arguments);
|
||||
this._setDefaults(this._defaults.properties);
|
||||
this.setTitle(this.textTitle);
|
||||
},
|
||||
setSizeOriginal: function (p) {
|
||||
this._defaults.sizeOriginal.width = Common.MetricSettings.fnRecalcFromMM(p.width);
|
||||
this._defaults.sizeOriginal.height = Common.MetricSettings.fnRecalcFromMM(p.height);
|
||||
},
|
||||
setSizeMax: function (p) {
|
||||
this._defaults.sizeMax.width = Common.MetricSettings.fnRecalcFromMM(p.width);
|
||||
this._defaults.sizeMax.height = Common.MetricSettings.fnRecalcFromMM(p.height);
|
||||
},
|
||||
setSettings: function (props) {
|
||||
this._defaults.properties = props;
|
||||
},
|
||||
_setDefaults: function (props) {
|
||||
if (props) {
|
||||
this._spnWidth.suspendEvents(false);
|
||||
this._spnHeight.suspendEvents(false);
|
||||
this._spnWidth.setMaxValue(this._defaults.sizeMax.width);
|
||||
this._spnHeight.setMaxValue(this._defaults.sizeMax.height);
|
||||
this._spnWidth.setValue((props.get_Width() !== null) ? Common.MetricSettings.fnRecalcFromMM(props.get_Width()).toFixed(2) : "");
|
||||
this._spnHeight.setValue((props.get_Height() !== null) ? Common.MetricSettings.fnRecalcFromMM(props.get_Height()).toFixed(2) : "");
|
||||
this._spnWidth.resumeEvents();
|
||||
this._spnHeight.resumeEvents();
|
||||
if (props.get_Position()) {
|
||||
var Position = {
|
||||
X: props.get_Position().get_X(),
|
||||
Y: props.get_Position().get_Y()
|
||||
};
|
||||
if (Position.X !== null && Position.X !== undefined) {
|
||||
this._spnX.setValue(Common.MetricSettings.fnRecalcFromMM(Position.X));
|
||||
}
|
||||
if (Position.Y !== null && Position.Y !== undefined) {
|
||||
this._spnY.setValue(Common.MetricSettings.fnRecalcFromMM(Position.Y));
|
||||
}
|
||||
} else {
|
||||
this._spnX.setValue("");
|
||||
this._spnY.setValue("");
|
||||
}
|
||||
if (props.get_Height() > 0) {
|
||||
this._nRatio = props.get_Width() / props.get_Height();
|
||||
}
|
||||
var value = window.localStorage.getItem("pe-settings-imageratio");
|
||||
if (value === null || parseInt(value) == 1) {
|
||||
this._btnRatio.toggle(true);
|
||||
}
|
||||
this._btnOriginalSize.setDisabled(props.get_ImageUrl() === null || props.get_ImageUrl() === undefined);
|
||||
}
|
||||
},
|
||||
getSettings: function () {
|
||||
window.localStorage.setItem("pe-settings-imageratio", (this._btnRatio.pressed) ? 1 : 0);
|
||||
var properties = new CImgProperty();
|
||||
if (this._spnWidth.getValue() !== "") {
|
||||
properties.put_Width(Common.MetricSettings.fnRecalcToMM(this._spnWidth.getNumberValue()));
|
||||
}
|
||||
if (this._spnHeight.getValue() !== "") {
|
||||
properties.put_Height(Common.MetricSettings.fnRecalcToMM(this._spnHeight.getNumberValue()));
|
||||
}
|
||||
var Position = new CPosition();
|
||||
if (this._spnX.getValue() !== "") {
|
||||
Position.put_X(Common.MetricSettings.fnRecalcToMM(this._spnX.getNumberValue()));
|
||||
}
|
||||
if (this._spnY.getValue() !== "") {
|
||||
Position.put_Y(Common.MetricSettings.fnRecalcToMM(this._spnY.getNumberValue()));
|
||||
}
|
||||
properties.put_Position(Position);
|
||||
return properties;
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
var spinners = this.query("commonmetricspinner");
|
||||
if (spinners) {
|
||||
for (var i = 0; i < spinners.length; i++) {
|
||||
var spinner = spinners[i];
|
||||
spinner.setDefaultUnit(Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
spinner.setStep(Common.MetricSettings.getCurrentMetric() == Common.MetricSettings.c_MetricUnits.cm ? 0.01 : 1);
|
||||
}
|
||||
}
|
||||
this._defaults.sizeMax.width = Common.MetricSettings.fnRecalcFromMM(this._defaults.sizeMax.width * 10);
|
||||
this._defaults.sizeMax.height = Common.MetricSettings.fnRecalcFromMM(this._defaults.sizeMax.height * 10);
|
||||
},
|
||||
textOriginalSize: "Default Size",
|
||||
textPosition: "Position",
|
||||
textSize: "Size",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
textTitle: "Image - Advanced Settings",
|
||||
textKeepRatio: "Constant Proportions",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/ImageSettingsAdvanced.template", "common/main/lib/view/AdvancedSettingsWindow", "common/main/lib/component/MetricSpinner"], function (contentTemplate) {
|
||||
PE.Views.ImageSettingsAdvanced = Common.Views.AdvancedSettingsWindow.extend(_.extend({
|
||||
options: {
|
||||
alias: "ImageSettingsAdvanced",
|
||||
contentWidth: 340,
|
||||
height: 235,
|
||||
sizeOriginal: {
|
||||
width: 0,
|
||||
height: 0
|
||||
},
|
||||
sizeMax: {
|
||||
width: 55.88,
|
||||
height: 55.88
|
||||
}
|
||||
},
|
||||
initialize: function (options) {
|
||||
_.extend(this.options, {
|
||||
title: this.textTitle,
|
||||
template: ['<div class="box" style="height:' + (this.options.height - 85) + 'px;">', '<div class="menu-panel" style="overflow: hidden;">', '<div style="height: 70px; line-height: 70px;" class="div-category">' + this.textSize + "</div>", '<div style="height: 75px; line-height: 75px;" class="div-category">' + this.textPosition + "</div>", "</div>", '<div class="separator"/>', '<div class="content-panel">' + _.template(contentTemplate)({
|
||||
scope: this
|
||||
}) + "</div>", "</div>", '<div class="separator horizontal"/>', '<div class="footer center">', '<button class="btn normal dlg-btn primary" result="ok" style="margin-right: 10px; width: 86px;">' + this.okButtonText + "</button>", '<button class="btn normal dlg-btn" result="cancel" style="width: 86px;">' + this.cancelButtonText + "</button>", "</div>"].join("")
|
||||
},
|
||||
options);
|
||||
Common.Views.AdvancedSettingsWindow.prototype.initialize.call(this, this.options);
|
||||
this.spinners = [];
|
||||
this._nRatio = 1;
|
||||
this._originalProps = this.options.imageProps;
|
||||
},
|
||||
render: function () {
|
||||
Common.Views.AdvancedSettingsWindow.prototype.render.call(this);
|
||||
var me = this;
|
||||
this.spnWidth = new Common.UI.MetricSpinner({
|
||||
el: $("#image-advanced-spin-width"),
|
||||
step: 0.1,
|
||||
width: 80,
|
||||
defaultUnit: "cm",
|
||||
value: "3 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0
|
||||
});
|
||||
this.spnWidth.on("change", _.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (this.btnRatio.pressed) {
|
||||
var w = field.getNumberValue();
|
||||
var h = w / this._nRatio;
|
||||
if (h > this.sizeMax.height) {
|
||||
h = this.sizeMax.height;
|
||||
w = h * this._nRatio;
|
||||
this.spnWidth.setValue(w, true);
|
||||
}
|
||||
this.spnHeight.setValue(h, true);
|
||||
}
|
||||
},
|
||||
this));
|
||||
this.spinners.push(this.spnWidth);
|
||||
this.spnHeight = new Common.UI.MetricSpinner({
|
||||
el: $("#image-advanced-spin-height"),
|
||||
step: 0.1,
|
||||
width: 80,
|
||||
defaultUnit: "cm",
|
||||
value: "3 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0
|
||||
});
|
||||
this.spnHeight.on("change", _.bind(function (field, newValue, oldValue, eOpts) {
|
||||
var h = field.getNumberValue(),
|
||||
w = null;
|
||||
if (this.btnRatio.pressed) {
|
||||
w = h * this._nRatio;
|
||||
if (w > this.sizeMax.width) {
|
||||
w = this.sizeMax.width;
|
||||
h = w / this._nRatio;
|
||||
this.spnHeight.setValue(h, true);
|
||||
}
|
||||
this.spnWidth.setValue(w, true);
|
||||
}
|
||||
},
|
||||
this));
|
||||
this.spinners.push(this.spnHeight);
|
||||
this.btnOriginalSize = new Common.UI.Button({
|
||||
el: $("#image-advanced-button-original-size")
|
||||
});
|
||||
this.btnOriginalSize.on("click", _.bind(function (btn, e) {
|
||||
this.spnWidth.setValue(this.sizeOriginal.width, true);
|
||||
this.spnHeight.setValue(this.sizeOriginal.height, true);
|
||||
this._nRatio = this.sizeOriginal.width / this.sizeOriginal.height;
|
||||
},
|
||||
this));
|
||||
this.btnRatio = new Common.UI.Button({
|
||||
cls: "btn-toolbar btn-toolbar-default",
|
||||
iconCls: "advanced-btn-ratio",
|
||||
style: "margin-bottom: 1px;",
|
||||
enableToggle: true,
|
||||
hint: this.textKeepRatio
|
||||
});
|
||||
this.btnRatio.render($("#image-advanced-button-ratio"));
|
||||
this.btnRatio.on("click", _.bind(function (btn, e) {
|
||||
if (btn.pressed && this.spnHeight.getNumberValue() > 0) {
|
||||
this._nRatio = this.spnWidth.getNumberValue() / this.spnHeight.getNumberValue();
|
||||
}
|
||||
},
|
||||
this));
|
||||
this.spnX = new Common.UI.MetricSpinner({
|
||||
el: $("#image-advanced-spin-x"),
|
||||
step: 0.1,
|
||||
width: 85,
|
||||
defaultUnit: "cm",
|
||||
defaultValue: 0,
|
||||
value: "0 cm",
|
||||
maxValue: 55.87,
|
||||
minValue: -55.87
|
||||
});
|
||||
this.spinners.push(this.spnX);
|
||||
this.spnY = new Common.UI.MetricSpinner({
|
||||
el: $("#image-advanced-spin-y"),
|
||||
step: 0.1,
|
||||
width: 85,
|
||||
defaultUnit: "cm",
|
||||
defaultValue: 0,
|
||||
value: "0 cm",
|
||||
maxValue: 55.87,
|
||||
minValue: -55.87
|
||||
});
|
||||
this.spinners.push(this.spnY);
|
||||
this.afterRender();
|
||||
},
|
||||
afterRender: function () {
|
||||
this.updateMetricUnit();
|
||||
this._setDefaults(this._originalProps);
|
||||
},
|
||||
_setDefaults: function (props) {
|
||||
if (props) {
|
||||
this.spnWidth.setMaxValue(this.sizeMax.width);
|
||||
this.spnHeight.setMaxValue(this.sizeMax.height);
|
||||
this.spnWidth.setValue(Common.Utils.Metric.fnRecalcFromMM(props.get_Width()).toFixed(2), true);
|
||||
this.spnHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(props.get_Height()).toFixed(2), true);
|
||||
this.btnOriginalSize.setDisabled(props.get_ImageUrl() === null || props.get_ImageUrl() === undefined);
|
||||
var value = window.localStorage.getItem("pe-settings-imageratio");
|
||||
if (value === null || parseInt(value) == 1) {
|
||||
this.btnRatio.toggle(true);
|
||||
}
|
||||
if (props.get_Position()) {
|
||||
var Position = {
|
||||
X: props.get_Position().get_X(),
|
||||
Y: props.get_Position().get_Y()
|
||||
};
|
||||
if (Position.X !== null && Position.X !== undefined) {
|
||||
this.spnX.setValue(Common.Utils.Metric.fnRecalcFromMM(Position.X), true);
|
||||
}
|
||||
if (Position.Y !== null && Position.Y !== undefined) {
|
||||
this.spnY.setValue(Common.Utils.Metric.fnRecalcFromMM(Position.Y), true);
|
||||
}
|
||||
} else {
|
||||
this.spnX.setValue("", true);
|
||||
this.spnY.setValue("", true);
|
||||
}
|
||||
}
|
||||
},
|
||||
getSettings: function () {
|
||||
window.localStorage.setItem("pe-settings-imageratio", (this.btnRatio.pressed) ? 1 : 0);
|
||||
var properties = new CImgProperty();
|
||||
if (this.spnHeight.getValue() !== "") {
|
||||
properties.put_Height(Common.Utils.Metric.fnRecalcToMM(this.spnHeight.getNumberValue()));
|
||||
}
|
||||
if (this.spnWidth.getValue() !== "") {
|
||||
properties.put_Width(Common.Utils.Metric.fnRecalcToMM(this.spnWidth.getNumberValue()));
|
||||
}
|
||||
var Position = new CPosition();
|
||||
if (this.spnX.getValue() !== "") {
|
||||
Position.put_X(Common.Utils.Metric.fnRecalcToMM(this.spnX.getNumberValue()));
|
||||
}
|
||||
if (this.spnY.getValue() !== "") {
|
||||
Position.put_Y(Common.Utils.Metric.fnRecalcToMM(this.spnY.getNumberValue()));
|
||||
}
|
||||
properties.put_Position(Position);
|
||||
return {
|
||||
imageProps: properties
|
||||
};
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
if (this.spinners) {
|
||||
for (var i = 0; i < this.spinners.length; i++) {
|
||||
var spinner = this.spinners[i];
|
||||
spinner.setDefaultUnit(Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()]);
|
||||
spinner.setStep(Common.Utils.Metric.getCurrentMetric() == Common.Utils.Metric.c_MetricUnits.cm ? 0.1 : 1);
|
||||
}
|
||||
}
|
||||
this.sizeMax = {
|
||||
width: Common.Utils.Metric.fnRecalcFromMM(this.options.sizeMax.width * 10),
|
||||
height: Common.Utils.Metric.fnRecalcFromMM(this.options.sizeMax.height * 10)
|
||||
};
|
||||
if (this.options.sizeOriginal) {
|
||||
this.sizeOriginal = {
|
||||
width: Common.Utils.Metric.fnRecalcFromMM(this.options.sizeOriginal.width),
|
||||
height: Common.Utils.Metric.fnRecalcFromMM(this.options.sizeOriginal.height)
|
||||
};
|
||||
}
|
||||
},
|
||||
textOriginalSize: "Default Size",
|
||||
textPosition: "Position",
|
||||
textSize: "Size",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
textTitle: "Image - Advanced Settings",
|
||||
textKeepRatio: "Constant Proportions",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok"
|
||||
},
|
||||
PE.Views.ImageSettingsAdvanced || {}));
|
||||
});
|
||||
@@ -1,194 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.InsertTableDialog", {
|
||||
extend: "Ext.window.Window",
|
||||
alias: "widget.peinserttabledialog",
|
||||
requires: ["Ext.window.Window"],
|
||||
modal: true,
|
||||
closable: false,
|
||||
resizable: false,
|
||||
preventHeader: true,
|
||||
plain: true,
|
||||
height: 172,
|
||||
width: 236,
|
||||
padding: "20px",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
listeners: {
|
||||
show: function () {
|
||||
this.udColumns.focus(false, 500);
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
this.addEvents("onmodalresult");
|
||||
this.items = [{
|
||||
xtype: "label",
|
||||
text: this.labelTitle || this.txtTitle,
|
||||
style: "margin: 0 0 15px 0; font-size: 15px;"
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 32,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "label",
|
||||
padding: "4px 0 0 0",
|
||||
width: 130,
|
||||
text: this.txtColumns
|
||||
},
|
||||
this.udColumns = Ext.widget("numberfield", {
|
||||
minValue: 1,
|
||||
maxValue: 63,
|
||||
value: 2,
|
||||
step: 1,
|
||||
width: 64,
|
||||
allowDecimals: false,
|
||||
validateOnBlur: false,
|
||||
msgTarget: "side",
|
||||
minText: this.txtMinText,
|
||||
maxText: this.txtMaxText,
|
||||
listeners: {
|
||||
specialkey: Ext.bind(function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
this.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
this.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
})]
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 42,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "label",
|
||||
padding: "4px 0 0 0",
|
||||
width: 130,
|
||||
text: this.txtRows
|
||||
},
|
||||
this.udRows = Ext.widget("numberfield", {
|
||||
minValue: 1,
|
||||
maxValue: 100,
|
||||
value: 2,
|
||||
step: 1,
|
||||
width: 64,
|
||||
allowDecimals: false,
|
||||
validateOnBlur: false,
|
||||
msgTarget: "side",
|
||||
minText: this.txtMinText,
|
||||
maxText: this.txtMaxText,
|
||||
listeners: {
|
||||
specialkey: Ext.bind(function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
this.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
this.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
})]
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 30,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "center"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
width: 182,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle"
|
||||
},
|
||||
items: [this.btnOk = Ext.widget("button", {
|
||||
cls: "asc-blue-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
margin: "0 5px 0 0",
|
||||
text: this.okButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
var valid_cols = this.udColumns.isValid();
|
||||
var valid_rows = this.udRows.isValid();
|
||||
if (!valid_cols || !valid_rows) {
|
||||
return;
|
||||
}
|
||||
this.fireEvent("onmodalresult", this, 1, [this.udColumns.value, this.udRows.value]);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}), this.btnCancel = Ext.widget("button", {
|
||||
cls: "asc-darkgray-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
text: this.cancelButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.fireEvent("onmodalresult", this, 0);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
})]
|
||||
}]
|
||||
}];
|
||||
this.callParent(arguments);
|
||||
},
|
||||
txtTitle: "Table size",
|
||||
txtColumns: "Number of Columns",
|
||||
txtRows: "Number of Rows",
|
||||
textInvalidRowsCols: "You need to specify valid rows and columns count.",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok",
|
||||
txtMinText: "The minimum value for this field is {0}",
|
||||
txtMaxText: "The maximum value for this field is {0}"
|
||||
});
|
||||
286
OfficeWeb/apps/presentationeditor/main/app/view/LeftMenu.js
Normal file
286
OfficeWeb/apps/presentationeditor/main/app/view/LeftMenu.js
Normal file
@@ -0,0 +1,286 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/LeftMenu.template", "jquery", "underscore", "backbone", "common/main/lib/component/Button", "common/main/lib/view/About", "common/main/lib/view/About", "common/main/lib/view/Comments", "common/main/lib/view/Chat", "common/main/lib/view/SearchDialog", "presentationeditor/main/app/view/FileMenu"], function (menuTemplate, $, _, Backbone) {
|
||||
var SCALE_MIN = 40;
|
||||
var MENU_SCALE_PART = 300;
|
||||
PE.Views.LeftMenu = Backbone.View.extend(_.extend({
|
||||
el: "#left-menu",
|
||||
template: _.template(menuTemplate),
|
||||
events: function () {
|
||||
return {
|
||||
"click #left-btn-support": function () {
|
||||
window.open("http://feedback.onlyoffice.com/");
|
||||
},
|
||||
"click #left-btn-comments": _.bind(this.onCoauthOptions, this),
|
||||
"click #left-btn-chat": _.bind(this.onCoauthOptions, this)
|
||||
};
|
||||
},
|
||||
initialize: function () {
|
||||
this.minimizedMode = true;
|
||||
},
|
||||
render: function () {
|
||||
var el = $(this.el);
|
||||
el.html(this.template({}));
|
||||
this.btnFile = new Common.UI.Button({
|
||||
action: "file",
|
||||
el: $("#left-btn-file"),
|
||||
hint: this.tipFile + Common.Utils.String.platformKey("Alt+F"),
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "leftMenuGroup"
|
||||
});
|
||||
this.btnSearch = new Common.UI.Button({
|
||||
action: "search",
|
||||
el: $("#left-btn-search"),
|
||||
hint: this.tipSearch + Common.Utils.String.platformKey("Ctrl+F"),
|
||||
disabled: true,
|
||||
enableToggle: true
|
||||
});
|
||||
this.btnThumbs = new Common.UI.Button({
|
||||
action: "thumbs",
|
||||
el: $("#left-btn-thumbs"),
|
||||
hint: this.tipSlides,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "leftMenuGroup"
|
||||
});
|
||||
this.btnAbout = new Common.UI.Button({
|
||||
action: "about",
|
||||
el: $("#left-btn-about"),
|
||||
hint: this.tipAbout,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "leftMenuGroup"
|
||||
});
|
||||
this.btnSupport = new Common.UI.Button({
|
||||
action: "support",
|
||||
el: $("#left-btn-support"),
|
||||
hint: this.tipSupport,
|
||||
disabled: true
|
||||
});
|
||||
this.btnComments = new Common.UI.Button({
|
||||
el: $("#left-btn-comments"),
|
||||
hint: this.tipComments + Common.Utils.String.platformKey("Ctrl+Shift+H"),
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "leftMenuGroup"
|
||||
});
|
||||
this.btnChat = new Common.UI.Button({
|
||||
el: $("#left-btn-chat"),
|
||||
hint: this.tipChat + Common.Utils.String.platformKey("Ctrl+Alt+Q", null, function (string) {
|
||||
if (Common.Utils.isMac) {
|
||||
string = string.replace(/Ctrl|ctrl/g, "⌃");
|
||||
}
|
||||
return string;
|
||||
}),
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "leftMenuGroup"
|
||||
});
|
||||
this.btnComments.hide();
|
||||
this.btnChat.hide();
|
||||
this.btnComments.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnChat.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnSearch.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnThumbs.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnAbout.on("toggle", _.bind(this.onBtnMenuToggle, this));
|
||||
this.btnFile.on("toggle", _.bind(this.onBtnMenuToggle, this));
|
||||
this.btnAbout.on("click", _.bind(this.onFullMenuClick, this));
|
||||
this.btnFile.on("click", _.bind(this.onFullMenuClick, this));
|
||||
var menuFile = new PE.Views.FileMenu({});
|
||||
menuFile.options = {
|
||||
alias: "FileMenu"
|
||||
};
|
||||
this.btnFile.panel = menuFile.render();
|
||||
this.btnAbout.panel = (new Common.Views.About({
|
||||
el: $("#about-menu-panel"),
|
||||
appName: "Presentation Editor"
|
||||
})).render();
|
||||
return this;
|
||||
},
|
||||
onBtnMenuToggle: function (btn, state) {
|
||||
if (state) {
|
||||
btn.panel["show"]();
|
||||
this.$el.width(SCALE_MIN);
|
||||
if (this.btnSearch.isActive()) {
|
||||
this.btnSearch.toggle(false);
|
||||
}
|
||||
} else {
|
||||
btn.panel["hide"]();
|
||||
}
|
||||
if (this.mode.isEdit) {
|
||||
PE.getController("Toolbar").DisableToolbar(state == true);
|
||||
}
|
||||
Common.NotificationCenter.trigger("layout:changed", "leftmenu");
|
||||
},
|
||||
onBtnMenuClick: function (btn, e) {
|
||||
var full_menu_pressed = (this.btnFile.pressed || this.btnAbout.pressed);
|
||||
if (this.btnFile.pressed) {
|
||||
this.btnFile.toggle(false);
|
||||
}
|
||||
if (this.btnAbout.pressed) {
|
||||
this.btnAbout.toggle(false);
|
||||
}
|
||||
if (btn.options.action == "search") {
|
||||
full_menu_pressed && this.fireEvent("panel:show", [this.btnFile, "files", false]);
|
||||
return;
|
||||
} else {
|
||||
if (btn.options.action == "thumbs") {
|
||||
if (this.$el.width() > SCALE_MIN) {
|
||||
localStorage.setItem("pe-mainmenu-width", this.$el.width());
|
||||
this.$el.width(SCALE_MIN);
|
||||
}
|
||||
} else {
|
||||
if (btn.pressed) {
|
||||
if (! (this.$el.width() > SCALE_MIN)) {
|
||||
this.$el.width(localStorage.getItem("pe-mainmenu-width") || MENU_SCALE_PART);
|
||||
}
|
||||
} else {
|
||||
localStorage.setItem("pe-mainmenu-width", this.$el.width());
|
||||
this.$el.width(SCALE_MIN);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.fireEvent("panel:show", [this, btn.options.action, btn.pressed]);
|
||||
Common.NotificationCenter.trigger("layout:changed", "leftmenu");
|
||||
},
|
||||
onFullMenuClick: function (btn, e) {
|
||||
(!btn.pressed) && this.fireEvent("panel:show", [this, btn.options.action, btn.pressed]);
|
||||
},
|
||||
onCoauthOptions: function (e) {
|
||||
if (this.mode.canCoAuthoring) {
|
||||
this.panelComments[this.btnComments.pressed ? "show" : "hide"]();
|
||||
this.fireEvent((this.btnComments.pressed) ? "comments:show": "comments:hide", this);
|
||||
if (this.btnChat.pressed) {
|
||||
if (this.btnChat.$el.hasClass("notify")) {
|
||||
this.btnChat.$el.removeClass("notify");
|
||||
}
|
||||
this.panelChat.show();
|
||||
this.panelChat.focus();
|
||||
} else {
|
||||
this.panelChat["hide"]();
|
||||
}
|
||||
}
|
||||
},
|
||||
setOptionsPanel: function (name, panel) {
|
||||
if (name == "chat") {
|
||||
this.panelChat = panel.render("#left-panel-chat");
|
||||
} else {
|
||||
if (name == "comment") {
|
||||
this.panelComments = panel;
|
||||
}
|
||||
}
|
||||
},
|
||||
markCoauthOptions: function (opt) {
|
||||
if (this.btnChat.isVisible() && !this.btnChat.isDisabled() && !this.btnChat.pressed) {
|
||||
this.btnChat.$el.addClass("notify");
|
||||
}
|
||||
},
|
||||
close: function (menu) {
|
||||
this.btnFile.toggle(false);
|
||||
this.btnAbout.toggle(false);
|
||||
this.btnThumbs.toggle(false);
|
||||
this.$el.width(SCALE_MIN);
|
||||
if (this.mode.canCoAuthoring) {
|
||||
this.panelComments["hide"]();
|
||||
this.panelChat["hide"]();
|
||||
if (this.btnComments.pressed) {
|
||||
this.fireEvent("comments:hide", this);
|
||||
}
|
||||
this.btnComments.toggle(false, true);
|
||||
this.btnChat.toggle(false, true);
|
||||
}
|
||||
this.fireEvent("panel:show", [this, "", false]);
|
||||
},
|
||||
isOpened: function () {
|
||||
var isopened = this.btnFile.pressed || this.btnSearch.pressed; ! isopened && (isopened = this.btnComments.pressed || this.btnChat.pressed);
|
||||
return isopened;
|
||||
},
|
||||
disableMenu: function (menu, disable) {
|
||||
this.btnFile.setDisabled(disable);
|
||||
this.btnSearch.setDisabled(disable);
|
||||
this.btnThumbs.setDisabled(disable);
|
||||
this.btnAbout.setDisabled(disable);
|
||||
this.btnSupport.setDisabled(disable);
|
||||
this.btnComments.setDisabled(disable);
|
||||
this.btnChat.setDisabled(disable);
|
||||
},
|
||||
showMenu: function (menu) {
|
||||
var re = /^(\w+):?(\w*)$/.exec(menu);
|
||||
if (re[1] == "file") {
|
||||
if (!this.btnFile.pressed) {
|
||||
this.btnFile.toggle(true);
|
||||
}
|
||||
this.btnFile.panel.show(re[2].length ? re[2] : undefined);
|
||||
} else {
|
||||
if (menu == "chat") {
|
||||
if (this.btnChat.isVisible() && !this.btnChat.isDisabled() && !this.btnChat.pressed) {
|
||||
this.btnChat.toggle(true);
|
||||
this.onBtnMenuClick(this.btnChat);
|
||||
this.onCoauthOptions();
|
||||
this.panelChat.focus();
|
||||
}
|
||||
} else {
|
||||
if (menu == "comments") {
|
||||
if (this.btnComments.isVisible() && !this.btnComments.isDisabled() && !this.btnComments.pressed) {
|
||||
this.btnComments.toggle(true);
|
||||
this.onBtnMenuClick(this.btnComments);
|
||||
this.onCoauthOptions();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
getMenu: function (type) {
|
||||
switch (type) {
|
||||
default:
|
||||
return null;
|
||||
case "file":
|
||||
return this.btnFile.panel;
|
||||
case "about":
|
||||
return this.btnAbout.panel;
|
||||
}
|
||||
},
|
||||
setMode: function (mode) {
|
||||
this.mode = mode;
|
||||
return this;
|
||||
},
|
||||
tipComments: "Comments",
|
||||
tipChat: "Chat",
|
||||
tipAbout: "About",
|
||||
tipSupport: "Feedback & Support",
|
||||
tipFile: "File",
|
||||
tipSearch: "Search",
|
||||
tipSlides: "Slides"
|
||||
},
|
||||
PE.Views.LeftMenu || {}));
|
||||
});
|
||||
@@ -1,379 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
var SCALE_MIN = 40;
|
||||
var SCALE_FULL = "100%";
|
||||
var SCALE_PART = 250;
|
||||
var MAINMENU_TOOLBAR_ID = "mainmenu-toolbar-id";
|
||||
var MAINMENU_PANEL_ID = "mainmenu-panel-id";
|
||||
var MAINMENU_FULL_PANEL_ID = "mainmenu-full-panel-id";
|
||||
Ext.define("PE.view.MainMenu", {
|
||||
extend: "Ext.panel.Panel",
|
||||
alias: "widget.pemainmenu",
|
||||
requires: ["Ext.toolbar.Toolbar", "Ext.button.Button", "Ext.container.Container", "Ext.toolbar.Spacer"],
|
||||
cls: "lm-style",
|
||||
id: MAINMENU_PANEL_ID,
|
||||
bodyCls: "lm-body",
|
||||
width: SCALE_MIN,
|
||||
layout: "card",
|
||||
currentFullScaleMenuBtn: undefined,
|
||||
fullScaledItemCnt: undefined,
|
||||
buttonCollection: [],
|
||||
listeners: {
|
||||
afterrender: function () {
|
||||
var owner = this.ownerCt;
|
||||
if (Ext.isDefined(owner)) {
|
||||
owner.addListener("resize", Ext.bind(this.resizeMenu, this));
|
||||
}
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
this.items = [];
|
||||
this.dockedItems = this.buildDockedItems();
|
||||
this.slidesBtnVisible = false;
|
||||
this.addEvents("panelshow", "panelhide");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
buildDockedItems: function () {
|
||||
var addedButtons = [],
|
||||
item,
|
||||
config;
|
||||
var me = this;
|
||||
for (var i = 0; i < this.buttonCollection.length; i++) {
|
||||
item = this.buttonCollection[i];
|
||||
config = {
|
||||
xtype: "button",
|
||||
id: item.id,
|
||||
itemScale: item.scale,
|
||||
tooltip: item.tooltip,
|
||||
disabled: item.disabled === true,
|
||||
toggleGroup: item.toggleGroup,
|
||||
cls: "asc-main-menu-buttons",
|
||||
iconCls: "asc-main-menu-btn " + item.cls,
|
||||
style: "margin-bottom: 8px;"
|
||||
};
|
||||
if (item.scale == "modal") {
|
||||
config.enableToggle = true;
|
||||
config.listeners = item.listeners;
|
||||
config.getApi = function () {
|
||||
return me.api;
|
||||
};
|
||||
} else {
|
||||
config.isFullScale = item.scale == "full";
|
||||
config.bodyItems = item.items;
|
||||
config.enableToggle = true;
|
||||
config.listeners = {
|
||||
click: function (btnCall) {
|
||||
if (btnCall.pressed) {
|
||||
me.openButtonMenu(btnCall);
|
||||
}
|
||||
},
|
||||
toggle: function (btnCall, pressed) {
|
||||
btnCall[pressed ? "addCls" : "removeCls"]("asc-main-menu-btn-selected");
|
||||
if (!pressed) {
|
||||
me.fireEvent("panelbeforehide");
|
||||
if (btnCall.isFullScale) {
|
||||
if (Ext.isDefined(me.fullScaledItemCnt) && me.fullScaledItemCnt.isVisible()) {
|
||||
me.fullScaledItemCnt.hide();
|
||||
me.currentFullScaleMenuBtn = undefined;
|
||||
}
|
||||
var panel = me.fullScaledItemCnt;
|
||||
} else {
|
||||
window.localStorage.setItem("pe-mainmenu-width", me.getWidth());
|
||||
panel = Ext.getCmp(btnCall.bodyCardId);
|
||||
me.setWidth(SCALE_MIN);
|
||||
}
|
||||
me.fireEvent("panelhide", panel, btnCall.isFullScale);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
addedButtons.push(config);
|
||||
}
|
||||
this.mainToolbar = Ext.create("Ext.toolbar.Toolbar", {
|
||||
cls: "lm-default-toolbar",
|
||||
width: this.width || SCALE_MIN,
|
||||
vertical: true,
|
||||
dock: "left",
|
||||
defaultType: "button",
|
||||
items: addedButtons,
|
||||
style: "padding-top:15px;",
|
||||
listeners: {
|
||||
afterrender: function (cmp) {
|
||||
cmp.getEl().on("keydown", me._onContainerKeyDown, me, {
|
||||
button: undefined
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
return this.mainToolbar;
|
||||
},
|
||||
closeFullScaleMenu: function () {
|
||||
if (Ext.isDefined(this.currentFullScaleMenuBtn)) {
|
||||
this.currentFullScaleMenuBtn.toggle(false);
|
||||
}
|
||||
},
|
||||
openButtonMenu: function (btn) {
|
||||
this.fireEvent("panelbeforeshow", btn.isFullScale);
|
||||
if (Ext.isNumber(btn.itemScale)) {
|
||||
var saved_width = window.localStorage.getItem("pe-mainmenu-width");
|
||||
saved_width = saved_width ? parseInt(saved_width) : btn.itemScale;
|
||||
this.setSize({
|
||||
width: saved_width
|
||||
});
|
||||
} else {
|
||||
this.setWidth(btn.isFullScale ? SCALE_MIN : SCALE_PART);
|
||||
}
|
||||
if (btn.isFullScale) {
|
||||
var ownerEl = this.ownerCt.el;
|
||||
var startPos = ownerEl.getXY();
|
||||
var panel = this.fullScaledItemCnt;
|
||||
this.currentFullScaleMenuBtn = btn;
|
||||
this.fullScaledItemCnt.setSize(ownerEl.getWidth() - SCALE_MIN, ownerEl.getHeight());
|
||||
this.fullScaledItemCnt.setPosition(startPos[0] + this.width, startPos[1]);
|
||||
this.fullScaledItemCnt.show();
|
||||
this.fullScaledItemCnt.getLayout().setActiveItem(Ext.getCmp(btn.bodyCardId));
|
||||
} else {
|
||||
panel = Ext.getCmp(btn.bodyCardId);
|
||||
this.getLayout().setActiveItem(btn.bodyCardId);
|
||||
}
|
||||
this.doComponentLayout();
|
||||
this.fireEvent("panelshow", panel, btn.isFullScale);
|
||||
Common.component.Analytics.trackEvent("Main Menu", btn.tooltip);
|
||||
},
|
||||
resizeMenu: function (Component, adjWidth, adjHeight, eOpts) {
|
||||
if (Ext.isDefined(this.fullScaledItemCnt) && this.fullScaledItemCnt.isVisible()) {
|
||||
var ownerEl = this.ownerCt.el;
|
||||
var startPos = ownerEl.getXY();
|
||||
this.fullScaledItemCnt.setSize(adjWidth - SCALE_MIN, adjHeight);
|
||||
this.fullScaledItemCnt.setPosition(startPos[0] + this.width, startPos[1]);
|
||||
} else {
|
||||
for (var i = 0; i < this.items.length; i++) {
|
||||
if (adjHeight != this.items.items[i].getHeight()) {
|
||||
this.items.items[i].setHeight(adjHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
this.doComponentLayout();
|
||||
},
|
||||
setApi: function (o) {
|
||||
this.api = o;
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback("asc_onThumbnailsShow", Ext.bind(this.onThumbnailsShow, this));
|
||||
this.api.asc_registerCallback("asc_onCoAuthoringChatReceiveMessage", Ext.bind(this.onCoAuthoringChatReceiveMessage, this));
|
||||
this.api.asc_registerCallback("asc_onСoAuthoringDisconnect", Ext.bind(this.onCoAuthoringDisconnect, this));
|
||||
this.api.asc_registerCallback("asc_onGetLicense", Ext.bind(this.onGetLicense, this));
|
||||
this.api.asc_getLicense();
|
||||
}
|
||||
return this;
|
||||
},
|
||||
selectMenu: function (clsname, ignorcls) {
|
||||
var btnCall, btn, i, panel;
|
||||
var tbMain = this.mainToolbar;
|
||||
for (i = tbMain.items.length; i > 0; i--) {
|
||||
btnCall = tbMain.items.items[i - 1];
|
||||
if (btnCall.isVisible() && btnCall.iconCls && !(btnCall.iconCls.search(clsname) < 0)) {
|
||||
break;
|
||||
} else {
|
||||
btnCall = undefined;
|
||||
}
|
||||
}
|
||||
if (btnCall && !btnCall.pressed) {
|
||||
if (Ext.isDefined(tbMain)) {
|
||||
for (i = 0; i < tbMain.items.length; i++) {
|
||||
btn = tbMain.items.items[i];
|
||||
if (Ext.isDefined(btn) && btn.componentCls === "x-btn") {
|
||||
if (btn.id != btnCall.id && btn.pressed && (ignorcls === undefined || btn.iconCls.search(ignorcls) < 0)) {
|
||||
btn.toggle(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
btnCall.toggle(true);
|
||||
if (btnCall.itemScale != "modal") {
|
||||
this.openButtonMenu(btnCall);
|
||||
}
|
||||
}
|
||||
},
|
||||
clearSelection: function (exclude) {
|
||||
var btn, i;
|
||||
var tbMain = this.mainToolbar;
|
||||
if (Ext.isDefined(tbMain)) {
|
||||
for (i = 0; i < tbMain.items.length; i++) {
|
||||
btn = tbMain.items.items[i];
|
||||
if (Ext.isDefined(btn) && btn.componentCls === "x-btn") {
|
||||
if (btn.pressed) {
|
||||
if (exclude && btn.iconCls) {
|
||||
var next = false;
|
||||
for (var j = 0; j < exclude.length; j++) {
|
||||
if (! (btn.iconCls.search(exclude[j]) < 0)) {
|
||||
next = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (next) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
btn.toggle(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
disableMenu: function (btns, disabled) {
|
||||
var btn, i;
|
||||
var tbMain = this.mainToolbar;
|
||||
if (Ext.isDefined(tbMain)) {
|
||||
var apply_all = false;
|
||||
typeof btns == "string" && (btns == "all" ? apply_all = true : btns = [btns]);
|
||||
for (i = 0; i < tbMain.items.length; i++) {
|
||||
btn = tbMain.items.items[i];
|
||||
if (Ext.isDefined(btn) && btn.componentCls === "x-btn") {
|
||||
if (apply_all || !(btns.indexOf(btn.id) < 0)) {
|
||||
btn.pressed && btn.toggle(false);
|
||||
btn.setDisabled(disabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onThumbnailsShow: function (isShow) {
|
||||
if (isShow) {
|
||||
this.selectMenu("menuSlides", "menuSearch");
|
||||
} else {
|
||||
this.clearSelection(["menuSearch"]);
|
||||
}
|
||||
this.slidesBtnVisible = isShow;
|
||||
},
|
||||
selectThumbnailsBtn: function (isVisible) {
|
||||
var btnCall, i;
|
||||
var tbMain = this.mainToolbar;
|
||||
for (i = tbMain.items.length; i > 0; i--) {
|
||||
btnCall = tbMain.items.items[i - 1];
|
||||
if (btnCall.iconCls && !(btnCall.iconCls.search("menuSlides") < 0)) {
|
||||
btnCall.toggle(isVisible && this.slidesBtnVisible, true);
|
||||
if (this.api) {
|
||||
this.api.ShowThumbnails(isVisible && this.slidesBtnVisible);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
onCoAuthoringChatReceiveMessage: function (messages) {
|
||||
var mainMenu = Ext.getCmp("view-main-menu");
|
||||
if (mainMenu) {
|
||||
var activeStep = mainMenu.getLayout().getActiveItem().down("container");
|
||||
if (activeStep) {
|
||||
var btnChat = Ext.getCmp("id-menu-chat");
|
||||
if (btnChat) {
|
||||
if (!activeStep.isXType("commonchatpanel") || activeStep.getWidth() < 1) {
|
||||
btnChat.addCls("notify");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onCoAuthoringDisconnect: function () {
|
||||
this.disableMenu(["id-menu-comments", "id-menu-chat"], true);
|
||||
},
|
||||
onGetLicense: function (license) {
|
||||
var panel = Ext.getCmp("main-menu-about");
|
||||
if (panel) {
|
||||
panel.setLicInfo(license);
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
var me = this;
|
||||
this.hkEsc = new Ext.util.KeyMap(document, [{
|
||||
key: Ext.EventObject.ESC,
|
||||
fn: function (key, e) {
|
||||
if (Ext.isDefined(me.currentFullScaleMenuBtn)) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
me.clearSelection(["menuSlides"]);
|
||||
}
|
||||
}
|
||||
}]);
|
||||
var addedItems = [],
|
||||
addedButtons = this.mainToolbar.items.items;
|
||||
for (var i = 0; i < this.buttonCollection.length; i++) {
|
||||
var item = this.buttonCollection[i],
|
||||
cardId = -1;
|
||||
if (item.scale == "modal") {
|
||||
continue;
|
||||
}
|
||||
if (item.scale != "full") {
|
||||
var cardPanel = Ext.create("Ext.container.Container", {
|
||||
items: item.items,
|
||||
menubutton: addedButtons[i],
|
||||
listeners: {
|
||||
afterrender: function (cmp) {
|
||||
cmp.getEl().on("keydown", me._onContainerKeyDown, me, {
|
||||
button: cmp.menubutton
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
addedButtons[i].bodyCardId = cardPanel.getId();
|
||||
addedItems.push(cardPanel);
|
||||
} else {
|
||||
if (this.fullScaledItemCnt === undefined) {
|
||||
this.fullScaledItemCnt = Ext.create("Ext.container.Container", {
|
||||
id: MAINMENU_FULL_PANEL_ID,
|
||||
layout: "card",
|
||||
shadow: false,
|
||||
floating: true,
|
||||
toFrontOnShow: true,
|
||||
closeMenu: function () {
|
||||
me.closeFullScaleMenu();
|
||||
},
|
||||
getApi: function () {
|
||||
return me.api;
|
||||
}
|
||||
});
|
||||
}
|
||||
addedButtons[i].bodyCardId = item.items[0].id;
|
||||
this.fullScaledItemCnt.add(item.items);
|
||||
}
|
||||
}
|
||||
this.add(addedItems);
|
||||
},
|
||||
_onContainerKeyDown: function (event, target, opt) {
|
||||
if (event.getKey() == event.ESC) {
|
||||
if (opt.button) {
|
||||
opt.button.toggle(false);
|
||||
} else {
|
||||
this.clearSelection(["menuSlides"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1,438 +1,331 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.ParagraphSettings", {
|
||||
extend: "Common.view.AbstractSettingsPanel",
|
||||
alias: "widget.peparagraphsettings",
|
||||
height: 176,
|
||||
requires: ["Ext.DomHelper", "Ext.button.Button", "Ext.form.Label", "Ext.container.Container", "Ext.toolbar.Spacer", "Common.component.MetricSpinner", "Ext.form.field.ComboBox", "PE.view.ParagraphSettingsAdvanced"],
|
||||
constructor: function (config) {
|
||||
this.callParent(arguments);
|
||||
this.initConfig(config);
|
||||
return this;
|
||||
},
|
||||
setApi: function (o) {
|
||||
this.api = o;
|
||||
if (o) {
|
||||
this.api.asc_registerCallback("asc_onParaSpacingLine", Ext.bind(this._onLineSpacing, this));
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
this.title = this.txtTitle;
|
||||
this._initSettings = true;
|
||||
this._state = {
|
||||
LineRuleIdx: 1,
|
||||
LineHeight: 1.5,
|
||||
LineSpacingBefore: 0,
|
||||
LineSpacingAfter: 0.35
|
||||
};
|
||||
this._arrLineRule = [this.textAtLeast, this.textAuto, this.textExact];
|
||||
this._arrLineDefaults = [[5, "cm", 0.03, 0.01], [1, "", 0.5, 0.01], [5, "cm", 0.03, 0.01]];
|
||||
this.cmbLineRule = Ext.create("Ext.form.field.ComboBox", {
|
||||
id: "table-combo-line-rule",
|
||||
width: 85,
|
||||
editable: false,
|
||||
store: this._arrLineRule,
|
||||
mode: "local",
|
||||
triggerAction: "all",
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
if (this.api) {
|
||||
this.api.put_PrLineSpacing(records[0].index, this._arrLineDefaults[records[0].index][0]);
|
||||
}
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineDefaults[records[0].index][1]);
|
||||
this.numLineHeight.setMinValue(this._arrLineDefaults[records[0].index][2]);
|
||||
this.numLineHeight.setStep(this._arrLineDefaults[records[0].index][3]);
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.cmbLineRule.setValue(this._arrLineRule[1]);
|
||||
this.controls.push(this.cmbLineRule);
|
||||
this.numLineHeight = Ext.widget("commonmetricspinner", {
|
||||
id: "paragraph-spin-line-height",
|
||||
readOnly: false,
|
||||
step: 0.01,
|
||||
width: 85,
|
||||
value: "1.5",
|
||||
defaultUnit: "",
|
||||
maxValue: 132,
|
||||
minValue: 0,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (this.cmbLineRule.getValue() == "") {
|
||||
return;
|
||||
}
|
||||
var type = c_paragraphLinerule.LINERULE_AUTO;
|
||||
for (var i = 0; i < this._arrLineRule.length; i++) {
|
||||
if (this.cmbLineRule.getValue() == this._arrLineRule[i]) {
|
||||
type = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (this.api) {
|
||||
this.api.put_PrLineSpacing(type, (type == c_paragraphLinerule.LINERULE_AUTO) ? field.getNumberValue() : Common.MetricSettings.fnRecalcToMM(field.getNumberValue()));
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.controls.push(this.numLineHeight);
|
||||
this.numSpacingBefore = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "paragraph-spin-spacing-before",
|
||||
readOnly: false,
|
||||
step: 0.1,
|
||||
width: 85,
|
||||
defaultUnit: "cm",
|
||||
value: "0 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
allowAuto: true,
|
||||
autoText: this.txtAutoText,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (this.api) {
|
||||
var num = field.getNumberValue();
|
||||
if (num < 0) {
|
||||
this.api.put_LineSpacingBeforeAfter(0, -1);
|
||||
} else {
|
||||
this.api.put_LineSpacingBeforeAfter(0, Common.MetricSettings.fnRecalcToMM(field.getNumberValue()));
|
||||
}
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.controls.push(this.numSpacingBefore);
|
||||
this.numSpacingAfter = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "paragraph-spin-spacing-after",
|
||||
readOnly: false,
|
||||
step: 0.1,
|
||||
width: 85,
|
||||
defaultUnit: "cm",
|
||||
value: "0.35 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
allowAuto: true,
|
||||
autoText: this.txtAutoText,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (this.api) {
|
||||
var num = field.getNumberValue();
|
||||
if (num < 0) {
|
||||
this.api.put_LineSpacingBeforeAfter(1, -1);
|
||||
} else {
|
||||
this.api.put_LineSpacingBeforeAfter(1, Common.MetricSettings.fnRecalcToMM(field.getNumberValue()));
|
||||
}
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.controls.push(this.numSpacingAfter);
|
||||
this._SpacingPanel = Ext.create("Ext.container.Container", {
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 107,
|
||||
width: 190,
|
||||
items: [{
|
||||
xtype: "tbspacer",
|
||||
height: 8
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 41,
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tdAttrs: {
|
||||
style: "padding-right: 8px;vertical-align: middle;"
|
||||
}
|
||||
},
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.strLineHeight,
|
||||
style: "display: block;",
|
||||
width: 85
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
text: this.textAt,
|
||||
style: "display: block;",
|
||||
width: 85
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 2
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 2
|
||||
},
|
||||
this.cmbLineRule, this.numLineHeight]
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "table",
|
||||
columns: 2,
|
||||
tdAttrs: {
|
||||
style: "padding-right: 8px;"
|
||||
}
|
||||
},
|
||||
defaults: {
|
||||
xtype: "container",
|
||||
layout: "vbox",
|
||||
layoutConfig: {
|
||||
align: "stretch"
|
||||
},
|
||||
height: 48,
|
||||
style: "float:left;"
|
||||
},
|
||||
items: [{
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.strSpacingBefore,
|
||||
width: 85
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this.numSpacingBefore]
|
||||
},
|
||||
{
|
||||
items: [{
|
||||
xtype: "label",
|
||||
text: this.strSpacingAfter,
|
||||
width: 85
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
this.numSpacingAfter]
|
||||
}]
|
||||
}]
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "tbspacer",
|
||||
height: 9
|
||||
},
|
||||
{
|
||||
xtype: "label",
|
||||
style: "font-weight: bold;margin-top: 1px;",
|
||||
text: this.strParagraphSpacing
|
||||
},
|
||||
this._SpacingPanel, {
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
width: "100%",
|
||||
height: 10,
|
||||
style: "padding-right: 10px;",
|
||||
html: '<div style="width: 100%; height: 40%; border-bottom: 1px solid #C7C7C7"></div>'
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
height: 3
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 20,
|
||||
width: "100%",
|
||||
items: [{
|
||||
xtype: "box",
|
||||
html: '<div style="width:100%;text-align:center;padding-right:15px;"><label id="paragraph-advanced-link" class="asc-advanced-link">' + this.textAdvanced + "</label></div>",
|
||||
listeners: {
|
||||
afterrender: function (cmp) {
|
||||
document.getElementById("paragraph-advanced-link").onclick = Ext.bind(this._openAdvancedSettings, this);
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}]
|
||||
}];
|
||||
this.addEvents("editcomplete");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
_onLineSpacing: function (value) {
|
||||
var linerule = value.get_LineRule();
|
||||
var line = value.get_Line();
|
||||
this.numLineHeight.suspendEvents(false);
|
||||
this.cmbLineRule.suspendEvents(false);
|
||||
if (this._state.LineRuleIdx !== linerule) {
|
||||
this.cmbLineRule.setValue((linerule !== null) ? this._arrLineRule[linerule] : "");
|
||||
this.numLineHeight.setMinValue(this._arrLineDefaults[(linerule !== null) ? linerule : 1][2]);
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineDefaults[(linerule !== null) ? linerule : 1][1]);
|
||||
this.numLineHeight.setStep(this._arrLineDefaults[(linerule !== null) ? linerule : 1][3]);
|
||||
this._state.LineRuleIdx = linerule;
|
||||
}
|
||||
if (Math.abs(this._state.LineHeight - line) > 0.001 || (this._state.LineHeight === null || line === null) && (this._state.LineHeight !== line)) {
|
||||
var val = "";
|
||||
if (linerule == c_paragraphLinerule.LINERULE_AUTO) {
|
||||
val = line;
|
||||
} else {
|
||||
if (linerule !== null && line !== null) {
|
||||
val = Common.MetricSettings.fnRecalcFromMM(line);
|
||||
}
|
||||
}
|
||||
this.numLineHeight.setValue((val !== null) ? val : "");
|
||||
this._state.LineHeight = line;
|
||||
}
|
||||
this.numLineHeight.resumeEvents();
|
||||
this.cmbLineRule.resumeEvents();
|
||||
},
|
||||
ChangeSettings: function (prop) {
|
||||
if (this._initSettings) {
|
||||
this.createDelayedElements();
|
||||
this._initSettings = false;
|
||||
}
|
||||
if (prop) {
|
||||
this.SuspendEvents();
|
||||
var Spacing = {
|
||||
Line: prop.get_Spacing().get_Line(),
|
||||
Before: prop.get_Spacing().get_Before(),
|
||||
After: prop.get_Spacing().get_After(),
|
||||
LineRule: prop.get_Spacing().get_LineRule()
|
||||
};
|
||||
if (this._state.LineRuleIdx !== Spacing.LineRule) {
|
||||
this.cmbLineRule.setValue((Spacing.LineRule !== null) ? this._arrLineRule[Spacing.LineRule] : "");
|
||||
this.numLineHeight.setMinValue(this._arrLineDefaults[(Spacing.LineRule !== null) ? Spacing.LineRule : 1][2]);
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineDefaults[(Spacing.LineRule !== null) ? Spacing.LineRule : 1][1]);
|
||||
this.numLineHeight.setStep(this._arrLineDefaults[(Spacing.LineRule !== null) ? Spacing.LineRule : 1][3]);
|
||||
this._state.LineRuleIdx = Spacing.LineRule;
|
||||
}
|
||||
if (Math.abs(this._state.LineHeight - Spacing.Line) > 0.001 || (this._state.LineHeight === null || Spacing.Line === null) && (this._state.LineHeight !== Spacing.Line)) {
|
||||
var val = "";
|
||||
if (Spacing.LineRule == c_paragraphLinerule.LINERULE_AUTO) {
|
||||
val = Spacing.Line;
|
||||
} else {
|
||||
if (Spacing.LineRule !== null && Spacing.Line !== null) {
|
||||
val = Common.MetricSettings.fnRecalcFromMM(Spacing.Line);
|
||||
}
|
||||
}
|
||||
this.numLineHeight.setValue((val !== null) ? val : "");
|
||||
this._state.LineHeight = Spacing.Line;
|
||||
}
|
||||
if (Math.abs(this._state.LineSpacingBefore - Spacing.Before) > 0.001 || (this._state.LineSpacingBefore === null || Spacing.Before === null) && (this._state.LineSpacingBefore !== Spacing.Before)) {
|
||||
this.numSpacingBefore.setValue((Spacing.Before !== null) ? ((Spacing.Before < 0) ? Spacing.Before : Common.MetricSettings.fnRecalcFromMM(Spacing.Before)) : "");
|
||||
this._state.LineSpacingBefore = Spacing.Before;
|
||||
}
|
||||
if (Math.abs(this._state.LineSpacingAfter - Spacing.After) > 0.001 || (this._state.LineSpacingAfter === null || Spacing.After === null) && (this._state.LineSpacingAfter !== Spacing.After)) {
|
||||
this.numSpacingAfter.setValue((Spacing.After !== null) ? ((Spacing.After < 0) ? Spacing.After : Common.MetricSettings.fnRecalcFromMM(Spacing.After)) : "");
|
||||
this._state.LineSpacingAfter = Spacing.After;
|
||||
}
|
||||
this.ResumeEvents();
|
||||
}
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
var spinners = this.query("commonmetricspinner");
|
||||
if (spinners) {
|
||||
for (var i = 0; i < spinners.length; i++) {
|
||||
var spinner = spinners[i];
|
||||
if (spinner.id == "paragraph-spin-line-height") {
|
||||
continue;
|
||||
}
|
||||
spinner.setDefaultUnit(Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
spinner.setStep(Common.MetricSettings.getCurrentMetric() == Common.MetricSettings.c_MetricUnits.cm ? 0.01 : 1);
|
||||
}
|
||||
}
|
||||
this._arrLineDefaults[2][1] = this._arrLineDefaults[0][1] = Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()];
|
||||
this._arrLineDefaults[2][2] = this._arrLineDefaults[0][2] = parseFloat(Common.MetricSettings.fnRecalcFromMM(0.3).toFixed(2));
|
||||
this._arrLineDefaults[2][3] = this._arrLineDefaults[0][3] = (Common.MetricSettings.getCurrentMetric() == Common.MetricSettings.c_MetricUnits.cm) ? 0.01 : 1;
|
||||
if (this._state.LineRuleIdx !== null) {
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineDefaults[this._state.LineRuleIdx][1]);
|
||||
this.numLineHeight.setStep(this._arrLineDefaults[this._state.LineRuleIdx][3]);
|
||||
}
|
||||
},
|
||||
_openAdvancedSettings: function (e) {
|
||||
var me = this;
|
||||
var win;
|
||||
if (me.api) {
|
||||
var selectedElements = me.api.getSelectedElements();
|
||||
if (selectedElements && Ext.isArray(selectedElements)) {
|
||||
var elType, elValue;
|
||||
for (var i = selectedElements.length - 1; i >= 0; i--) {
|
||||
elType = selectedElements[i].get_ObjectType();
|
||||
elValue = selectedElements[i].get_ObjectValue();
|
||||
if (c_oAscTypeSelectElement.Paragraph == elType) {
|
||||
win = Ext.create("PE.view.ParagraphSettingsAdvanced");
|
||||
win.updateMetricUnit();
|
||||
win.setSettings({
|
||||
paragraphProps: elValue,
|
||||
api: me.api
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (win) {
|
||||
win.addListener("onmodalresult", Ext.bind(function (o, mr, s) {
|
||||
if (mr == 1 && s) {
|
||||
me.api.paraApply(s.paragraphProps);
|
||||
}
|
||||
},
|
||||
this), false);
|
||||
win.addListener("close", function () {
|
||||
me.fireEvent("editcomplete", me);
|
||||
},
|
||||
false);
|
||||
win.show();
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
this.updateMetricUnit();
|
||||
},
|
||||
strParagraphSpacing: "Spacing",
|
||||
strLineHeight: "Line Spacing",
|
||||
strSpacingBefore: "Before",
|
||||
strSpacingAfter: "After",
|
||||
textAuto: "Multiple",
|
||||
textAtLeast: "At least",
|
||||
textExact: "Exactly",
|
||||
textAt: "At",
|
||||
txtTitle: "Paragraph",
|
||||
txtAutoText: "Auto",
|
||||
textAdvanced: "Show advanced settings"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/ParagraphSettings.template", "jquery", "underscore", "backbone", "common/main/lib/component/ComboBox", "common/main/lib/component/MetricSpinner", "presentationeditor/main/app/view/ParagraphSettingsAdvanced"], function (menuTemplate, $, _, Backbone) {
|
||||
PE.Views.ParagraphSettings = Backbone.View.extend(_.extend({
|
||||
el: "#id-paragraph-settings",
|
||||
template: _.template(menuTemplate),
|
||||
events: {},
|
||||
options: {
|
||||
alias: "ParagraphSettings"
|
||||
},
|
||||
initialize: function () {
|
||||
var me = this;
|
||||
this._initSettings = true;
|
||||
this._state = {
|
||||
LineRuleIdx: 1,
|
||||
LineHeight: 1.5,
|
||||
LineSpacingBefore: 0,
|
||||
LineSpacingAfter: 0.35,
|
||||
DisabledControls: false
|
||||
};
|
||||
this.spinners = [];
|
||||
this.lockedControls = [];
|
||||
this._locked = false;
|
||||
this.render();
|
||||
this._arrLineRule = [{
|
||||
displayValue: this.textAtLeast,
|
||||
defaultValue: 5,
|
||||
value: c_paragraphLinerule.LINERULE_LEAST,
|
||||
minValue: 0.03,
|
||||
step: 0.01,
|
||||
defaultUnit: "cm"
|
||||
},
|
||||
{
|
||||
displayValue: this.textAuto,
|
||||
defaultValue: 1,
|
||||
value: c_paragraphLinerule.LINERULE_AUTO,
|
||||
minValue: 0.5,
|
||||
step: 0.01,
|
||||
defaultUnit: ""
|
||||
},
|
||||
{
|
||||
displayValue: this.textExact,
|
||||
defaultValue: 5,
|
||||
value: c_paragraphLinerule.LINERULE_EXACT,
|
||||
minValue: 0.03,
|
||||
step: 0.01,
|
||||
defaultUnit: "cm"
|
||||
}];
|
||||
this.cmbLineRule = new Common.UI.ComboBox({
|
||||
el: $("#paragraph-combo-line-rule"),
|
||||
cls: "input-group-nr",
|
||||
menuStyle: "min-width: 85px;",
|
||||
editable: false,
|
||||
data: this._arrLineRule
|
||||
});
|
||||
this.cmbLineRule.setValue(this._arrLineRule[this._state.LineRuleIdx].value);
|
||||
this.lockedControls.push(this.cmbLineRule);
|
||||
this.numLineHeight = new Common.UI.MetricSpinner({
|
||||
el: $("#paragraph-spin-line-height"),
|
||||
step: 0.01,
|
||||
width: 85,
|
||||
value: "1.5",
|
||||
defaultUnit: "",
|
||||
maxValue: 132,
|
||||
minValue: 0.5
|
||||
});
|
||||
this.lockedControls.push(this.numLineHeight);
|
||||
this.numSpacingBefore = new Common.UI.MetricSpinner({
|
||||
el: $("#paragraph-spin-spacing-before"),
|
||||
step: 0.1,
|
||||
width: 85,
|
||||
value: "0 cm",
|
||||
defaultUnit: "cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
allowAuto: true,
|
||||
autoText: this.txtAutoText
|
||||
});
|
||||
this.spinners.push(this.numSpacingBefore);
|
||||
this.lockedControls.push(this.numSpacingBefore);
|
||||
this.numSpacingAfter = new Common.UI.MetricSpinner({
|
||||
el: $("#paragraph-spin-spacing-after"),
|
||||
step: 0.1,
|
||||
width: 85,
|
||||
value: "0.35 cm",
|
||||
defaultUnit: "cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
allowAuto: true,
|
||||
autoText: this.txtAutoText
|
||||
});
|
||||
this.spinners.push(this.numSpacingAfter);
|
||||
this.lockedControls.push(this.numSpacingAfter);
|
||||
this.numLineHeight.on("change", _.bind(this.onNumLineHeightChange, this));
|
||||
this.numSpacingBefore.on("change", _.bind(this.onNumSpacingBeforeChange, this));
|
||||
this.numSpacingAfter.on("change", _.bind(this.onNumSpacingAfterChange, this));
|
||||
this.cmbLineRule.on("selected", _.bind(this.onLineRuleSelect, this));
|
||||
this.cmbLineRule.on("hide:after", _.bind(this.onHideMenus, this));
|
||||
$(this.el).on("click", "#paragraph-advanced-link", _.bind(this.openAdvancedSettings, this));
|
||||
},
|
||||
render: function () {
|
||||
var el = $(this.el);
|
||||
el.html(this.template({
|
||||
scope: this
|
||||
}));
|
||||
this.linkAdvanced = $("#paragraph-advanced-link");
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback("asc_onParaSpacingLine", _.bind(this._onLineSpacing, this));
|
||||
}
|
||||
return this;
|
||||
},
|
||||
onNumLineHeightChange: function (field, newValue, oldValue, eOpts) {
|
||||
if (this.cmbLineRule.getRawValue() === "") {
|
||||
return;
|
||||
}
|
||||
var type = c_paragraphLinerule.LINERULE_AUTO;
|
||||
if (this.api) {
|
||||
this.api.put_PrLineSpacing(this.cmbLineRule.getValue(), (this.cmbLineRule.getValue() == c_paragraphLinerule.LINERULE_AUTO) ? field.getNumberValue() : Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
onNumSpacingBeforeChange: function (field, newValue, oldValue, eOpts) {
|
||||
if (this.api) {
|
||||
var num = field.getNumberValue();
|
||||
if (num < 0) {
|
||||
this.api.put_LineSpacingBeforeAfter(0, -1);
|
||||
} else {
|
||||
this.api.put_LineSpacingBeforeAfter(0, Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
|
||||
}
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
onNumSpacingAfterChange: function (field, newValue, oldValue, eOpts) {
|
||||
if (this.api) {
|
||||
var num = field.getNumberValue();
|
||||
if (num < 0) {
|
||||
this.api.put_LineSpacingBeforeAfter(1, -1);
|
||||
} else {
|
||||
this.api.put_LineSpacingBeforeAfter(1, Common.Utils.Metric.fnRecalcToMM(field.getNumberValue()));
|
||||
}
|
||||
}
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
onLineRuleSelect: function (combo, record) {
|
||||
if (this.api) {
|
||||
this.api.put_PrLineSpacing(record.value, record.defaultValue);
|
||||
}
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineRule[record.value].defaultUnit);
|
||||
this.numLineHeight.setMinValue(this._arrLineRule[record.value].minValue);
|
||||
this.numLineHeight.setStep(this._arrLineRule[record.value].step);
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
_onLineSpacing: function (value) {
|
||||
var linerule = value.get_LineRule();
|
||||
var line = value.get_Line();
|
||||
if (this._state.LineRuleIdx !== linerule) {
|
||||
this.cmbLineRule.setValue((linerule !== null) ? this._arrLineRule[linerule].value : "");
|
||||
this.numLineHeight.setMinValue(this._arrLineRule[(linerule !== null) ? linerule : 1].minValue);
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineRule[(linerule !== null) ? linerule : 1].defaultUnit);
|
||||
this.numLineHeight.setStep(this._arrLineRule[(linerule !== null) ? linerule : 1].step);
|
||||
this._state.LineRuleIdx = linerule;
|
||||
}
|
||||
if (Math.abs(this._state.LineHeight - line) > 0.001 || (this._state.LineHeight === null || line === null) && (this._state.LineHeight !== line)) {
|
||||
var val = "";
|
||||
if (linerule == c_paragraphLinerule.LINERULE_AUTO) {
|
||||
val = line;
|
||||
} else {
|
||||
if (linerule !== null && line !== null) {
|
||||
val = Common.Utils.Metric.fnRecalcFromMM(line);
|
||||
}
|
||||
}
|
||||
this.numLineHeight.setValue((val !== null) ? val : "", true);
|
||||
this._state.LineHeight = line;
|
||||
}
|
||||
},
|
||||
ChangeSettings: function (prop) {
|
||||
if (this._initSettings) {
|
||||
this.createDelayedElements();
|
||||
this._initSettings = false;
|
||||
}
|
||||
this.disableControls(this._locked);
|
||||
if (prop) {
|
||||
var Spacing = {
|
||||
Line: prop.get_Spacing().get_Line(),
|
||||
Before: prop.get_Spacing().get_Before(),
|
||||
After: prop.get_Spacing().get_After(),
|
||||
LineRule: prop.get_Spacing().get_LineRule()
|
||||
};
|
||||
var other = {
|
||||
ContextualSpacing: prop.get_ContextualSpacing()
|
||||
};
|
||||
if (this._state.LineRuleIdx !== Spacing.LineRule) {
|
||||
this.cmbLineRule.setValue((Spacing.LineRule !== null) ? this._arrLineRule[Spacing.LineRule].value : "");
|
||||
this.numLineHeight.setMinValue(this._arrLineRule[(Spacing.LineRule !== null) ? Spacing.LineRule : 1].minValue);
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineRule[(Spacing.LineRule !== null) ? Spacing.LineRule : 1].defaultUnit);
|
||||
this.numLineHeight.setStep(this._arrLineRule[(Spacing.LineRule !== null) ? Spacing.LineRule : 1].step);
|
||||
this._state.LineRuleIdx = Spacing.LineRule;
|
||||
}
|
||||
if (Math.abs(this._state.LineHeight - Spacing.Line) > 0.001 || (this._state.LineHeight === null || Spacing.Line === null) && (this._state.LineHeight !== Spacing.Line)) {
|
||||
var val = "";
|
||||
if (Spacing.LineRule == c_paragraphLinerule.LINERULE_AUTO) {
|
||||
val = Spacing.Line;
|
||||
} else {
|
||||
if (Spacing.LineRule !== null && Spacing.Line !== null) {
|
||||
val = Common.Utils.Metric.fnRecalcFromMM(Spacing.Line);
|
||||
}
|
||||
}
|
||||
this.numLineHeight.setValue((val !== null) ? val : "", true);
|
||||
this._state.LineHeight = Spacing.Line;
|
||||
}
|
||||
if (Math.abs(this._state.LineSpacingBefore - Spacing.Before) > 0.001 || (this._state.LineSpacingBefore === null || Spacing.Before === null) && (this._state.LineSpacingBefore !== Spacing.Before)) {
|
||||
this.numSpacingBefore.setValue((Spacing.Before !== null) ? ((Spacing.Before < 0) ? Spacing.Before : Common.Utils.Metric.fnRecalcFromMM(Spacing.Before)) : "", true);
|
||||
this._state.LineSpacingBefore = Spacing.Before;
|
||||
}
|
||||
if (Math.abs(this._state.LineSpacingAfter - Spacing.After) > 0.001 || (this._state.LineSpacingAfter === null || Spacing.After === null) && (this._state.LineSpacingAfter !== Spacing.After)) {
|
||||
this.numSpacingAfter.setValue((Spacing.After !== null) ? ((Spacing.After < 0) ? Spacing.After : Common.Utils.Metric.fnRecalcFromMM(Spacing.After)) : "", true);
|
||||
this._state.LineSpacingAfter = Spacing.After;
|
||||
}
|
||||
}
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
if (this.spinners) {
|
||||
for (var i = 0; i < this.spinners.length; i++) {
|
||||
var spinner = this.spinners[i];
|
||||
spinner.setDefaultUnit(Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()]);
|
||||
spinner.setStep(Common.Utils.Metric.getCurrentMetric() == Common.Utils.Metric.c_MetricUnits.cm ? 0.01 : 1);
|
||||
}
|
||||
}
|
||||
this._arrLineRule[2].defaultUnit = this._arrLineRule[0].defaultUnit = Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()];
|
||||
this._arrLineRule[2].minValue = this._arrLineRule[0].minValue = parseFloat(Common.Utils.Metric.fnRecalcFromMM(0.3).toFixed(2));
|
||||
this._arrLineRule[2].step = this._arrLineRule[0].step = (Common.Utils.Metric.getCurrentMetric() == Common.Utils.Metric.c_MetricUnits.cm) ? 0.01 : 1;
|
||||
if (this._state.LineRuleIdx !== null) {
|
||||
this.numLineHeight.setDefaultUnit(this._arrLineRule[this._state.LineRuleIdx].defaultUnit);
|
||||
this.numLineHeight.setStep(this._arrLineRule[this._state.LineRuleIdx].step);
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
this.updateMetricUnit();
|
||||
},
|
||||
openAdvancedSettings: function (e) {
|
||||
if (this.linkAdvanced.hasClass("disabled")) {
|
||||
return;
|
||||
}
|
||||
var me = this;
|
||||
var win;
|
||||
if (me.api && !this._locked) {
|
||||
var selectedElements = me.api.getSelectedElements();
|
||||
if (selectedElements && selectedElements.length > 0) {
|
||||
var elType, elValue;
|
||||
for (var i = selectedElements.length - 1; i >= 0; i--) {
|
||||
elType = selectedElements[i].get_ObjectType();
|
||||
elValue = selectedElements[i].get_ObjectValue();
|
||||
if (c_oAscTypeSelectElement.Paragraph == elType) {
|
||||
(new PE.Views.ParagraphSettingsAdvanced({
|
||||
paragraphProps: elValue,
|
||||
api: me.api,
|
||||
handler: function (result, value) {
|
||||
if (result == "ok") {
|
||||
if (me.api) {
|
||||
me.api.paraApply(value.paragraphProps);
|
||||
}
|
||||
}
|
||||
me.fireEvent("editcomplete", me);
|
||||
}
|
||||
})).show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onHideMenus: function (e) {
|
||||
this.fireEvent("editcomplete", this);
|
||||
},
|
||||
setLocked: function (locked) {
|
||||
this._locked = locked;
|
||||
},
|
||||
disableControls: function (disable) {
|
||||
if (this._state.DisabledControls !== disable) {
|
||||
this._state.DisabledControls = disable;
|
||||
_.each(this.lockedControls, function (item) {
|
||||
item.setDisabled(disable);
|
||||
});
|
||||
this.linkAdvanced.toggleClass("disabled", disable);
|
||||
}
|
||||
},
|
||||
strParagraphSpacing: "Spacing",
|
||||
strLineHeight: "Line Spacing",
|
||||
strSpacingBefore: "Before",
|
||||
strSpacingAfter: "After",
|
||||
textAuto: "Multiple",
|
||||
textAtLeast: "At least",
|
||||
textExact: "Exactly",
|
||||
textAdvanced: "Show advanced settings",
|
||||
textAt: "At",
|
||||
txtAutoText: "Auto"
|
||||
},
|
||||
PE.Views.ParagraphSettings || {}));
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,75 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.RecentFiles", {
|
||||
extend: "Ext.panel.Panel",
|
||||
alias: "widget.perecentfiles",
|
||||
cls: "pe-recentfiles",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
requires: ["Ext.container.Container", "Ext.data.Model", "Ext.data.Store", "Ext.view.View", "Ext.XTemplate", "Common.plugin.DataViewScrollPane"],
|
||||
constructor: function (config) {
|
||||
this.initConfig(config);
|
||||
this.callParent(arguments);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this.callParent(arguments);
|
||||
var me = this;
|
||||
me.add({
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: "fit",
|
||||
cls: "container-recent-file-list",
|
||||
items: [{
|
||||
xtype: "dataview",
|
||||
store: "RecentFiles",
|
||||
tpl: Ext.create("Ext.XTemplate", '<tpl for=".">', '<div class="thumb-wrap">', '<div class="thumb"></div>', '<div class="file-name">{title:htmlEncode}</div>', '<div class="file-info">{folder:htmlEncode}</div>', "</div>", "</tpl>"),
|
||||
singleSelect: true,
|
||||
trackOver: true,
|
||||
style: "overflow:auto",
|
||||
overItemCls: "x-item-over",
|
||||
itemSelector: "div.thumb-wrap",
|
||||
cls: "x-view-context",
|
||||
plugins: [{
|
||||
ptype: "dataviewscrollpane",
|
||||
pluginId: "scrollpane",
|
||||
areaSelector: ".x-view-context",
|
||||
settings: {
|
||||
enableKeyboardNavigation: true
|
||||
}
|
||||
}]
|
||||
}]
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -1,224 +1,251 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
var SCALE_MIN = 40;
|
||||
var MENU_SCALE_PART = 260;
|
||||
var RIGHTMENU_TOOLBAR_ID = "rightmenu-toolbar-id";
|
||||
var RIGHTMENU_PANEL_ID = "rightmenu-panel-id";
|
||||
Ext.define("PE.view.RightMenu", {
|
||||
extend: "Ext.panel.Panel",
|
||||
alias: "widget.perightmenu",
|
||||
requires: ["Ext.toolbar.Toolbar", "Ext.button.Button", "Ext.container.Container", "Ext.toolbar.Spacer", "PE.view.RightPanel", "Ext.util.Cookies"],
|
||||
cls: "rm-style",
|
||||
id: RIGHTMENU_PANEL_ID,
|
||||
bodyCls: "rm-body",
|
||||
width: SCALE_MIN,
|
||||
buttonCollection: [],
|
||||
listeners: {
|
||||
afterrender: function () {
|
||||
var owner = this.ownerCt;
|
||||
if (Ext.isDefined(owner)) {
|
||||
owner.addListener("resize", Ext.bind(this.resizeMenu, this));
|
||||
}
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
this.dockedItems = this.buildDockedItems();
|
||||
this._rightSettings = Ext.widget("perightpanel", {
|
||||
id: "view-right-panel-settings",
|
||||
btnText: this.btnText,
|
||||
btnTable: this.btnTable,
|
||||
btnImage: this.btnImage,
|
||||
btnShape: this.btnShape,
|
||||
btnSlide: this.btnSlide
|
||||
});
|
||||
this.items = [this._rightSettings];
|
||||
this.addEvents("editcomplete");
|
||||
this.callParent(arguments);
|
||||
},
|
||||
buildDockedItems: function () {
|
||||
var me = this;
|
||||
me.btnSlide = Ext.create("Ext.button.Button", {
|
||||
id: "id-right-menu-slide",
|
||||
cls: "asc-main-menu-buttons",
|
||||
iconCls: "asc-main-menu-btn menuSlide",
|
||||
asctype: c_oAscTypeSelectElement.Slide,
|
||||
enableToggle: true,
|
||||
allowDepress: true,
|
||||
style: "margin-bottom: 8px;",
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
me.btnShape = Ext.create("Ext.button.Button", {
|
||||
id: "id-right-menu-shape",
|
||||
cls: "asc-main-menu-buttons",
|
||||
iconCls: "asc-main-menu-btn menuShape",
|
||||
asctype: c_oAscTypeSelectElement.Shape,
|
||||
enableToggle: true,
|
||||
allowDepress: true,
|
||||
style: "margin-bottom: 8px;",
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
me.btnImage = Ext.create("Ext.Button", {
|
||||
id: "id-right-menu-image",
|
||||
cls: "asc-main-menu-buttons",
|
||||
iconCls: "asc-main-menu-btn menuImage",
|
||||
asctype: c_oAscTypeSelectElement.Image,
|
||||
enableToggle: true,
|
||||
allowDepress: true,
|
||||
style: "margin-bottom: 8px;",
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
me.btnText = Ext.create("Ext.Button", {
|
||||
id: "id-right-menu-text",
|
||||
cls: "asc-main-menu-buttons",
|
||||
iconCls: "asc-main-menu-btn menuText",
|
||||
asctype: c_oAscTypeSelectElement.Paragraph,
|
||||
enableToggle: true,
|
||||
allowDepress: true,
|
||||
style: "margin-bottom: 8px;",
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
me.btnTable = Ext.create("Ext.Button", {
|
||||
id: "id-right-menu-table",
|
||||
cls: "asc-main-menu-buttons",
|
||||
iconCls: "asc-main-menu-btn menuTable",
|
||||
asctype: c_oAscTypeSelectElement.Table,
|
||||
enableToggle: true,
|
||||
allowDepress: true,
|
||||
style: "margin-bottom: 8px;",
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this.rightToolbar = Ext.create("Ext.toolbar.Toolbar", {
|
||||
cls: "rm-default-toolbar",
|
||||
width: this.width || SCALE_MIN,
|
||||
vertical: true,
|
||||
dock: "right",
|
||||
defaultType: "button",
|
||||
style: "padding-top: 15px;",
|
||||
items: [me.btnSlide, me.btnShape, me.btnImage, me.btnText, me.btnTable]
|
||||
});
|
||||
return this.rightToolbar;
|
||||
},
|
||||
resizeMenu: function (Component, adjWidth, adjHeight, eOpts) {
|
||||
for (var i = 0; i < this.items.length; i++) {
|
||||
if (this.items.items[i].el && adjHeight != this.items.items[i].getHeight()) {
|
||||
this.items.items[i].setHeight(adjHeight);
|
||||
}
|
||||
}
|
||||
this.doComponentLayout();
|
||||
},
|
||||
setApi: function (o) {
|
||||
this.api = o;
|
||||
this.api.asc_registerCallback("asc_onСoAuthoringDisconnect", Ext.bind(this.onCoAuthoringDisconnect, this));
|
||||
return this;
|
||||
},
|
||||
disableMenu: function (disabled) {
|
||||
var btn, i;
|
||||
var tbMain = this.rightToolbar;
|
||||
if (Ext.isDefined(tbMain)) {
|
||||
for (i = 0; i < tbMain.items.length; i++) {
|
||||
btn = tbMain.items.items[i];
|
||||
if (Ext.isDefined(btn) && btn.componentCls === "x-btn") {
|
||||
btn.pressed && btn.toggle(false);
|
||||
btn.setDisabled(disabled);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
onCoAuthoringDisconnect: function () {
|
||||
this.disableMenu(true);
|
||||
if (this._rightSettings) {
|
||||
this._rightSettings.setDisabled(true);
|
||||
this._rightSettings.setMode({
|
||||
isEdit: false
|
||||
});
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
var me = this;
|
||||
me._rightSettings.setHeight(me.getHeight());
|
||||
var toggleHandler = function (btn, pressed) {
|
||||
if (pressed && !me._rightSettings.minimizedMode) {
|
||||
btn.addCls("asc-main-menu-btn-selected");
|
||||
var panel = me._rightSettings._settings[btn.asctype].panel;
|
||||
var props = me._rightSettings._settings[btn.asctype].props;
|
||||
me._rightSettings.TabPanel.getLayout().setActiveItem(panel);
|
||||
me._rightSettings.TabPanel.setHeight(panel.initialHeight);
|
||||
if (props) {
|
||||
panel.ChangeSettings.call(panel, props);
|
||||
}
|
||||
}
|
||||
};
|
||||
var clickHandler = function (btn) {
|
||||
if (btn.pressed) {
|
||||
if (me._rightSettings.minimizedMode) {
|
||||
if (me._rightSettings.TabPanel.hidden) {
|
||||
me._rightSettings.TabPanel.setVisible(true);
|
||||
}
|
||||
me.setWidth(MENU_SCALE_PART);
|
||||
me._rightSettings.minimizedMode = false;
|
||||
toggleHandler(btn, btn.pressed);
|
||||
window.localStorage.setItem("de-hidden-right-settings", 0);
|
||||
} else {
|
||||
btn.addCls("asc-main-menu-btn-selected");
|
||||
}
|
||||
me._rightSettings._settings[c_oAscTypeSelectElement.Slide].isCurrent = (btn.asctype == c_oAscTypeSelectElement.Slide);
|
||||
} else {
|
||||
me.setWidth(SCALE_MIN);
|
||||
me._rightSettings.minimizedMode = true;
|
||||
btn.removeCls("asc-main-menu-btn-selected");
|
||||
window.localStorage.setItem("de-hidden-right-settings", 1);
|
||||
}
|
||||
me.fireEvent("editcomplete", me);
|
||||
};
|
||||
var button;
|
||||
var tips = [me.txtSlideSettings, me.txtShapeSettings, me.txtImageSettings, me.txtParagraphSettings, me.txtTableSettings];
|
||||
for (var i = this.rightToolbar.items.items.length; i--;) {
|
||||
button = this.rightToolbar.items.items[i];
|
||||
button.on({
|
||||
"click": clickHandler,
|
||||
"toggle": toggleHandler
|
||||
});
|
||||
button.setTooltip(tips[i]);
|
||||
}
|
||||
},
|
||||
txtParagraphSettings: "Text Settings",
|
||||
txtImageSettings: "Image Settings",
|
||||
txtTableSettings: "Table Settings",
|
||||
txtShapeSettings: "Shape Settings",
|
||||
txtSlideSettings: "Slide Settings",
|
||||
txtChartSettings: "Chart Settings"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
var SCALE_MIN = 40;
|
||||
var MENU_SCALE_PART = 260;
|
||||
define(["text!presentationeditor/main/app/template/RightMenu.template", "jquery", "underscore", "backbone", "common/main/lib/component/Button", "common/main/lib/component/MetricSpinner", "common/main/lib/component/CheckBox", "presentationeditor/main/app/view/ParagraphSettings", "presentationeditor/main/app/view/ImageSettings", "presentationeditor/main/app/view/ChartSettings", "presentationeditor/main/app/view/TableSettings", "presentationeditor/main/app/view/ShapeSettings", "presentationeditor/main/app/view/SlideSettings", "common/main/lib/component/Scroller"], function (menuTemplate, $, _, Backbone) {
|
||||
PE.Views.RightMenu = Backbone.View.extend(_.extend({
|
||||
el: "#right-menu",
|
||||
template: _.template(menuTemplate),
|
||||
events: {},
|
||||
initialize: function () {
|
||||
this.minimizedMode = true;
|
||||
this.btnText = new Common.UI.Button({
|
||||
hint: this.txtParagraphSettings,
|
||||
asctype: c_oAscTypeSelectElement.Paragraph,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this.btnTable = new Common.UI.Button({
|
||||
hint: this.txtTableSettings,
|
||||
asctype: c_oAscTypeSelectElement.Table,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this.btnImage = new Common.UI.Button({
|
||||
hint: this.txtImageSettings,
|
||||
asctype: c_oAscTypeSelectElement.Image,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this.btnSlide = new Common.UI.Button({
|
||||
hint: this.txtSlideSettings,
|
||||
asctype: c_oAscTypeSelectElement.Slide,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this.btnChart = new Common.UI.Button({
|
||||
hint: this.txtChartSettings,
|
||||
asctype: c_oAscTypeSelectElement.Chart,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this.btnShape = new Common.UI.Button({
|
||||
hint: this.txtShapeSettings,
|
||||
asctype: c_oAscTypeSelectElement.Shape,
|
||||
enableToggle: true,
|
||||
disabled: true,
|
||||
toggleGroup: "tabpanelbtnsGroup"
|
||||
});
|
||||
this._settings = [];
|
||||
this._settings[c_oAscTypeSelectElement.Paragraph] = {
|
||||
panel: "id-paragraph-settings",
|
||||
btn: this.btnText
|
||||
};
|
||||
this._settings[c_oAscTypeSelectElement.Table] = {
|
||||
panel: "id-table-settings",
|
||||
btn: this.btnTable
|
||||
};
|
||||
this._settings[c_oAscTypeSelectElement.Image] = {
|
||||
panel: "id-image-settings",
|
||||
btn: this.btnImage
|
||||
};
|
||||
this._settings[c_oAscTypeSelectElement.Slide] = {
|
||||
panel: "id-slide-settings",
|
||||
btn: this.btnSlide
|
||||
};
|
||||
this._settings[c_oAscTypeSelectElement.Shape] = {
|
||||
panel: "id-shape-settings",
|
||||
btn: this.btnShape
|
||||
};
|
||||
this._settings[c_oAscTypeSelectElement.Chart] = {
|
||||
panel: "id-chart-settings",
|
||||
btn: this.btnChart
|
||||
};
|
||||
return this;
|
||||
},
|
||||
render: function () {
|
||||
var el = $(this.el);
|
||||
this.trigger("render:before", this);
|
||||
el.css("width", "40px");
|
||||
el.show();
|
||||
el.html(this.template({}));
|
||||
this.btnText.el = $("#id-right-menu-text");
|
||||
this.btnText.render();
|
||||
this.btnTable.el = $("#id-right-menu-table");
|
||||
this.btnTable.render();
|
||||
this.btnImage.el = $("#id-right-menu-image");
|
||||
this.btnImage.render();
|
||||
this.btnSlide.el = $("#id-right-menu-slide");
|
||||
this.btnSlide.render();
|
||||
this.btnChart.el = $("#id-right-menu-chart");
|
||||
this.btnChart.render();
|
||||
this.btnShape.el = $("#id-right-menu-shape");
|
||||
this.btnShape.render();
|
||||
this.btnText.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnTable.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnImage.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnSlide.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnChart.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.btnShape.on("click", _.bind(this.onBtnMenuClick, this));
|
||||
this.paragraphSettings = new PE.Views.ParagraphSettings();
|
||||
this.slideSettings = new PE.Views.SlideSettings();
|
||||
this.imageSettings = new PE.Views.ImageSettings();
|
||||
this.chartSettings = new PE.Views.ChartSettings();
|
||||
this.tableSettings = new PE.Views.TableSettings();
|
||||
this.shapeSettings = new PE.Views.ShapeSettings();
|
||||
if (_.isUndefined(this.scroller)) {
|
||||
this.scroller = new Common.UI.Scroller({
|
||||
el: $(this.el).find(".right-panel"),
|
||||
suppressScrollX: true,
|
||||
useKeyboard: false
|
||||
});
|
||||
}
|
||||
this.trigger("render:after", this);
|
||||
return this;
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
var fire = function () {
|
||||
this.fireEvent("editcomplete", this);
|
||||
};
|
||||
this.paragraphSettings.setApi(api).on("editcomplete", _.bind(fire, this));
|
||||
this.slideSettings.setApi(api).on("editcomplete", _.bind(fire, this));
|
||||
this.imageSettings.setApi(api).on("editcomplete", _.bind(fire, this));
|
||||
this.chartSettings.setApi(api).on("editcomplete", _.bind(fire, this));
|
||||
this.tableSettings.setApi(api).on("editcomplete", _.bind(fire, this));
|
||||
this.shapeSettings.setApi(api).on("editcomplete", _.bind(fire, this));
|
||||
},
|
||||
setMode: function (mode) {},
|
||||
onBtnMenuClick: function (btn, e) {
|
||||
var target_pane = $("#" + this._settings[btn.options.asctype].panel);
|
||||
var target_pane_parent = target_pane.parent();
|
||||
if (btn.pressed) {
|
||||
if (this.minimizedMode) {
|
||||
$(this.el).width(MENU_SCALE_PART);
|
||||
target_pane_parent.css("display", "inline-block");
|
||||
this.minimizedMode = false;
|
||||
window.localStorage.setItem("pe-hidden-right-settings", 0);
|
||||
}
|
||||
target_pane_parent.find("> .active").removeClass("active");
|
||||
target_pane.addClass("active");
|
||||
if (this.scroller) {
|
||||
this.scroller.scrollTop(0);
|
||||
}
|
||||
this._settings[c_oAscTypeSelectElement.Slide].isCurrent = (btn.options.asctype == c_oAscTypeSelectElement.Slide);
|
||||
} else {
|
||||
target_pane_parent.css("display", "none");
|
||||
$(this.el).width(SCALE_MIN);
|
||||
this.minimizedMode = true;
|
||||
window.localStorage.setItem("pe-hidden-right-settings", 1);
|
||||
}
|
||||
this.fireEvent("rightmenuclick", [this, btn.options.asctype, this.minimizedMode]);
|
||||
},
|
||||
SetActivePane: function (type, open) {
|
||||
if (this.minimizedMode && open !== true || this._settings[type] === undefined) {
|
||||
return;
|
||||
}
|
||||
if (this.minimizedMode) {
|
||||
this._settings[type].btn.toggle(true, false);
|
||||
this._settings[type].btn.trigger("click", this._settings[type].btn);
|
||||
} else {
|
||||
var target_pane = $("#" + this._settings[type].panel);
|
||||
if (!target_pane.hasClass("active")) {
|
||||
target_pane.parent().find("> .active").removeClass("active");
|
||||
target_pane.addClass("active");
|
||||
if (this.scroller) {
|
||||
this.scroller.update();
|
||||
}
|
||||
}
|
||||
if (!this._settings[type].btn.isActive()) {
|
||||
this._settings[type].btn.toggle(true, false);
|
||||
}
|
||||
}
|
||||
},
|
||||
GetActivePane: function () {
|
||||
return (this.minimizedMode) ? null : $(".settings-panel.active")[0].id;
|
||||
},
|
||||
SetDisabled: function (id, disabled, all) {
|
||||
if (all) {
|
||||
this.slideSettings.SetSlideDisabled(disabled, disabled, disabled);
|
||||
this.paragraphSettings.disableControls(disabled);
|
||||
this.shapeSettings.disableControls(disabled);
|
||||
this.tableSettings.disableControls(disabled);
|
||||
this.imageSettings.disableControls(disabled);
|
||||
this.chartSettings.disableControls(disabled);
|
||||
} else {
|
||||
var cmp = $("#" + id);
|
||||
if (disabled !== cmp.hasClass("disabled")) {
|
||||
cmp.toggleClass("disabled", disabled);
|
||||
(disabled) ? cmp.attr({
|
||||
disabled: disabled
|
||||
}) : cmp.removeAttr("disabled");
|
||||
}
|
||||
}
|
||||
},
|
||||
clearSelection: function () {
|
||||
var target_pane = $(".right-panel");
|
||||
target_pane.find("> .active").removeClass("active");
|
||||
_.each(this._settings, function (item) {
|
||||
if (item.btn.isActive()) {
|
||||
item.btn.toggle(false, true);
|
||||
}
|
||||
});
|
||||
target_pane.css("display", "none");
|
||||
$(this.el).width(SCALE_MIN);
|
||||
this.minimizedMode = true;
|
||||
window.localStorage.setItem("pe-hidden-right-settings", 1);
|
||||
Common.NotificationCenter.trigger("layout:changed", "rightmenu");
|
||||
},
|
||||
txtParagraphSettings: "Text Settings",
|
||||
txtImageSettings: "Image Settings",
|
||||
txtTableSettings: "Table Settings",
|
||||
txtShapeSettings: "Shape Settings",
|
||||
txtSlideSettings: "Slide Settings",
|
||||
txtChartSettings: "Chart Settings"
|
||||
},
|
||||
PE.Views.RightMenu || {}));
|
||||
});
|
||||
@@ -1,344 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.model.PatternDataModel", {
|
||||
extend: "Ext.data.Model",
|
||||
fields: [{
|
||||
name: "imageUrl"
|
||||
},
|
||||
{
|
||||
name: "imageStyle"
|
||||
},
|
||||
{
|
||||
name: "imageCls"
|
||||
},
|
||||
{
|
||||
name: "title"
|
||||
},
|
||||
{
|
||||
name: "data"
|
||||
},
|
||||
{
|
||||
name: "uid"
|
||||
}]
|
||||
});
|
||||
Ext.define("PE.view.RightPanel", {
|
||||
extend: "Ext.container.Container",
|
||||
alias: "widget.perightpanel",
|
||||
width: 220,
|
||||
layout: {
|
||||
type: "auto"
|
||||
},
|
||||
autoScroll: true,
|
||||
cls: "asc-right-panel-container",
|
||||
preventHeader: true,
|
||||
requires: ["Ext.toolbar.Toolbar", "Ext.container.Container", "Common.plugin.ScrollPane", "PE.view.TableSettings", "PE.view.ParagraphSettings", "PE.view.ImageSettings", "PE.view.ShapeSettings", "PE.view.SlideSettings", "Ext.button.Button", "Ext.panel.Panel"],
|
||||
uses: ["Ext.DomHelper", "Ext.util.Cookies"],
|
||||
listeners: {
|
||||
afterrender: function () {
|
||||
var owner = this.ownerCt;
|
||||
if (Ext.isDefined(owner)) {
|
||||
owner.addListener("resize", Ext.bind(this.resizeRightPanels, this));
|
||||
}
|
||||
}
|
||||
},
|
||||
resizeRightPanels: function (cnt) {
|
||||
this.doComponentLayout();
|
||||
this.hideMenus();
|
||||
},
|
||||
constructor: function (config) {
|
||||
this.callParent(arguments);
|
||||
this.initConfig(config);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
me.editMode = true;
|
||||
me.minimizedMode = true;
|
||||
me.plugins = [{
|
||||
ptype: "scrollpane",
|
||||
pluginId: "scrollpane",
|
||||
areaSelector: ".x-container",
|
||||
settings: {
|
||||
enableKeyboardNavigation: true,
|
||||
verticalGutter: 0
|
||||
}
|
||||
}];
|
||||
me.callParent(arguments);
|
||||
},
|
||||
updateScrollPane: function () {
|
||||
var me = this;
|
||||
me.getPlugin("scrollpane").updateScrollPane();
|
||||
},
|
||||
onFocusObject: function (SelectedObjects) {
|
||||
if (!this.editMode) {
|
||||
return;
|
||||
}
|
||||
for (var i = 0; i < this._settings.length; i++) {
|
||||
if (this._settings[i]) {
|
||||
this._settings[i].hidden = 1;
|
||||
this._settings[i].locked = undefined;
|
||||
}
|
||||
}
|
||||
this._settings[c_oAscTypeSelectElement.Slide].hidden = 0;
|
||||
for (i = 0; i < SelectedObjects.length; i++) {
|
||||
var type = SelectedObjects[i].get_ObjectType();
|
||||
if (type >= this._settings.length || this._settings[type] === undefined) {
|
||||
continue;
|
||||
}
|
||||
this._settings[type].props = SelectedObjects[i].get_ObjectValue();
|
||||
this._settings[type].hidden = 0;
|
||||
if (type == c_oAscTypeSelectElement.Slide) {
|
||||
this._settings[type].locked = this._settings[type].props.get_LockDelete();
|
||||
this._settings[type].lockedBackground = this._settings[type].props.get_LockBackground();
|
||||
this._settings[type].lockedEffects = this._settings[type].props.get_LockTranzition();
|
||||
this._settings[type].lockedTiming = this._settings[type].props.get_LockTiming();
|
||||
} else {
|
||||
this._settings[type].locked = this._settings[type].props.get_Locked();
|
||||
}
|
||||
}
|
||||
if (this._settings[c_oAscTypeSelectElement.Slide].locked) {
|
||||
for (i = 0; i < this._settings.length; i++) {
|
||||
if (this._settings[i]) {
|
||||
this._settings[i].locked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
var lastactive = -1,
|
||||
currentactive, priorityactive = -1;
|
||||
for (i = 0; i < this._settings.length; i++) {
|
||||
if (this._settings[i] === undefined) {
|
||||
continue;
|
||||
}
|
||||
if (this._settings[i].hidden) {
|
||||
if (!this._settings[i].btn.isDisabled()) {
|
||||
this._settings[i].btn.setDisabled(true);
|
||||
}
|
||||
if (this.TabPanel.getLayout().getActiveItem() == this._settings[i].panel) {
|
||||
currentactive = -1;
|
||||
}
|
||||
} else {
|
||||
if (this._settings[i].btn.isDisabled()) {
|
||||
this._settings[i].btn.setDisabled(false);
|
||||
}
|
||||
if (i != c_oAscTypeSelectElement.Slide) {
|
||||
lastactive = i;
|
||||
}
|
||||
if (this._settings[i].needShow) {
|
||||
this._settings[i].needShow = false;
|
||||
priorityactive = i;
|
||||
} else {
|
||||
if (i != c_oAscTypeSelectElement.Slide || this._settings[i].isCurrent) {
|
||||
if (this.TabPanel.getLayout().getActiveItem() == this._settings[i].panel) {
|
||||
currentactive = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (i == c_oAscTypeSelectElement.Slide) {
|
||||
if (this._settings[i].locked !== undefined) {
|
||||
this._settings[i].panel.setSlideDisabled(this._settings[i].lockedBackground || this._settings[i].locked, this._settings[i].lockedEffects || this._settings[i].locked, this._settings[i].lockedTiming || this._settings[i].locked);
|
||||
}
|
||||
} else {
|
||||
if (this._settings[i].panel.isDisabled() !== this._settings[i].locked) {
|
||||
this._settings[i].panel.setDisabled(this._settings[i].locked);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!this.minimizedMode) {
|
||||
var active;
|
||||
if (priorityactive > -1) {
|
||||
active = priorityactive;
|
||||
} else {
|
||||
if (currentactive >= 0) {
|
||||
active = currentactive;
|
||||
} else {
|
||||
if (lastactive >= 0) {
|
||||
active = lastactive;
|
||||
} else {
|
||||
active = c_oAscTypeSelectElement.Slide;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (active !== undefined) {
|
||||
if (!this._settings[active].btn.pressed) {
|
||||
this._settings[active].btn.toggle();
|
||||
} else {
|
||||
this._settings[active].panel.ChangeSettings.call(this._settings[active].panel, this._settings[active].props);
|
||||
}
|
||||
}
|
||||
}
|
||||
this._settings[c_oAscTypeSelectElement.Image].needShow = false;
|
||||
this._settings[c_oAscTypeSelectElement.Shape].needShow = false;
|
||||
},
|
||||
onInsertTable: function () {
|
||||
this._settings[c_oAscTypeSelectElement.Table].needShow = true;
|
||||
},
|
||||
onInsertImage: function () {
|
||||
this._settings[c_oAscTypeSelectElement.Image].needShow = true;
|
||||
},
|
||||
onInsertShape: function () {
|
||||
this._settings[c_oAscTypeSelectElement.Shape].needShow = true;
|
||||
},
|
||||
setApi: function (api) {
|
||||
this.api = api;
|
||||
return this;
|
||||
},
|
||||
setMode: function (mode) {
|
||||
this.editMode = mode.isEdit;
|
||||
},
|
||||
FillAutoShapes: function () {
|
||||
this.ShapePanel.FillAutoShapes();
|
||||
},
|
||||
hideMenus: function () {
|
||||
if (this._settings) {
|
||||
for (var i = 0; i < this._settings.length; i++) {
|
||||
if (this._settings[i] === undefined) {
|
||||
continue;
|
||||
}
|
||||
if (Ext.isDefined(this._settings[i].panel.hideMenus)) {
|
||||
this._settings[i].panel.hideMenus();
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
this.ParagraphPanel.updateMetricUnit();
|
||||
this.ImagePanel.updateMetricUnit();
|
||||
},
|
||||
SendThemeColors: function (effectcolors, standartcolors) {
|
||||
this.effectcolors = effectcolors;
|
||||
if (standartcolors && standartcolors.length > 0) {
|
||||
this.standartcolors = standartcolors;
|
||||
}
|
||||
if (this.ShapePanel && this.TablePanel && this.SlidePanel) {
|
||||
this.ShapePanel.SendThemeColors(effectcolors, standartcolors);
|
||||
this.TablePanel.SendThemeColors(effectcolors, standartcolors);
|
||||
this.SlidePanel.SendThemeColors(effectcolors, standartcolors);
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
var me = this;
|
||||
me.panelHolder = Ext.create("Ext.container.Container", {
|
||||
layout: {
|
||||
type: "anchor"
|
||||
},
|
||||
items: [me.TabPanel = Ext.create("Ext.panel.Panel", {
|
||||
hidden: true,
|
||||
id: "view-tab-panel",
|
||||
cls: "asc-right-tabpanel",
|
||||
preventHeader: true,
|
||||
layout: "card",
|
||||
items: [me.SlidePanel = Ext.create("PE.view.SlideSettings", {
|
||||
id: "view-slide-settings",
|
||||
cls: "asc-right-panel",
|
||||
type: c_oAscTypeSelectElement.Slide
|
||||
}), me.ShapePanel = Ext.create("PE.view.ShapeSettings", {
|
||||
id: "view-shape-settings",
|
||||
cls: "asc-right-panel",
|
||||
type: c_oAscTypeSelectElement.Shape
|
||||
}), me.ParagraphPanel = Ext.create("PE.view.ParagraphSettings", {
|
||||
id: "view-paragraph-settings",
|
||||
cls: "asc-right-panel",
|
||||
type: c_oAscTypeSelectElement.Paragraph
|
||||
}), me.TablePanel = Ext.create("PE.view.TableSettings", {
|
||||
id: "view-table-settings",
|
||||
cls: "asc-right-panel",
|
||||
type: c_oAscTypeSelectElement.Table
|
||||
}), me.ImagePanel = Ext.create("PE.view.ImageSettings", {
|
||||
id: "view-image-settings",
|
||||
cls: "asc-right-panel",
|
||||
type: c_oAscTypeSelectElement.Image
|
||||
})],
|
||||
listeners: {
|
||||
afterlayout: function () {
|
||||
me.updateScrollPane();
|
||||
}
|
||||
}
|
||||
})],
|
||||
listeners: {
|
||||
afterlayout: function () {
|
||||
me.updateScrollPane();
|
||||
}
|
||||
}
|
||||
});
|
||||
me.add(me.panelHolder);
|
||||
me._settings = [];
|
||||
me._settings[c_oAscTypeSelectElement.Paragraph] = {
|
||||
panel: me.ParagraphPanel,
|
||||
btn: me.btnText,
|
||||
hidden: 1,
|
||||
locked: false
|
||||
};
|
||||
me._settings[c_oAscTypeSelectElement.Table] = {
|
||||
panel: me.TablePanel,
|
||||
btn: me.btnTable,
|
||||
hidden: 1,
|
||||
locked: false
|
||||
};
|
||||
me._settings[c_oAscTypeSelectElement.Image] = {
|
||||
panel: me.ImagePanel,
|
||||
btn: me.btnImage,
|
||||
hidden: 1,
|
||||
locked: false
|
||||
};
|
||||
me._settings[c_oAscTypeSelectElement.Shape] = {
|
||||
panel: me.ShapePanel,
|
||||
btn: me.btnShape,
|
||||
hidden: 1,
|
||||
locked: false
|
||||
};
|
||||
me._settings[c_oAscTypeSelectElement.Slide] = {
|
||||
panel: me.SlidePanel,
|
||||
btn: me.btnSlide,
|
||||
hidden: 1,
|
||||
locked: false
|
||||
};
|
||||
if (this.api) {
|
||||
this.ShapePanel.setApi(this.api);
|
||||
this.ImagePanel.setApi(this.api);
|
||||
this.ParagraphPanel.setApi(this.api);
|
||||
this.TablePanel.setApi(this.api);
|
||||
this.SlidePanel.setApi(this.api);
|
||||
}
|
||||
if (this.editMode && this.api) {
|
||||
var selectedElements = this.api.getSelectedElements();
|
||||
if (selectedElements.length > 0) {
|
||||
this.onFocusObject(selectedElements);
|
||||
}
|
||||
}
|
||||
if (this.effectcolors && this.standartcolors) {
|
||||
this.ShapePanel.SendThemeColors(this.effectcolors, this.standartcolors);
|
||||
this.TablePanel.SendThemeColors(this.effectcolors, this.standartcolors);
|
||||
this.SlidePanel.SendThemeColors(this.effectcolors, this.standartcolors);
|
||||
}
|
||||
}
|
||||
});
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,349 +1,226 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.SlideSizeSettings", {
|
||||
extend: "Ext.window.Window",
|
||||
alias: "widget.peslidesizesettings",
|
||||
requires: ["Ext.window.Window", "Ext.form.field.ComboBox", "Common.component.MetricSpinner", "Ext.Array", "Common.plugin.ComboBoxScrollPane"],
|
||||
cls: "asc-advanced-settings-window",
|
||||
modal: true,
|
||||
resizable: false,
|
||||
plain: true,
|
||||
constrain: true,
|
||||
height: 230,
|
||||
width: 270,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
listeners: {
|
||||
show: function () {
|
||||
this._spnWidth.focus(false, 500);
|
||||
}
|
||||
},
|
||||
initComponent: function () {
|
||||
var me = this;
|
||||
this.addEvents("onmodalresult");
|
||||
this._noApply = false;
|
||||
this._sizeIdx = 0;
|
||||
this._spacer = Ext.create("Ext.toolbar.Spacer", {
|
||||
width: "100%",
|
||||
height: 10,
|
||||
html: '<div style="width: 100%; height: 40%; border-bottom: 1px solid #C7C7C7"></div>'
|
||||
});
|
||||
this.cmbSlideSize = Ext.widget("combo", {
|
||||
store: Ext.create("Ext.data.Store", {
|
||||
fields: ["description", "type", "size"],
|
||||
data: [{
|
||||
type: 1,
|
||||
description: me.txtStandard,
|
||||
size: [254, 190.5]
|
||||
},
|
||||
{
|
||||
type: 2,
|
||||
description: me.txtWidescreen1,
|
||||
size: [254, 143]
|
||||
},
|
||||
{
|
||||
type: 3,
|
||||
description: me.txtWidescreen2,
|
||||
size: [254, 158.7]
|
||||
},
|
||||
{
|
||||
type: 4,
|
||||
description: me.txtLetter,
|
||||
size: [254, 190.5]
|
||||
},
|
||||
{
|
||||
type: 5,
|
||||
description: me.txtLedger,
|
||||
size: [338.3, 253.7]
|
||||
},
|
||||
{
|
||||
type: 6,
|
||||
description: me.txtA3,
|
||||
size: [355.6, 266.7]
|
||||
},
|
||||
{
|
||||
type: 7,
|
||||
description: me.txtA4,
|
||||
size: [275, 190.5]
|
||||
},
|
||||
{
|
||||
type: 8,
|
||||
description: me.txtB4,
|
||||
size: [300.7, 225.5]
|
||||
},
|
||||
{
|
||||
type: 9,
|
||||
description: me.txtB5,
|
||||
size: [199.1, 149.3]
|
||||
},
|
||||
{
|
||||
type: 10,
|
||||
description: me.txt35,
|
||||
size: [285.7, 190.5]
|
||||
},
|
||||
{
|
||||
type: 11,
|
||||
description: me.txtOverhead,
|
||||
size: [254, 190.5]
|
||||
},
|
||||
{
|
||||
type: 12,
|
||||
description: me.txtBanner,
|
||||
size: [203.2, 25.4]
|
||||
},
|
||||
{
|
||||
type: -1,
|
||||
description: me.txtCustom,
|
||||
size: []
|
||||
}]
|
||||
}),
|
||||
displayField: "description",
|
||||
valueField: "type",
|
||||
queryMode: "local",
|
||||
editable: false,
|
||||
value: me.txtStandard,
|
||||
listeners: {
|
||||
select: Ext.bind(function (combo, records, eOpts) {
|
||||
me._sizeIdx = records[0].index;
|
||||
combo.blur();
|
||||
me._noApply = true;
|
||||
if (records[0].index == 12) {} else {
|
||||
me._spnWidth.setValue(Common.MetricSettings.fnRecalcFromMM(records[0].data.size[0]));
|
||||
me._spnHeight.setValue(Common.MetricSettings.fnRecalcFromMM(records[0].data.size[1]));
|
||||
}
|
||||
me._noApply = false;
|
||||
},
|
||||
this)
|
||||
}
|
||||
});
|
||||
this.cmbSlideSize.select(this.cmbSlideSize.getStore().getAt(0));
|
||||
this._spnWidth = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "slide-advanced-spin-width",
|
||||
readOnly: false,
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
step: 0.1,
|
||||
defaultUnit: "cm",
|
||||
value: "25.4 cm",
|
||||
width: 75,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (!me._noApply && me._sizeIdx != 12) {
|
||||
me.cmbSlideSize.select(me.cmbSlideSize.getStore().getAt(12));
|
||||
me._sizeIdx = 12;
|
||||
}
|
||||
},
|
||||
this),
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
me.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
me.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this._spnHeight = Ext.create("Common.component.MetricSpinner", {
|
||||
id: "slide-advanced-span-height",
|
||||
readOnly: false,
|
||||
maxValue: 55.88,
|
||||
minValue: 0,
|
||||
step: 0.1,
|
||||
defaultUnit: "cm",
|
||||
value: "19.05 cm",
|
||||
width: 75,
|
||||
listeners: {
|
||||
change: Ext.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (!me._noApply && me._sizeIdx != 12) {
|
||||
me.cmbSlideSize.select(me.cmbSlideSize.getStore().getAt(12));
|
||||
me._sizeIdx = 12;
|
||||
}
|
||||
},
|
||||
this),
|
||||
specialkey: function (field, e) {
|
||||
if (e.getKey() == e.ENTER) {
|
||||
me.btnOk.fireEvent("click");
|
||||
} else {
|
||||
if (e.getKey() == e.ESC) {
|
||||
me.btnCancel.fireEvent("click");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.label = Ext.widget("label", {
|
||||
width: "100%",
|
||||
margin: "0 0 2 0",
|
||||
style: "font-weight: bold;"
|
||||
});
|
||||
this.items = [{
|
||||
xtype: "container",
|
||||
height: 136,
|
||||
padding: "18 25",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.label.cloneConfig({
|
||||
text: me.textSlideSize
|
||||
}), this.cmbSlideSize, {
|
||||
xtype: "tbspacer",
|
||||
height: 10
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
height: 44,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.label.cloneConfig({
|
||||
text: me.textWidth
|
||||
}), this._spnWidth]
|
||||
},
|
||||
{
|
||||
xtype: "tbspacer",
|
||||
width: 18
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this.label.cloneConfig({
|
||||
text: me.textHeight
|
||||
}), this._spnHeight]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
this._spacer.cloneConfig(), {
|
||||
xtype: "container",
|
||||
height: 40,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "center",
|
||||
pack: "center"
|
||||
},
|
||||
items: [{
|
||||
xtype: "container",
|
||||
width: 182,
|
||||
height: 24,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "middle"
|
||||
},
|
||||
items: [this.btnOk = Ext.widget("button", {
|
||||
cls: "asc-blue-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
margin: "0 5px 0 0",
|
||||
text: this.okButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.fireEvent("onmodalresult", 1);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
}), this.btnCancel = Ext.widget("button", {
|
||||
cls: "asc-darkgray-button",
|
||||
width: 86,
|
||||
height: 22,
|
||||
text: this.cancelButtonText,
|
||||
listeners: {
|
||||
click: function (btn) {
|
||||
this.fireEvent("onmodalresult", 0);
|
||||
this.close();
|
||||
},
|
||||
scope: this
|
||||
}
|
||||
})]
|
||||
}]
|
||||
}];
|
||||
this.callParent(arguments);
|
||||
this.setTitle(this.textTitle);
|
||||
},
|
||||
afterRender: function () {
|
||||
this.callParent(arguments);
|
||||
},
|
||||
setSettings: function (type, pagewitdh, pageheight) {
|
||||
this._spnWidth.setValue(Common.MetricSettings.fnRecalcFromMM(pagewitdh));
|
||||
this._spnHeight.setValue(Common.MetricSettings.fnRecalcFromMM(pageheight));
|
||||
this.cmbSlideSize.select(this.cmbSlideSize.getStore().getAt((type < 0) ? 12 : type));
|
||||
},
|
||||
getSettings: function () {
|
||||
var props = [(this._sizeIdx < 12) ? this._sizeIdx : -1, Common.MetricSettings.fnRecalcToMM(this._spnWidth.getNumberValue()), Common.MetricSettings.fnRecalcToMM(this._spnHeight.getNumberValue())];
|
||||
return props;
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
var spinners = this.query("commonmetricspinner");
|
||||
if (spinners) {
|
||||
for (var i = 0; i < spinners.length; i++) {
|
||||
var spinner = spinners[i];
|
||||
spinner.setDefaultUnit(Common.MetricSettings.metricName[Common.MetricSettings.getCurrentMetric()]);
|
||||
spinner.setStep(Common.MetricSettings.getCurrentMetric() == Common.MetricSettings.c_MetricUnits.cm ? 0.1 : 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
textTitle: "Slide Size Settings",
|
||||
textSlideSize: "Slide Size",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok",
|
||||
txtStandard: "Standard (4:3)",
|
||||
txtWidescreen1: "Widescreen (16:9)",
|
||||
txtWidescreen2: "Widescreen (16:10)",
|
||||
txtLetter: "Letter Paper (8.5x11 in)",
|
||||
txtLedger: "Ledger Paper (11x17 in)",
|
||||
txtA3: "A3 Paper (297x420 mm)",
|
||||
txtA4: "A4 Paper (210x297 mm)",
|
||||
txtB4: "B4 (ICO) Paper (250x353 mm)",
|
||||
txtB5: "B5 (ICO) Paper (176x250 mm)",
|
||||
txt35: "35 mm Slides",
|
||||
txtOverhead: "Overhead",
|
||||
txtBanner: "Banner",
|
||||
txtCustom: "Custom"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["common/main/lib/component/Window", "common/main/lib/component/ComboBox"], function () {
|
||||
PE.Views.SlideSizeSettings = Common.UI.Window.extend(_.extend({
|
||||
options: {
|
||||
width: 250,
|
||||
header: true,
|
||||
style: "min-width: 250px;",
|
||||
cls: "modal-dlg",
|
||||
id: "window-slide-size-settings"
|
||||
},
|
||||
initialize: function (options) {
|
||||
_.extend(this.options, {
|
||||
title: this.textTitle
|
||||
},
|
||||
options || {});
|
||||
this.template = ['<div class="box" style="height: 95px;">', '<div class="input-row">', '<label class="text columns-text" style="font-weight: bold;">' + this.textSlideSize + "</label>", "</div>", '<div id="slide-size-combo" class="" style="margin-bottom: 10px;"></div>', '<table cols="2" style="width: 100%;margin-bottom: 10px;">', "<tr>", '<td class="padding-small" style="padding-right: 10px;">', '<label class="input-label" style="font-weight: bold;">' + this.textWidth + "</label>", '<div id="slide-size-spin-width"></div>', "</td>", '<td class="padding-small" style="padding-left: 10px;">', '<label class="input-label" style="font-weight: bold;">' + this.textHeight + "</label>", '<div id="slide-size-spin-height"></div>', "</td>", "</tr>", "</table>", "</div>", '<div class="separator horizontal"/>', '<div class="footer center">', '<button class="btn normal dlg-btn primary" result="ok" style="margin-right: 10px;">' + this.okButtonText + "</button>", '<button class="btn normal dlg-btn" result="cancel">' + this.cancelButtonText + "</button>", "</div>"].join("");
|
||||
this.options.tpl = _.template(this.template, this.options);
|
||||
this.spinners = [];
|
||||
this._noApply = false;
|
||||
Common.UI.Window.prototype.initialize.call(this, this.options);
|
||||
},
|
||||
render: function () {
|
||||
Common.UI.Window.prototype.render.call(this);
|
||||
this.cmbSlideSize = new Common.UI.ComboBox({
|
||||
el: $("#slide-size-combo"),
|
||||
cls: "input-group-nr",
|
||||
style: "width: 100%;",
|
||||
menuStyle: "min-width: 218px;",
|
||||
editable: false,
|
||||
data: [{
|
||||
value: 0,
|
||||
displayValue: this.txtStandard,
|
||||
size: [254, 190.5]
|
||||
},
|
||||
{
|
||||
value: 1,
|
||||
displayValue: this.txtWidescreen1,
|
||||
size: [254, 143]
|
||||
},
|
||||
{
|
||||
value: 2,
|
||||
displayValue: this.txtWidescreen2,
|
||||
size: [254, 158.7]
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
displayValue: this.txtLetter,
|
||||
size: [254, 190.5]
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
displayValue: this.txtLedger,
|
||||
size: [338.3, 253.7]
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
displayValue: this.txtA3,
|
||||
size: [355.6, 266.7]
|
||||
},
|
||||
{
|
||||
value: 6,
|
||||
displayValue: this.txtA4,
|
||||
size: [275, 190.5]
|
||||
},
|
||||
{
|
||||
value: 7,
|
||||
displayValue: this.txtB4,
|
||||
size: [300.7, 225.5]
|
||||
},
|
||||
{
|
||||
value: 8,
|
||||
displayValue: this.txtB5,
|
||||
size: [199.1, 149.3]
|
||||
},
|
||||
{
|
||||
value: 9,
|
||||
displayValue: this.txt35,
|
||||
size: [285.7, 190.5]
|
||||
},
|
||||
{
|
||||
value: 10,
|
||||
displayValue: this.txtOverhead,
|
||||
size: [254, 190.5]
|
||||
},
|
||||
{
|
||||
value: 11,
|
||||
displayValue: this.txtBanner,
|
||||
size: [203.2, 25.4]
|
||||
},
|
||||
{
|
||||
value: -1,
|
||||
displayValue: this.txtCustom,
|
||||
size: []
|
||||
}]
|
||||
});
|
||||
this.cmbSlideSize.setValue(0);
|
||||
this.cmbSlideSize.on("selected", _.bind(function (combo, record) {
|
||||
this._noApply = true;
|
||||
if (record.value < 0) {} else {
|
||||
this.spnWidth.setValue(Common.Utils.Metric.fnRecalcFromMM(record.size[0]), true);
|
||||
this.spnHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(record.size[1]), true);
|
||||
}
|
||||
this._noApply = false;
|
||||
},
|
||||
this));
|
||||
this.spnWidth = new Common.UI.MetricSpinner({
|
||||
el: $("#slide-size-spin-width"),
|
||||
step: 0.1,
|
||||
width: 98,
|
||||
defaultUnit: "cm",
|
||||
value: "25.4 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0
|
||||
});
|
||||
this.spinners.push(this.spnWidth);
|
||||
this.spnWidth.on("change", _.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (!this._noApply && this.cmbSlideSize.getValue() > -1) {
|
||||
this.cmbSlideSize.setValue(-1);
|
||||
}
|
||||
},
|
||||
this));
|
||||
this.spnHeight = new Common.UI.MetricSpinner({
|
||||
el: $("#slide-size-spin-height"),
|
||||
step: 0.1,
|
||||
width: 98,
|
||||
defaultUnit: "cm",
|
||||
value: "19.05 cm",
|
||||
maxValue: 55.88,
|
||||
minValue: 0
|
||||
});
|
||||
this.spinners.push(this.spnHeight);
|
||||
this.spnHeight.on("change", _.bind(function (field, newValue, oldValue, eOpts) {
|
||||
if (!this._noApply && this.cmbSlideSize.getValue() > -1) {
|
||||
this.cmbSlideSize.setValue(-1);
|
||||
}
|
||||
},
|
||||
this));
|
||||
var $window = this.getChild();
|
||||
$window.find(".dlg-btn").on("click", _.bind(this.onBtnClick, this));
|
||||
$window.find("input").on("keypress", _.bind(this.onKeyPress, this));
|
||||
this.updateMetricUnit();
|
||||
},
|
||||
_handleInput: function (state) {
|
||||
if (this.options.handler) {
|
||||
this.options.handler.call(this, this, state);
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
onBtnClick: function (event) {
|
||||
this._handleInput(event.currentTarget.attributes["result"].value);
|
||||
},
|
||||
onKeyPress: function (event) {
|
||||
if (event.keyCode == Common.UI.Keys.RETURN) {
|
||||
this._handleInput("ok");
|
||||
}
|
||||
},
|
||||
setSettings: function (type, pagewitdh, pageheight) {
|
||||
this.spnWidth.setValue(Common.Utils.Metric.fnRecalcFromMM(pagewitdh), true);
|
||||
this.spnHeight.setValue(Common.Utils.Metric.fnRecalcFromMM(pageheight), true);
|
||||
this.cmbSlideSize.setValue(type);
|
||||
},
|
||||
getSettings: function () {
|
||||
var props = [this.cmbSlideSize.getValue(), Common.Utils.Metric.fnRecalcToMM(this.spnWidth.getNumberValue()), Common.Utils.Metric.fnRecalcToMM(this.spnHeight.getNumberValue())];
|
||||
return props;
|
||||
},
|
||||
updateMetricUnit: function () {
|
||||
if (this.spinners) {
|
||||
for (var i = 0; i < this.spinners.length; i++) {
|
||||
var spinner = this.spinners[i];
|
||||
spinner.setDefaultUnit(Common.Utils.Metric.metricName[Common.Utils.Metric.getCurrentMetric()]);
|
||||
spinner.setStep(Common.Utils.Metric.getCurrentMetric() == Common.Utils.Metric.c_MetricUnits.cm ? 0.1 : 1);
|
||||
}
|
||||
}
|
||||
},
|
||||
textTitle: "Slide Size Settings",
|
||||
textSlideSize: "Slide Size",
|
||||
textWidth: "Width",
|
||||
textHeight: "Height",
|
||||
cancelButtonText: "Cancel",
|
||||
okButtonText: "Ok",
|
||||
txtStandard: "Standard (4:3)",
|
||||
txtWidescreen1: "Widescreen (16:9)",
|
||||
txtWidescreen2: "Widescreen (16:10)",
|
||||
txtLetter: "Letter Paper (8.5x11 in)",
|
||||
txtLedger: "Ledger Paper (11x17 in)",
|
||||
txtA3: "A3 Paper (297x420 mm)",
|
||||
txtA4: "A4 Paper (210x297 mm)",
|
||||
txtB4: "B4 (ICO) Paper (250x353 mm)",
|
||||
txtB5: "B5 (ICO) Paper (176x250 mm)",
|
||||
txt35: "35 mm Slides",
|
||||
txtOverhead: "Overhead",
|
||||
txtBanner: "Banner",
|
||||
txtCustom: "Custom"
|
||||
},
|
||||
PE.Views.SlideSizeSettings || {}));
|
||||
});
|
||||
274
OfficeWeb/apps/presentationeditor/main/app/view/StatusBar.js
Normal file
274
OfficeWeb/apps/presentationeditor/main/app/view/StatusBar.js
Normal file
@@ -0,0 +1,274 @@
|
||||
/**
|
||||
* StatusBar View
|
||||
*
|
||||
* Created by Maxim Kadushkin on 8 April 2014
|
||||
* Copyright (c) 2014 Ascensio System SIA. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
define([
|
||||
'text!presentationeditor/main/app/template/StatusBar.template',
|
||||
'backbone',
|
||||
'tip',
|
||||
'common/main/lib/component/Menu',
|
||||
'common/main/lib/component/Window',
|
||||
'presentationeditor/main/app/model/Pages'
|
||||
], function(template, Backbone){
|
||||
'use strict';
|
||||
|
||||
function _onCountPages(count){
|
||||
this.pages.set('count', count);
|
||||
}
|
||||
|
||||
function _onCurrentPage(number){
|
||||
this.pages.set('current', number+1);
|
||||
}
|
||||
|
||||
var _tplPages = _.template('Slide <%= current %> of <%= count %>');
|
||||
|
||||
function _updatePagesCaption(model,value,opts) {
|
||||
$('#status-label-pages').text(
|
||||
Common.Utils.String.format(this.pageIndexText, model.get('current'), model.get('count')) );
|
||||
}
|
||||
|
||||
PE.Views.Statusbar = Backbone.View.extend(_.extend({
|
||||
el: '#statusbar',
|
||||
template: _.template(template),
|
||||
|
||||
events: {
|
||||
},
|
||||
|
||||
api: undefined,
|
||||
pages: undefined,
|
||||
|
||||
initialize: function () {
|
||||
this.pages = new PE.Models.Pages({current:1, count:1});
|
||||
this.pages.on('change', _.bind(_updatePagesCaption,this));
|
||||
},
|
||||
|
||||
render: function () {
|
||||
var me = this;
|
||||
$(this.el).html(this.template({
|
||||
scope: this
|
||||
}));
|
||||
|
||||
this.btnZoomToPage = new Common.UI.Button({
|
||||
el: $('#btn-zoom-topage',this.el),
|
||||
hint: this.tipFitPage,
|
||||
hintAnchor: 'top',
|
||||
toggleGroup: 'status-zoom',
|
||||
enableToggle: true
|
||||
});
|
||||
|
||||
this.btnZoomToWidth = new Common.UI.Button({
|
||||
el: $('#btn-zoom-towidth',this.el),
|
||||
hint: this.tipFitWidth,
|
||||
hintAnchor: 'top',
|
||||
toggleGroup: 'status-zoom',
|
||||
enableToggle: true
|
||||
});
|
||||
|
||||
this.btnZoomDown = new Common.UI.Button({
|
||||
el: $('#btn-zoom-down',this.el),
|
||||
hint: this.tipZoomOut+Common.Utils.String.platformKey('Ctrl+-'),
|
||||
hintAnchor: 'top'
|
||||
});
|
||||
|
||||
this.btnZoomUp = new Common.UI.Button({
|
||||
el: $('#btn-zoom-up',this.el),
|
||||
hint: this.tipZoomIn+Common.Utils.String.platformKey('Ctrl++'),
|
||||
hintAnchor: 'top-right'
|
||||
});
|
||||
|
||||
this.cntZoom = new Common.UI.Button({
|
||||
el: $('.cnt-zoom',this.el),
|
||||
hint: this.tipZoomFactor,
|
||||
hintAnchor: 'top'
|
||||
});
|
||||
this.cntZoom.cmpEl.on('show.bs.dropdown', function () {
|
||||
_.defer(function(){
|
||||
me.api.asc_enableKeyEvents(false);
|
||||
me.cntZoom.cmpEl.find('ul').focus();
|
||||
}, 100);
|
||||
}
|
||||
);
|
||||
this.cntZoom.cmpEl.on('hide.bs.dropdown', function () {
|
||||
_.defer(function(){
|
||||
me.api.asc_enableKeyEvents(true);
|
||||
}, 100);
|
||||
}
|
||||
);
|
||||
|
||||
this.zoomMenu = new Common.UI.Menu({
|
||||
style: 'margin-top:-5px;',
|
||||
menuAlign: 'bl-tl',
|
||||
items: [
|
||||
{ caption: "50%", value: 50 },
|
||||
{ caption: "75%", value: 75 },
|
||||
{ caption: "100%", value: 100 },
|
||||
{ caption: "125%", value: 125 },
|
||||
{ caption: "150%", value: 150 },
|
||||
{ caption: "175%", value: 175 },
|
||||
{ caption: "200%", value: 200 }
|
||||
]
|
||||
});
|
||||
this.zoomMenu.render($('.cnt-zoom',this.el));
|
||||
this.zoomMenu.cmpEl.attr({tabindex: -1});
|
||||
|
||||
/** coauthoring begin **/
|
||||
this.panelUsers = $('#status-users-ct', this.el);
|
||||
this.panelUsers.find('#status-users-block').on('click', _.bind(this.onUsersClick, this));
|
||||
/** coauthoring end **/
|
||||
|
||||
this.txtGoToPage = new Common.UI.InputField({
|
||||
el : $('#status-goto-page'),
|
||||
allowBlank : true,
|
||||
validateOnChange: true,
|
||||
style : 'width: 60px;',
|
||||
maskExp: /[0-9]/,
|
||||
validation : function(value) {
|
||||
if (/(^[0-9]+$)/.test(value)) {
|
||||
value = parseInt(value);
|
||||
if (undefined !== value && value > 0 && value <= me.pages.get('count'))
|
||||
return true;
|
||||
}
|
||||
|
||||
return me.txtPageNumInvalid;
|
||||
}
|
||||
}).on('keypress:after', function(input, e) {
|
||||
var box = me.$el.find('#status-goto-box');
|
||||
if (e.keyCode === Common.UI.Keys.RETURN) {
|
||||
var edit = box.find('input[type=text]'), page = parseInt(edit.val());
|
||||
if (!page || page-- > me.pages.get('count') || page < 0) {
|
||||
edit.select();
|
||||
return false;
|
||||
}
|
||||
|
||||
box.focus(); // for IE
|
||||
box.parent().removeClass('open');
|
||||
|
||||
me.api.goToPage(page);
|
||||
me.api.asc_enableKeyEvents(true);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
var goto = this.$el.find('#status-goto-box');
|
||||
goto.on('click', function() {
|
||||
return false;
|
||||
});
|
||||
goto.parent().on('show.bs.dropdown',
|
||||
function () {
|
||||
me.txtGoToPage.setValue(me.api.getCurrentPage() + 1);
|
||||
me.txtGoToPage.checkValidate();
|
||||
var edit = me.txtGoToPage.$el.find('input');
|
||||
_.defer(function(){edit.focus(); edit.select();}, 100);
|
||||
|
||||
}
|
||||
);
|
||||
goto.parent().on('hide.bs.dropdown',
|
||||
function () { var box = me.$el.find('#status-goto-box');
|
||||
if (me.api && box) {
|
||||
box.focus(); // for IE
|
||||
box.parent().removeClass('open');
|
||||
|
||||
me.api.asc_enableKeyEvents(true);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
setApi: function(api) {
|
||||
this.api = api;
|
||||
|
||||
if (this.api) {
|
||||
this.api.asc_registerCallback('asc_onCountPages', _.bind(_onCountPages, this));
|
||||
this.api.asc_registerCallback('asc_onCurrentPage', _.bind(_onCurrentPage, this));
|
||||
|
||||
/** coauthoring begin **/
|
||||
this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onApiUsersChanged, this));
|
||||
this.api.asc_registerCallback('asc_onParticipantsChanged', _.bind(this.onApiUsersChanged, this));
|
||||
/** coauthoring end **/
|
||||
}
|
||||
|
||||
return this;
|
||||
|
||||
},
|
||||
|
||||
setMode: function(mode) {
|
||||
this.$el.find('.el-edit')[mode.isEdit?'show':'hide']();
|
||||
},
|
||||
|
||||
setVisible: function(visible) {
|
||||
visible
|
||||
? this.show()
|
||||
: this.hide();
|
||||
},
|
||||
|
||||
/** coauthoring begin **/
|
||||
onUsersClick: function() {
|
||||
this.fireEvent('click:users', this);
|
||||
},
|
||||
|
||||
onApiUsersChanged: function(users) {
|
||||
var editusers = [];
|
||||
_.each(users, function(item){
|
||||
if (!item.asc_getView())
|
||||
editusers.push(item);
|
||||
});
|
||||
|
||||
var length = _.size(editusers);
|
||||
this.panelUsers[length > 1 ? 'show' : 'hide']();
|
||||
|
||||
var ttblock = this.panelUsers.find('#status-users-block');
|
||||
if (ttblock.data('bs.tooltip')) ttblock.removeData('bs.tooltip');
|
||||
|
||||
if (length > 1) {
|
||||
this.panelUsers.find('#status-users-count').text(length);
|
||||
|
||||
var tip = this.tipUsers + '<br/><br/>', i = 0;
|
||||
for (var n in editusers) {
|
||||
tip += '\n' + Common.Utils.String.htmlEncode(editusers[n].asc_getUserName());
|
||||
if (++i > 3) break;
|
||||
}
|
||||
|
||||
if (length > 4) {
|
||||
tip += '<br/>' + this.tipMoreUsers.replace('%1', length-4);
|
||||
tip += '<br/><br/>' + this.tipShowUsers;
|
||||
}
|
||||
|
||||
ttblock.tooltip({
|
||||
title: tip,
|
||||
html: true,
|
||||
placement: 'top-left'
|
||||
});
|
||||
}
|
||||
},
|
||||
/** coauthoring end **/
|
||||
|
||||
showStatusMessage: function(message) {
|
||||
$('#status-label-action').text(message);
|
||||
},
|
||||
|
||||
clearStatusMessage: function() {
|
||||
$('#status-label-action').text('');
|
||||
},
|
||||
|
||||
pageIndexText : 'Slide {0} of {1}',
|
||||
goToPageText : 'Go to Slide',
|
||||
tipUsers : 'Document is in the collaborative editing mode.',
|
||||
tipMoreUsers : 'and %1 users.',
|
||||
tipShowUsers : 'To see all users click the icon below.',
|
||||
tipFitPage : 'Fit Slide',
|
||||
tipFitWidth : 'Fit Width',
|
||||
tipZoomIn : 'Zoom In',
|
||||
tipZoomOut : 'Zoom Out',
|
||||
tipZoomFactor : 'Magnification',
|
||||
txtPageNumInvalid: 'Slide number invalid'
|
||||
}, PE.Views.Statusbar || {}));
|
||||
}
|
||||
);
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,54 +0,0 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.UndockedWindow", {
|
||||
extend: "Ext.window.Window",
|
||||
cls: "asc-right-panel-undocked",
|
||||
constrain: true,
|
||||
closable: false,
|
||||
resizable: false,
|
||||
shadow: false,
|
||||
ghost: function () {
|
||||
var instance = this.callParent(arguments);
|
||||
if (!instance.getEl().hasCls("asc-right-panel-undocked-ghost")) {
|
||||
instance.getEl().addCls("asc-right-panel-undocked-ghost");
|
||||
}
|
||||
return instance;
|
||||
},
|
||||
constructor: function (config) {
|
||||
this.callParent(arguments);
|
||||
this.initConfig(config);
|
||||
return this;
|
||||
},
|
||||
initComponent: function () {
|
||||
this.callParent(arguments);
|
||||
}
|
||||
});
|
||||
@@ -1,379 +1,121 @@
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2014
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
Ext.define("PE.view.Viewport", {
|
||||
extend: "Ext.container.Viewport",
|
||||
alias: "widget.peviewport",
|
||||
layout: "fit",
|
||||
requires: ["Common.view.Header", "PE.view.DocumentHolder", "PE.view.MainMenu", "PE.view.File", "PE.view.DocumentStatusInfo", "PE.view.DocumentPreview", "Common.view.ChatPanel"],
|
||||
uses: ["PE.view.Toolbar", "PE.view.RightMenu", "PE.view.CreateFile", "PE.view.RecentFiles", "Common.view.CommentsPanel"],
|
||||
initComponent: function () {
|
||||
this.header = Ext.widget("commonheader", {
|
||||
config: {
|
||||
headerCaption: "Presentation Editor"
|
||||
}
|
||||
});
|
||||
this._documentHolder = Ext.widget("pedocumentholder", {
|
||||
id: "editor_sdk",
|
||||
flex: 1,
|
||||
maintainFlex: true,
|
||||
style: "background-color:#b0b0b0;"
|
||||
});
|
||||
this.applicationUI = Ext.widget("container", {
|
||||
id: "pe-applicationUI",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
flex: 1,
|
||||
hidden: true,
|
||||
hideMode: "offsets",
|
||||
items: [{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
layout: {
|
||||
type: "hbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
xtype: "pemainmenu",
|
||||
id: "view-main-menu",
|
||||
maxWidth: 600,
|
||||
buttonCollection: [{
|
||||
cls: "menuFile",
|
||||
id: "id-menu-file",
|
||||
tooltip: this.tipFile + " (Alt+F)",
|
||||
scale: "full",
|
||||
disabled: true,
|
||||
toggleGroup: "tbMainMenu",
|
||||
items: [{
|
||||
xtype: "pefile",
|
||||
id: "main-menu-file-options",
|
||||
width: "100%",
|
||||
height: "100%"
|
||||
}]
|
||||
},
|
||||
{
|
||||
cls: "menuSearch",
|
||||
scale: "modal",
|
||||
id: "main-menu-search",
|
||||
disabled: true,
|
||||
tooltip: this.tipSearch + " (Ctrl+F)"
|
||||
},
|
||||
{
|
||||
cls: "menuSlides",
|
||||
id: "main-menu-slides",
|
||||
scale: "modal",
|
||||
tooltip: this.tipSlides,
|
||||
disabled: true,
|
||||
listeners: {
|
||||
click: Ext.Function.bind(function (btnCall) {
|
||||
var mainmenu = Ext.getCmp("view-main-menu");
|
||||
mainmenu.slidesBtnVisible = btnCall.pressed;
|
||||
if (btnCall.pressed) {
|
||||
mainmenu.clearSelection(["menuSlides", "menuSearch"]);
|
||||
}
|
||||
}),
|
||||
toggle: function (btn, pressed) {
|
||||
var api = btn.getApi();
|
||||
if (api) {
|
||||
api.ShowThumbnails(pressed);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
cls: "menuComments",
|
||||
id: "id-menu-comments",
|
||||
hideMode: "display",
|
||||
scale: 300,
|
||||
tooltip: this.tipComments + " (Ctrl+Shift+H)",
|
||||
toggleGroup: "tbMainMenu",
|
||||
disabled: true,
|
||||
items: [{
|
||||
xtype: "commoncommentspanel",
|
||||
noQuotes: true,
|
||||
height: "100%"
|
||||
}]
|
||||
},
|
||||
{
|
||||
cls: "menuChat",
|
||||
id: "id-menu-chat",
|
||||
scale: 300,
|
||||
tooltip: this.tipChat + " (Ctrl+Alt+Q)",
|
||||
toggleGroup: "tbMainMenu",
|
||||
disabled: true,
|
||||
items: [{
|
||||
xtype: "commonchatpanel",
|
||||
height: "100%"
|
||||
}]
|
||||
},
|
||||
{
|
||||
cls: "menuAbout",
|
||||
id: "id-menu-about",
|
||||
tooltip: "About",
|
||||
scale: "full",
|
||||
toggleGroup: "tbMainMenu",
|
||||
disabled: true,
|
||||
items: [{
|
||||
xtype: "commonabout",
|
||||
id: "main-menu-about",
|
||||
width: "100%",
|
||||
height: "100%"
|
||||
}]
|
||||
}],
|
||||
listeners: {
|
||||
panelshow: Ext.bind(function (panel, fullScale) {
|
||||
if (fullScale) {
|
||||
var btn = Ext.getCmp("main-menu-search");
|
||||
if (btn.pressed) {
|
||||
btn.toggle();
|
||||
}
|
||||
}
|
||||
var mainmenu = Ext.getCmp("view-main-menu");
|
||||
mainmenu.selectThumbnailsBtn(false);
|
||||
if (!fullScale) {
|
||||
this._documentHolder.changePosition();
|
||||
}
|
||||
},
|
||||
this),
|
||||
panelhide: Ext.bind(function (panel, fullScale) {
|
||||
var mainmenu = Ext.getCmp("view-main-menu");
|
||||
mainmenu.selectThumbnailsBtn(true);
|
||||
if (!fullScale) {
|
||||
this._documentHolder.changePosition();
|
||||
}
|
||||
},
|
||||
this)
|
||||
}
|
||||
},
|
||||
{
|
||||
xtype: "splitter",
|
||||
id: "main-menu-splitter",
|
||||
cls: "splitter-document-area",
|
||||
defaultSplitMin: 300,
|
||||
hidden: true
|
||||
},
|
||||
{
|
||||
xtype: "container",
|
||||
flex: 1,
|
||||
maintainFlex: true,
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [this._documentHolder]
|
||||
}]
|
||||
},
|
||||
this._documentStatus = Ext.widget("documentstatusinfo", {
|
||||
id: "view-status"
|
||||
})]
|
||||
});
|
||||
this.items = {
|
||||
xtype: "container",
|
||||
layout: {
|
||||
type: "vbox",
|
||||
align: "stretch"
|
||||
},
|
||||
items: [{
|
||||
id: "pe-preview",
|
||||
xtype: "pedocumentpreview"
|
||||
},
|
||||
this.header, this.applicationUI]
|
||||
};
|
||||
this.callParent(arguments);
|
||||
},
|
||||
checkCanHotKey: function () {
|
||||
var winElements = Ext.getDoc().query(".x-window");
|
||||
for (var i = 0; i < winElements.length; i++) {
|
||||
var cmp = Ext.getCmp(winElements[i].id);
|
||||
if (cmp && cmp.isVisible() && cmp.modal) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
applyMode: function () {
|
||||
this.hkSaveAs[this.mode.canDownload ? "enable" : "disable"]();
|
||||
this.hkCoAuth[this.mode.canCoAuthoring ? "enable" : "disable"]();
|
||||
this.hkComments[(this.mode.canCoAuthoring && this.mode.isEdit) ? "enable" : "disable"]();
|
||||
},
|
||||
setMode: function (mode, delay) {
|
||||
if (mode.isDisconnected) {
|
||||
if (this.mode === undefined) {
|
||||
this.mode = {};
|
||||
}
|
||||
this.mode.canCoAuthoring = false;
|
||||
} else {
|
||||
this.mode = mode;
|
||||
}
|
||||
if (!delay) {
|
||||
this.applyMode();
|
||||
}
|
||||
},
|
||||
setApi: function (o) {
|
||||
this.api = o;
|
||||
return this;
|
||||
},
|
||||
applyEditorMode: function () {
|
||||
var me = this;
|
||||
me._toolbar = Ext.widget("petoolbar", {
|
||||
id: "view-toolbar"
|
||||
});
|
||||
me.applicationUI.insert(0, me._toolbar);
|
||||
me._rightMenu = Ext.widget("perightmenu", {
|
||||
id: "view-right-menu"
|
||||
});
|
||||
me.applicationUI.items.items[1].add(me._rightMenu);
|
||||
var value = window.localStorage.getItem("pe-hidden-status");
|
||||
if (value !== null && parseInt(value) == 1) {
|
||||
this._documentStatus.setVisible(false);
|
||||
}
|
||||
},
|
||||
createDelayedElements: function () {
|
||||
var _self = this;
|
||||
this.hk = new Ext.util.KeyMap(document, [{
|
||||
key: "f",
|
||||
ctrl: true,
|
||||
shift: false,
|
||||
defaultEventAction: "stopEvent",
|
||||
fn: function (key, e) {
|
||||
var cmp = Ext.getCmp("pe-preview");
|
||||
if (cmp && cmp.isVisible()) {
|
||||
return;
|
||||
}
|
||||
if (_self.checkCanHotKey()) {
|
||||
cmp = Ext.getCmp("view-main-menu");
|
||||
if (cmp) {
|
||||
cmp.selectMenu("menuSearch", "menuSlides");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
key: "f",
|
||||
alt: true,
|
||||
defaultEventAction: "stopEvent",
|
||||
fn: function (key, e) {
|
||||
var cmp = Ext.getCmp("pe-preview");
|
||||
if (cmp && cmp.isVisible()) {
|
||||
return;
|
||||
}
|
||||
if (_self.checkCanHotKey()) {
|
||||
Ext.menu.Manager.hideAll();
|
||||
cmp = Ext.getCmp("view-main-menu");
|
||||
if (cmp) {
|
||||
cmp.selectMenu("menuFile", "menuSlides");
|
||||
}
|
||||
}
|
||||
}
|
||||
}]);
|
||||
this.hkSaveAs = new Ext.util.KeyMap(document, {
|
||||
key: "s",
|
||||
ctrl: true,
|
||||
shift: true,
|
||||
defaultEventAction: "stopEvent",
|
||||
fn: function (key, e) {
|
||||
var cmp = Ext.getCmp("pe-preview");
|
||||
if (cmp && cmp.isVisible()) {
|
||||
return;
|
||||
}
|
||||
if (_self.checkCanHotKey()) {
|
||||
Ext.menu.Manager.hideAll();
|
||||
cmp = Ext.getCmp("view-main-menu");
|
||||
if (cmp) {
|
||||
cmp.selectMenu("menuFile", "menuSlides");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.hkHelp = new Ext.util.KeyMap(document, {
|
||||
key: Ext.EventObject.F1,
|
||||
ctrl: false,
|
||||
shift: false,
|
||||
defaultEventAction: "stopEvent",
|
||||
scope: this,
|
||||
fn: function () {
|
||||
var cmp = Ext.getCmp("pe-preview");
|
||||
if (cmp && cmp.isVisible()) {
|
||||
return;
|
||||
}
|
||||
if (_self.checkCanHotKey()) {
|
||||
Ext.menu.Manager.hideAll();
|
||||
cmp = Ext.getCmp("view-main-menu");
|
||||
if (cmp) {
|
||||
cmp.selectMenu("menuFile", "menuSlides");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
this.hkCoAuth = new Ext.util.KeyMap(document, [{
|
||||
key: "q",
|
||||
ctrl: true,
|
||||
alt: true,
|
||||
defaultEventAction: "stopEvent",
|
||||
fn: function (key, e) {
|
||||
var cmp = Ext.getCmp("pe-preview");
|
||||
if (cmp && cmp.isVisible()) {
|
||||
return;
|
||||
}
|
||||
if (_self.checkCanHotKey()) {
|
||||
cmp = Ext.getCmp("view-main-menu");
|
||||
if (cmp) {
|
||||
cmp.selectMenu("menuChat");
|
||||
}
|
||||
}
|
||||
}
|
||||
}]);
|
||||
this.hkComments = new Ext.util.KeyMap(document, {
|
||||
key: "H",
|
||||
ctrl: true,
|
||||
shift: true,
|
||||
defaultEventAction: "stopEvent",
|
||||
fn: function () {
|
||||
if (_self.checkCanHotKey()) {
|
||||
var cmp = Ext.getCmp("view-main-menu");
|
||||
if (cmp) {
|
||||
cmp.selectMenu("menuComments");
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
Ext.tip.QuickTipManager.init();
|
||||
this.applyMode();
|
||||
},
|
||||
tipFile: "File",
|
||||
tipTitles: "Titles",
|
||||
tipSlides: "Slides",
|
||||
tipSearch: "Search",
|
||||
tipChat: "Chat",
|
||||
tipComments: "Comments"
|
||||
/*
|
||||
* (c) Copyright Ascensio System SIA 2010-2015
|
||||
*
|
||||
* This program is a free software product. You can redistribute it and/or
|
||||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||||
* version 3 as published by the Free Software Foundation. In accordance with
|
||||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||||
* of any third-party rights.
|
||||
*
|
||||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||||
*
|
||||
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
||||
* EU, LV-1021.
|
||||
*
|
||||
* The interactive user interfaces in modified source and object code versions
|
||||
* of the Program must display Appropriate Legal Notices, as required under
|
||||
* Section 5 of the GNU AGPL version 3.
|
||||
*
|
||||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||||
* grant you any rights under trademark law for use of our trademarks.
|
||||
*
|
||||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||||
* well as technical writing content are licensed under the terms of the
|
||||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
*
|
||||
*/
|
||||
define(["text!presentationeditor/main/app/template/Viewport.template", "jquery", "underscore", "backbone", "common/main/lib/component/BaseView", "common/main/lib/component/Layout"], function (viewportTemplate, $, _, Backbone) {
|
||||
PE.Views.Viewport = Backbone.View.extend({
|
||||
el: "#viewport",
|
||||
template: _.template(viewportTemplate),
|
||||
events: {},
|
||||
initialize: function () {},
|
||||
render: function () {
|
||||
var el = $(this.el);
|
||||
el.html(this.template({}));
|
||||
if (Common.Utils.isSafari) {
|
||||
$("body").addClass("safari");
|
||||
$("body").mousewheel(function (e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
});
|
||||
} else {
|
||||
if (Common.Utils.isChrome) {
|
||||
$("body").addClass("chrome");
|
||||
}
|
||||
}
|
||||
var $container = $("#viewport-vbox-layout", el);
|
||||
var items = $container.find(" > .layout-item");
|
||||
this.vlayout = new Common.UI.VBoxLayout({
|
||||
box: $container,
|
||||
items: [{
|
||||
el: items[0],
|
||||
rely: true
|
||||
},
|
||||
{
|
||||
el: items[1],
|
||||
rely: true
|
||||
},
|
||||
{
|
||||
el: items[2],
|
||||
stretch: true
|
||||
},
|
||||
{
|
||||
el: items[3],
|
||||
height: 25
|
||||
}]
|
||||
});
|
||||
$container = $("#viewport-hbox-layout", el);
|
||||
items = $container.find(" > .layout-item");
|
||||
this.hlayout = new Common.UI.HBoxLayout({
|
||||
box: $container,
|
||||
items: [{
|
||||
el: items[0],
|
||||
rely: true,
|
||||
resize: {
|
||||
hidden: true,
|
||||
autohide: false,
|
||||
min: 300,
|
||||
max: 600
|
||||
}
|
||||
},
|
||||
{
|
||||
el: items[1],
|
||||
stretch: true
|
||||
},
|
||||
{
|
||||
el: $(items[2]).hide(),
|
||||
rely: true
|
||||
}]
|
||||
});
|
||||
return this;
|
||||
},
|
||||
applyEditorMode: function () {
|
||||
var me = this,
|
||||
toolbarView = PE.getController("Toolbar").getView("Toolbar"),
|
||||
rightMenuView = PE.getController("RightMenu").getView("RightMenu"),
|
||||
statusBarView = PE.getController("Statusbar").getView("Statusbar");
|
||||
me._toolbar = toolbarView.render();
|
||||
me._rightMenu = rightMenuView.render();
|
||||
var value = window.localStorage.getItem("pe-hidden-status");
|
||||
if (value !== null && parseInt(value) == 1) {
|
||||
statusBarView.setVisible(false);
|
||||
}
|
||||
},
|
||||
setMode: function (mode, delay) {
|
||||
if (mode.isDisconnected) {
|
||||
if (_.isUndefined(this.mode)) {
|
||||
this.mode = {};
|
||||
}
|
||||
this.mode.canCoAuthoring = false;
|
||||
} else {
|
||||
this.mode = mode;
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user