' +
+ '
' +
+ '
' +
// '
' +
'
' +
'' +
@@ -85,6 +89,8 @@ define([
'' +
'
' +
''+
+ '
' +
+ '
' +
'';
@@ -168,7 +174,6 @@ define([
$btnUsers.find('.caption')
.css({'font-size': (count > 1 ? '12px' : '14px'),
- 'font-weight': (count > 1 ? 'bold' : 'normal'),
'margin-top': (count > 1 ? '0' : '-1px')})
.html(count > 1 ? count : '+');
@@ -202,7 +207,7 @@ define([
var me = this;
me.btnGoBack.updateHint(me.textBack);
me.btnGoBack.on('click', function (e) {
- me.fireEvent('go:back', ['page:new']);
+ Common.NotificationCenter.trigger('goback', true);
});
if ( me.logo )
@@ -247,6 +252,22 @@ define([
$saveStatus.addClass('locked');
}
}
+
+ if ( !mode.isEdit ) {
+ if ( me.btnDownload ) {
+ me.btnDownload.updateHint('Download document');
+ me.btnDownload.on('click', function (e) {
+ me.fireEvent('downloadas', ['original']);
+ });
+ }
+
+ if ( me.btnPrint ) {
+ me.btnDownload.updateHint('Print');
+ me.btnPrint.on('click', function (e) {
+ me.fireEvent('print', me);
+ });
+ }
+ }
}
return {
@@ -279,7 +300,7 @@ define([
me.btnGoBack = new Common.UI.Button({
id: 'btn-goback',
- cls: 'btn-toolbar',
+ cls: 'btn-header',
iconCls: 'svgicon svg-btn-goback',
split: true
});
@@ -291,7 +312,6 @@ define([
reset : onResetUsers
});
-
Common.NotificationCenter.on('app:ready', function(mode) {
Common.Utils.asyncCall(onAppReady, me, mode);
});
@@ -335,6 +355,28 @@ define([
}
}
+ if ( !config.isEdit ) {
+ if ( (config.canDownload || config.canDownloadOrigin) && !config.isOffline ) {
+ this.btnDownload = new Common.UI.Button({
+ id: 'btn-download',
+ cls: 'btn-header',
+ iconCls: 'svgicon svg-btn-download'
+ });
+
+ this.btnDownload.render($html.find('#slot-hbtn-download'));
+ }
+
+ if ( config.canPrint ) {
+ this.btnPrint = new Common.UI.Button({
+ id: 'btn-goback',
+ cls: 'btn-header',
+ iconCls: 'svgicon svg-btn-print'
+ });
+
+ this.btnPrint.render($html.find('#slot-hbtn-print'));
+ }
+ }
+
if ( this.documentCaption ) {
$html.find('#rib-doc-name').text(
Common.Utils.String.htmlEncode(this.documentCaption) );
diff --git a/apps/common/main/resources/img/controls/toolbarbig.png b/apps/common/main/resources/img/controls/toolbarbig.png
index 5982df154..a61829eb0 100644
Binary files a/apps/common/main/resources/img/controls/toolbarbig.png and b/apps/common/main/resources/img/controls/toolbarbig.png differ
diff --git a/apps/common/main/resources/img/header/buttons.svg b/apps/common/main/resources/img/header/buttons.svg
new file mode 100644
index 000000000..28656d8d3
--- /dev/null
+++ b/apps/common/main/resources/img/header/buttons.svg
@@ -0,0 +1,35 @@
+
diff --git a/apps/common/main/resources/less/buttons.less b/apps/common/main/resources/less/buttons.less
index 4e2f3a549..0a2535678 100644
--- a/apps/common/main/resources/less/buttons.less
+++ b/apps/common/main/resources/less/buttons.less
@@ -1,3 +1,5 @@
+@x-huge-btn-height: 46px;
+
.btn {
border-radius: 1px;
color: @gray-deep;
@@ -25,7 +27,7 @@
}
&.x-huge {
- .btnsize(45px);
+ .btnsize(@x-huge-btn-height);
}
&[disabled] {
@@ -98,12 +100,11 @@
}
}
- &.x-huge,
- .x-huge {
+ &.x-huge {
@icon-size: 26px;
min-width: 45px;
- height: 45px;
+ height: @x-huge-btn-height;
img {
height: 27px;
@@ -127,8 +128,6 @@
align-items: center;
justify-content: center;
line-height: 20px;
- max-height: 26px;
- height: 26px;
}
.inner-box-caption {
@@ -290,10 +289,8 @@
}
> .dropdown-toggle:first-child {
- padding: 0 2px 0 0;
-
- .caption {
- padding-right: 4px;
+ .inner-box-caret {
+ padding: 0 2px;
}
}
diff --git a/apps/common/main/resources/less/header.less b/apps/common/main/resources/less/header.less
index 7ba9d0cd2..c9637523e 100644
--- a/apps/common/main/resources/less/header.less
+++ b/apps/common/main/resources/less/header.less
@@ -28,13 +28,13 @@
.toolbar {
.extra {
- .elset:not(:first-child) {
- margin-top: 0;
- }
-
svg.icon {
fill: #fff;
}
+
+ .btn-slot {
+ width: auto;
+ }
}
}
@@ -51,8 +51,8 @@
}
&.right {
+ flex-grow: 1;
min-width: 100px;
- padding-right: 12px;
.desktop {
padding: 10px 0;
@@ -68,10 +68,17 @@
color: #fff;
}
- .btn-toolbar {
- &:hover, &:active {
+ .btn-users,
+ .btn-header {
+ &:hover {
&:not(.disabled) {
- background-color: transparent;
+ background-color: rgba(255,255,255,0.2);
+ }
+ }
+
+ &:active {
+ &:not(.disabled) {
+ background-color: rgba(0,0,0,0.2);
}
}
}
@@ -82,7 +89,7 @@
text-overflow: ellipsis;
overflow: hidden;
min-width: 50px;
- text-align: right;
+ text-align: center;
}
#rib-save-status {
@@ -118,22 +125,17 @@
}
#tlb-box-users {
- display: inline-block;
- margin-right: 10px;
+ height: @height-tabs;
}
#tlb-change-rights {
margin-top: 15px;
}
-#slot-btn-back {
- float: right;
-}
-
.btn-users {
display: inline-flex;
cursor: pointer;
- padding: 0 7px;
+ padding: 6px 12px;
.icon {
display: inline-block;
@@ -204,3 +206,19 @@
}
}
}
+
+.hedset {
+ font-size: 0;
+}
+
+.btn-header {
+ border: 0 none;
+ height: @height-tabs;
+ background-color: transparent;
+ padding: 6px 12px;
+
+ .icon {
+ width: 20px;
+ height: 20px;
+ }
+}
\ No newline at end of file
diff --git a/apps/common/main/resources/less/toolbar.less b/apps/common/main/resources/less/toolbar.less
index c2f52d574..7b87d4548 100644
--- a/apps/common/main/resources/less/toolbar.less
+++ b/apps/common/main/resources/less/toolbar.less
@@ -52,7 +52,7 @@
}
.tabs {
- flex-grow: 1;
+ //flex-grow: 1;
background-color: @tabs-bg-color;
position: relative;
overflow: hidden;
@@ -171,6 +171,7 @@
vertical-align: middle;
white-space: nowrap;
padding-left: 12px;
+ font-size: 0;
&:last-child {
padding-right: 12px;
@@ -207,10 +208,6 @@
width: 20px;
height: auto;
- &:not(:first-child) {
- margin-left: 1px;
- }
-
&.split {
width: 31px;
}
@@ -288,3 +285,14 @@
.button-normal-icon(review-next, 16, @toolbar-big-icon-size);
.button-normal-icon(review-prev, 17, @toolbar-big-icon-size);
.button-normal-icon(btn-dropcap, 18, @toolbar-big-icon-size);
+.button-normal-icon(~'x-huge .btn-pagebreak', 19, @toolbar-big-icon-size);
+
+.button-normal-icon(btn-pageorient, 21, @toolbar-big-icon-size);
+.button-normal-icon(btn-pagemargins, 22, @toolbar-big-icon-size);
+.button-normal-icon(btn-pagesize, 23, @toolbar-big-icon-size);
+.button-normal-icon(btn-columns, 24, @toolbar-big-icon-size);
+.button-normal-icon(btn-img-align, 25, @toolbar-big-icon-size);
+.button-normal-icon(btn-img-group, 26, @toolbar-big-icon-size);
+.button-normal-icon(btn-img-bkwd, 27, @toolbar-big-icon-size);
+.button-normal-icon(btn-img-frwd, 28, @toolbar-big-icon-size);
+.button-normal-icon(btn-img-wrap, 29, @toolbar-big-icon-size);
diff --git a/apps/documenteditor/main/app/controller/Main.js b/apps/documenteditor/main/app/controller/Main.js
index 9fae3dfc1..5212e6863 100644
--- a/apps/documenteditor/main/app/controller/Main.js
+++ b/apps/documenteditor/main/app/controller/Main.js
@@ -593,7 +593,7 @@ define([
this.setLongActionView(action)
} else {
var me = this;
- if (id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) {
+ if ((id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) && !this.appOptions.isOffline) {
if (this._state.fastCoauth && this._state.usersCount>1) {
me._state.timerSave = setTimeout(function () {
me.getApplication().getController('Statusbar').setStatusCaption(me.textChangesSaved, false, 3000);
@@ -631,8 +631,8 @@ define([
case Asc.c_oAscAsyncAction['ForceSaveButton']:
clearTimeout(this._state.timerSave);
force = true;
- title = this.saveTitleText;
- text = this.saveTextText;
+ title = (!this.appOptions.isOffline) ? this.saveTitleText : '';
+ text = (!this.appOptions.isOffline) ? this.saveTextText : '';
break;
case Asc.c_oAscAsyncAction['LoadDocumentFonts']:
diff --git a/apps/documenteditor/main/app/controller/Toolbar.js b/apps/documenteditor/main/app/controller/Toolbar.js
index 54b2cae73..c195596da 100644
--- a/apps/documenteditor/main/app/controller/Toolbar.js
+++ b/apps/documenteditor/main/app/controller/Toolbar.js
@@ -112,6 +112,12 @@ define([
'FileMenu': {
'menu:hide': this.onFileMenu.bind(this, 'hide'),
'menu:show': this.onFileMenu.bind(this, 'show')
+ },
+ 'Common.Views.Header': {
+ 'print': this.onPrint.bind(this),
+ 'downloadas': function (opts) {
+ this.api.asc_DownloadOrigin();
+ }.bind(this)
}
});
@@ -347,7 +353,7 @@ define([
},
onContextMenu: function() {
- this.toolbar.collapseToolbar();
+ this.toolbar.collapse();
},
onApiFontSize: function(size) {
diff --git a/apps/documenteditor/main/app/controller/Viewport.js b/apps/documenteditor/main/app/controller/Viewport.js
index 7cbe4cf05..fe6907548 100644
--- a/apps/documenteditor/main/app/controller/Viewport.js
+++ b/apps/documenteditor/main/app/controller/Viewport.js
@@ -77,12 +77,6 @@ define([
'view:compact' : function (toolbar, state) {
me.viewport.vlayout.panels[0].height = state ? 32 : 32+67;
}
- },
- 'Common.Views.Header': {
- 'go:back': function (opts) {
- Common.NotificationCenter.trigger('goback', /new/.test(opts));
- // Common.component.Analytics.trackEvent('Back to Folder');
- }
}
});
},
diff --git a/apps/documenteditor/main/app/template/Toolbar.template b/apps/documenteditor/main/app/template/Toolbar.template
index 43ac7fd15..ded87a9b2 100644
--- a/apps/documenteditor/main/app/template/Toolbar.template
+++ b/apps/documenteditor/main/app/template/Toolbar.template
@@ -145,51 +145,19 @@
diff --git a/apps/documenteditor/main/app/view/Toolbar.js b/apps/documenteditor/main/app/view/Toolbar.js
index 7374ef304..26e56cdaa 100644
--- a/apps/documenteditor/main/app/view/Toolbar.js
+++ b/apps/documenteditor/main/app/view/Toolbar.js
@@ -80,7 +80,7 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template),
tabs: [
- { caption: me.textTabFile, action: 'file'},
+ { caption: me.textTabFile, action: 'file', extcls: 'canedit'},
{ caption: me.textTabHome, action: 'home', extcls: 'canedit'},
{ caption: me.textTabInsert, action: 'ins', extcls: 'canedit'},
{ caption: me.textTabLayout, action: 'layout', extcls: 'canedit'}
@@ -608,7 +608,7 @@ define([
this.btnColumns = new Common.UI.Button({
id: 'tlb-btn-columns',
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-columns',
caption: me.capBtnColumns,
menu: new Common.UI.Menu({
@@ -658,7 +658,7 @@ define([
this.btnPageOrient = new Common.UI.Button({
id: 'tlb-btn-pageorient',
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-pageorient',
caption: me.capBtnPageOrient,
menu: new Common.UI.Menu({
@@ -694,7 +694,7 @@ define([
this.btnPageMargins = new Common.UI.Button({
id: 'tlb-btn-pagemargins',
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-pagemargins',
caption: me.capBtnMargins,
menu: new Common.UI.Menu({
@@ -753,7 +753,7 @@ define([
this.btnPageSize = new Common.UI.Button({
id: 'tlb-btn-pagesize',
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-pagesize',
caption: me.capBtnPageSize,
menu: new Common.UI.Menu({
@@ -967,34 +967,34 @@ define([
this.toolbarControls.push(this.btnAdvSettings);
me.btnImgAlign = new Common.UI.Button({
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-img-align',
caption: me.capImgAlign,
menu: true
});
me.btnImgGroup = new Common.UI.Button({
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-img-group',
caption: me.capImgGroup,
menu: true
});
me.btnImgForward = new Common.UI.Button({
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-img-frwd',
caption: me.capImgForward,
split: true,
menu: true
});
me.btnImgBackward = new Common.UI.Button({
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-img-bkwd',
caption: me.capImgBackward,
split: true,
menu: true
});
me.btnImgWrapping = new Common.UI.Button({
- cls: 'btn-toolbar',
+ cls: 'btn-toolbar x-huge icon-top',
iconCls: 'btn-img-wrap',
caption: me.capImgWrapping,
menu: true
@@ -1205,7 +1205,7 @@ define([
});
if ( me.isCompactView )
- me.setFolded(true); else
+ me.setFolded(true), me.collapse(); else
me.setTab('home');
var top = Common.localStorage.getItem("de-pgmargins-top"),
@@ -1304,8 +1304,11 @@ define([
var $slots = $host.find('.btn-slot.btn-pagebreak');
$slots.each(function(index, el) {
+ var _cls = 'btn-toolbar';
+ /x-huge/.test(el.className) && (_cls += ' x-huge icon-top');
+
var button = new Common.UI.Button({
- cls: 'btn-toolbar',
+ cls: _cls,
iconCls: 'btn-pagebreak',
caption: me.capBtnInsPagebreak,
split: true,
diff --git a/apps/documenteditor/main/index.html b/apps/documenteditor/main/index.html
index e96f89d26..1061a2bdc 100644
--- a/apps/documenteditor/main/index.html
+++ b/apps/documenteditor/main/index.html
@@ -260,24 +260,12 @@
-
+
+
+
diff --git a/apps/documenteditor/main/index.html.deploy b/apps/documenteditor/main/index.html.deploy
index ab73ba9d4..4e8d56999 100644
--- a/apps/documenteditor/main/index.html.deploy
+++ b/apps/documenteditor/main/index.html.deploy
@@ -282,24 +282,7 @@
};
-
+
diff --git a/apps/documenteditor/main/resources/img/toolbar/charttypes.png b/apps/documenteditor/main/resources/img/toolbar/charttypes.png
index 1a809d63f..e13818e76 100644
Binary files a/apps/documenteditor/main/resources/img/toolbar/charttypes.png and b/apps/documenteditor/main/resources/img/toolbar/charttypes.png differ
diff --git a/apps/documenteditor/main/resources/img/toolbar/charttypes@2x.png b/apps/documenteditor/main/resources/img/toolbar/charttypes@2x.png
index fcd18de30..aac960d29 100644
Binary files a/apps/documenteditor/main/resources/img/toolbar/charttypes@2x.png and b/apps/documenteditor/main/resources/img/toolbar/charttypes@2x.png differ
diff --git a/apps/documenteditor/main/resources/less/toolbar.less b/apps/documenteditor/main/resources/less/toolbar.less
index 583d10a67..f3dcb481e 100644
--- a/apps/documenteditor/main/resources/less/toolbar.less
+++ b/apps/documenteditor/main/resources/less/toolbar.less
@@ -229,19 +229,19 @@
}
.surface-normal{
- background-position: -100px -200px;
+ background-position: 0px -300px;
}
.surface-wireframe{
- background-position: -100px -200px;
+ background-position: -50px -300px;
}
.contour-normal{
- background-position: -100px -200px;
+ background-position: -100px -300px;
}
.contour-wireframe{
- background-position: -100px -200px;
+ background-position: -150px -300px;
}
@toolbar-icon-size: 20px;
@@ -266,8 +266,8 @@
.button-normal-icon(btn-setmarkers, 21, @toolbar-icon-size);
.button-normal-icon(btn-multilevels, 22, @toolbar-icon-size);
.button-normal-icon(btn-numbering, 23, @toolbar-icon-size);
-.button-normal-icon(btn-pageorient, 24, @toolbar-icon-size);
-.button-normal-icon(btn-pagesize, 25, @toolbar-icon-size);
+//.button-normal-icon(btn-pageorient, 24, @toolbar-icon-size);
+//.button-normal-icon(btn-pagesize, 25, @toolbar-icon-size);
.button-normal-icon(btn-paste, 26, @toolbar-icon-size);
.button-normal-icon(btn-print, 27, @toolbar-icon-size);
.button-normal-icon(btn-redo, 28, @toolbar-icon-size);
@@ -297,13 +297,13 @@
.button-normal-icon(mmerge-last, 72, @toolbar-icon-size);
.button-normal-icon(mmerge-prev, 73, @toolbar-icon-size);
.button-normal-icon(mmerge-first, 74, @toolbar-icon-size);
-.button-normal-icon(btn-columns, 75, @toolbar-icon-size);
-.button-normal-icon(btn-pagemargins, 76, @toolbar-icon-size);
-.button-normal-icon(btn-img-frwd, 83, @toolbar-icon-size);
-.button-normal-icon(btn-img-bkwd, 84, @toolbar-icon-size);
-.button-normal-icon(btn-img-wrap, 85, @toolbar-icon-size);
-.button-normal-icon(btn-img-group, 86, @toolbar-icon-size);
-.button-normal-icon(btn-img-align, 87, @toolbar-icon-size);
+//.button-normal-icon(btn-columns, 75, @toolbar-icon-size);
+//.button-normal-icon(btn-pagemargins, 76, @toolbar-icon-size);
+//.button-normal-icon(btn-img-frwd, 83, @toolbar-icon-size);
+//.button-normal-icon(btn-img-bkwd, 84, @toolbar-icon-size);
+//.button-normal-icon(btn-img-wrap, 85, @toolbar-icon-size);
+//.button-normal-icon(btn-img-group, 86, @toolbar-icon-size);
+//.button-normal-icon(btn-img-align, 87, @toolbar-icon-size);
.button-normal-icon(btn-goback, 88, @toolbar-icon-size);
//.button-normal-icon(btn-insertimage, 17, @toolbar-icon-size);
diff --git a/apps/documenteditor/mobile/app/controller/Main.js b/apps/documenteditor/mobile/app/controller/Main.js
index 48cb17f9e..64ddf5482 100644
--- a/apps/documenteditor/mobile/app/controller/Main.js
+++ b/apps/documenteditor/mobile/app/controller/Main.js
@@ -482,8 +482,6 @@ define([
me.api.asc_setSpellCheck(false); // don't use spellcheck for mobile mode
- Common.localStorage.setItem("de-settings-showsnaplines", me.api.get_ShowSnapLines() ? 1 : 0);
-
me.api.asc_registerCallback('asc_onStartAction', _.bind(me.onLongActionBegin, me));
me.api.asc_registerCallback('asc_onEndAction', _.bind(me.onLongActionEnd, me));
me.api.asc_registerCallback('asc_onCoAuthoringDisconnect', _.bind(me.onCoAuthoringDisconnect, me));
@@ -541,6 +539,8 @@ define([
me.api.zoomFitToWidth();
}
+ DE.getController('Toolbar').activateControls();
+
if (me._state.licenseWarning) {
value = Common.localStorage.getItem("de-license-warning");
value = (value!==null) ? parseInt(value) : 0;
diff --git a/apps/documenteditor/mobile/app/controller/Toolbar.js b/apps/documenteditor/mobile/app/controller/Toolbar.js
index 3de97ec31..2da2aca06 100644
--- a/apps/documenteditor/mobile/app/controller/Toolbar.js
+++ b/apps/documenteditor/mobile/app/controller/Toolbar.js
@@ -157,6 +157,10 @@ define([
}
},
+ activateControls: function() {
+ $('#toolbar-edit, #toolbar-add, #toolbar-settings, #toolbar-search, #document-back').removeClass('disabled');
+ },
+
dlgLeaveTitleText : 'You leave the application',
dlgLeaveMsgText : 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.',
leaveButtonText : 'Leave this Page',
diff --git a/apps/documenteditor/mobile/app/view/Toolbar.js b/apps/documenteditor/mobile/app/view/Toolbar.js
index 36d32df7a..0af0270a3 100644
--- a/apps/documenteditor/mobile/app/view/Toolbar.js
+++ b/apps/documenteditor/mobile/app/view/Toolbar.js
@@ -92,6 +92,7 @@ define([
}));
$('.view-main .navbar').on('addClass removeClass', _.bind(me.onDisplayMainNavbar, me));
+ $('#toolbar-edit, #toolbar-add, #toolbar-settings, #toolbar-search, #document-back').addClass('disabled');
return me;
},
diff --git a/apps/presentationeditor/main/app/controller/Main.js b/apps/presentationeditor/main/app/controller/Main.js
index e195f8583..206abb901 100644
--- a/apps/presentationeditor/main/app/controller/Main.js
+++ b/apps/presentationeditor/main/app/controller/Main.js
@@ -413,7 +413,7 @@ define([
if (action) {
this.setLongActionView(action)
} else {
- if (id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) {
+ if ((id==Asc.c_oAscAsyncAction['Save'] || id==Asc.c_oAscAsyncAction['ForceSaveButton']) && !this.appOptions.isOffline) {
if (this._state.fastCoauth && this._state.usersCount>1) {
var me = this;
me._state.timerSave = setTimeout(function () {
@@ -451,8 +451,8 @@ define([
case Asc.c_oAscAsyncAction['ForceSaveButton']:
clearTimeout(this._state.timerSave);
force = true;
- // title = this.saveTitleText;
- // text = this.saveTextText;
+ // title = (!this.appOptions.isOffline) ? this.saveTitleText : '';
+ // text = (!this.appOptions.isOffline) ? this.saveTextText : '';
break;
case Asc.c_oAscAsyncAction['ForceSaveTimeout']:
diff --git a/apps/presentationeditor/main/app/controller/Viewport.js b/apps/presentationeditor/main/app/controller/Viewport.js
index 2288b2ace..d35e86f09 100644
--- a/apps/presentationeditor/main/app/controller/Viewport.js
+++ b/apps/presentationeditor/main/app/controller/Viewport.js
@@ -79,12 +79,6 @@ define([
me.viewport.vlayout.panels[0].height = state ? 32 : 32+67;
}
},
- 'Common.Views.Header': {
- 'go:back': function (opts) {
- Common.NotificationCenter.trigger('goback', /new/.test(opts));
- // Common.component.Analytics.trackEvent('Back to Folder');
- }
- },
// Events generated by main view
'Viewport': {
diff --git a/apps/presentationeditor/main/app/view/Toolbar.js b/apps/presentationeditor/main/app/view/Toolbar.js
index 520bbca01..a73186995 100644
--- a/apps/presentationeditor/main/app/view/Toolbar.js
+++ b/apps/presentationeditor/main/app/view/Toolbar.js
@@ -138,7 +138,7 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template),
tabs: [
- { caption: 'File', action: 'file'},
+ { caption: 'File', action: 'file', extcls: 'canedit'},
{ caption: 'Home', action: 'home', extcls: 'canedit'},
{ caption: 'Insert', action: 'ins', extcls: 'canedit'}
]}
diff --git a/apps/presentationeditor/main/index.html b/apps/presentationeditor/main/index.html
index 67c13157c..dceb753f4 100644
--- a/apps/presentationeditor/main/index.html
+++ b/apps/presentationeditor/main/index.html
@@ -259,26 +259,12 @@
-
+
+
+
diff --git a/apps/presentationeditor/main/index.html.deploy b/apps/presentationeditor/main/index.html.deploy
index 1b3547397..827f55a14 100644
--- a/apps/presentationeditor/main/index.html.deploy
+++ b/apps/presentationeditor/main/index.html.deploy
@@ -355,26 +355,7 @@
};
-
+
diff --git a/apps/presentationeditor/main/resources/img/toolbar/charttypes.png b/apps/presentationeditor/main/resources/img/toolbar/charttypes.png
index 1a809d63f..e13818e76 100644
Binary files a/apps/presentationeditor/main/resources/img/toolbar/charttypes.png and b/apps/presentationeditor/main/resources/img/toolbar/charttypes.png differ
diff --git a/apps/presentationeditor/main/resources/img/toolbar/charttypes@2x.png b/apps/presentationeditor/main/resources/img/toolbar/charttypes@2x.png
index fcd18de30..aac960d29 100644
Binary files a/apps/presentationeditor/main/resources/img/toolbar/charttypes@2x.png and b/apps/presentationeditor/main/resources/img/toolbar/charttypes@2x.png differ
diff --git a/apps/presentationeditor/main/resources/less/toolbar.less b/apps/presentationeditor/main/resources/less/toolbar.less
index 37c1aa167..95ff31f34 100644
--- a/apps/presentationeditor/main/resources/less/toolbar.less
+++ b/apps/presentationeditor/main/resources/less/toolbar.less
@@ -223,19 +223,19 @@
}
.surface-normal{
- background-position: -100px -200px;
+ background-position: 0px -300px;
}
.surface-wireframe{
- background-position: -100px -200px;
+ background-position: -50px -300px;
}
.contour-normal{
- background-position: -100px -200px;
+ background-position: -100px -300px;
}
.contour-wireframe{
- background-position: -100px -200px;
+ background-position: -150px -300px;
}
@toolbar-icon-size: 20px;
diff --git a/apps/presentationeditor/mobile/app/controller/Main.js b/apps/presentationeditor/mobile/app/controller/Main.js
index 3ec2750a0..4573fa85e 100644
--- a/apps/presentationeditor/mobile/app/controller/Main.js
+++ b/apps/presentationeditor/mobile/app/controller/Main.js
@@ -456,8 +456,6 @@ define([
var zf = (value!==null) ? parseInt(value) : (me.appOptions.customization && me.appOptions.customization.zoom ? parseInt(me.appOptions.customization.zoom) : -1);
(zf == -1) ? me.api.zoomFitToPage() : ((zf == -2) ? me.api.zoomFitToWidth() : me.api.zoom(zf>0 ? zf : 100));
- Common.localStorage.setItem("pe-settings-showsnaplines", me.api.get_ShowSnapLines() ? 1 : 0);
-
me.api.asc_setSpellCheck(false); // don't use spellcheck for mobile mode
me.api.asc_registerCallback('asc_onStartAction', _.bind(me.onLongActionBegin, me));
@@ -479,8 +477,6 @@ define([
me.api.asc_SetFastCollaborative(me._state.fastCoauth);
/** coauthoring end **/
- Common.localStorage.setItem("pe-settings-showsnaplines", me.api.get_ShowSnapLines() ? 1 : 0);
-
if (me.appOptions.isEdit) {
value = me._state.fastCoauth; // Common.localStorage.getItem("de-settings-autosave");
value = (!me._state.fastCoauth && value!==null) ? parseInt(value) : (me.appOptions.canCoAuthoring ? 1 : 0);
@@ -508,6 +504,8 @@ define([
me.api.zoomFitToPage();
}
+ PE.getController('Toolbar').activateControls();
+
if (me._state.licenseWarning) {
value = Common.localStorage.getItem("de-license-warning");
value = (value!==null) ? parseInt(value) : 0;
diff --git a/apps/presentationeditor/mobile/app/controller/Toolbar.js b/apps/presentationeditor/mobile/app/controller/Toolbar.js
index 6364cb1ba..f9e5c197d 100644
--- a/apps/presentationeditor/mobile/app/controller/Toolbar.js
+++ b/apps/presentationeditor/mobile/app/controller/Toolbar.js
@@ -168,6 +168,10 @@ define([
}
},
+ activateControls: function() {
+ $('#toolbar-preview, #toolbar-settings, #toolbar-search, #document-back').removeClass('disabled');
+ },
+
dlgLeaveTitleText : 'You leave the application',
dlgLeaveMsgText : 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.',
leaveButtonText : 'Leave this Page',
diff --git a/apps/presentationeditor/mobile/app/view/Toolbar.js b/apps/presentationeditor/mobile/app/view/Toolbar.js
index bc73e504a..bc6e3891f 100644
--- a/apps/presentationeditor/mobile/app/view/Toolbar.js
+++ b/apps/presentationeditor/mobile/app/view/Toolbar.js
@@ -93,6 +93,7 @@ define([
}));
$('.view-main .navbar').on('addClass removeClass', _.bind(me.onDisplayMainNavbar, me));
+ $('#toolbar-preview, #toolbar-edit, #toolbar-add, #toolbar-settings, #toolbar-search, #document-back').addClass('disabled');
return me;
},
diff --git a/apps/spreadsheeteditor/main/app/controller/Viewport.js b/apps/spreadsheeteditor/main/app/controller/Viewport.js
index 16706e615..3d2095fc1 100644
--- a/apps/spreadsheeteditor/main/app/controller/Viewport.js
+++ b/apps/spreadsheeteditor/main/app/controller/Viewport.js
@@ -76,12 +76,6 @@ define([
'view:compact' : function (toolbar, state) {
me.viewport.vlayout.panels[0].height = state ? 32 : 32+67;
}
- },
- 'Common.Views.Header': {
- 'go:back': function (opts) {
- Common.NotificationCenter.trigger('goback', /new/.test(opts));
- // Common.component.Analytics.trackEvent('Back to Folder');
- }
}
});
diff --git a/apps/spreadsheeteditor/main/app/view/FormatSettingsDialog.js b/apps/spreadsheeteditor/main/app/view/FormatSettingsDialog.js
index afb247f2f..50823c079 100644
--- a/apps/spreadsheeteditor/main/app/view/FormatSettingsDialog.js
+++ b/apps/spreadsheeteditor/main/app/view/FormatSettingsDialog.js
@@ -100,7 +100,7 @@ define([
'
',
'',
'',
- '',
' | ',
'
',
'
',
diff --git a/apps/spreadsheeteditor/main/app/view/Toolbar.js b/apps/spreadsheeteditor/main/app/view/Toolbar.js
index da28e9417..98131c451 100644
--- a/apps/spreadsheeteditor/main/app/view/Toolbar.js
+++ b/apps/spreadsheeteditor/main/app/view/Toolbar.js
@@ -319,7 +319,7 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template),
tabs: [
- { caption: 'File'/*me.textTabFile*/, action: 'file'},
+ { caption: 'File'/*me.textTabFile*/, action: 'file', extcls: 'canedit'},
{ caption: 'Home'/*me.textTabHome*/, action: 'home', extcls: 'canedit'},
{ caption: 'Insert'/*me.textTabInsert*/, action: 'ins', extcls: 'canedit'}
]}
diff --git a/apps/spreadsheeteditor/main/index.html b/apps/spreadsheeteditor/main/index.html
index 38f8b1ced..ebd1280e2 100644
--- a/apps/spreadsheeteditor/main/index.html
+++ b/apps/spreadsheeteditor/main/index.html
@@ -261,25 +261,12 @@
-
-
+
+
+
-
+
diff --git a/apps/spreadsheeteditor/main/resources/img/charttypes.png b/apps/spreadsheeteditor/main/resources/img/charttypes.png
index accc8a021..e13818e76 100644
Binary files a/apps/spreadsheeteditor/main/resources/img/charttypes.png and b/apps/spreadsheeteditor/main/resources/img/charttypes.png differ
diff --git a/apps/spreadsheeteditor/main/resources/img/charttypes@2x.png b/apps/spreadsheeteditor/main/resources/img/charttypes@2x.png
index 40e98ea44..aac960d29 100644
Binary files a/apps/spreadsheeteditor/main/resources/img/charttypes@2x.png and b/apps/spreadsheeteditor/main/resources/img/charttypes@2x.png differ
diff --git a/apps/spreadsheeteditor/main/resources/less/rightmenu.less b/apps/spreadsheeteditor/main/resources/less/rightmenu.less
index 7197ac7e5..850feb4c7 100644
--- a/apps/spreadsheeteditor/main/resources/less/rightmenu.less
+++ b/apps/spreadsheeteditor/main/resources/less/rightmenu.less
@@ -314,19 +314,19 @@ button:active:not(.disabled) .btn-change-shape {background-position: -56px -
}
.surface-normal{
- background-position: -100px -200px;
+ background-position: 0px -300px;
}
.surface-wireframe{
- background-position: -100px -200px;
+ background-position: -50px -300px;
}
.contour-normal{
- background-position: -100px -200px;
+ background-position: -100px -300px;
}
.contour-wireframe{
- background-position: -100px -200px;
+ background-position: -150px -300px;
}
#table-combo-template .combo-dataview{
diff --git a/apps/spreadsheeteditor/mobile/app/controller/Main.js b/apps/spreadsheeteditor/mobile/app/controller/Main.js
index f7f07d3ea..0f9d0798a 100644
--- a/apps/spreadsheeteditor/mobile/app/controller/Main.js
+++ b/apps/spreadsheeteditor/mobile/app/controller/Main.js
@@ -527,6 +527,7 @@ define([
mode: me.appOptions.isEdit ? 'edit' : 'view'
});
+ SSE.getController('Toolbar').activateControls();
if (me._state.licenseWarning) {
value = Common.localStorage.getItem("sse-license-warning");
diff --git a/apps/spreadsheeteditor/mobile/app/controller/Toolbar.js b/apps/spreadsheeteditor/mobile/app/controller/Toolbar.js
index e4bd62767..5ed1c7c18 100644
--- a/apps/spreadsheeteditor/mobile/app/controller/Toolbar.js
+++ b/apps/spreadsheeteditor/mobile/app/controller/Toolbar.js
@@ -191,6 +191,10 @@ define([
this.getView('Toolbar').disableControl(['add', 'edit'], islocked);
},
+ activateControls: function() {
+ $('#toolbar-settings, #toolbar-search, #document-back').removeClass('disabled');
+ },
+
dlgLeaveTitleText : 'You leave the application',
dlgLeaveMsgText : 'You have unsaved changes in this document. Click \'Stay on this Page\' to await the autosave of the document. Click \'Leave this Page\' to discard all the unsaved changes.',
leaveButtonText : 'Leave this Page',
diff --git a/apps/spreadsheeteditor/mobile/app/view/Toolbar.js b/apps/spreadsheeteditor/mobile/app/view/Toolbar.js
index aff1c023f..a6f1b8e93 100644
--- a/apps/spreadsheeteditor/mobile/app/view/Toolbar.js
+++ b/apps/spreadsheeteditor/mobile/app/view/Toolbar.js
@@ -82,6 +82,7 @@ define([
}));
$('.view-main .navbar').on('addClass removeClass', _.bind(me.onDisplayMainNavbar, me));
+ $('#toolbar-edit, #toolbar-add, #toolbar-settings, #toolbar-search, #document-back').addClass('disabled');
this.$btnEdit = $el.find('#toolbar-edit');
this.$btnAdd = $el.find('#toolbar-add');
diff --git a/build/Gruntfile.js b/build/Gruntfile.js
index e4021d4b2..d10362add 100644
--- a/build/Gruntfile.js
+++ b/build/Gruntfile.js
@@ -23,6 +23,8 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-htmlmin');
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-mocha');
+ grunt.loadNpmTasks('grunt-inline');
+ grunt.loadNpmTasks('grunt-svgmin');
function doRegisterTask(name, callbackConfig) {
return grunt.registerTask(name + '-init', function() {
@@ -142,7 +144,12 @@ module.exports = function(grunt) {
options: {
force: true
},
- files: packageFile['main']['clean']
+ prebuild: {
+ src: packageFile['main']['clean']
+ },
+ postbuild: {
+ src: packageFile.main.svgicons.clean
+ }
},
less: {
@@ -210,6 +217,24 @@ module.exports = function(grunt) {
'index-page': {
files: packageFile['main']['copy']['index-page']
}
+ },
+
+ inline: {
+ dist: {
+ src: packageFile.main.copy['index-page'][0].dest,
+ dest: packageFile.main.copy['index-page'][0].dest
+ }
+ },
+
+ svgmin: {
+ options: {
+ plugins: [{
+ cleanupIDs: false
+ }]
+ },
+ dist: {
+ files: packageFile.main.svgicons.common
+ }
}
});
});
@@ -375,8 +400,8 @@ module.exports = function(grunt) {
grunt.registerTask('deploy-jsziputils', ['jsziputils-init', 'clean', 'copy']);
grunt.registerTask('deploy-requirejs', ['requirejs-init', 'clean', 'uglify']);
- grunt.registerTask('deploy-app-main', ['main-app-init', 'clean', 'imagemin', 'less', 'requirejs', 'concat',
- 'copy', 'replace:writeVersion']);
+ grunt.registerTask('deploy-app-main', ['main-app-init', 'clean:prebuild', 'imagemin', 'less', 'requirejs', 'concat',
+ 'copy', 'svgmin', 'inline', 'replace:writeVersion', 'clean:postbuild']);
grunt.registerTask('deploy-app-mobile', ['mobile-app-init', 'clean:deploy', 'cssmin', 'copy:template-backup',
'htmlmin', 'requirejs', 'concat', 'copy:template-restore',
diff --git a/build/common.json b/build/common.json
index 0a7255f78..bbe9f8883 100644
--- a/build/common.json
+++ b/build/common.json
@@ -1,7 +1,7 @@
{
"name": "common",
"version": "4.3.0",
- "build": 1,
+ "build": 32,
"homepage": "http://www.onlyoffice.com",
"private": true,
"sdk": {
diff --git a/build/documenteditor.json b/build/documenteditor.json
index 553082c2f..c630b14bb 100644
--- a/build/documenteditor.json
+++ b/build/documenteditor.json
@@ -1,7 +1,7 @@
{
"name": "documenteditor",
"version": "4.3.0",
- "build": 1112,
+ "build": 1143,
"homepage": "http://www.onlyoffice.com",
"private": true,
"main": {
@@ -164,6 +164,19 @@
"dest": "../deploy/web-apps/apps/documenteditor/main/index.html"
}
]
+ },
+ "svgicons": {
+ "common": [
+ {
+ "expand": true,
+ "cwd": "../apps/common/main/resources/img",
+ "src": "**/*.svg",
+ "dest": "../deploy/web-apps/apps/common/main/resources/img"
+ }
+ ],
+ "clean": [
+ "../deploy/web-apps/apps/common"
+ ]
}
},
"mobile": {
diff --git a/build/presentationeditor.json b/build/presentationeditor.json
index d87eab13f..c8f72f99e 100644
--- a/build/presentationeditor.json
+++ b/build/presentationeditor.json
@@ -1,7 +1,7 @@
{
"name": "presentationeditor",
"version": "4.3.0",
- "build": 774,
+ "build": 776,
"homepage": "http://www.onlyoffice.com",
"private": true,
"main": {
@@ -164,6 +164,19 @@
"dest": "../deploy/web-apps/apps/presentationeditor/main/index.html"
}
]
+ },
+ "svgicons": {
+ "common": [
+ {
+ "expand": true,
+ "cwd": "../apps/common/main/resources/img",
+ "src": "**/*.svg",
+ "dest": "../deploy/web-apps/apps/common/main/resources/img"
+ }
+ ],
+ "clean": [
+ "../deploy/web-apps/apps/common"
+ ]
}
},
"mobile": {
diff --git a/build/spreadsheeteditor.json b/build/spreadsheeteditor.json
index cea408c65..650425953 100644
--- a/build/spreadsheeteditor.json
+++ b/build/spreadsheeteditor.json
@@ -1,7 +1,7 @@
{
"name": "spreadsheeteditor",
"version": "4.3.0",
- "build": 879,
+ "build": 881,
"homepage": "http://www.onlyoffice.com",
"private": true,
"main": {
@@ -178,6 +178,19 @@
"dest": "../deploy/web-apps/apps/spreadsheeteditor/main/index.html"
}
]
+ },
+ "svgicons": {
+ "common": [
+ {
+ "expand": true,
+ "cwd": "../apps/common/main/resources/img",
+ "src": "**/*.svg",
+ "dest": "../deploy/web-apps/apps/common/main/resources/img"
+ }
+ ],
+ "clean": [
+ "../deploy/web-apps/apps/common"
+ ]
}
},
"mobile": {
diff --git a/vendor/svg-injector/svg-injector.map.js b/vendor/svg-injector/svg-injector.map.js
new file mode 100644
index 000000000..02335c0a9
--- /dev/null
+++ b/vendor/svg-injector/svg-injector.map.js
@@ -0,0 +1 @@
+{"version":3,"file":"./svg-injector.min.js","sources":["./svg-injector.js"],"names":["window","document","uniqueClasses","list","split","hash","i","length","out","hasOwnProperty","unshift","join","isLocal","location","protocol","hasSvgSupport","implementation","hasFeature","forEach","Array","prototype","fn","scope","this","TypeError","len","call","svgCache","injectCount","injectedElements","requestQueue","ranScripts","cloneSvg","sourceSvg","cloneNode","queueRequest","url","callback","push","processRequestQueue","index","setTimeout","loadSvg","undefined","SVGSVGElement","XMLHttpRequest","httpRequest","onreadystatechange","readyState","status","responseXML","statusText","Document","documentElement","DOMParser","Function","xmlDoc","parser","parseFromString","responseText","e","getElementsByTagName","open","overrideMimeType","send","injectElement","el","evalScripts","pngFallback","imgUrl","getAttribute","test","perElementFallback","setAttribute","pop","replace","indexOf","svg","imgId","imgTitle","classMerge","concat","imgStyle","imgData","filter","attributes","at","name","dataAttr","value","element","elementDefs","properties","currentId","newId","iriElementsAndProperties","clipPath","color-profile","cursor","linearGradient","marker","mask","pattern","radialGradient","Object","keys","key","querySelectorAll","elementsLen","id","referencingElements","property","j","referencingElementLen","removeAttribute","script","scriptType","scripts","scriptsToEval","k","scriptsLen","innerText","textContent","removeChild","l","scriptsToEvalLen","styleTags","styleTag","parentNode","replaceChild","SVGInjector","elements","options","done","eachCallback","each","elementsLoaded","module","exports","define","amd"],"mappings":"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"}
\ No newline at end of file
diff --git a/vendor/svg-injector/svg-injector.min.js b/vendor/svg-injector/svg-injector.min.js
new file mode 100644
index 000000000..243424bee
--- /dev/null
+++ b/vendor/svg-injector/svg-injector.min.js
@@ -0,0 +1,9 @@
+/**
+ * SVGInjector v1.1.3 - Fast, caching, dynamic inline SVG DOM injection library
+ * https://github.com/iconic/SVGInjector
+ *
+ * Copyright (c) 2014-2015 Waybury
+ * @license MIT
+ */
+!function(t,e){"use strict";function r(t){t=t.split(" ");for(var e={},r=t.length,n=[];r--;)e.hasOwnProperty(t[r])||(e[t[r]]=1,n.unshift(t[r]));return n.join(" ")}var n="file:"===t.location.protocol,i=e.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1"),o=Array.prototype.forEach||function(t,e){if(void 0===this||null===this||"function"!=typeof t)throw new TypeError;var r,n=this.length>>>0;for(r=0;n>r;++r)r in this&&t.call(e,this[r],r,this)},a={},l=0,s=[],u=[],c={},f=function(t){return t.cloneNode(!0)},p=function(t,e){u[t]=u[t]||[],u[t].push(e)},d=function(t){for(var e=0,r=u[t].length;r>e;e++)!function(e){setTimeout(function(){u[t][e](f(a[t]))},0)}(e)},v=function(e,r){if(void 0!==a[e])a[e]instanceof SVGSVGElement?r(f(a[e])):p(e,r);else{if(!t.XMLHttpRequest)return r("Browser does not support XMLHttpRequest"),!1;a[e]={},p(e,r);var i=new XMLHttpRequest;i.onreadystatechange=function(){if(4===i.readyState){if(404===i.status||null===i.responseXML)return r("Unable to load SVG file: "+e),n&&r("Note: SVG injection ajax calls do not work locally without adjusting security setting in your browser. Or consider using a local webserver."),r(),!1;if(!(200===i.status||n&&0===i.status))return r("There was a problem injecting the SVG: "+i.status+" "+i.statusText),!1;if(i.responseXML instanceof Document)a[e]=i.responseXML.documentElement;else if(DOMParser&&DOMParser instanceof Function){var t;try{var o=new DOMParser;t=o.parseFromString(i.responseText,"text/xml")}catch(l){t=void 0}if(!t||t.getElementsByTagName("parsererror").length)return r("Unable to parse SVG file: "+e),!1;a[e]=t.documentElement}d(e)}},i.open("GET",e),i.overrideMimeType&&i.overrideMimeType("text/xml"),i.send()}},h=function(e,n,a,u){var f=e.getAttribute("data-src")||e.getAttribute("src");if(!/\.svg/i.test(f))return void u("Attempted to inject a file with a non-svg extension: "+f);if(!i){var p=e.getAttribute("data-fallback")||e.getAttribute("data-png");return void(p?(e.setAttribute("src",p),u(null)):a?(e.setAttribute("src",a+"/"+f.split("/").pop().replace(".svg",".png")),u(null)):u("This browser does not support SVG and no PNG fallback was defined."))}-1===s.indexOf(e)&&(s.push(e),e.setAttribute("src",""),v(f,function(i){if("undefined"==typeof i||"string"==typeof i)return u(i),!1;var a=e.getAttribute("id");a&&i.setAttribute("id",a);var p=e.getAttribute("title");p&&i.setAttribute("title",p);var d=[].concat(i.getAttribute("class")||[],"injected-svg",e.getAttribute("class")||[]).join(" ");i.setAttribute("class",r(d));var v=e.getAttribute("style");v&&i.setAttribute("style",v);var h=[].filter.call(e.attributes,function(t){return/^data-\w[\w\-]*$/.test(t.name)});o.call(h,function(t){t.name&&t.value&&i.setAttribute(t.name,t.value)});var g,m,b,y,A,w={clipPath:["clip-path"],"color-profile":["color-profile"],cursor:["cursor"],filter:["filter"],linearGradient:["fill","stroke"],marker:["marker","marker-start","marker-mid","marker-end"],mask:["mask"],pattern:["fill","stroke"],radialGradient:["fill","stroke"]};Object.keys(w).forEach(function(t){g=t,b=w[t],m=i.querySelectorAll("defs "+g+"[id]");for(var e=0,r=m.length;r>e;e++){y=m[e].id,A=y+"-"+l;var n;o.call(b,function(t){n=i.querySelectorAll("["+t+'*="'+y+'"]');for(var e=0,r=n.length;r>e;e++)n[e].setAttribute(t,"url(#"+A+")")}),m[e].id=A}}),i.removeAttribute("xmlns:a");for(var x,S,k=i.querySelectorAll("script"),j=[],G=0,T=k.length;T>G;G++)S=k[G].getAttribute("type"),S&&"application/ecmascript"!==S&&"application/javascript"!==S||(x=k[G].innerText||k[G].textContent,j.push(x),i.removeChild(k[G]));if(j.length>0&&("always"===n||"once"===n&&!c[f])){for(var M=0,V=j.length;V>M;M++)new Function(j[M])(t);c[f]=!0}var E=i.querySelectorAll("style");o.call(E,function(t){t.textContent+=""}),e.parentNode.replaceChild(i,e),delete s[s.indexOf(e)],e=null,l++,u(i)}))},g=function(t,e,r){e=e||{};var n=e.evalScripts||"always",i=e.pngFallback||!1,a=e.each;if(void 0!==t.length){var l=0;o.call(t,function(e){h(e,n,i,function(e){a&&"function"==typeof a&&a(e),r&&t.length===++l&&r(l)})})}else t?h(t,n,i,function(e){a&&"function"==typeof a&&a(e),r&&r(1),t=null}):r&&r(0)};"object"==typeof module&&"object"==typeof module.exports?module.exports=exports=g:"function"==typeof define&&define.amd?define(function(){return g}):"object"==typeof t&&(t.SVGInjector=g)}(window,document);
+//# sourceMappingURL=svg-injector.map.js
\ No newline at end of file