Merge branch hotfix/v7.2.2 into master
| 
						 | 
				
			
			@ -45,7 +45,8 @@ define([
 | 
			
		|||
        version: '{{PRODUCT_VERSION}}',
 | 
			
		||||
        eventloading: true,
 | 
			
		||||
        titlebuttons: true,
 | 
			
		||||
        uithemes: true
 | 
			
		||||
        uithemes: true,
 | 
			
		||||
        quickprint: true,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    var native = window.desktop || window.AscDesktopEditor;
 | 
			
		||||
| 
						 | 
				
			
			@ -166,7 +167,8 @@ define([
 | 
			
		|||
                action: action,
 | 
			
		||||
                icon: config.icon || undefined,
 | 
			
		||||
                hint: config.btn.options.hint,
 | 
			
		||||
                disabled: config.btn.isDisabled()
 | 
			
		||||
                disabled: config.btn.isDisabled(),
 | 
			
		||||
                visible: config.visible,
 | 
			
		||||
            };
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -201,6 +203,7 @@ define([
 | 
			
		|||
            if ( !!titlebuttons ) {
 | 
			
		||||
                info.hints = {};
 | 
			
		||||
                !!titlebuttons['print'] && (info.hints['print'] = titlebuttons['print'].btn.btnEl.attr('data-hint-title'));
 | 
			
		||||
                !!titlebuttons['quickprint'] && (info.hints['quickprint'] = titlebuttons['quickprint'].btn.btnEl.attr('data-hint-title'));
 | 
			
		||||
                !!titlebuttons['undo'] && (info.hints['undo'] = titlebuttons['undo'].btn.btnEl.attr('data-hint-title'));
 | 
			
		||||
                !!titlebuttons['redo'] && (info.hints['redo'] = titlebuttons['redo'].btn.btnEl.attr('data-hint-title'));
 | 
			
		||||
                !!titlebuttons['save'] && (info.hints['save'] = titlebuttons['save'].btn.btnEl.attr('data-hint-title'));
 | 
			
		||||
| 
						 | 
				
			
			@ -216,6 +219,24 @@ define([
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const _onApplySettings = function (menu) {
 | 
			
		||||
            if ( !!titlebuttons.quickprint ) {
 | 
			
		||||
                const var_name = window.SSE ? 'sse-settings-quick-print-button' :
 | 
			
		||||
                                    window.PE ? 'pe-settings-quick-print-button' : 'de-settings-quick-print-button';
 | 
			
		||||
                const is_btn_visible = Common.localStorage.getBool(var_name, false);
 | 
			
		||||
 | 
			
		||||
                if ( titlebuttons.quickprint.visible != is_btn_visible ) {
 | 
			
		||||
                    titlebuttons.quickprint.visible = is_btn_visible;
 | 
			
		||||
                    const obj = {
 | 
			
		||||
                        visible: {
 | 
			
		||||
                            quickprint: is_btn_visible,
 | 
			
		||||
                        }
 | 
			
		||||
                    };
 | 
			
		||||
                    native.execCommand('title:button', JSON.stringify(obj));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return {
 | 
			
		||||
            init: function (opts) {
 | 
			
		||||
                _.extend(config, opts);
 | 
			
		||||
| 
						 | 
				
			
			@ -233,9 +254,45 @@ define([
 | 
			
		|||
 | 
			
		||||
                    Common.NotificationCenter.on('document:ready', function () {
 | 
			
		||||
                        if ( config.isEdit ) {
 | 
			
		||||
                            var maincontroller = webapp.getController('Main');
 | 
			
		||||
                            if (maincontroller.api.asc_isReadOnly && maincontroller.api.asc_isReadOnly()) {
 | 
			
		||||
                                maincontroller.warningDocumentIsLocked();
 | 
			
		||||
                            function get_locked_message (t) {
 | 
			
		||||
                                switch (t) {
 | 
			
		||||
                                // case Asc.c_oAscLocalRestrictionType.Nosafe:
 | 
			
		||||
                                case Asc.c_oAscLocalRestrictionType.ReadOnly:
 | 
			
		||||
                                    return Common.Locale.get("tipFileReadOnly",{name:"Common.Translation", default: "Document is read only. You can make changes and save its local copy later."});
 | 
			
		||||
                                default: return Common.Locale.get("tipFileLocked",{name:"Common.Translation", default: "Document is locked for editing. You can make changes and save its local copy later."});
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            const header = webapp.getController('Viewport').getView('Common.Views.Header');
 | 
			
		||||
                            const api = webapp.getController('Main').api;
 | 
			
		||||
                            const locktype = api.asc_getLocalRestrictions ? api.asc_getLocalRestrictions() : Asc.c_oAscLocalRestrictionType.None;
 | 
			
		||||
                            if ( Asc.c_oAscLocalRestrictionType.None !== locktype ) {
 | 
			
		||||
                                features.readonly = true;
 | 
			
		||||
 | 
			
		||||
                                header.setDocumentReadOnly(true);
 | 
			
		||||
                                api.asc_setLocalRestrictions(Asc.c_oAscLocalRestrictionType.None);
 | 
			
		||||
 | 
			
		||||
                                (new Common.UI.SynchronizeTip({
 | 
			
		||||
                                    extCls: 'no-arrow',
 | 
			
		||||
                                    placement: 'bottom',
 | 
			
		||||
                                    target: $('.toolbar'),
 | 
			
		||||
                                    text: get_locked_message(locktype),
 | 
			
		||||
                                    showLink: false,
 | 
			
		||||
                                })).on('closeclick', function () {
 | 
			
		||||
                                    this.close();
 | 
			
		||||
                                }).show();
 | 
			
		||||
 | 
			
		||||
                                native.execCommand('webapps:features', JSON.stringify(features));
 | 
			
		||||
 | 
			
		||||
                                api.asc_registerCallback('asc_onDocumentName', function () {
 | 
			
		||||
                                    if ( features.readonly ) {
 | 
			
		||||
                                        if ( api.asc_getLocalRestrictions() == Asc.c_oAscLocalRestrictionType.None ) {
 | 
			
		||||
                                            features.readonly = false;
 | 
			
		||||
                                            header.setDocumentReadOnly(false);
 | 
			
		||||
                                            native.execCommand('webapps:features', JSON.stringify(features));
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                });
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
| 
						 | 
				
			
			@ -247,7 +304,7 @@ define([
 | 
			
		|||
 | 
			
		||||
                        titlebuttons = {};
 | 
			
		||||
                        if ( mode.isEdit ) {
 | 
			
		||||
                            var header = webapp.getController('Viewport').getView('Common.Views.Header');
 | 
			
		||||
                            const header = webapp.getController('Viewport').getView('Common.Views.Header');
 | 
			
		||||
                            if (!!header.btnSave) {
 | 
			
		||||
                                titlebuttons['save'] = {btn: header.btnSave};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -258,6 +315,13 @@ define([
 | 
			
		|||
                            if (!!header.btnPrint)
 | 
			
		||||
                                titlebuttons['print'] = {btn: header.btnPrint};
 | 
			
		||||
 | 
			
		||||
                            if (!!header.btnPrintQuick) {
 | 
			
		||||
                                titlebuttons['quickprint'] = {
 | 
			
		||||
                                    btn: header.btnPrintQuick,
 | 
			
		||||
                                    visible: header.btnPrintQuick.isVisible(),
 | 
			
		||||
                                };
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            if (!!header.btnUndo)
 | 
			
		||||
                                titlebuttons['undo'] = {btn: header.btnUndo};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -288,6 +352,7 @@ define([
 | 
			
		|||
                    Common.NotificationCenter.on({
 | 
			
		||||
                        'modal:show': _onModalDialog.bind(this, 'open'),
 | 
			
		||||
                        'modal:close': _onModalDialog.bind(this, 'close'),
 | 
			
		||||
                        'modal:hide': _onModalDialog.bind(this, 'hide'),
 | 
			
		||||
                        'uitheme:changed' : function (name) {
 | 
			
		||||
                            if (Common.localStorage.getBool('ui-theme-use-system', false)) {
 | 
			
		||||
                                native.execCommand("uitheme:changed", JSON.stringify({name:'theme-system'}));
 | 
			
		||||
| 
						 | 
				
			
			@ -312,6 +377,7 @@ define([
 | 
			
		|||
                                    menu.hide();
 | 
			
		||||
                                }
 | 
			
		||||
                            },
 | 
			
		||||
                            'settings:apply': _onApplySettings.bind(this),
 | 
			
		||||
                        },
 | 
			
		||||
                    }, {id: 'desktop'});
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -369,7 +435,10 @@ define([
 | 
			
		|||
                }
 | 
			
		||||
 | 
			
		||||
                return undefined;
 | 
			
		||||
            }
 | 
			
		||||
            },
 | 
			
		||||
            getDefaultPrinterName: function () {
 | 
			
		||||
                return nativevars ? nativevars.defaultPrinterName : '';
 | 
			
		||||
            },
 | 
			
		||||
        };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -979,7 +979,7 @@ Common.Utils.warningDocumentIsLocked = function (opts) {
 | 
			
		|||
        callback: function(btn){
 | 
			
		||||
            if (btn == 'edit') {
 | 
			
		||||
                if ( opts.disablefunc ) opts.disablefunc(false);
 | 
			
		||||
                app.getController('Main').api.asc_setIsReadOnly(false);
 | 
			
		||||
                app.getController('Main').api.asc_setLocalRestrictions(Asc.c_oAscLocalRestrictionType.None);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -81,6 +81,7 @@ define([
 | 
			
		|||
                                '<div class="hedset">' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-hbtn-edit"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-hbtn-print"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-hbtn-print-quick"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-hbtn-download"></div>' +
 | 
			
		||||
                                '</div>' +
 | 
			
		||||
                                '<div class="hedset" data-layout-name="header-users">' +
 | 
			
		||||
| 
						 | 
				
			
			@ -128,6 +129,7 @@ define([
 | 
			
		|||
                                '<div class="hedset">' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-btn-dt-save" data-layout-name="header-save"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-btn-dt-print"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-btn-dt-print-quick"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-btn-dt-undo"></div>' +
 | 
			
		||||
                                    '<div class="btn-slot" id="slot-btn-dt-redo"></div>' +
 | 
			
		||||
                                '</div>' +
 | 
			
		||||
| 
						 | 
				
			
			@ -332,6 +334,13 @@ define([
 | 
			
		|||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( me.btnPrintQuick ) {
 | 
			
		||||
                me.btnPrintQuick.updateHint(me.tipPrintQuick);
 | 
			
		||||
                me.btnPrintQuick.on('click', function (e) {
 | 
			
		||||
                    me.fireEvent('print-quick', me);
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( me.btnSave ) {
 | 
			
		||||
                me.btnSave.updateHint(me.tipSave + Common.Utils.String.platformKey('Ctrl+S'));
 | 
			
		||||
                me.btnSave.on('click', function (e) {
 | 
			
		||||
| 
						 | 
				
			
			@ -572,6 +581,9 @@ define([
 | 
			
		|||
                        if ( config.canPrint )
 | 
			
		||||
                            this.btnPrint = createTitleButton('toolbar__icon icon--inverse btn-print', $html.findById('#slot-hbtn-print'), undefined, 'bottom', 'big', 'P');
 | 
			
		||||
 | 
			
		||||
                        if ( config.canQuickPrint )
 | 
			
		||||
                            this.btnPrintQuick = createTitleButton('toolbar__icon icon--inverse btn-quick-print', $html.findById('#slot-hbtn-print-quick'), undefined, 'bottom', 'big', 'Q');
 | 
			
		||||
 | 
			
		||||
                        if ( config.canEdit && config.canRequestEditRights )
 | 
			
		||||
                            this.btnEdit = createTitleButton('toolbar__icon icon--inverse btn-edit', $html.findById('#slot-hbtn-edit'), undefined, 'bottom', 'big');
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -646,6 +658,8 @@ define([
 | 
			
		|||
                    if ( config.canPrint && config.isEdit ) {
 | 
			
		||||
                        me.btnPrint = createTitleButton('toolbar__icon icon--inverse btn-print', $html.findById('#slot-btn-dt-print'), true, undefined, undefined, 'P');
 | 
			
		||||
                    }
 | 
			
		||||
                    if ( config.canQuickPrint && config.isEdit )
 | 
			
		||||
                        me.btnPrintQuick = createTitleButton('toolbar__icon icon--inverse btn-quick-print', $html.findById('#slot-btn-dt-print-quick'), true, undefined, undefined, 'Q');
 | 
			
		||||
 | 
			
		||||
                    me.btnSave = createTitleButton('toolbar__icon icon--inverse btn-save', $html.findById('#slot-btn-dt-save'), true, undefined, undefined, 'S');
 | 
			
		||||
                    me.btnUndo = createTitleButton('toolbar__icon icon--inverse btn-undo', $html.findById('#slot-btn-dt-undo'), true, undefined, undefined, 'Z');
 | 
			
		||||
| 
						 | 
				
			
			@ -695,6 +709,7 @@ define([
 | 
			
		|||
                if (idx>0)
 | 
			
		||||
                    this.fileExtention = this.documentCaption.substring(idx);
 | 
			
		||||
                this.isModified && (value += '*');
 | 
			
		||||
                this.readOnly && (value += ' (' + this.textReadOnly + ')');
 | 
			
		||||
                if ( $labelDocName ) {
 | 
			
		||||
                    this.setDocTitle( value );
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -887,6 +902,11 @@ define([
 | 
			
		|||
                return initials;
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            setDocumentReadOnly: function (readonly) {
 | 
			
		||||
                this.readOnly = readonly;
 | 
			
		||||
                this.setDocumentCaption(this.documentCaption);
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            textBack: 'Go to Documents',
 | 
			
		||||
            txtRename: 'Rename',
 | 
			
		||||
            txtAccessRights: 'Change access rights',
 | 
			
		||||
| 
						 | 
				
			
			@ -910,7 +930,9 @@ define([
 | 
			
		|||
            textAddFavorite: 'Mark as favorite',
 | 
			
		||||
            textHideNotes: 'Hide Notes',
 | 
			
		||||
            tipSearch: 'Search',
 | 
			
		||||
            textShare: 'Share'
 | 
			
		||||
            textShare: 'Share',
 | 
			
		||||
            tipPrintQuick: 'Quick print',
 | 
			
		||||
            textReadOnly: 'Read only'
 | 
			
		||||
        }
 | 
			
		||||
    }(), Common.Views.Header || {}))
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
		 After Width: | Height: | Size: 254 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/1.25x/btn-quick-print.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 392 B  | 
| 
		 After Width: | Height: | Size: 286 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/1.5x/btn-quick-print.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 439 B  | 
| 
		 After Width: | Height: | Size: 314 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/1.75x/btn-quick-print.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 525 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/1x/btn-print-preview.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 238 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/1x/btn-quick-print.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 360 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/2x/btn-print-preview.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 436 B  | 
							
								
								
									
										
											BIN
										
									
								
								apps/common/main/resources/img/toolbar/2x/btn-quick-print.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 754 B  | 
| 
						 | 
				
			
			@ -157,6 +157,7 @@ require([
 | 
			
		|||
            'Main',
 | 
			
		||||
            'ViewTab',
 | 
			
		||||
            'Search',
 | 
			
		||||
            'Print',
 | 
			
		||||
            'Common.Controllers.Fonts',
 | 
			
		||||
            'Common.Controllers.History'
 | 
			
		||||
            /** coauthoring begin **/
 | 
			
		||||
| 
						 | 
				
			
			@ -191,6 +192,7 @@ require([
 | 
			
		|||
                'documenteditor/main/app/controller/Main',
 | 
			
		||||
                'documenteditor/main/app/controller/ViewTab',
 | 
			
		||||
                'documenteditor/main/app/controller/Search',
 | 
			
		||||
                'documenteditor/main/app/controller/Print',
 | 
			
		||||
                'documenteditor/main/app/view/FileMenuPanels',
 | 
			
		||||
                'documenteditor/main/app/view/ParagraphSettings',
 | 
			
		||||
                'documenteditor/main/app/view/HeaderFooterSettings',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1249,15 +1249,11 @@ define([
 | 
			
		|||
                    handler: function(dlg, result) {
 | 
			
		||||
                        if (result == 'ok') {
 | 
			
		||||
                            var props = dlg.getSettings();
 | 
			
		||||
                            var mnu = DE.getController('Toolbar').toolbar.btnPageMargins.menu.items[0];
 | 
			
		||||
                            mnu.setVisible(true);
 | 
			
		||||
                            mnu.setChecked(true);
 | 
			
		||||
                            mnu.options.value = mnu.value = [props.get_TopMargin(), props.get_LeftMargin(), props.get_BottomMargin(), props.get_RightMargin()];
 | 
			
		||||
                            $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options}));
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-top", props.get_TopMargin());
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-left", props.get_LeftMargin());
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-bottom", props.get_BottomMargin());
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-right", props.get_RightMargin());
 | 
			
		||||
                            Common.NotificationCenter.trigger('margins:update', props);
 | 
			
		||||
 | 
			
		||||
                            me.api.asc_SetSectionProps(props);
 | 
			
		||||
                            me.editComplete();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -113,6 +113,7 @@ define([
 | 
			
		|||
                if ( !this.leftMenu.panelHistory.isVisible() )
 | 
			
		||||
                    this.clickMenuFileItem(null, 'history');
 | 
			
		||||
            }, this));
 | 
			
		||||
            Common.NotificationCenter.on('file:print', _.bind(this.clickToolbarPrint, this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onLaunch: function() {
 | 
			
		||||
| 
						 | 
				
			
			@ -549,6 +550,13 @@ define([
 | 
			
		|||
                this.leftMenu.menuFile.hide();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        clickToolbarPrint: function () {
 | 
			
		||||
            if (this.mode.canPreviewPrint)
 | 
			
		||||
                this.leftMenu.showMenu('file:printpreview');
 | 
			
		||||
            else if (this.mode.canPrint)
 | 
			
		||||
                this.clickMenuFileItem(null, 'print');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        changeToolbarSaveState: function (state) {
 | 
			
		||||
            var btnSave = this.leftMenu.menuFile.getButton('save');
 | 
			
		||||
            btnSave && btnSave.setDisabled(state);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1494,6 +1494,9 @@ define([
 | 
			
		|||
                }
 | 
			
		||||
                this.appOptions.canEditStyles  = this.appOptions.canLicense && this.appOptions.canEdit;
 | 
			
		||||
                this.appOptions.canPrint       = (this.permissions.print !== false);
 | 
			
		||||
                this.appOptions.canPreviewPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp;
 | 
			
		||||
                this.appOptions.canQuickPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp &&
 | 
			
		||||
                                                !(this.editorConfig.customization && this.editorConfig.customization.compactHeader);
 | 
			
		||||
                this.appOptions.canRename      = this.editorConfig.canRename;
 | 
			
		||||
                this.appOptions.buildVersion   = params.asc_getBuildVersion();
 | 
			
		||||
                this.appOptions.canForcesave   = this.appOptions.isEdit && !this.appOptions.isOffline && (typeof (this.editorConfig.customization) == 'object' && !!this.editorConfig.customization.forcesave);
 | 
			
		||||
| 
						 | 
				
			
			@ -1663,6 +1666,9 @@ define([
 | 
			
		|||
                toolbarController.setMode(this.appOptions);
 | 
			
		||||
                documentHolder.setMode(this.appOptions);
 | 
			
		||||
 | 
			
		||||
                var printController = app.getController('Print');
 | 
			
		||||
                printController && this.api && printController.setApi(this.api).setMode(this.appOptions);
 | 
			
		||||
 | 
			
		||||
                this.api.asc_registerCallback('asc_onSendThemeColors', _.bind(this.onSendThemeColors, this));
 | 
			
		||||
                this.api.asc_registerCallback('asc_onDownloadUrl',     _.bind(this.onDownloadUrl, this));
 | 
			
		||||
                this.api.asc_registerCallback('asc_onAuthParticipantsChanged', _.bind(this.onAuthParticipantsChanged, this));
 | 
			
		||||
| 
						 | 
				
			
			@ -2460,6 +2466,7 @@ define([
 | 
			
		|||
                this.api.asc_SetDocumentUnits((value==Common.Utils.Metric.c_MetricUnits.inch) ? Asc.c_oAscDocumentUnits.Inch : ((value==Common.Utils.Metric.c_MetricUnits.pt) ? Asc.c_oAscDocumentUnits.Point : Asc.c_oAscDocumentUnits.Millimeter));
 | 
			
		||||
                this.getApplication().getController('RightMenu').updateMetricUnit();
 | 
			
		||||
                this.getApplication().getController('Toolbar').getView().updateMetricUnit();
 | 
			
		||||
                this.appOptions.canPreviewPrint && this.getApplication().getController('Print').getView('PrintWithPreview').updateMetricUnit();
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onAdvancedOptions: function(type, advOptions, mode, formatOptions) {
 | 
			
		||||
| 
						 | 
				
			
			@ -2614,9 +2621,7 @@ define([
 | 
			
		|||
 | 
			
		||||
            onPrint: function() {
 | 
			
		||||
                if (!this.appOptions.canPrint || Common.Utils.ModalWindow.isVisible()) return;
 | 
			
		||||
                
 | 
			
		||||
                if (this.api)
 | 
			
		||||
                    this.api.asc_Print(new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86)); // if isChrome or isOpera == true use asc_onPrintUrl event
 | 
			
		||||
                Common.NotificationCenter.trigger('file:print');
 | 
			
		||||
                Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2649,6 +2654,39 @@ define([
 | 
			
		|||
                if (url) this.iframePrint.src = url;
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onPrintQuick: function() {
 | 
			
		||||
                if (!this.appOptions.canQuickPrint) return;
 | 
			
		||||
 | 
			
		||||
                var value = Common.localStorage.getBool("de-hide-quick-print-warning"),
 | 
			
		||||
                    me = this,
 | 
			
		||||
                    handler = function () {
 | 
			
		||||
                        var printopt = new Asc.asc_CAdjustPrint();
 | 
			
		||||
                        printopt.asc_setNativeOptions({quickPrint: true});
 | 
			
		||||
                        var opts = new Asc.asc_CDownloadOptions();
 | 
			
		||||
                        opts.asc_setAdvancedOptions(printopt);
 | 
			
		||||
                        me.api.asc_Print(opts);
 | 
			
		||||
                        Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
                    };
 | 
			
		||||
 | 
			
		||||
                if (value) {
 | 
			
		||||
                    handler.call(this);
 | 
			
		||||
                } else {
 | 
			
		||||
                    Common.UI.warning({
 | 
			
		||||
                        msg: this.textTryQuickPrint,
 | 
			
		||||
                        buttons: ['yes', 'no'],
 | 
			
		||||
                        primary: 'yes',
 | 
			
		||||
                        dontshow: true,
 | 
			
		||||
                        maxwidth: 500,
 | 
			
		||||
                        callback: function(btn, dontshow){
 | 
			
		||||
                            dontshow && Common.localStorage.setBool("de-hide-quick-print-warning", true);
 | 
			
		||||
                            if (btn === 'yes') {
 | 
			
		||||
                                setTimeout(handler, 1);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onClearDummyComment: function() {
 | 
			
		||||
                this.dontCloseDummyComment = false;
 | 
			
		||||
            },
 | 
			
		||||
| 
						 | 
				
			
			@ -3275,7 +3313,8 @@ define([
 | 
			
		|||
            errorTextFormWrongFormat: 'The value entered does not match the format of the field.',
 | 
			
		||||
            confirmMaxChangesSize: 'The size of actions exceeds the limitation set for your server.<br>Press "Undo" to cancel your last action or press "Continue" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).',
 | 
			
		||||
            textUndo: 'Undo',
 | 
			
		||||
            textContinue: 'Continue'
 | 
			
		||||
            textContinue: 'Continue',
 | 
			
		||||
            textTryQuickPrint: 'You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?'
 | 
			
		||||
        }
 | 
			
		||||
    })(), DE.Controllers.Main || {}))
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										574
									
								
								apps/documenteditor/main/app/controller/Print.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,574 @@
 | 
			
		|||
/*
 | 
			
		||||
 *
 | 
			
		||||
 * (c) Copyright Ascensio System SIA 2010-2022
 | 
			
		||||
 *
 | 
			
		||||
 * 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 20A-12 Ernesta Birznieka-Upisha
 | 
			
		||||
 * street, Riga, Latvia, EU, LV-1050.
 | 
			
		||||
 *
 | 
			
		||||
 * 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([
 | 
			
		||||
    'core',
 | 
			
		||||
    'documenteditor/main/app/view/FileMenuPanels'
 | 
			
		||||
], function () {
 | 
			
		||||
    'use strict';
 | 
			
		||||
 | 
			
		||||
    DE.Controllers.Print = Backbone.Controller.extend(_.extend({
 | 
			
		||||
        views: [
 | 
			
		||||
            'PrintWithPreview'
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
        initialize: function() {
 | 
			
		||||
            this.adjPrintParams = new Asc.asc_CAdjustPrint();
 | 
			
		||||
            this._state = {
 | 
			
		||||
                lock_doc: false,
 | 
			
		||||
                firstPrintPage: 0
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this._navigationPreview = {
 | 
			
		||||
                pageCount: false,
 | 
			
		||||
                currentPage: 0,
 | 
			
		||||
                currentPreviewPage: 0
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this._isPreviewVisible = false;
 | 
			
		||||
 | 
			
		||||
            this.addListeners({
 | 
			
		||||
                'PrintWithPreview': {
 | 
			
		||||
                    'show': _.bind(this.onShowMainSettingsPrint, this),
 | 
			
		||||
                    'render:after': _.bind(this.onAfterRender, this)
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onLaunch: function() {
 | 
			
		||||
            this.printSettings = this.createView('PrintWithPreview');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onAfterRender: function(view) {
 | 
			
		||||
            var me = this;
 | 
			
		||||
            this.printSettings.menu.on('menu:hide', _.bind(this.onHidePrintMenu, this));
 | 
			
		||||
            this.printSettings.btnPrint.on('click', _.bind(this.onBtnPrint, this, true));
 | 
			
		||||
            this.printSettings.btnPrintPdf.on('click', _.bind(this.onBtnPrint, this, false));
 | 
			
		||||
            this.printSettings.btnPrevPage.on('click', _.bind(this.onChangePreviewPage, this, false));
 | 
			
		||||
            this.printSettings.btnNextPage.on('click', _.bind(this.onChangePreviewPage, this, true));
 | 
			
		||||
            this.printSettings.txtNumberPage.on({
 | 
			
		||||
                'keypress:after':  _.bind(this.onKeypressPageNumber, this),
 | 
			
		||||
                'keyup:after': _.bind(this.onKeyupPageNumber, this)
 | 
			
		||||
            });
 | 
			
		||||
            this.printSettings.txtNumberPage.cmpEl.find('input').on('blur', _.bind(this.onBlurPageNumber, this));
 | 
			
		||||
            this.printSettings.cmbPaperSize.on('selected', _.bind(this.onPaperSizeSelect, this));
 | 
			
		||||
            this.printSettings.cmbPaperOrientation.on('selected', _.bind(this.onPaperOrientSelect, this));
 | 
			
		||||
            this.printSettings.cmbPaperMargins.on('selected', _.bind(this.onPaperMarginsSelect, this));
 | 
			
		||||
            this.printSettings.cmbRange.on('selected', _.bind(this.comboRangeChange, this));
 | 
			
		||||
            this.printSettings.inputPages.on('changing', _.bind(this.inputPagesChanging, this));
 | 
			
		||||
            this.printSettings.inputPages.validation = function(value) {
 | 
			
		||||
                if (!_.isEmpty(value) && /[0-9,\-]/.test(value)) {
 | 
			
		||||
                    var res = [],
 | 
			
		||||
                        arr = value.split(',');
 | 
			
		||||
                    if (me._isPrint && arr.length>1)
 | 
			
		||||
                        return me.txtPrintRangeSingleRange;
 | 
			
		||||
 | 
			
		||||
                    for (var i=0; i<arr.length; i++) {
 | 
			
		||||
                        var item = arr[i];
 | 
			
		||||
                        if (!item) // empty
 | 
			
		||||
                            return me.txtPrintRangeInvalid;
 | 
			
		||||
                        var str = item.match(/\-/g);
 | 
			
		||||
                        if (str && str.length>1) // more than 1 symbol '-'
 | 
			
		||||
                            return me.txtPrintRangeInvalid;
 | 
			
		||||
                        if (!str) {// one number
 | 
			
		||||
                            var num = parseInt(item)-1;
 | 
			
		||||
                            (num>=0) && res.push(num);
 | 
			
		||||
                        } else { // range
 | 
			
		||||
                            var pages = item.split('-'),
 | 
			
		||||
                                start = (pages[0] ? parseInt(pages[0])-1 : 0),
 | 
			
		||||
                                end = (pages[1] ? parseInt(pages[1])-1 : me._navigationPreview.pageCount-1);
 | 
			
		||||
                            if (start>end) {
 | 
			
		||||
                                var num = start;
 | 
			
		||||
                                start = end;
 | 
			
		||||
                                end = num;
 | 
			
		||||
                            }
 | 
			
		||||
                            for (var j=start; j<=end; j++) {
 | 
			
		||||
                                (j>=0) && res.push(j);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (res.length>0) {
 | 
			
		||||
                        me._state.firstPrintPage = res[0];
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return me.txtPrintRangeInvalid;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.on('window:resize', _.bind(function () {
 | 
			
		||||
                if (this._isPreviewVisible) {
 | 
			
		||||
                    this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage);
 | 
			
		||||
                }
 | 
			
		||||
            }, this));
 | 
			
		||||
            Common.NotificationCenter.on('margins:update', _.bind(this.onUpdateLastCustomMargins, this));
 | 
			
		||||
 | 
			
		||||
            var eventname = (/Firefox/i.test(navigator.userAgent))? 'DOMMouseScroll' : 'mousewheel';
 | 
			
		||||
            this.printSettings.$previewBox.on(eventname, _.bind(this.onPreviewWheel, this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setMode: function (mode) {
 | 
			
		||||
            this.mode = mode;
 | 
			
		||||
            this.printSettings && this.printSettings.setMode(mode);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setApi: function(o) {
 | 
			
		||||
            this.api = o;
 | 
			
		||||
            this.api.asc_registerCallback('asc_onDocSize', _.bind(this.onApiPageSize, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onPageOrient', _.bind(this.onApiPageOrient, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onSectionProps', _.bind(this.onSectionProps, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onCountPages',   _.bind(this.onCountPages, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onCurrentPage',  _.bind(this.onCurrentPage, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onLockDocumentProps', _.bind(this.onApiLockDocumentProps, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onUnLockDocumentProps', _.bind(this.onApiUnLockDocumentProps, this));
 | 
			
		||||
 | 
			
		||||
            return this;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        findPagePreset: function(w, h) {
 | 
			
		||||
            var width = (w<h) ? w : h,
 | 
			
		||||
                height = (w<h) ? h : w;
 | 
			
		||||
            var panel = this.printSettings;
 | 
			
		||||
            var store = panel.cmbPaperSize.store,
 | 
			
		||||
                item = null;
 | 
			
		||||
            for (var i=0; i<store.length-1; i++) {
 | 
			
		||||
                var rec = store.at(i),
 | 
			
		||||
                    size = rec.get('size'),
 | 
			
		||||
                    pagewidth = size[0],
 | 
			
		||||
                    pageheight = size[1];
 | 
			
		||||
                if (Math.abs(pagewidth - width) < 0.1 && Math.abs(pageheight - height) < 0.1) {
 | 
			
		||||
                    item = rec;
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return item ? item.get('caption') : undefined;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiPageSize: function(w, h) {
 | 
			
		||||
            this._state.pgsize = [w, h];
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                var width = this._state.pgorient ? w : h,
 | 
			
		||||
                    height = this._state.pgorient ? h : w;
 | 
			
		||||
                var panel = this.printSettings;
 | 
			
		||||
                var store = panel.cmbPaperSize.store,
 | 
			
		||||
                    item = null;
 | 
			
		||||
                for (var i=0; i<store.length-1; i++) {
 | 
			
		||||
                    var rec = store.at(i),
 | 
			
		||||
                        size = rec.get('size'),
 | 
			
		||||
                        pagewidth = size[0],
 | 
			
		||||
                        pageheight = size[1];
 | 
			
		||||
                    if (Math.abs(pagewidth - width) < 0.1 && Math.abs(pageheight - height) < 0.1) {
 | 
			
		||||
                        item = rec;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (item)
 | 
			
		||||
                    panel.cmbPaperSize.setValue(item.get('value'));
 | 
			
		||||
                else
 | 
			
		||||
                    panel.cmbPaperSize.setValue(this.txtCustom + ' (' + parseFloat(Common.Utils.Metric.fnRecalcFromMM(width).toFixed(2)) + Common.Utils.Metric.getCurrentMetricName() + ' x ' +
 | 
			
		||||
                        parseFloat(Common.Utils.Metric.fnRecalcFromMM(height).toFixed(2)) + Common.Utils.Metric.getCurrentMetricName() + ')');
 | 
			
		||||
            } else {
 | 
			
		||||
                this.isFillProps = false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiPageOrient: function(isportrait) {
 | 
			
		||||
            this._state.pgorient = !!isportrait;
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                var item = this.printSettings.cmbPaperOrientation.store.findWhere({value: this._state.pgorient ? Asc.c_oAscPageOrientation.PagePortrait : Asc.c_oAscPageOrientation.PageLandscape});
 | 
			
		||||
                if (item) this.printSettings.cmbPaperOrientation.setValue(item.get('value'));
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onSectionProps: function(props) {
 | 
			
		||||
            if (!props) return;
 | 
			
		||||
 | 
			
		||||
            this._state.sectionprops = props;
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                var left = props.get_LeftMargin(),
 | 
			
		||||
                    top = props.get_TopMargin(),
 | 
			
		||||
                    right = props.get_RightMargin(),
 | 
			
		||||
                    bottom = props.get_BottomMargin();
 | 
			
		||||
 | 
			
		||||
                this._state.pgmargins = [top, left, bottom, right];
 | 
			
		||||
                var store = this.printSettings.cmbPaperMargins.store,
 | 
			
		||||
                    item = null;
 | 
			
		||||
                for (var i=0; i<store.length-1; i++) {
 | 
			
		||||
                    var rec = store.at(i),
 | 
			
		||||
                        size = rec.get('size');
 | 
			
		||||
                    if (typeof(size) == 'object' &&
 | 
			
		||||
                        Math.abs(size[0] - top) < 0.1 && Math.abs(size[1] - left) < 0.1 &&
 | 
			
		||||
                        Math.abs(size[2] - bottom) < 0.1 && Math.abs(size[3] - right) < 0.1) {
 | 
			
		||||
                        item = rec;
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (item)
 | 
			
		||||
                    this.printSettings.cmbPaperMargins.setValue(item.get('value'));
 | 
			
		||||
                else
 | 
			
		||||
                    this.printSettings.cmbPaperMargins.setValue(this.txtCustom);
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        comboRangeChange: function(combo, record) {
 | 
			
		||||
            if (record.value === -1) {
 | 
			
		||||
                var me = this;
 | 
			
		||||
                setTimeout(function(){
 | 
			
		||||
                    me.printSettings.inputPages.focus();
 | 
			
		||||
                }, 50);
 | 
			
		||||
            } else {
 | 
			
		||||
                this.printSettings.inputPages.setValue('');
 | 
			
		||||
            }
 | 
			
		||||
            this.printSettings.inputPages.showError();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onCountPages: function(count) {
 | 
			
		||||
            this._navigationPreview.pageCount = count;
 | 
			
		||||
            if (this._navigationPreview.currentPreviewPage > count - 1) {
 | 
			
		||||
                this._navigationPreview.currentPreviewPage = Math.max(0, count - 1);
 | 
			
		||||
                if (this.printSettings.isVisible()) {
 | 
			
		||||
                    this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage);
 | 
			
		||||
                    this.updateNavigationButtons(this._navigationPreview.currentPreviewPage, count);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onCurrentPage: function(number) {
 | 
			
		||||
            this._navigationPreview.currentPreviewPage = number;
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage);
 | 
			
		||||
                this.updateNavigationButtons(this._navigationPreview.currentPreviewPage, this._navigationPreview.pageCount);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onShowMainSettingsPrint: function() {
 | 
			
		||||
            var me = this;
 | 
			
		||||
            this.printSettings.$previewBox.removeClass('hidden');
 | 
			
		||||
 | 
			
		||||
            this.onUpdateLastCustomMargins(this._state.lastmargins);
 | 
			
		||||
            this._state.pgsize && this.onApiPageSize(this._state.pgsize[0], this._state.pgsize[1]);
 | 
			
		||||
            this.onApiPageOrient(this._state.pgorient);
 | 
			
		||||
            this._state.sectionprops && this.onSectionProps(this._state.sectionprops);
 | 
			
		||||
 | 
			
		||||
            var opts = new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86);
 | 
			
		||||
            opts.asc_setAdvancedOptions(this.adjPrintParams);
 | 
			
		||||
            this.api.asc_initPrintPreview('print-preview', opts);
 | 
			
		||||
 | 
			
		||||
            this._navigationPreview.currentPreviewPage = this._navigationPreview.currentPage = this.api.getCurrentPage();
 | 
			
		||||
            this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage);
 | 
			
		||||
            this.updateNavigationButtons(this._navigationPreview.currentPreviewPage, this._navigationPreview.pageCount);
 | 
			
		||||
            this.SetDisabled();
 | 
			
		||||
            this._isPreviewVisible = true;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onPaperSizeSelect: function(combo, record) {
 | 
			
		||||
            this._state.pgsize = [0, 0];
 | 
			
		||||
            if (record.value !== -1) {
 | 
			
		||||
                if (this.checkPageSize(record.size[0], record.size[1])) {
 | 
			
		||||
                    var section = this.api.asc_GetSectionProps();
 | 
			
		||||
                    this.onApiPageSize(section.get_W(), section.get_H());
 | 
			
		||||
                    return;
 | 
			
		||||
                } else
 | 
			
		||||
                    this.api.change_DocSize(record.size[0], record.size[1]);
 | 
			
		||||
            } else {
 | 
			
		||||
                var win, props,
 | 
			
		||||
                    me = this;
 | 
			
		||||
                win = new DE.Views.PageSizeDialog({
 | 
			
		||||
                    checkPageSize: _.bind(this.checkPageSize, this),
 | 
			
		||||
                    handler: function(dlg, result) {
 | 
			
		||||
                        if (result == 'ok') {
 | 
			
		||||
                            props = dlg.getSettings();
 | 
			
		||||
                            me.api.change_DocSize(props[0], props[1]);
 | 
			
		||||
                            Common.NotificationCenter.trigger('edit:complete');
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                win.show();
 | 
			
		||||
                win.setSettings(me.api.asc_GetSectionProps());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.trigger('edit:complete');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onPaperMarginsSelect: function(combo, record) {
 | 
			
		||||
            this._state.pgmargins = undefined;
 | 
			
		||||
            if (record.value !== -1) {
 | 
			
		||||
                if (this.checkPageSize(undefined, undefined, record.size[1], record.size[3], record.size[0], record.size[2])) {
 | 
			
		||||
                    this.onSectionProps(this.api.asc_GetSectionProps());
 | 
			
		||||
                    return;
 | 
			
		||||
                } else {
 | 
			
		||||
                    var props = new Asc.CDocumentSectionProps();
 | 
			
		||||
                    props.put_TopMargin(record.size[0]);
 | 
			
		||||
                    props.put_LeftMargin(record.size[1]);
 | 
			
		||||
                    props.put_BottomMargin(record.size[2]);
 | 
			
		||||
                    props.put_RightMargin(record.size[3]);
 | 
			
		||||
                    this.api.asc_SetSectionProps(props);
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                var win, props,
 | 
			
		||||
                    me = this;
 | 
			
		||||
                win = new DE.Views.PageMarginsDialog({
 | 
			
		||||
                    api: me.api,
 | 
			
		||||
                    handler: function(dlg, result) {
 | 
			
		||||
                        if (result == 'ok') {
 | 
			
		||||
                            props = dlg.getSettings();
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-top", props.get_TopMargin());
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-left", props.get_LeftMargin());
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-bottom", props.get_BottomMargin());
 | 
			
		||||
                            Common.localStorage.setItem("de-pgmargins-right", props.get_RightMargin());
 | 
			
		||||
                            Common.NotificationCenter.trigger('margins:update', props);
 | 
			
		||||
 | 
			
		||||
                            me.api.asc_SetSectionProps(props);
 | 
			
		||||
                            Common.NotificationCenter.trigger('edit:complete');
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                win.show();
 | 
			
		||||
                win.setSettings(me.api.asc_GetSectionProps());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.trigger('edit:complete');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onUpdateLastCustomMargins: function(props) {
 | 
			
		||||
            this._state.lastmargins = props;
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                var top = props ? props.get_TopMargin() : Common.localStorage.getItem("de-pgmargins-top"),
 | 
			
		||||
                    left = props ? props.get_LeftMargin() : Common.localStorage.getItem("de-pgmargins-left"),
 | 
			
		||||
                    bottom = props ? props.get_BottomMargin() : Common.localStorage.getItem("de-pgmargins-bottom"),
 | 
			
		||||
                    right = props ? props.get_RightMargin() : Common.localStorage.getItem("de-pgmargins-right");
 | 
			
		||||
                if ( top!==null && left!==null && bottom!==null && right!==null ) {
 | 
			
		||||
                    var rec = this.printSettings.cmbPaperMargins.store.at(0);
 | 
			
		||||
                    if (rec.get('value')===-2)
 | 
			
		||||
                        rec.set('size', [parseFloat(top), parseFloat(left), parseFloat(bottom), parseFloat(right)]);
 | 
			
		||||
                    else
 | 
			
		||||
                        this.printSettings.cmbPaperMargins.store.unshift({ value: -2, displayValue: this.textMarginsLast, size: [parseFloat(top), parseFloat(left), parseFloat(bottom), parseFloat(right)]});
 | 
			
		||||
                    this.printSettings.cmbPaperMargins.onResetItems();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onPaperOrientSelect: function(combo, record) {
 | 
			
		||||
            this._state.pgorient = undefined;
 | 
			
		||||
            if (this.api) {
 | 
			
		||||
                this.api.change_PageOrient(record.value === Asc.c_oAscPageOrientation.PagePortrait);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.trigger('edit:complete');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        checkPageSize: function(width, height, left, right, top, bottom) {
 | 
			
		||||
            var section = this.api.asc_GetSectionProps();
 | 
			
		||||
            (width===undefined) && (width = parseFloat(section.get_W().toFixed(4)));
 | 
			
		||||
            (height===undefined) && (height = parseFloat(section.get_H().toFixed(4)));
 | 
			
		||||
            (left===undefined) && (left = parseFloat(section.get_LeftMargin().toFixed(4)));
 | 
			
		||||
            (right===undefined) && (right = parseFloat(section.get_RightMargin().toFixed(4)));
 | 
			
		||||
            (top===undefined) && (top = parseFloat(section.get_TopMargin().toFixed(4)));
 | 
			
		||||
            (bottom===undefined) && (bottom = parseFloat(section.get_BottomMargin().toFixed(4)));
 | 
			
		||||
            var gutterLeft = section.get_GutterAtTop() ? 0 : parseFloat(section.get_Gutter().toFixed(4)),
 | 
			
		||||
                gutterTop = section.get_GutterAtTop() ? parseFloat(section.get_Gutter().toFixed(4)) : 0;
 | 
			
		||||
 | 
			
		||||
            var errmsg = null;
 | 
			
		||||
            if (left + right + gutterLeft > width-12.7 )
 | 
			
		||||
                errmsg = this.txtMarginsW;
 | 
			
		||||
            else if (top + bottom + gutterTop > height-2.6 )
 | 
			
		||||
                errmsg = this.txtMarginsH;
 | 
			
		||||
            if (errmsg) {
 | 
			
		||||
                Common.UI.warning({
 | 
			
		||||
                    title: this.notcriticalErrorTitle,
 | 
			
		||||
                    msg  : errmsg,
 | 
			
		||||
                    callback: function() {
 | 
			
		||||
                        Common.NotificationCenter.trigger('edit:complete');
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        getPrintParams: function() {
 | 
			
		||||
            return this.adjPrintParams;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onHidePrintMenu: function () {
 | 
			
		||||
            if (this._isPreviewVisible) {
 | 
			
		||||
                this.api.asc_closePrintPreview && this.api.asc_closePrintPreview();
 | 
			
		||||
                this._isPreviewVisible = false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onChangePreviewPage: function (next) {
 | 
			
		||||
            var index = this._navigationPreview.currentPreviewPage;
 | 
			
		||||
            if (next) {
 | 
			
		||||
                index++;
 | 
			
		||||
                index = Math.min(index, this._navigationPreview.pageCount - 1);
 | 
			
		||||
            } else {
 | 
			
		||||
                index--;
 | 
			
		||||
                index = Math.max(index, 0);
 | 
			
		||||
            }
 | 
			
		||||
            this.api.goToPage(index);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onKeypressPageNumber: function (input, e) {
 | 
			
		||||
            if (e.keyCode === Common.UI.Keys.RETURN) {
 | 
			
		||||
                var box = this.printSettings.$el.find('#print-number-page'),
 | 
			
		||||
                    edit = box.find('input[type=text]'), page = parseInt(edit.val());
 | 
			
		||||
                if (!page || page > this._navigationPreview.pageCount || page < 0) {
 | 
			
		||||
                    edit.select();
 | 
			
		||||
                    this.printSettings.txtNumberPage.setValue(this._navigationPreview.currentPreviewPage + 1);
 | 
			
		||||
                    this.printSettings.txtNumberPage.checkValidate();
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                box.focus(); // for IE
 | 
			
		||||
 | 
			
		||||
                this.api.goToPage(page-1);
 | 
			
		||||
                this.api.asc_enableKeyEvents(true);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onKeyupPageNumber: function (input, e) {
 | 
			
		||||
            if (e.keyCode === Common.UI.Keys.ESC) {
 | 
			
		||||
                var box = this.printSettings.$el.find('#print-number-page');
 | 
			
		||||
                box.focus(); // for IE
 | 
			
		||||
                this.api.asc_enableKeyEvents(true);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onBlurPageNumber: function () {
 | 
			
		||||
            if (this.printSettings.txtNumberPage.getValue() != this._navigationPreview.currentPreviewPage + 1) {
 | 
			
		||||
                this.printSettings.txtNumberPage.setValue(this._navigationPreview.currentPreviewPage + 1);
 | 
			
		||||
                this.printSettings.txtNumberPage.checkValidate();
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onPreviewWheel: function (e) {
 | 
			
		||||
            if (e.ctrlKey) {
 | 
			
		||||
                e.preventDefault();
 | 
			
		||||
                e.stopImmediatePropagation();
 | 
			
		||||
            }
 | 
			
		||||
            var forward = (e.deltaY || (e.detail && -e.detail) || e.wheelDelta) < 0;
 | 
			
		||||
            this.onChangePreviewPage(forward);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateNavigationButtons: function (page, count) {
 | 
			
		||||
            this._navigationPreview.currentPage = page;
 | 
			
		||||
            this.printSettings.updateCurrentPage(page);
 | 
			
		||||
            this._navigationPreview.pageCount = count;
 | 
			
		||||
            this.printSettings.updateCountOfPages(count);
 | 
			
		||||
            this.disableNavButtons();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        disableNavButtons: function (force) {
 | 
			
		||||
            if (force) {
 | 
			
		||||
                this.printSettings.btnPrevPage.setDisabled(true);
 | 
			
		||||
                this.printSettings.btnNextPage.setDisabled(true);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            var curPage = this._navigationPreview.currentPage,
 | 
			
		||||
                pageCount = this._navigationPreview.pageCount;
 | 
			
		||||
            this.printSettings.btnPrevPage.setDisabled(curPage < 1);
 | 
			
		||||
            this.printSettings.btnNextPage.setDisabled(curPage > pageCount - 2);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onBtnPrint: function(print) {
 | 
			
		||||
            this._isPrint = print;
 | 
			
		||||
            if (this.printSettings.cmbRange.getValue()===-1 && this.printSettings.inputPages.checkValidate() !== true)  {
 | 
			
		||||
                this.printSettings.inputPages.focus();
 | 
			
		||||
                this.isInputFirstChange = true;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (this.printSettings.cmbRange.getValue()==='all')
 | 
			
		||||
                this._state.firstPrintPage = 0;
 | 
			
		||||
            else if (this.printSettings.cmbRange.getValue()==='current')
 | 
			
		||||
                this._state.firstPrintPage = this._navigationPreview.currentPage;
 | 
			
		||||
 | 
			
		||||
            var size = this.api.asc_getPageSize(this._state.firstPrintPage);
 | 
			
		||||
            this.adjPrintParams.asc_setNativeOptions({
 | 
			
		||||
                pages: this.printSettings.cmbRange.getValue()===-1 ? this.printSettings.inputPages.getValue() : this.printSettings.cmbRange.getValue(),
 | 
			
		||||
                paperSize: {
 | 
			
		||||
                    w: size ? size['W'] : undefined,
 | 
			
		||||
                    h: size ? size['H'] : undefined,
 | 
			
		||||
                    preset: size ? this.findPagePreset(size['W'], size['H']) : undefined
 | 
			
		||||
                },
 | 
			
		||||
                paperOrientation: size ? (size['H'] > size['W'] ? 'portrait' : 'landscape') : null
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.printSettings.menu.hide();
 | 
			
		||||
            if ( print ) {
 | 
			
		||||
                var opts = new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86);
 | 
			
		||||
                opts.asc_setAdvancedOptions(this.adjPrintParams);
 | 
			
		||||
                this.api.asc_Print(opts);
 | 
			
		||||
            } else {
 | 
			
		||||
                var opts = new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.PDF);
 | 
			
		||||
                opts.asc_setAdvancedOptions(this.adjPrintParams);
 | 
			
		||||
                this.api.asc_DownloadAs(opts);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        inputPagesChanging: function (input, value) {
 | 
			
		||||
            this.isInputFirstChange && this.printSettings.inputPages.showError();
 | 
			
		||||
            this.isInputFirstChange = false;
 | 
			
		||||
 | 
			
		||||
            if (value.length<1)
 | 
			
		||||
                this.printSettings.cmbRange.setValue('all');
 | 
			
		||||
            else if (this.printSettings.cmbRange.getValue()!==-1)
 | 
			
		||||
                this.printSettings.cmbRange.setValue(-1);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiLockDocumentProps: function() {
 | 
			
		||||
            this._state.lock_doc = true;
 | 
			
		||||
            this.SetDisabled();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiUnLockDocumentProps: function() {
 | 
			
		||||
            this._state.lock_doc = false;
 | 
			
		||||
            this.SetDisabled();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        SetDisabled: function() {
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                var disable = !this.mode.isEdit || this._state.lock_doc;
 | 
			
		||||
                this.printSettings.cmbPaperSize.setDisabled(disable);
 | 
			
		||||
                this.printSettings.cmbPaperMargins.setDisabled(disable);
 | 
			
		||||
                this.printSettings.cmbPaperOrientation.setDisabled(disable);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        txtCustom: 'Custom',
 | 
			
		||||
        txtPrintRangeInvalid: 'Invalid print range',
 | 
			
		||||
        textMarginsLast: 'Last Custom',
 | 
			
		||||
        txtPrintRangeSingleRange: 'Enter either a single page number or a single page range (for example, 5-12). Or you can Print to PDF.'
 | 
			
		||||
    }, DE.Controllers.Print || {}));
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -129,6 +129,10 @@ define([
 | 
			
		|||
                        var _main = this.getApplication().getController('Main');
 | 
			
		||||
                        _main.onPrint();
 | 
			
		||||
                    },
 | 
			
		||||
                    'print-quick': function (opts) {
 | 
			
		||||
                        var _main = this.getApplication().getController('Main');
 | 
			
		||||
                        _main.onPrintQuick();
 | 
			
		||||
                    },
 | 
			
		||||
                    'save': function (opts) {
 | 
			
		||||
                        this.api.asc_Save();
 | 
			
		||||
                    },
 | 
			
		||||
| 
						 | 
				
			
			@ -1057,9 +1061,7 @@ define([
 | 
			
		|||
        },
 | 
			
		||||
 | 
			
		||||
        onPrint: function(e) {
 | 
			
		||||
            if (this.api)
 | 
			
		||||
                this.api.asc_Print(new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86)); // if isChrome or isOpera == true use asc_onPrintUrl event
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.trigger('file:print', this.toolbar);
 | 
			
		||||
            Common.NotificationCenter.trigger('edit:complete', this.toolbar);
 | 
			
		||||
 | 
			
		||||
            Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
| 
						 | 
				
			
			@ -1748,15 +1750,11 @@ define([
 | 
			
		|||
                        handler: function(dlg, result) {
 | 
			
		||||
                            if (result == 'ok') {
 | 
			
		||||
                                props = dlg.getSettings();
 | 
			
		||||
                                var mnu = me.toolbar.btnPageMargins.menu.items[0];
 | 
			
		||||
                                mnu.setVisible(true);
 | 
			
		||||
                                mnu.setChecked(true);
 | 
			
		||||
                                mnu.options.value = mnu.value = [props.get_TopMargin(), props.get_LeftMargin(), props.get_BottomMargin(), props.get_RightMargin()];
 | 
			
		||||
                                $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options}));
 | 
			
		||||
                                Common.localStorage.setItem("de-pgmargins-top", props.get_TopMargin());
 | 
			
		||||
                                Common.localStorage.setItem("de-pgmargins-left", props.get_LeftMargin());
 | 
			
		||||
                                Common.localStorage.setItem("de-pgmargins-bottom", props.get_BottomMargin());
 | 
			
		||||
                                Common.localStorage.setItem("de-pgmargins-right", props.get_RightMargin());
 | 
			
		||||
                                Common.NotificationCenter.trigger('margins:update', props);
 | 
			
		||||
 | 
			
		||||
                                me.api.asc_SetSectionProps(props);
 | 
			
		||||
                                Common.NotificationCenter.trigger('edit:complete', me.toolbar);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,7 +71,8 @@ define([
 | 
			
		|||
            this.addListeners({
 | 
			
		||||
                'FileMenu': {
 | 
			
		||||
                    'menu:hide': me.onFileMenu.bind(me, 'hide'),
 | 
			
		||||
                    'menu:show': me.onFileMenu.bind(me, 'show')
 | 
			
		||||
                    'menu:show': me.onFileMenu.bind(me, 'show'),
 | 
			
		||||
                    'settings:apply': me.applySettings.bind(me)
 | 
			
		||||
                },
 | 
			
		||||
                'Toolbar': {
 | 
			
		||||
                    'render:before' : function (toolbar) {
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +80,11 @@ define([
 | 
			
		|||
                        toolbar.setExtra('right', me.header.getPanel('right', config));
 | 
			
		||||
                        if (!config.isEdit || config.customization && !!config.customization.compactHeader)
 | 
			
		||||
                            toolbar.setExtra('left', me.header.getPanel('left', config));
 | 
			
		||||
 | 
			
		||||
                        var value = Common.localStorage.getBool("de-settings-quick-print-button", true);
 | 
			
		||||
                        Common.Utils.InternalSettings.set("de-settings-quick-print-button", value);
 | 
			
		||||
                        if (me.header && me.header.btnPrintQuick)
 | 
			
		||||
                            me.header.btnPrintQuick[value ? 'show' : 'hide']();
 | 
			
		||||
                    },
 | 
			
		||||
                    'view:compact'  : function (toolbar, state) {
 | 
			
		||||
                        me.viewport.vlayout.getItem('toolbar').height = state ?
 | 
			
		||||
| 
						 | 
				
			
			@ -100,6 +106,8 @@ define([
 | 
			
		|||
                    'print:disabled' : function (state) {
 | 
			
		||||
                        if ( me.header.btnPrint )
 | 
			
		||||
                            me.header.btnPrint.setDisabled(state);
 | 
			
		||||
                        if ( me.header.btnPrintQuick )
 | 
			
		||||
                            me.header.btnPrintQuick.setDisabled(state);
 | 
			
		||||
                    },
 | 
			
		||||
                    'save:disabled' : function (state) {
 | 
			
		||||
                        if ( me.header.btnSave )
 | 
			
		||||
| 
						 | 
				
			
			@ -255,12 +263,21 @@ define([
 | 
			
		|||
            me.header.lockHeaderBtns( 'users', _need_disable );
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        applySettings: function () {
 | 
			
		||||
            var value = Common.localStorage.getBool("de-settings-quick-print-button", true);
 | 
			
		||||
            Common.Utils.InternalSettings.set("de-settings-quick-print-button", value);
 | 
			
		||||
            if (this.header && this.header.btnPrintQuick)
 | 
			
		||||
                this.header.btnPrintQuick[value ? 'show' : 'hide']();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiCoAuthoringDisconnect: function(enableDownload) {
 | 
			
		||||
            if (this.header) {
 | 
			
		||||
                if (this.header.btnDownload && !enableDownload)
 | 
			
		||||
                    this.header.btnDownload.hide();
 | 
			
		||||
                if (this.header.btnPrint && !enableDownload)
 | 
			
		||||
                    this.header.btnPrint.hide();
 | 
			
		||||
                if (this.header.btnPrintQuick && !enableDownload)
 | 
			
		||||
                    this.header.btnPrintQuick.hide();
 | 
			
		||||
                if (this.header.btnEdit)
 | 
			
		||||
                    this.header.btnEdit.hide();
 | 
			
		||||
                this.header.lockHeaderBtns( 'rename-user', true);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
    <li id="fm-btn-save-copy" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-save-desktop" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-print" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-print-with-preview" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-rename" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-protect" class="fm-btn"></li>
 | 
			
		||||
    <li class="devider"></li>
 | 
			
		||||
| 
						 | 
				
			
			@ -34,4 +35,5 @@
 | 
			
		|||
    <div id="panel-settings" class="content-box"></div>
 | 
			
		||||
    <div id="panel-help" class="content-box"></div>
 | 
			
		||||
    <div id="panel-protect" class="content-box"></div>
 | 
			
		||||
    <div id="panel-print" class="content-box"></div>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -732,9 +732,9 @@ define([
 | 
			
		|||
                    me.menuImgPrint.setDisabled(!cancopy);
 | 
			
		||||
 | 
			
		||||
                    var lockreview = Common.Utils.InternalSettings.get("de-accept-reject-lock");
 | 
			
		||||
                    me.menuImgAccept.setVisible(!lockreview);
 | 
			
		||||
                    me.menuImgReject.setVisible(!lockreview);
 | 
			
		||||
                    menuImgReviewSeparator.setVisible(!lockreview);
 | 
			
		||||
                    me.menuImgAccept.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
                    me.menuImgReject.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
                    menuImgReviewSeparator.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
 | 
			
		||||
                    var signGuid = (value.imgProps && value.imgProps.value && me.mode.isSignatureSupport) ? value.imgProps.value.asc_getSignatureId() : undefined,
 | 
			
		||||
                        isInSign = !!signGuid;
 | 
			
		||||
| 
						 | 
				
			
			@ -1302,9 +1302,9 @@ define([
 | 
			
		|||
                    me.menuTablePrint.setDisabled(!cancopy);
 | 
			
		||||
 | 
			
		||||
                    var lockreview = Common.Utils.InternalSettings.get("de-accept-reject-lock");
 | 
			
		||||
                    me.menuTableAccept.setVisible(!lockreview);
 | 
			
		||||
                    me.menuTableReject.setVisible(!lockreview);
 | 
			
		||||
                    menuTableReviewSeparator.setVisible(!lockreview);
 | 
			
		||||
                    me.menuTableAccept.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
                    me.menuTableReject.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
                    menuTableReviewSeparator.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
 | 
			
		||||
                    // bullets & numbering
 | 
			
		||||
                    var listId = me.api.asc_GetCurrentNumberingId(),
 | 
			
		||||
| 
						 | 
				
			
			@ -1914,9 +1914,9 @@ define([
 | 
			
		|||
                    me.menuParaPrint.setDisabled(!cancopy);
 | 
			
		||||
 | 
			
		||||
                    var lockreview = Common.Utils.InternalSettings.get("de-accept-reject-lock");
 | 
			
		||||
                    me.menuParaAccept.setVisible(!lockreview);
 | 
			
		||||
                    me.menuParaReject.setVisible(!lockreview);
 | 
			
		||||
                    menuParaReviewSeparator.setVisible(!lockreview);
 | 
			
		||||
                    me.menuParaAccept.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
                    me.menuParaReject.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
                    menuParaReviewSeparator.setVisible(me.mode.canReview && !me.mode.isReviewOnly && !lockreview);
 | 
			
		||||
 | 
			
		||||
                    // spellCheck
 | 
			
		||||
                    var spell = (value.spellProps!==undefined && value.spellProps.value.get_Checked()===false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -158,6 +158,17 @@ define([
 | 
			
		|||
                dataHintOffset: [2, 14]
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.miPrintWithPreview = new Common.UI.MenuItem({
 | 
			
		||||
                el      : $markup.elementById('#fm-btn-print-with-preview'),
 | 
			
		||||
                action  : 'printpreview',
 | 
			
		||||
                caption : this.btnPrintCaption,
 | 
			
		||||
                canFocused: false,
 | 
			
		||||
                dataHint: 1,
 | 
			
		||||
                dataHintDirection: 'left-top',
 | 
			
		||||
                dataHintOffset: [2, 14],
 | 
			
		||||
                dataHintTitle: 'P'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.miPrint = new Common.UI.MenuItem({
 | 
			
		||||
                el      : $markup.elementById('#fm-btn-print'),
 | 
			
		||||
                action  : 'print',
 | 
			
		||||
| 
						 | 
				
			
			@ -292,6 +303,7 @@ define([
 | 
			
		|||
                this.miSaveCopyAs,
 | 
			
		||||
                this.miSaveAs,
 | 
			
		||||
                this.miPrint,
 | 
			
		||||
                this.miPrintWithPreview,
 | 
			
		||||
                this.miRename,
 | 
			
		||||
                this.miProtect,
 | 
			
		||||
                this.miRecent,
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +393,8 @@ define([
 | 
			
		|||
            this.miSaveAs[((this.mode.canDownload || this.mode.canDownloadOrigin) && this.mode.isDesktopApp && this.mode.isOffline)?'show':'hide']();
 | 
			
		||||
            this.miSave[this.mode.isEdit && Common.UI.LayoutManager.isElementVisible('toolbar-file-save') ?'show':'hide']();
 | 
			
		||||
            this.miEdit[!this.mode.isEdit && this.mode.canEdit && this.mode.canRequestEditRights ?'show':'hide']();
 | 
			
		||||
            this.miPrint[this.mode.canPrint?'show':'hide']();
 | 
			
		||||
            this.miPrint[this.mode.canPrint && !this.mode.canPreviewPrint ?'show':'hide']();
 | 
			
		||||
            this.miPrintWithPreview[this.mode.canPreviewPrint?'show':'hide']();
 | 
			
		||||
            this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide']();
 | 
			
		||||
            this.miProtect[this.mode.canProtect ?'show':'hide']();
 | 
			
		||||
            separatorVisible = (this.mode.canDownload || this.mode.canDownloadOrigin || this.mode.isEdit && Common.UI.LayoutManager.isElementVisible('toolbar-file-save') || this.mode.canPrint || this.mode.canProtect ||
 | 
			
		||||
| 
						 | 
				
			
			@ -463,6 +476,12 @@ define([
 | 
			
		|||
                this.panels['help'].setLangConfig(this.mode.lang);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (this.mode.canPreviewPrint) {
 | 
			
		||||
                var printPanel = DE.getController('Print').getView('PrintWithPreview');
 | 
			
		||||
                printPanel.menu = this;
 | 
			
		||||
                !this.panels['printpreview'] && (this.panels['printpreview'] = printPanel.render(this.$el.find('#panel-print')));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( Common.Controllers.Desktop.isActive() ) {
 | 
			
		||||
                $('<li id="fm-btn-local-open" class="fm-btn"/>').insertAfter($('#fm-btn-recent', this.$el));
 | 
			
		||||
                this.items.push(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -341,6 +341,12 @@ define([
 | 
			
		|||
                '<tr>',
 | 
			
		||||
                    '<td colspan="2"><div id="fms-chb-use-alt-key"></div></td>',
 | 
			
		||||
                '</tr>',
 | 
			
		||||
                '<tr class="quick-print">',
 | 
			
		||||
                    '<td colspan="2"><div style="display: flex;"><div id="fms-chb-quick-print"></div>',
 | 
			
		||||
                    '<span style ="display: flex; flex-direction: column;"><label><%= scope.txtQuickPrint %></label>',
 | 
			
		||||
                    '<label class="comment-text"><%= scope.txtQuickPrintTip %></label></span></div>',
 | 
			
		||||
                    '</td>',
 | 
			
		||||
                '</tr>',
 | 
			
		||||
                '<tr class="themes">',
 | 
			
		||||
                    '<td><label><%= scope.strTheme %></label></td>',
 | 
			
		||||
                    '<td>',
 | 
			
		||||
| 
						 | 
				
			
			@ -698,6 +704,17 @@ define([
 | 
			
		|||
                })).on('click', _.bind(me.applySettings, me));
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.chQuickPrint = new Common.UI.CheckBox({
 | 
			
		||||
                el: $markup.findById('#fms-chb-quick-print'),
 | 
			
		||||
                labelText: '',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
            this.chQuickPrint.$el.parent().on('click', function (){
 | 
			
		||||
                me.chQuickPrint.setValue(!me.chQuickPrint.isChecked());
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.pnlSettings = $markup.find('.flex-settings').addBack().filter('.flex-settings');
 | 
			
		||||
            this.pnlApply = $markup.find('.fms-flex-apply').addBack().filter('.fms-flex-apply');
 | 
			
		||||
            this.pnlTable = this.pnlSettings.find('table');
 | 
			
		||||
| 
						 | 
				
			
			@ -762,9 +779,9 @@ define([
 | 
			
		|||
            $('tr.view-review', this.el)[mode.canViewReview ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.spellcheck', this.el)[mode.isEdit && Common.UI.FeaturesManager.canChange('spellcheck') ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.comments', this.el)[mode.canCoAuthoring ? 'show' : 'hide']();
 | 
			
		||||
 | 
			
		||||
            /** coauthoring end **/
 | 
			
		||||
 | 
			
		||||
            $('tr.quick-print', this.el)[mode.canQuickPrint ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.macros', this.el)[(mode.customization && mode.customization.macros===false) ? 'hide' : 'show']();
 | 
			
		||||
            if ( !Common.UI.Themes.available() ) {
 | 
			
		||||
                $('tr.themes, tr.themes + tr.divider', this.el).hide();
 | 
			
		||||
| 
						 | 
				
			
			@ -835,6 +852,7 @@ define([
 | 
			
		|||
            this.cmbMacros.setValue(item ? item.get('value') : 0);
 | 
			
		||||
 | 
			
		||||
            this.chPaste.setValue(Common.Utils.InternalSettings.get("de-settings-paste-button"));
 | 
			
		||||
            this.chQuickPrint.setValue(Common.Utils.InternalSettings.get("de-settings-quick-print-button"));
 | 
			
		||||
 | 
			
		||||
            var data = [];
 | 
			
		||||
            for (var t in Common.UI.Themes.map()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -904,6 +922,7 @@ define([
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            Common.localStorage.setItem("de-settings-paste-button", this.chPaste.isChecked() ? 1 : 0);
 | 
			
		||||
            Common.localStorage.setBool("de-settings-quick-print-button", this.chQuickPrint.isChecked());
 | 
			
		||||
 | 
			
		||||
            Common.localStorage.save();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1001,7 +1020,9 @@ define([
 | 
			
		|||
        txtStrictTip: 'Use the \'Save\' button to sync the changes you and others make',
 | 
			
		||||
        strIgnoreWordsInUPPERCASE: 'Ignore words in UPPERCASE',
 | 
			
		||||
        strIgnoreWordsWithNumbers: 'Ignore words with numbers',
 | 
			
		||||
        strShowOthersChanges: 'Show changes from other users'
 | 
			
		||||
        strShowOthersChanges: 'Show changes from other users',
 | 
			
		||||
        txtQuickPrint: 'Show the Quick Print button in the editor header',
 | 
			
		||||
        txtQuickPrintTip: 'The document will be printed on the last selected or default printer'
 | 
			
		||||
    }, DE.Views.FileMenuPanels.Settings || {}));
 | 
			
		||||
 | 
			
		||||
    DE.Views.FileMenuPanels.RecentFiles = Common.UI.BaseView.extend({
 | 
			
		||||
| 
						 | 
				
			
			@ -2329,4 +2350,340 @@ define([
 | 
			
		|||
 | 
			
		||||
    }, DE.Views.FileMenuPanels.ProtectDoc || {}));
 | 
			
		||||
 | 
			
		||||
    DE.Views.PrintWithPreview = Common.UI.BaseView.extend(_.extend({
 | 
			
		||||
        el: '#panel-print',
 | 
			
		||||
        menu: undefined,
 | 
			
		||||
 | 
			
		||||
        template: _.template([
 | 
			
		||||
            '<div style="width:100%; height:100%; position: relative;">',
 | 
			
		||||
                '<div id="id-print-settings" class="no-padding">',
 | 
			
		||||
                    '<div class="print-settings">',
 | 
			
		||||
                        '<div class="flex-settings ps-container oo settings-container">',
 | 
			
		||||
                            '<table style="width: 100%;">',
 | 
			
		||||
                            '<tbody>',
 | 
			
		||||
                                '<tr><td><label class="header"><%= scope.txtPrintRange %></label></td></tr>',
 | 
			
		||||
                                '<tr><td class="padding-small"><div id="print-combo-range" style="width: 248px;"></div></td></tr>',
 | 
			
		||||
                                '<tr><td class="padding-large">',
 | 
			
		||||
                                    '<table style="width: 100%;"><tbody><tr>',
 | 
			
		||||
                                        '<td><%= scope.txtPages %></td><td><div id="print-txt-pages" style="width: 100%;padding-left: 5px;"></div></td>',
 | 
			
		||||
                                    '</tr></tbody></table>',
 | 
			
		||||
                                '</td></tr>',
 | 
			
		||||
                                '<tr><td><label class="header"><%= scope.txtPageSize %></label></td></tr>',
 | 
			
		||||
                                '<tr><td class="padding-large"><div id="print-combo-pages" style="width: 248px;"></div></td></tr>',
 | 
			
		||||
                                '<tr><td><label class="header"><%= scope.txtPageOrientation %></label></td></tr>',
 | 
			
		||||
                                '<tr><td class="padding-large"><div id="print-combo-orient" style="width: 150px;"></div></td></tr>',
 | 
			
		||||
                                '<tr><td><label class="header"><%= scope.txtMargins %></label></td></tr>',
 | 
			
		||||
                                '<tr><td class="padding-large"><div id="print-combo-margins" style="width: 248px;"></div></td></tr>',
 | 
			
		||||
                                '<tr class="fms-btn-apply"><td>',
 | 
			
		||||
                                    '<div class="footer justify">',
 | 
			
		||||
                                        '<button id="print-btn-print" class="btn normal dlg-btn primary" result="print" style="width: 96px;" data-hint="2" data-hint-direction="bottom" data-hint-offset="big"><%= scope.txtPrint %></button>',
 | 
			
		||||
                                        '<button id="print-btn-print-pdf" class="btn normal dlg-btn" result="pdf" style="width: 96px;" data-hint="2" data-hint-direction="bottom" data-hint-offset="big"><%= scope.txtPrintPdf %></button>',
 | 
			
		||||
                                    '</div>',
 | 
			
		||||
                                '</td></tr>',
 | 
			
		||||
                            '</tbody>',
 | 
			
		||||
                            '</table>',
 | 
			
		||||
                        '</div>',
 | 
			
		||||
                    '</div>',
 | 
			
		||||
                '</div>',
 | 
			
		||||
                '<div id="print-preview-box" style="position: absolute; left: 280px; top: 0; right: 0; bottom: 0;" class="no-padding">',
 | 
			
		||||
                    '<div id="print-preview"></div>',
 | 
			
		||||
                    '<div id="print-navigation">',
 | 
			
		||||
                        '<div id="print-prev-page" style="display: inline-block; margin-right: 4px;"></div>',
 | 
			
		||||
                        '<div id="print-next-page" style="display: inline-block;"></div>',
 | 
			
		||||
                        '<div class="page-number">',
 | 
			
		||||
                            '<label><%= scope.txtPage %></label>',
 | 
			
		||||
                            '<div id="print-number-page"></div>',
 | 
			
		||||
                            '<label id="print-count-page"><%= scope.txtOf %></label>',
 | 
			
		||||
                        '</div>',
 | 
			
		||||
                    '</div>',
 | 
			
		||||
                '</div>',
 | 
			
		||||
            '</div>'
 | 
			
		||||
        ].join('')),
 | 
			
		||||
 | 
			
		||||
        initialize: function(options) {
 | 
			
		||||
            Common.UI.BaseView.prototype.initialize.call(this,arguments);
 | 
			
		||||
 | 
			
		||||
            this.menu = options.menu;
 | 
			
		||||
 | 
			
		||||
            this._initSettings = true;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        render: function(node) {
 | 
			
		||||
            var me = this;
 | 
			
		||||
 | 
			
		||||
            var $markup = $(this.template({scope: this}));
 | 
			
		||||
 | 
			
		||||
            this.cmbRange = new Common.UI.ComboBox({
 | 
			
		||||
                el: $markup.findById('#print-combo-range'),
 | 
			
		||||
                menuStyle: 'min-width: 248px;max-height: 280px;',
 | 
			
		||||
                editable: false,
 | 
			
		||||
                takeFocusOnClose: true,
 | 
			
		||||
                cls: 'input-group-nr',
 | 
			
		||||
                data: [
 | 
			
		||||
                    { value: 'all', displayValue: this.txtAllPages },
 | 
			
		||||
                    { value: 'current', displayValue: this.txtCurrentPage },
 | 
			
		||||
                    { value: -1, displayValue: this.txtCustomPages }
 | 
			
		||||
                ],
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'bottom',
 | 
			
		||||
                dataHintOffset: 'big'
 | 
			
		||||
            });
 | 
			
		||||
            this.cmbRange.setValue('all');
 | 
			
		||||
 | 
			
		||||
            this.inputPages = new Common.UI.InputField({
 | 
			
		||||
                el: $markup.findById('#print-txt-pages'),
 | 
			
		||||
                allowBlank: true,
 | 
			
		||||
                validateOnChange: true,
 | 
			
		||||
                validateOnBlur: false,
 | 
			
		||||
                maskExp: /[0-9,\-]/,
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.cmbPaperSize = new Common.UI.ComboBox({
 | 
			
		||||
                el: $markup.findById('#print-combo-pages'),
 | 
			
		||||
                menuStyle: 'max-height: 280px; min-width: 248px;',
 | 
			
		||||
                editable: false,
 | 
			
		||||
                takeFocusOnClose: true,
 | 
			
		||||
                cls: 'input-group-nr',
 | 
			
		||||
                data: [
 | 
			
		||||
                    { value: 0, displayValue:'US Letter (21,59cm x 27,94cm)', caption: 'US Letter', size: [215.9, 279.4]},
 | 
			
		||||
                    { value: 1, displayValue:'US Legal (21,59cm x 35,56cm)', caption: 'US Legal', size: [215.9, 355.6]},
 | 
			
		||||
                    { value: 2, displayValue:'A4 (21cm x 29,7cm)', caption: 'A4', size: [210, 297]},
 | 
			
		||||
                    { value: 3, displayValue:'A5 (14,8cm x 21cm)', caption: 'A5', size: [148, 210]},
 | 
			
		||||
                    { value: 4, displayValue:'B5 (17,6cm x 25cm)', caption: 'B5', size: [176, 250]},
 | 
			
		||||
                    { value: 5, displayValue:'Envelope #10 (10,48cm x 24,13cm)', caption: 'Envelope #10', size: [104.8, 241.3]},
 | 
			
		||||
                    { value: 6, displayValue:'Envelope DL (11cm x 22cm)', caption: 'Envelope DL', size: [110, 220]},
 | 
			
		||||
                    { value: 7, displayValue:'Tabloid (27,94cm x 43,18cm)', caption: 'Tabloid', size: [279.4, 431.8]},
 | 
			
		||||
                    { value: 8, displayValue:'A3 (29,7cm x 42cm)', caption: 'A3', size: [297, 420]},
 | 
			
		||||
                    { value: 9, displayValue:'Tabloid Oversize (30,48cm x 45,71cm)', caption: 'Tabloid Oversize', size: [304.8, 457.1]},
 | 
			
		||||
                    { value: 10, displayValue:'ROC 16K (19,68cm x 27,3cm)', caption: 'ROC 16K', size: [196.8, 273]},
 | 
			
		||||
                    { value: 11, displayValue:'Envelope Choukei 3 (11,99cm x 23,49cm)', caption: 'Envelope Choukei 3', size: [119.9, 234.9]},
 | 
			
		||||
                    { value: 12, displayValue:'Super B/A3 (33,02cm x 48,25cm)', caption: 'Super B/A3', size: [330.2, 482.5]},
 | 
			
		||||
                    { value: 13, displayValue:'A4 (84,1cm x 118,9cm)', caption: 'A0', size: [841, 1189]},
 | 
			
		||||
                    { value: 14, displayValue:'A4 (59,4cm x 84,1cm)', caption: 'A1', size: [594, 841]},
 | 
			
		||||
                    { value: 16, displayValue:'A4 (42cm x 59,4cm)', caption: 'A2', size: [420, 594]},
 | 
			
		||||
                    { value: 17, displayValue:'A4 (10,5cm x 14,8cm)', caption: 'A6', size: [105, 148]},
 | 
			
		||||
                    { value: -1, displayValue: this.txtCustom, caption: this.txtCustom, size: []}
 | 
			
		||||
                ],
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'bottom',
 | 
			
		||||
                dataHintOffset: 'big'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.cmbPaperOrientation = new Common.UI.ComboBox({
 | 
			
		||||
                el          : $markup.findById('#print-combo-orient'),
 | 
			
		||||
                menuStyle   : 'min-width: 150px;',
 | 
			
		||||
                editable    : false,
 | 
			
		||||
                takeFocusOnClose: true,
 | 
			
		||||
                cls         : 'input-group-nr',
 | 
			
		||||
                data        : [
 | 
			
		||||
                    { value: Asc.c_oAscPageOrientation.PagePortrait, displayValue: this.txtPortrait },
 | 
			
		||||
                    { value: Asc.c_oAscPageOrientation.PageLandscape, displayValue: this.txtLandscape }
 | 
			
		||||
                ],
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'bottom',
 | 
			
		||||
                dataHintOffset: 'big'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.cmbPaperMargins = new Common.UI.ComboBox({
 | 
			
		||||
                el: $markup.findById('#print-combo-margins'),
 | 
			
		||||
                menuStyle: 'max-height: 280px; min-width: 248px;',
 | 
			
		||||
                editable: false,
 | 
			
		||||
                takeFocusOnClose: true,
 | 
			
		||||
                cls: 'input-group-nr',
 | 
			
		||||
                data: [
 | 
			
		||||
                    { value: 0, displayValue: this.textMarginsNormal, size: [20, 30, 20, 15]},
 | 
			
		||||
                    { value: 1, displayValue: this.textMarginsUsNormal, size: [25.4, 25.4, 25.4, 25.4]},
 | 
			
		||||
                    { value: 2, displayValue: this.textMarginsNarrow, size: [12.7, 12.7, 12.7, 12.7]},
 | 
			
		||||
                    { value: 3, displayValue: this.textMarginsModerate, size: [25.4, 19.1, 25.4, 19.1]},
 | 
			
		||||
                    { value: 4, displayValue: this.textMarginsWide, size: [25.4, 50.8, 25.4, 50.8]},
 | 
			
		||||
                    { value: -1, displayValue: this.txtCustom, size: null}
 | 
			
		||||
                ],
 | 
			
		||||
                itemsTemplate: _.template([
 | 
			
		||||
                    '<% _.each(items, function(item) { %>',
 | 
			
		||||
                        '<li id="<%= item.id %>" data-value="<%- item.value %>"><a tabindex="-1" type="menuitem">',
 | 
			
		||||
                        '<div><b><%= scope.getDisplayValue(item) %></b></div>',
 | 
			
		||||
                        '<% if (item.size !== null) { %><div style="display: inline-block;margin-right: 20px;min-width: 80px;">' +
 | 
			
		||||
                        '<label style="display: block;">' + this.txtTop + ': <%= parseFloat(Common.Utils.Metric.fnRecalcFromMM(item.size[0]).toFixed(2)) %> <%= Common.Utils.Metric.getCurrentMetricName() %></label>' +
 | 
			
		||||
                        '<label style="display: block;">' + this.txtLeft + ': <%= parseFloat(Common.Utils.Metric.fnRecalcFromMM(item.size[1]).toFixed(2)) %> <%= Common.Utils.Metric.getCurrentMetricName() %></label></div><div style="display: inline-block;">' +
 | 
			
		||||
                        '<label style="display: block;">' + this.txtBottom + ': <%= parseFloat(Common.Utils.Metric.fnRecalcFromMM(item.size[2]).toFixed(2)) %> <%= Common.Utils.Metric.getCurrentMetricName() %></label>' +
 | 
			
		||||
                        '<label style="display: block;">' + this.txtRight + ': <%= parseFloat(Common.Utils.Metric.fnRecalcFromMM(item.size[3]).toFixed(2)) %> <%= Common.Utils.Metric.getCurrentMetricName() %></label></div>' +
 | 
			
		||||
                        '<% } %>',
 | 
			
		||||
                    '<% }); %>'
 | 
			
		||||
                ].join('')),
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'bottom',
 | 
			
		||||
                dataHintOffset: 'big'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.pnlSettings = $markup.find('.flex-settings').addBack().filter('.flex-settings');
 | 
			
		||||
            this.pnlTable = $(this.pnlSettings.find('table')[0]);
 | 
			
		||||
            this.trApply = $markup.find('.fms-btn-apply');
 | 
			
		||||
 | 
			
		||||
            this.btnPrint = new Common.UI.Button({
 | 
			
		||||
                el: $markup.findById('#print-btn-print')
 | 
			
		||||
            });
 | 
			
		||||
            this.btnPrintPdf = new Common.UI.Button({
 | 
			
		||||
                el: $markup.findById('#print-btn-print-pdf')
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.btnPrevPage = new Common.UI.Button({
 | 
			
		||||
                parentEl: $markup.findById('#print-prev-page'),
 | 
			
		||||
                cls: 'btn-prev-page',
 | 
			
		||||
                iconCls: 'arrow',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'top'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.btnNextPage = new Common.UI.Button({
 | 
			
		||||
                parentEl: $markup.findById('#print-next-page'),
 | 
			
		||||
                cls: 'btn-next-page',
 | 
			
		||||
                iconCls: 'arrow',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'top'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.countOfPages = $markup.findById('#print-count-page');
 | 
			
		||||
 | 
			
		||||
            this.txtNumberPage = new Common.UI.InputField({
 | 
			
		||||
                el: $markup.findById('#print-number-page'),
 | 
			
		||||
                allowBlank: true,
 | 
			
		||||
                validateOnChange: true,
 | 
			
		||||
                style: 'width: 50px;',
 | 
			
		||||
                maskExp: /[0-9]/,
 | 
			
		||||
                validation: function(value) {
 | 
			
		||||
                    if (/(^[0-9]+$)/.test(value)) {
 | 
			
		||||
                        value = parseInt(value);
 | 
			
		||||
                        if (undefined !== value && value > 0 && value <= me.pageCount)
 | 
			
		||||
                            return true;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return me.txtPageNumInvalid;
 | 
			
		||||
                },
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
           this.$el = $(node).html($markup);
 | 
			
		||||
            this.$previewBox = $('#print-preview-box');
 | 
			
		||||
 | 
			
		||||
            if (_.isUndefined(this.scroller)) {
 | 
			
		||||
                this.scroller = new Common.UI.Scroller({
 | 
			
		||||
                    el: this.pnlSettings,
 | 
			
		||||
                    suppressScrollX: true,
 | 
			
		||||
                    alwaysVisibleY: true
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.on({
 | 
			
		||||
                'window:resize': function() {
 | 
			
		||||
                    me.isVisible() && me.updateScroller();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.updateMetricUnit();
 | 
			
		||||
 | 
			
		||||
            this.fireEvent('render:after', this);
 | 
			
		||||
 | 
			
		||||
            return this;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        show: function() {
 | 
			
		||||
            Common.UI.BaseView.prototype.show.call(this,arguments);
 | 
			
		||||
            if (this._initSettings) {
 | 
			
		||||
                this.updateMetricUnit();
 | 
			
		||||
                this._initSettings = false;
 | 
			
		||||
            }
 | 
			
		||||
            this.updateScroller();
 | 
			
		||||
            this.fireEvent('show', this);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateScroller: function() {
 | 
			
		||||
            if (this.scroller) {
 | 
			
		||||
                Common.UI.Menu.Manager.hideAll();
 | 
			
		||||
                var scrolled = this.$el.height()< this.pnlTable.height();
 | 
			
		||||
                this.pnlSettings.css('overflow', scrolled ? 'hidden' : 'visible');
 | 
			
		||||
                this.scroller.update();
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setMode: function(mode) {
 | 
			
		||||
            this.mode = mode;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setApi: function(api) {
 | 
			
		||||
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateMetricUnit: function() {
 | 
			
		||||
            if (!this.cmbPaperSize) return;
 | 
			
		||||
            var store = this.cmbPaperSize.store;
 | 
			
		||||
            for (var i=0; i<store.length-1; i++) {
 | 
			
		||||
                var item = store.at(i),
 | 
			
		||||
                    size = item.get('size'),
 | 
			
		||||
                    pagewidth = size[0],
 | 
			
		||||
                    pageheight = size[1];
 | 
			
		||||
 | 
			
		||||
                item.set('displayValue', item.get('caption') + ' (' + parseFloat(Common.Utils.Metric.fnRecalcFromMM(pagewidth).toFixed(2)) + Common.Utils.Metric.getCurrentMetricName() + ' x ' +
 | 
			
		||||
                    parseFloat(Common.Utils.Metric.fnRecalcFromMM(pageheight).toFixed(2)) + Common.Utils.Metric.getCurrentMetricName() + ')');
 | 
			
		||||
            }
 | 
			
		||||
            this.cmbPaperSize.onResetItems();
 | 
			
		||||
            this.cmbPaperMargins.onResetItems();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        isVisible: function() {
 | 
			
		||||
            return (this.$el || $(this.el)).is(":visible");
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setRange: function(value) {
 | 
			
		||||
            this.cmbRange.setValue(value);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        getRange: function() {
 | 
			
		||||
            return this.cmbRange.getValue();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateCountOfPages: function (count) {
 | 
			
		||||
            this.countOfPages.text(
 | 
			
		||||
                Common.Utils.String.format(this.txtOf, count)
 | 
			
		||||
            );
 | 
			
		||||
            this.pageCount = count;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateCurrentPage: function (index) {
 | 
			
		||||
            this.txtNumberPage.setValue(index + 1);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        txtPrint: 'Print',
 | 
			
		||||
        txtPrintPdf: 'Print to PDF',
 | 
			
		||||
        txtPrintRange: 'Print range',
 | 
			
		||||
        txtCurrentPage: 'Current page',
 | 
			
		||||
        txtAllPages: 'All pages',
 | 
			
		||||
        txtSelection: 'Selection',
 | 
			
		||||
        txtCustomPages: 'Custom print',
 | 
			
		||||
        txtPageSize: 'Page size',
 | 
			
		||||
        txtPageOrientation: 'Page orientation',
 | 
			
		||||
        txtPortrait: 'Portrait',
 | 
			
		||||
        txtLandscape: 'Landscape',
 | 
			
		||||
        txtCustom: 'Custom',
 | 
			
		||||
        txtMargins: 'Margins',
 | 
			
		||||
        txtTop: 'Top',
 | 
			
		||||
        txtBottom: 'Bottom',
 | 
			
		||||
        txtLeft: 'Left',
 | 
			
		||||
        txtRight: 'Right',
 | 
			
		||||
        txtPage: 'Page',
 | 
			
		||||
        txtOf: 'of {0}',
 | 
			
		||||
        txtPageNumInvalid: 'Page number invalid',
 | 
			
		||||
        txtPages: 'Pages',
 | 
			
		||||
        textMarginsLast: 'Last Custom',
 | 
			
		||||
        textMarginsNormal: 'Normal',
 | 
			
		||||
        textMarginsUsNormal: 'US Normal',
 | 
			
		||||
        textMarginsNarrow: 'Narrow',
 | 
			
		||||
        textMarginsModerate: 'Moderate',
 | 
			
		||||
        textMarginsWide: 'Wide'
 | 
			
		||||
 | 
			
		||||
    }, DE.Views.PrintWithPreview || {}));
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1628,17 +1628,8 @@ define([
 | 
			
		|||
 | 
			
		||||
                    me.setTab('home');
 | 
			
		||||
 | 
			
		||||
                    var top = Common.localStorage.getItem("de-pgmargins-top"),
 | 
			
		||||
                        left = Common.localStorage.getItem("de-pgmargins-left"),
 | 
			
		||||
                        bottom = Common.localStorage.getItem("de-pgmargins-bottom"),
 | 
			
		||||
                        right = Common.localStorage.getItem("de-pgmargins-right");
 | 
			
		||||
                    if ( top!==null && left!==null && bottom!==null && right!==null ) {
 | 
			
		||||
                        var mnu = this.btnPageMargins.menu.items[0];
 | 
			
		||||
                        mnu.options.value = mnu.value = [parseFloat(top), parseFloat(left), parseFloat(bottom), parseFloat(right)];
 | 
			
		||||
                        mnu.setVisible(true);
 | 
			
		||||
                        $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options}));
 | 
			
		||||
                    } else
 | 
			
		||||
                        this.btnPageMargins.menu.items[0].setVisible(false);
 | 
			
		||||
                    me.onUpdateLastCustomMargins();
 | 
			
		||||
                    Common.NotificationCenter.on('margins:update', _.bind(me.onUpdateLastCustomMargins, me));
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ( me.isCompactView )
 | 
			
		||||
| 
						 | 
				
			
			@ -2643,6 +2634,22 @@ define([
 | 
			
		|||
                    this.api.asc_RemoveAllCustomStyles();
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onUpdateLastCustomMargins: function(props) {
 | 
			
		||||
                if (!this.btnPageMargins) return;
 | 
			
		||||
 | 
			
		||||
                var top = props ? props.get_TopMargin() : Common.localStorage.getItem("de-pgmargins-top"),
 | 
			
		||||
                    left = props ? props.get_LeftMargin() : Common.localStorage.getItem("de-pgmargins-left"),
 | 
			
		||||
                    bottom = props ? props.get_BottomMargin() : Common.localStorage.getItem("de-pgmargins-bottom"),
 | 
			
		||||
                    right = props ? props.get_RightMargin() : Common.localStorage.getItem("de-pgmargins-right");
 | 
			
		||||
                if ( top!==null && left!==null && bottom!==null && right!==null ) {
 | 
			
		||||
                    var mnu = this.btnPageMargins.menu.items[0];
 | 
			
		||||
                    mnu.options.value = mnu.value = [parseFloat(top), parseFloat(left), parseFloat(bottom), parseFloat(right)];
 | 
			
		||||
                    mnu.setVisible(true);
 | 
			
		||||
                    $(mnu.el).html(mnu.template({id: Common.UI.getId(), caption : mnu.caption, options : mnu.options}));
 | 
			
		||||
                } else
 | 
			
		||||
                    this.btnPageMargins.menu.items[0].setVisible(false);
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            lockToolbar: function (causes, lock, opts) {
 | 
			
		||||
                Common.Utils.lockControls(causes, lock, opts, this.lockControls);
 | 
			
		||||
            },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -147,6 +147,7 @@ require([
 | 
			
		|||
            'Main',
 | 
			
		||||
            'ViewTab',
 | 
			
		||||
            'Search',
 | 
			
		||||
            'Print',
 | 
			
		||||
            'Common.Controllers.Fonts',
 | 
			
		||||
            'Common.Controllers.History'
 | 
			
		||||
            /** coauthoring begin **/
 | 
			
		||||
| 
						 | 
				
			
			@ -181,6 +182,7 @@ require([
 | 
			
		|||
                'documenteditor/main/app/controller/Main',
 | 
			
		||||
                'documenteditor/main/app/controller/ViewTab',
 | 
			
		||||
                'documenteditor/main/app/controller/Search',
 | 
			
		||||
                'documenteditor/main/app/controller/Print',
 | 
			
		||||
                'documenteditor/main/app/view/FileMenuPanels',
 | 
			
		||||
                'documenteditor/main/app/view/ParagraphSettings',
 | 
			
		||||
                'documenteditor/main/app/view/HeaderFooterSettings',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,6 +126,8 @@
 | 
			
		|||
  "Common.define.chartData.textStock": "Stock",
 | 
			
		||||
  "Common.define.chartData.textSurface": "Surface",
 | 
			
		||||
  "Common.Translation.textMoreButton": "More",
 | 
			
		||||
  "Common.Translation.tipFileLocked": "Document is locked for editing. You can make changes and save it as local copy later.",
 | 
			
		||||
  "Common.Translation.tipFileReadOnly": "The file is read-only. To keep your changes, save the file with a new name or in a different location.",
 | 
			
		||||
  "Common.Translation.warnFileLocked": "You can't edit this file because it's being edited in another app.",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnEdit": "Create a copy",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnView": "Open for viewing",
 | 
			
		||||
| 
						 | 
				
			
			@ -319,6 +321,8 @@
 | 
			
		|||
  "Common.Views.Header.tipViewUsers": "View users and manage document access rights",
 | 
			
		||||
  "Common.Views.Header.txtAccessRights": "Change access rights",
 | 
			
		||||
  "Common.Views.Header.txtRename": "Rename",
 | 
			
		||||
  "Common.Views.Header.tipPrintQuick": "Quick print",
 | 
			
		||||
  "Common.Views.Header.textReadOnly": "Read only",
 | 
			
		||||
  "Common.Views.History.textCloseHistory": "Close History",
 | 
			
		||||
  "Common.Views.History.textHide": "Collapse",
 | 
			
		||||
  "Common.Views.History.textHideAll": "Hide detailed changes",
 | 
			
		||||
| 
						 | 
				
			
			@ -938,6 +942,7 @@
 | 
			
		|||
  "DE.Controllers.Main.confirmMaxChangesSize": "The size of actions exceeds the limitation set for your server.<br>Press \"Undo\" to cancel your last action or press \"Continue\" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).",
 | 
			
		||||
  "DE.Controllers.Main.textUndo": "Undo",
 | 
			
		||||
  "DE.Controllers.Main.textContinue": "Continue",
 | 
			
		||||
  "DE.Controllers.Main.textTryQuickPrint": "You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?",
 | 
			
		||||
  "DE.Controllers.Navigation.txtBeginning": "Beginning of document",
 | 
			
		||||
  "DE.Controllers.Navigation.txtGotoBeginning": "Go to the beginning of the document",
 | 
			
		||||
  "DE.Controllers.Search.notcriticalErrorTitle": "Warning",
 | 
			
		||||
| 
						 | 
				
			
			@ -951,6 +956,10 @@
 | 
			
		|||
  "DE.Controllers.Statusbar.textTrackChanges": "The document is opened with the Track Changes mode enabled",
 | 
			
		||||
  "DE.Controllers.Statusbar.tipReview": "Track changes",
 | 
			
		||||
  "DE.Controllers.Statusbar.zoomText": "Zoom {0}%",
 | 
			
		||||
  "DE.Controllers.Print.txtCustom": "Custom",
 | 
			
		||||
  "DE.Controllers.Print.txtPrintRangeInvalid": "Invalid print range",
 | 
			
		||||
  "DE.Controllers.Print.textMarginsLast": "Last Custom",
 | 
			
		||||
  "DE.Controllers.Print.txtPrintRangeSingleRange": "Enter either a single page number or a single page range (for example, 5-12). Or you can Print to PDF.",
 | 
			
		||||
  "DE.Controllers.Toolbar.confirmAddFontName": "The font you are going to save is not available on the current device.<br>The text style will be displayed using one of the system fonts, the saved font will be used when it is available.<br>Do you want to continue?",
 | 
			
		||||
  "DE.Controllers.Toolbar.dataUrl": "Paste a data URL",
 | 
			
		||||
  "DE.Controllers.Toolbar.notcriticalErrorTitle": "Warning",
 | 
			
		||||
| 
						 | 
				
			
			@ -1840,6 +1849,8 @@
 | 
			
		|||
  "DE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Disable all macros with a notification",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtWin": "as Windows",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtWorkspace": "Workspace",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtQuickPrint": "Show the Quick Print button in the editor header",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtQuickPrintTip": "The document will be printed on the last selected or default printer",
 | 
			
		||||
  "DE.Views.FormSettings.textAlways": "Always",
 | 
			
		||||
  "DE.Views.FormSettings.textAspect": "Lock aspect ratio",
 | 
			
		||||
  "DE.Views.FormSettings.textAtLeast": "At least",
 | 
			
		||||
| 
						 | 
				
			
			@ -2384,6 +2395,33 @@
 | 
			
		|||
  "DE.Views.ParagraphSettingsAdvanced.tipTop": "Set top border only",
 | 
			
		||||
  "DE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto",
 | 
			
		||||
  "DE.Views.ParagraphSettingsAdvanced.txtNoBorders": "No borders",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPrint": "Print",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPrintPdf": "Print to PDF",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPrintRange": "Print range",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtCurrentPage": "Current page",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtAllPages": "All pages",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtSelection": "Selection",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtCustomPages": "Custom print",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPageSize": "Page size",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPageOrientation": "Page orientation",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPortrait": "Portrait",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtLandscape": "Landscape",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtCustom": "Custom",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtMargins": "Margins",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtTop": "Top",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtBottom": "Bottom",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtLeft": "Left",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtRight": "Right",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPage": "Page",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtOf": "of {0}",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPageNumInvalid": "Page number invalid",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPages": "Pages",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsLast": "Last Custom",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsNormal": "Normal",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsUsNormal": "US Normal",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsNarrow": "Narrow",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsModerate": "Moderate",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsWide": "Wide",
 | 
			
		||||
  "DE.Views.RightMenu.txtChartSettings": "Chart settings",
 | 
			
		||||
  "DE.Views.RightMenu.txtFormSettings": "Form Settings",
 | 
			
		||||
  "DE.Views.RightMenu.txtHeaderFooterSettings": "Header and footer settings",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,6 +126,8 @@
 | 
			
		|||
  "Common.define.chartData.textStock": "Биржевая",
 | 
			
		||||
  "Common.define.chartData.textSurface": "Поверхность",
 | 
			
		||||
  "Common.Translation.textMoreButton": "Ещё",
 | 
			
		||||
  "Common.Translation.tipFileLocked": "Документ заблокирован на редактирование. Вы можете внести изменения и сохранить его как локальную копию позже.",
 | 
			
		||||
  "Common.Translation.tipFileReadOnly": "Файл доступен только для чтения. Чтобы сохранить изменения, сохраните файл с новым названием или в другом месте.",
 | 
			
		||||
  "Common.Translation.warnFileLocked": "Вы не можете редактировать этот файл, потому что он уже редактируется в другом приложении.",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnEdit": "Создать копию",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnView": "Открыть на просмотр",
 | 
			
		||||
| 
						 | 
				
			
			@ -303,6 +305,7 @@
 | 
			
		|||
  "Common.Views.Header.textCompactView": "Скрыть панель инструментов",
 | 
			
		||||
  "Common.Views.Header.textHideLines": "Скрыть линейки",
 | 
			
		||||
  "Common.Views.Header.textHideStatusBar": "Скрыть строку состояния",
 | 
			
		||||
  "Common.Views.Header.textReadOnly": "Только чтение",
 | 
			
		||||
  "Common.Views.Header.textRemoveFavorite": "Удалить из избранного",
 | 
			
		||||
  "Common.Views.Header.textShare": "Доступ",
 | 
			
		||||
  "Common.Views.Header.textZoom": "Масштаб",
 | 
			
		||||
| 
						 | 
				
			
			@ -310,6 +313,7 @@
 | 
			
		|||
  "Common.Views.Header.tipDownload": "Скачать файл",
 | 
			
		||||
  "Common.Views.Header.tipGoEdit": "Редактировать текущий файл",
 | 
			
		||||
  "Common.Views.Header.tipPrint": "Напечатать файл",
 | 
			
		||||
  "Common.Views.Header.tipPrintQuick": "Быстрая печать",
 | 
			
		||||
  "Common.Views.Header.tipRedo": "Повторить",
 | 
			
		||||
  "Common.Views.Header.tipSave": "Сохранить",
 | 
			
		||||
  "Common.Views.Header.tipSearch": "Поиск",
 | 
			
		||||
| 
						 | 
				
			
			@ -647,6 +651,7 @@
 | 
			
		|||
  "DE.Controllers.Main.textClose": "Закрыть",
 | 
			
		||||
  "DE.Controllers.Main.textCloseTip": "Щелкните, чтобы закрыть эту подсказку",
 | 
			
		||||
  "DE.Controllers.Main.textContactUs": "Связаться с отделом продаж",
 | 
			
		||||
  "DE.Controllers.Main.textContinue": "Продолжить",
 | 
			
		||||
  "DE.Controllers.Main.textConvertEquation": "Это уравнение создано в старой версии редактора уравнений, которая больше не поддерживается. Чтобы изменить это уравнение, его необходимо преобразовать в формат Office Math ML.<br>Преобразовать сейчас?",
 | 
			
		||||
  "DE.Controllers.Main.textCustomLoader": "Обратите внимание, что по условиям лицензии у вас нет прав изменять экран, отображаемый при загрузке.<br>Пожалуйста, обратитесь в наш отдел продаж, чтобы сделать запрос.",
 | 
			
		||||
  "DE.Controllers.Main.textDisconnect": "Соединение потеряно",
 | 
			
		||||
| 
						 | 
				
			
			@ -665,8 +670,10 @@
 | 
			
		|||
  "DE.Controllers.Main.textRequestMacros": "Макрос делает запрос на URL. Вы хотите разрешить запрос на %1?",
 | 
			
		||||
  "DE.Controllers.Main.textShape": "Фигура",
 | 
			
		||||
  "DE.Controllers.Main.textStrict": "Строгий режим",
 | 
			
		||||
  "DE.Controllers.Main.textTryQuickPrint": "Вы выбрали быструю печать: весь документ будет напечатан на последнем выбранном принтере или на принтере по умолчанию.<br>Вы хотите продолжить?",
 | 
			
		||||
  "DE.Controllers.Main.textTryUndoRedo": "Функции отмены и повтора действий отключены в Быстром режиме совместного редактирования.<br>Нажмите на кнопку 'Строгий режим' для переключения в Строгий режим совместного редактирования, чтобы редактировать файл без вмешательства других пользователей и отправлять изменения только после того, как вы их сохраните. Переключаться между режимами совместного редактирования можно с помощью Дополнительных параметров редактора.",
 | 
			
		||||
  "DE.Controllers.Main.textTryUndoRedoWarn": "Функции отмены и повтора действий отключены в Быстром режиме совместного редактирования.",
 | 
			
		||||
  "DE.Controllers.Main.textUndo": "Отменить",
 | 
			
		||||
  "DE.Controllers.Main.titleLicenseExp": "Истек срок действия лицензии",
 | 
			
		||||
  "DE.Controllers.Main.titleServerVersion": "Редактор обновлен",
 | 
			
		||||
  "DE.Controllers.Main.titleUpdateVersion": "Версия изменилась",
 | 
			
		||||
| 
						 | 
				
			
			@ -937,6 +944,10 @@
 | 
			
		|||
  "DE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.",
 | 
			
		||||
  "DE.Controllers.Navigation.txtBeginning": "Начало документа",
 | 
			
		||||
  "DE.Controllers.Navigation.txtGotoBeginning": "Перейти в начало документа",
 | 
			
		||||
  "DE.Controllers.Print.textMarginsLast": "Последние настраиваемые",
 | 
			
		||||
  "DE.Controllers.Print.txtCustom": "Пользовательское",
 | 
			
		||||
  "DE.Controllers.Print.txtPrintRangeInvalid": "Неправильный диапазон печати",
 | 
			
		||||
  "DE.Controllers.Print.txtPrintRangeSingleRange": "Введите или один номер страницы, или один диапазон страниц (например, 5-12). Или вы можете выбрать печать в PDF.",
 | 
			
		||||
  "DE.Controllers.Search.notcriticalErrorTitle": "Внимание",
 | 
			
		||||
  "DE.Controllers.Search.textNoTextFound": "Искомые данные не найдены. Пожалуйста, измените параметры поиска.",
 | 
			
		||||
  "DE.Controllers.Search.textReplaceSkipped": "Замена выполнена. Пропущено вхождений - {0}.",
 | 
			
		||||
| 
						 | 
				
			
			@ -1824,6 +1835,8 @@
 | 
			
		|||
  "DE.Views.FileMenuPanels.Settings.txtNone": "Никакие",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtProofing": "Правописание",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtPt": "Пункт",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtQuickPrint": "Показывать кнопку Быстрая печать в шапке редактора",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtQuickPrintTip": "Документ будет напечатан на последнем выбранном принтере или на принтере по умолчанию",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtRunMacros": "Включить все",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtRunMacrosDesc": "Включить все макросы без уведомления",
 | 
			
		||||
  "DE.Views.FileMenuPanels.Settings.txtShowTrackChanges": "Показывать изменения при рецензировании",
 | 
			
		||||
| 
						 | 
				
			
			@ -2073,6 +2086,7 @@
 | 
			
		|||
  "DE.Views.LeftMenu.tipComments": "Комментарии",
 | 
			
		||||
  "DE.Views.LeftMenu.tipNavigation": "Навигация",
 | 
			
		||||
  "DE.Views.LeftMenu.tipOutline": "Заголовки",
 | 
			
		||||
  "DE.Views.LeftMenu.tipPageThumbnails": "Эскизы страниц",
 | 
			
		||||
  "DE.Views.LeftMenu.tipPlugins": "Плагины",
 | 
			
		||||
  "DE.Views.LeftMenu.tipSearch": "Поиск",
 | 
			
		||||
  "DE.Views.LeftMenu.tipSupport": "Обратная связь и поддержка",
 | 
			
		||||
| 
						 | 
				
			
			@ -2380,6 +2394,33 @@
 | 
			
		|||
  "DE.Views.ParagraphSettingsAdvanced.tipTop": "Задать только верхнюю границу",
 | 
			
		||||
  "DE.Views.ParagraphSettingsAdvanced.txtAutoText": "Авто",
 | 
			
		||||
  "DE.Views.ParagraphSettingsAdvanced.txtNoBorders": "Без границ",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsLast": "Последние настраиваемые",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsModerate": "Средние",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsNarrow": "Узкие",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsNormal": "Обычные",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsUsNormal": "Обычные (американский стандарт)",
 | 
			
		||||
  "DE.Views.PrintWithPreview.textMarginsWide": "Широкие",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtAllPages": "Все страницы",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtBottom": "Нижнее",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtCurrentPage": "Текущая страница",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtCustom": "Пользовательское",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtCustomPages": "Настраиваемая печать",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtLandscape": "Альбомная",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtLeft": "Левое",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtMargins": "Поля",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtOf": "из {0}",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPage": "Страница",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPageNumInvalid": "Неправильный номер страницы",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPageOrientation": "Ориентация страницы",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPages": "Страницы",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPageSize": "Размер страницы",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPortrait": "Книжная",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPrint": "Печать",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPrintPdf": "Печать в PDF",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtPrintRange": "Диапазон печати",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtRight": "Правое",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtSelection": "Выделенный фрагмент",
 | 
			
		||||
  "DE.Views.PrintWithPreview.txtTop": "Верхнее",
 | 
			
		||||
  "DE.Views.RightMenu.txtChartSettings": "Параметры диаграммы",
 | 
			
		||||
  "DE.Views.RightMenu.txtFormSettings": "Параметры формы",
 | 
			
		||||
  "DE.Views.RightMenu.txtHeaderFooterSettings": "Параметры верхнего и нижнего колонтитулов",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -523,4 +523,111 @@ table {
 | 
			
		|||
    padding: 5px 0;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#file-menu-panel {
 | 
			
		||||
  #panel-print {
 | 
			
		||||
    padding: 0;
 | 
			
		||||
 | 
			
		||||
    #id-print-settings {
 | 
			
		||||
      position: absolute;
 | 
			
		||||
      width:280px;
 | 
			
		||||
      top: 0;
 | 
			
		||||
      bottom: 0;
 | 
			
		||||
    }
 | 
			
		||||
    .print-settings {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-direction: column;
 | 
			
		||||
      border-right: @scaled-one-px-value-ie solid @border-toolbar-ie;
 | 
			
		||||
      border-right: @scaled-one-px-value solid @border-toolbar;
 | 
			
		||||
      label.header {
 | 
			
		||||
        font-weight: 700;
 | 
			
		||||
      }
 | 
			
		||||
      .footer {
 | 
			
		||||
        .btn.primary {
 | 
			
		||||
          margin-right: 8px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .settings-container {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        padding: 12px 16px;
 | 
			
		||||
        .padding-small {
 | 
			
		||||
          padding-bottom: 8px;
 | 
			
		||||
        }
 | 
			
		||||
        .padding-large {
 | 
			
		||||
          padding-bottom: 16px;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #print-apply-all {
 | 
			
		||||
          margin-top: 5px;
 | 
			
		||||
        }
 | 
			
		||||
        .link {
 | 
			
		||||
          margin-top: 9px;
 | 
			
		||||
        }
 | 
			
		||||
        .footer {
 | 
			
		||||
          margin-top: 24px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    #print-navigation {
 | 
			
		||||
      height: 50px;
 | 
			
		||||
      padding-left: 20px;
 | 
			
		||||
      padding-top: 10px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      .btn-prev-page, .btn-next-page {
 | 
			
		||||
        background-color: transparent;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
        height: 20px;
 | 
			
		||||
        width: 20px;
 | 
			
		||||
        i.arrow {
 | 
			
		||||
          display: inline-block;
 | 
			
		||||
          width: 10px;
 | 
			
		||||
          height: 10px;
 | 
			
		||||
 | 
			
		||||
          border: solid @scaled-one-px-value-ie @icon-normal-ie;
 | 
			
		||||
          border: solid @scaled-one-px-value @icon-normal;
 | 
			
		||||
          border-bottom: none;
 | 
			
		||||
          border-right: none;
 | 
			
		||||
        }
 | 
			
		||||
        &.disabled {
 | 
			
		||||
          opacity: @component-disabled-opacity;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        &:hover:not(:disabled):not(.disabled) {
 | 
			
		||||
          background-color: @highlight-button-hover-ie;
 | 
			
		||||
          background-color: @highlight-button-hover;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .btn-prev-page {
 | 
			
		||||
        i {
 | 
			
		||||
          transform: rotate(-45deg) translate(-1px, 3px);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .btn-next-page {
 | 
			
		||||
        i {
 | 
			
		||||
          transform: rotate(135deg) translate(4px, 0px);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .page-number {
 | 
			
		||||
        display: flex;
 | 
			
		||||
        align-items: center;
 | 
			
		||||
        height: 20px;
 | 
			
		||||
        margin-left: 10px;
 | 
			
		||||
        label {
 | 
			
		||||
          .font-weight-bold();
 | 
			
		||||
        }
 | 
			
		||||
        #print-count-page, #print-number-page {
 | 
			
		||||
          margin-left: 4px;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    #print-preview {
 | 
			
		||||
      height: calc(100% - 50px);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -152,6 +152,7 @@ require([
 | 
			
		|||
            'Main',
 | 
			
		||||
            'ViewTab',
 | 
			
		||||
            'Search',
 | 
			
		||||
            'Print',
 | 
			
		||||
            'Common.Controllers.Fonts',
 | 
			
		||||
            'Common.Controllers.History'
 | 
			
		||||
            /** coauthoring begin **/
 | 
			
		||||
| 
						 | 
				
			
			@ -182,6 +183,7 @@ require([
 | 
			
		|||
            'presentationeditor/main/app/controller/Main',
 | 
			
		||||
            'presentationeditor/main/app/controller/ViewTab',
 | 
			
		||||
            'presentationeditor/main/app/controller/Search',
 | 
			
		||||
            'presentationeditor/main/app/controller/Print',
 | 
			
		||||
            'presentationeditor/main/app/view/FileMenuPanels',
 | 
			
		||||
            'presentationeditor/main/app/view/ParagraphSettings',
 | 
			
		||||
            'presentationeditor/main/app/view/ImageSettings',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -107,6 +107,7 @@ define([
 | 
			
		|||
                if ( !this.leftMenu.panelHistory.isVisible() )
 | 
			
		||||
                    this.clickMenuFileItem(null, 'history');
 | 
			
		||||
            }, this));
 | 
			
		||||
            Common.NotificationCenter.on('file:print', _.bind(this.clickToolbarPrint, this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onLaunch: function() {
 | 
			
		||||
| 
						 | 
				
			
			@ -764,7 +765,14 @@ define([
 | 
			
		|||
        isCommentsVisible: function() {
 | 
			
		||||
            return this.leftMenu && this.leftMenu.panelComments && this.leftMenu.panelComments.isVisible();
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        clickToolbarPrint: function () {
 | 
			
		||||
            if (this.mode.canPreviewPrint)
 | 
			
		||||
                this.leftMenu.showMenu('file:printpreview');
 | 
			
		||||
            else if (this.mode.canPrint)
 | 
			
		||||
                this.clickMenuFileItem(null, 'print');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        textNoTextFound         : 'Text not found',
 | 
			
		||||
        newDocumentTitle        : 'Unnamed document',
 | 
			
		||||
        requestEditRightsText   : 'Requesting editing rights...',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1165,6 +1165,9 @@ define([
 | 
			
		|||
                    console.log("Obsolete: The 'chat' parameter of the 'customization' section is deprecated. Please use 'chat' parameter in the permissions instead.");
 | 
			
		||||
                }
 | 
			
		||||
                this.appOptions.canPrint       = (this.permissions.print !== false);
 | 
			
		||||
                this.appOptions.canPreviewPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp;
 | 
			
		||||
                this.appOptions.canQuickPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp &&
 | 
			
		||||
                                                !(this.editorConfig.customization && this.editorConfig.customization.compactHeader);
 | 
			
		||||
                this.appOptions.canRename      = this.editorConfig.canRename;
 | 
			
		||||
                this.appOptions.canForcesave   = this.appOptions.isEdit && !this.appOptions.isOffline && (typeof (this.editorConfig.customization) == 'object' && !!this.editorConfig.customization.forcesave);
 | 
			
		||||
                this.appOptions.forcesave      = this.appOptions.canForcesave;
 | 
			
		||||
| 
						 | 
				
			
			@ -1297,6 +1300,9 @@ define([
 | 
			
		|||
                toolbarController.setMode(this.appOptions);
 | 
			
		||||
                documentHolder.setMode(this.appOptions);
 | 
			
		||||
 | 
			
		||||
                var printController = app.getController('Print');
 | 
			
		||||
                printController && this.api && printController.setApi(this.api).setMode(this.appOptions);
 | 
			
		||||
 | 
			
		||||
                this.api.asc_registerCallback('asc_onSendThemeColors', _.bind(this.onSendThemeColors, this));
 | 
			
		||||
                this.api.asc_registerCallback('asc_onDownloadUrl',     _.bind(this.onDownloadUrl, this));
 | 
			
		||||
                this.api.asc_registerCallback('asc_onDocumentModifiedChanged', _.bind(this.onDocumentModifiedChanged, this));
 | 
			
		||||
| 
						 | 
				
			
			@ -1922,6 +1928,7 @@ define([
 | 
			
		|||
                Common.Utils.InternalSettings.set("pe-settings-unit", value);
 | 
			
		||||
                this.api.asc_SetDocumentUnits((value==Common.Utils.Metric.c_MetricUnits.inch) ? Asc.c_oAscDocumentUnits.Inch : ((value==Common.Utils.Metric.c_MetricUnits.pt) ? Asc.c_oAscDocumentUnits.Point : Asc.c_oAscDocumentUnits.Millimeter));
 | 
			
		||||
                this.getApplication().getController('RightMenu').updateMetricUnit();
 | 
			
		||||
                this.appOptions.canPreviewPrint && this.getApplication().getController('Print').getView('PrintWithPreview').updateMetricUnit();
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            updateThemeColors: function() {
 | 
			
		||||
| 
						 | 
				
			
			@ -2175,9 +2182,7 @@ define([
 | 
			
		|||
 | 
			
		||||
            onPrint: function() {
 | 
			
		||||
                if (!this.appOptions.canPrint || Common.Utils.ModalWindow.isVisible()) return;
 | 
			
		||||
                
 | 
			
		||||
                if (this.api)
 | 
			
		||||
                    this.api.asc_Print(new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86)); // if isChrome or isOpera == true use asc_onPrintUrl event
 | 
			
		||||
                Common.NotificationCenter.trigger('file:print');
 | 
			
		||||
                Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2210,6 +2215,39 @@ define([
 | 
			
		|||
                if (url) this.iframePrint.src = url;
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onPrintQuick: function() {
 | 
			
		||||
                if (!this.appOptions.canQuickPrint) return;
 | 
			
		||||
 | 
			
		||||
                var value = Common.localStorage.getBool("pe-hide-quick-print-warning"),
 | 
			
		||||
                    me = this,
 | 
			
		||||
                    handler = function () {
 | 
			
		||||
                        var printopt = new Asc.asc_CAdjustPrint();
 | 
			
		||||
                        printopt.asc_setNativeOptions({quickPrint: true});
 | 
			
		||||
                        var opts = new Asc.asc_CDownloadOptions();
 | 
			
		||||
                        opts.asc_setAdvancedOptions(printopt);
 | 
			
		||||
                        me.api.asc_Print(opts);
 | 
			
		||||
                        Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
                    };
 | 
			
		||||
 | 
			
		||||
                if (value) {
 | 
			
		||||
                    handler.call(this);
 | 
			
		||||
                } else {
 | 
			
		||||
                    Common.UI.warning({
 | 
			
		||||
                        msg: this.textTryQuickPrint,
 | 
			
		||||
                        buttons: ['yes', 'no'],
 | 
			
		||||
                        primary: 'yes',
 | 
			
		||||
                        dontshow: true,
 | 
			
		||||
                        maxwidth: 500,
 | 
			
		||||
                        callback: function(btn, dontshow){
 | 
			
		||||
                            dontshow && Common.localStorage.setBool("pe-hide-quick-print-warning", true);
 | 
			
		||||
                            if (btn === 'yes') {
 | 
			
		||||
                                setTimeout(handler, 1);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onAdvancedOptions: function(type, advOptions) {
 | 
			
		||||
                if (this._state.openDlg) return;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3001,7 +3039,8 @@ define([
 | 
			
		|||
            textRememberMacros: 'Remember my choice for all macros',
 | 
			
		||||
            confirmMaxChangesSize: 'The size of actions exceeds the limitation set for your server.<br>Press "Undo" to cancel your last action or press "Continue" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).',
 | 
			
		||||
            textUndo: 'Undo',
 | 
			
		||||
            textContinue: 'Continue'
 | 
			
		||||
            textContinue: 'Continue',
 | 
			
		||||
            textTryQuickPrint: 'You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?'
 | 
			
		||||
        }
 | 
			
		||||
    })(), PE.Controllers.Main || {}))
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										348
									
								
								apps/presentationeditor/main/app/controller/Print.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
						 | 
				
			
			@ -0,0 +1,348 @@
 | 
			
		|||
/*
 | 
			
		||||
 *
 | 
			
		||||
 * (c) Copyright Ascensio System SIA 2010-2022
 | 
			
		||||
 *
 | 
			
		||||
 * 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 20A-12 Ernesta Birznieka-Upisha
 | 
			
		||||
 * street, Riga, Latvia, EU, LV-1050.
 | 
			
		||||
 *
 | 
			
		||||
 * 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([
 | 
			
		||||
    'core',
 | 
			
		||||
    'presentationeditor/main/app/view/FileMenuPanels'
 | 
			
		||||
], function () {
 | 
			
		||||
    'use strict';
 | 
			
		||||
 | 
			
		||||
    PE.Controllers.Print = Backbone.Controller.extend(_.extend({
 | 
			
		||||
        views: [
 | 
			
		||||
            'PrintWithPreview'
 | 
			
		||||
        ],
 | 
			
		||||
 | 
			
		||||
        initialize: function() {
 | 
			
		||||
            this.adjPrintParams = new Asc.asc_CAdjustPrint();
 | 
			
		||||
 | 
			
		||||
            this._state = {};
 | 
			
		||||
            this._paperSize = undefined;
 | 
			
		||||
            this._navigationPreview = {
 | 
			
		||||
                pageCount: false,
 | 
			
		||||
                currentPage: 0,
 | 
			
		||||
                currentPreviewPage: 0
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            this._isPreviewVisible = false;
 | 
			
		||||
 | 
			
		||||
            this.addListeners({
 | 
			
		||||
                'PrintWithPreview': {
 | 
			
		||||
                    'show': _.bind(this.onShowMainSettingsPrint, this),
 | 
			
		||||
                    'render:after': _.bind(this.onAfterRender, this)
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onLaunch: function() {
 | 
			
		||||
            this.printSettings = this.createView('PrintWithPreview');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onAfterRender: function(view) {
 | 
			
		||||
            var me = this;
 | 
			
		||||
            this.printSettings.menu.on('menu:hide', _.bind(this.onHidePrintMenu, this));
 | 
			
		||||
            this.printSettings.btnPrint.on('click', _.bind(this.onBtnPrint, this, true));
 | 
			
		||||
            this.printSettings.btnPrintPdf.on('click', _.bind(this.onBtnPrint, this, false));
 | 
			
		||||
            this.printSettings.btnPrevPage.on('click', _.bind(this.onChangePreviewPage, this, false));
 | 
			
		||||
            this.printSettings.btnNextPage.on('click', _.bind(this.onChangePreviewPage, this, true));
 | 
			
		||||
            this.printSettings.txtNumberPage.on({
 | 
			
		||||
                'keypress:after':  _.bind(this.onKeypressPageNumber, this),
 | 
			
		||||
                'keyup:after': _.bind(this.onKeyupPageNumber, this)
 | 
			
		||||
            });
 | 
			
		||||
            this.printSettings.txtNumberPage.cmpEl.find('input').on('blur', _.bind(this.onBlurPageNumber, this));
 | 
			
		||||
            this.printSettings.cmbRange.on('selected', _.bind(this.comboRangeChange, this));
 | 
			
		||||
            this.printSettings.inputPages.on('changing', _.bind(this.inputPagesChanging, this));
 | 
			
		||||
            this.printSettings.inputPages.validation = function(value) {
 | 
			
		||||
                if (!_.isEmpty(value) && /[0-9,\-]/.test(value)) {
 | 
			
		||||
                    var res = [],
 | 
			
		||||
                        arr = value.split(',');
 | 
			
		||||
                    if (me._isPrint && arr.length>1)
 | 
			
		||||
                        return me.txtPrintRangeSingleRange;
 | 
			
		||||
 | 
			
		||||
                    for (var i=0; i<arr.length; i++) {
 | 
			
		||||
                        var item = arr[i];
 | 
			
		||||
                        if (!item) // empty
 | 
			
		||||
                            return me.txtPrintRangeInvalid;
 | 
			
		||||
                        var str = item.match(/\-/g);
 | 
			
		||||
                        if (str && str.length>1) // more than 1 symbol '-'
 | 
			
		||||
                            return me.txtPrintRangeInvalid;
 | 
			
		||||
                        if (!str) {// one number
 | 
			
		||||
                            var num = parseInt(item)-1;
 | 
			
		||||
                            (num>=0) && res.push(num);
 | 
			
		||||
                        } else { // range
 | 
			
		||||
                            var pages = item.split('-'),
 | 
			
		||||
                                start = (pages[0] ? parseInt(pages[0])-1 : 0),
 | 
			
		||||
                                end = (pages[1] ? parseInt(pages[1])-1 : me._navigationPreview.pageCount-1);
 | 
			
		||||
                            if (start>end) {
 | 
			
		||||
                                var num = start;
 | 
			
		||||
                                start = end;
 | 
			
		||||
                                end = num;
 | 
			
		||||
                            }
 | 
			
		||||
                            for (var j=start; j<=end; j++) {
 | 
			
		||||
                                (j>=0) && res.push(j);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (res.length>0) {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return me.txtPrintRangeInvalid;
 | 
			
		||||
            };
 | 
			
		||||
            this.printSettings.cmbPaperSize.on('selected', _.bind(this.onPaperSizeSelect, this));
 | 
			
		||||
            this._paperSize = this.printSettings.cmbPaperSize.getSelectedRecord().size;
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.on('window:resize', _.bind(function () {
 | 
			
		||||
                if (this._isPreviewVisible) {
 | 
			
		||||
                    this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage, this._paperSize);
 | 
			
		||||
                }
 | 
			
		||||
            }, this));
 | 
			
		||||
 | 
			
		||||
            var eventname = (/Firefox/i.test(navigator.userAgent))? 'DOMMouseScroll' : 'mousewheel';
 | 
			
		||||
            this.printSettings.$previewBox.on(eventname, _.bind(this.onPreviewWheel, this));
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setMode: function (mode) {
 | 
			
		||||
            this.mode = mode;
 | 
			
		||||
            this.printSettings && this.printSettings.setMode(mode);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setApi: function(o) {
 | 
			
		||||
            this.api = o;
 | 
			
		||||
            this.api.asc_registerCallback('asc_onCountPages',   _.bind(this.onCountPages, this));
 | 
			
		||||
            this.api.asc_registerCallback('asc_onCurrentPage',  _.bind(this.onCurrentPage, this));
 | 
			
		||||
 | 
			
		||||
            return this;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        comboRangeChange: function(combo, record) {
 | 
			
		||||
            if (record.value === -1) {
 | 
			
		||||
                var me = this;
 | 
			
		||||
                setTimeout(function(){
 | 
			
		||||
                    me.printSettings.inputPages.focus();
 | 
			
		||||
                }, 50);
 | 
			
		||||
            } else {
 | 
			
		||||
                this.printSettings.inputPages.setValue('');
 | 
			
		||||
            }
 | 
			
		||||
            this.printSettings.inputPages.showError();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onCountPages: function(count) {
 | 
			
		||||
            this._navigationPreview.pageCount = count;
 | 
			
		||||
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                this.printSettings.$previewBox.toggleClass('hidden', !this._navigationPreview.pageCount);
 | 
			
		||||
                this.printSettings.$previewEmpty.toggleClass('hidden', !!this._navigationPreview.pageCount);
 | 
			
		||||
            }
 | 
			
		||||
            if (!!this._navigationPreview.pageCount) {
 | 
			
		||||
                if (this._navigationPreview.currentPreviewPage > count - 1)
 | 
			
		||||
                    this._navigationPreview.currentPreviewPage = Math.max(0, count - 1);
 | 
			
		||||
                if (this.printSettings.isVisible()) {
 | 
			
		||||
                    this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage, this._paperSize);
 | 
			
		||||
                    this.updateNavigationButtons(this._navigationPreview.currentPreviewPage, count);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onCurrentPage: function(number) {
 | 
			
		||||
            this._navigationPreview.currentPreviewPage = number;
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage, this._paperSize);
 | 
			
		||||
                this.updateNavigationButtons(this._navigationPreview.currentPreviewPage, this._navigationPreview.pageCount);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onShowMainSettingsPrint: function() {
 | 
			
		||||
            var me = this;
 | 
			
		||||
            this.printSettings.$previewBox.removeClass('hidden');
 | 
			
		||||
 | 
			
		||||
            var opts = new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86);
 | 
			
		||||
            opts.asc_setAdvancedOptions(this.adjPrintParams);
 | 
			
		||||
            this.api.asc_initPrintPreview('print-preview', opts);
 | 
			
		||||
 | 
			
		||||
            this.printSettings.$previewBox.toggleClass('hidden', !this._navigationPreview.pageCount);
 | 
			
		||||
            this.printSettings.$previewEmpty.toggleClass('hidden', !!this._navigationPreview.pageCount);
 | 
			
		||||
            if (!!this._navigationPreview.pageCount) {
 | 
			
		||||
                this._navigationPreview.currentPreviewPage = this._navigationPreview.currentPage = this.api.getCurrentPage();
 | 
			
		||||
                this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage, this._paperSize);
 | 
			
		||||
                this.updateNavigationButtons(this._navigationPreview.currentPreviewPage, this._navigationPreview.pageCount);
 | 
			
		||||
                this.SetDisabled();
 | 
			
		||||
            }
 | 
			
		||||
            this._isPreviewVisible = true;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        getPrintParams: function() {
 | 
			
		||||
            return this.adjPrintParams;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onHidePrintMenu: function () {
 | 
			
		||||
            if (this._isPreviewVisible) {
 | 
			
		||||
                this.api.asc_closePrintPreview && this.api.asc_closePrintPreview();
 | 
			
		||||
                this._isPreviewVisible = false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onChangePreviewPage: function (next) {
 | 
			
		||||
            var index = this._navigationPreview.currentPreviewPage;
 | 
			
		||||
            if (next) {
 | 
			
		||||
                index++;
 | 
			
		||||
                index = Math.min(index, this._navigationPreview.pageCount - 1);
 | 
			
		||||
            } else {
 | 
			
		||||
                index--;
 | 
			
		||||
                index = Math.max(index, 0);
 | 
			
		||||
            }
 | 
			
		||||
            this.api.goToPage(index);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onKeypressPageNumber: function (input, e) {
 | 
			
		||||
            if (e.keyCode === Common.UI.Keys.RETURN) {
 | 
			
		||||
                var box = this.printSettings.$el.find('#print-number-page'),
 | 
			
		||||
                    edit = box.find('input[type=text]'), page = parseInt(edit.val());
 | 
			
		||||
                if (!page || page > this._navigationPreview.pageCount || page < 0) {
 | 
			
		||||
                    edit.select();
 | 
			
		||||
                    this.printSettings.txtNumberPage.setValue(this._navigationPreview.currentPreviewPage + 1);
 | 
			
		||||
                    this.printSettings.txtNumberPage.checkValidate();
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                box.focus(); // for IE
 | 
			
		||||
 | 
			
		||||
                this.api.goToPage(page-1);
 | 
			
		||||
                this.api.asc_enableKeyEvents(true);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onKeyupPageNumber: function (input, e) {
 | 
			
		||||
            if (e.keyCode === Common.UI.Keys.ESC) {
 | 
			
		||||
                var box = this.printSettings.$el.find('#print-number-page');
 | 
			
		||||
                box.focus(); // for IE
 | 
			
		||||
                this.api.asc_enableKeyEvents(true);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onBlurPageNumber: function () {
 | 
			
		||||
            if (this.printSettings.txtNumberPage.getValue() != this._navigationPreview.currentPreviewPage + 1) {
 | 
			
		||||
                this.printSettings.txtNumberPage.setValue(this._navigationPreview.currentPreviewPage + 1);
 | 
			
		||||
                this.printSettings.txtNumberPage.checkValidate();
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onPreviewWheel: function (e) {
 | 
			
		||||
            if (e.ctrlKey) {
 | 
			
		||||
                e.preventDefault();
 | 
			
		||||
                e.stopImmediatePropagation();
 | 
			
		||||
            }
 | 
			
		||||
            var forward = (e.deltaY || (e.detail && -e.detail) || e.wheelDelta) < 0;
 | 
			
		||||
            this.onChangePreviewPage(forward);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateNavigationButtons: function (page, count) {
 | 
			
		||||
            this._navigationPreview.currentPage = page;
 | 
			
		||||
            this.printSettings.updateCurrentPage(page);
 | 
			
		||||
            this._navigationPreview.pageCount = count;
 | 
			
		||||
            this.printSettings.updateCountOfPages(count);
 | 
			
		||||
            this.disableNavButtons();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        disableNavButtons: function (force) {
 | 
			
		||||
            if (force) {
 | 
			
		||||
                this.printSettings.btnPrevPage.setDisabled(true);
 | 
			
		||||
                this.printSettings.btnNextPage.setDisabled(true);
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            var curPage = this._navigationPreview.currentPage,
 | 
			
		||||
                pageCount = this._navigationPreview.pageCount;
 | 
			
		||||
            this.printSettings.btnPrevPage.setDisabled(curPage < 1);
 | 
			
		||||
            this.printSettings.btnNextPage.setDisabled(curPage > pageCount - 2);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onBtnPrint: function(print) {
 | 
			
		||||
            this._isPrint = print;
 | 
			
		||||
            if (this.printSettings.cmbRange.getValue()===-1 && this.printSettings.inputPages.checkValidate() !== true)  {
 | 
			
		||||
                this.printSettings.inputPages.focus();
 | 
			
		||||
                this.isInputFirstChange = true;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (this._navigationPreview.pageCount<1)
 | 
			
		||||
                return;
 | 
			
		||||
 | 
			
		||||
            var rec = this.printSettings.cmbPaperSize.getSelectedRecord();
 | 
			
		||||
            this.adjPrintParams.asc_setNativeOptions({
 | 
			
		||||
                pages: this.printSettings.cmbRange.getValue()===-1 ? this.printSettings.inputPages.getValue() : this.printSettings.cmbRange.getValue(),
 | 
			
		||||
                paperSize: {
 | 
			
		||||
                    w: rec ? rec.size[0] : undefined,
 | 
			
		||||
                    h: rec ? rec.size[1] : undefined,
 | 
			
		||||
                    preset: rec ? rec.caption : undefined
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            if ( print ) {
 | 
			
		||||
                var opts = new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86);
 | 
			
		||||
                opts.asc_setAdvancedOptions(this.adjPrintParams);
 | 
			
		||||
                this.api.asc_Print(opts);
 | 
			
		||||
            } else {
 | 
			
		||||
                var opts = new Asc.asc_CDownloadOptions(Asc.c_oAscFileType.PDF);
 | 
			
		||||
                opts.asc_setAdvancedOptions(this.adjPrintParams);
 | 
			
		||||
                this.api.asc_DownloadAs(opts);
 | 
			
		||||
            }
 | 
			
		||||
            this.printSettings.menu.hide();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        inputPagesChanging: function (input, value) {
 | 
			
		||||
            this.isInputFirstChange && this.printSettings.inputPages.showError();
 | 
			
		||||
            this.isInputFirstChange = false;
 | 
			
		||||
 | 
			
		||||
            if (value.length<1)
 | 
			
		||||
                this.printSettings.cmbRange.setValue('all');
 | 
			
		||||
            else if (this.printSettings.cmbRange.getValue()!==-1)
 | 
			
		||||
                this.printSettings.cmbRange.setValue(-1);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onPaperSizeSelect: function(combo, record) {
 | 
			
		||||
            if (record) {
 | 
			
		||||
                this._paperSize = record.size;
 | 
			
		||||
                this.api.asc_drawPrintPreview(this._navigationPreview.currentPreviewPage, this._paperSize);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        SetDisabled: function() {
 | 
			
		||||
            if (this.printSettings.isVisible()) {
 | 
			
		||||
                var disable = !this.mode.isEdit;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        txtPrintRangeInvalid: 'Invalid print range',
 | 
			
		||||
        txtPrintRangeSingleRange: 'Enter either a single slide number or a single slide range (for example, 5-12). Or you can Print to PDF.'
 | 
			
		||||
    }, PE.Controllers.Print || {}));
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			@ -146,6 +146,10 @@ define([
 | 
			
		|||
                        var _main = this.getApplication().getController('Main');
 | 
			
		||||
                        _main.onPrint();
 | 
			
		||||
                    },
 | 
			
		||||
                    'print-quick': function (opts) {
 | 
			
		||||
                        var _main = this.getApplication().getController('Main');
 | 
			
		||||
                        _main.onPrintQuick();
 | 
			
		||||
                    },
 | 
			
		||||
                    'save': function (opts) {
 | 
			
		||||
                        this.api.asc_Save();
 | 
			
		||||
                    },
 | 
			
		||||
| 
						 | 
				
			
			@ -1061,9 +1065,7 @@ define([
 | 
			
		|||
        },
 | 
			
		||||
        
 | 
			
		||||
        onPrint: function(e) {
 | 
			
		||||
            if (this.api)
 | 
			
		||||
                this.api.asc_Print(new Asc.asc_CDownloadOptions(null, Common.Utils.isChrome || Common.Utils.isOpera || Common.Utils.isGecko && Common.Utils.firefoxVersion>86)); // if isChrome or isOpera == true use asc_onPrintUrl event
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.trigger('file:print', this.toolbar);
 | 
			
		||||
            Common.NotificationCenter.trigger('edit:complete', this.toolbar);
 | 
			
		||||
 | 
			
		||||
            Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,8 @@ define([
 | 
			
		|||
            this.addListeners({
 | 
			
		||||
                'FileMenu': {
 | 
			
		||||
                    'menu:hide': me.onFileMenu.bind(me, 'hide'),
 | 
			
		||||
                    'menu:show': me.onFileMenu.bind(me, 'show')
 | 
			
		||||
                    'menu:show': me.onFileMenu.bind(me, 'show'),
 | 
			
		||||
                    'settings:apply': me.applySettings.bind(me)
 | 
			
		||||
                },
 | 
			
		||||
                'Toolbar': {
 | 
			
		||||
                    'render:before' : function (toolbar) {
 | 
			
		||||
| 
						 | 
				
			
			@ -80,6 +81,10 @@ define([
 | 
			
		|||
                        toolbar.setExtra('right', me.header.getPanel('right', config));
 | 
			
		||||
                        if (!config.isEdit || config.customization && !!config.customization.compactHeader)
 | 
			
		||||
                            toolbar.setExtra('left', me.header.getPanel('left', config));
 | 
			
		||||
                        var value = Common.localStorage.getBool("pe-settings-quick-print-button", true);
 | 
			
		||||
                        Common.Utils.InternalSettings.set("pe-settings-quick-print-button", value);
 | 
			
		||||
                        if (me.header && me.header.btnPrintQuick)
 | 
			
		||||
                            me.header.btnPrintQuick[value ? 'show' : 'hide']();
 | 
			
		||||
                    },
 | 
			
		||||
                    'view:compact'  : function (toolbar, state) {
 | 
			
		||||
                        me.viewport.vlayout.getItem('toolbar').height = state ?
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +107,8 @@ define([
 | 
			
		|||
                    'print:disabled' : function (state) {
 | 
			
		||||
                        if ( me.header.btnPrint )
 | 
			
		||||
                            me.header.btnPrint.setDisabled(state);
 | 
			
		||||
                        if ( me.header.btnPrintQuick )
 | 
			
		||||
                            me.header.btnPrintQuick.setDisabled(state);
 | 
			
		||||
                    },
 | 
			
		||||
                    'save:disabled' : function (state) {
 | 
			
		||||
                        if ( me.header.btnSave )
 | 
			
		||||
| 
						 | 
				
			
			@ -312,6 +319,13 @@ define([
 | 
			
		|||
            me.header.lockHeaderBtns( 'users', _need_disable );
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        applySettings: function () {
 | 
			
		||||
            var value = Common.localStorage.getBool("pe-settings-quick-print-button", true);
 | 
			
		||||
            Common.Utils.InternalSettings.set("pe-settings-quick-print-button", value);
 | 
			
		||||
            if (this.header && this.header.btnPrintQuick)
 | 
			
		||||
                this.header.btnPrintQuick[value ? 'show' : 'hide']();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiCoAuthoringDisconnect: function(enableDownload) {
 | 
			
		||||
            if (this.header) {
 | 
			
		||||
                if (this.header.btnDownload && !enableDownload)
 | 
			
		||||
| 
						 | 
				
			
			@ -320,6 +334,8 @@ define([
 | 
			
		|||
                    this.header.btnPrint.hide();
 | 
			
		||||
                if (this.header.btnEdit)
 | 
			
		||||
                    this.header.btnEdit.hide();
 | 
			
		||||
                if (this.header.btnPrintQuick && !enableDownload)
 | 
			
		||||
                    this.header.btnPrintQuick.hide();
 | 
			
		||||
                this.header.lockHeaderBtns( 'rename-user', true);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
    <li id="fm-btn-save-copy" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-save-desktop" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-print" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-print-with-preview" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-rename" class="fm-btn"></li>
 | 
			
		||||
    <li id="fm-btn-protect" class="fm-btn"></li>
 | 
			
		||||
    <li class="devider"></li>
 | 
			
		||||
| 
						 | 
				
			
			@ -34,4 +35,5 @@
 | 
			
		|||
    <div id="panel-settings" class="content-box"></div>
 | 
			
		||||
    <div id="panel-help" class="content-box"></div>
 | 
			
		||||
    <div id="panel-protect" class="content-box"></div>
 | 
			
		||||
    <div id="panel-print" class="content-box"></div>
 | 
			
		||||
</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -171,6 +171,17 @@ define([
 | 
			
		|||
                dataHintTitle: 'P'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.miPrintWithPreview = new Common.UI.MenuItem({
 | 
			
		||||
                el      : $markup.elementById('#fm-btn-print-with-preview'),
 | 
			
		||||
                action  : 'printpreview',
 | 
			
		||||
                caption : this.btnPrintCaption,
 | 
			
		||||
                canFocused: false,
 | 
			
		||||
                dataHint: 1,
 | 
			
		||||
                dataHintDirection: 'left-top',
 | 
			
		||||
                dataHintOffset: [2, 14],
 | 
			
		||||
                dataHintTitle: 'P'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.miRename = new Common.UI.MenuItem({
 | 
			
		||||
                el      : $markup.elementById('#fm-btn-rename'),
 | 
			
		||||
                action  : 'rename',
 | 
			
		||||
| 
						 | 
				
			
			@ -292,6 +303,7 @@ define([
 | 
			
		|||
                this.miSaveCopyAs,
 | 
			
		||||
                this.miSaveAs,
 | 
			
		||||
                this.miPrint,
 | 
			
		||||
                this.miPrintWithPreview,
 | 
			
		||||
                this.miRename,
 | 
			
		||||
                this.miProtect,
 | 
			
		||||
                this.miRecent,
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +393,8 @@ define([
 | 
			
		|||
            this.miSaveAs[(this.mode.canDownload && this.mode.isDesktopApp && this.mode.isOffline)?'show':'hide']();
 | 
			
		||||
            this.miSave[this.mode.isEdit && Common.UI.LayoutManager.isElementVisible('toolbar-file-save') ?'show':'hide']();
 | 
			
		||||
            this.miEdit[!this.mode.isEdit && this.mode.canEdit && this.mode.canRequestEditRights ?'show':'hide']();
 | 
			
		||||
            this.miPrint[this.mode.canPrint?'show':'hide']();
 | 
			
		||||
            this.miPrint[this.mode.canPrint && !this.mode.canPreviewPrint ?'show':'hide']();
 | 
			
		||||
            this.miPrintWithPreview[this.mode.canPreviewPrint?'show':'hide']();
 | 
			
		||||
            this.miRename[(this.mode.canRename && !this.mode.isDesktopApp) ?'show':'hide']();
 | 
			
		||||
            this.miProtect[this.mode.canProtect ?'show':'hide']();
 | 
			
		||||
            separatorVisible = (this.mode.canDownload || this.mode.isEdit && Common.UI.LayoutManager.isElementVisible('toolbar-file-save') || this.mode.canPrint || this.mode.canProtect ||
 | 
			
		||||
| 
						 | 
				
			
			@ -462,6 +475,12 @@ define([
 | 
			
		|||
                this.panels['help'].setLangConfig(this.mode.lang);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (this.mode.canPreviewPrint) {
 | 
			
		||||
                var printPanel = PE.getController('Print').getView('PrintWithPreview');
 | 
			
		||||
                printPanel.menu = this;
 | 
			
		||||
                !this.panels['printpreview'] && (this.panels['printpreview'] = printPanel.render(this.$el.find('#panel-print')));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( Common.Controllers.Desktop.isActive() ) {
 | 
			
		||||
                $('<li id="fm-btn-local-open" class="fm-btn"/>').insertAfter($('#fm-btn-recent', this.$el));
 | 
			
		||||
                this.items.push(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -266,7 +266,12 @@ define([
 | 
			
		|||
                '<tr>',
 | 
			
		||||
                    '<td colspan="2"><div id="fms-chb-use-alt-key"></div></td>',
 | 
			
		||||
                '</tr>',
 | 
			
		||||
 | 
			
		||||
                '<tr class="quick-print">',
 | 
			
		||||
                    '<td colspan="2"><div style="display: flex;"><div id="fms-chb-quick-print"></div>',
 | 
			
		||||
                        '<span style ="display: flex; flex-direction: column;"><label><%= scope.txtQuickPrint %></label>',
 | 
			
		||||
                        '<label class="comment-text"><%= scope.txtQuickPrintTip %></label></span></div>',
 | 
			
		||||
                    '</td>',
 | 
			
		||||
                '</tr>',
 | 
			
		||||
                '<tr class="themes">',
 | 
			
		||||
                    '<td><label><%= scope.strTheme %></label></td>',
 | 
			
		||||
                    '<td><span id="fms-cmb-theme"></span></td>',
 | 
			
		||||
| 
						 | 
				
			
			@ -535,6 +540,17 @@ define([
 | 
			
		|||
                })).on('click', _.bind(me.applySettings, me));
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.chQuickPrint = new Common.UI.CheckBox({
 | 
			
		||||
                el: $markup.findById('#fms-chb-quick-print'),
 | 
			
		||||
                labelText: '',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
            this.chQuickPrint.$el.parent().on('click', function (){
 | 
			
		||||
                me.chQuickPrint.setValue(!me.chQuickPrint.isChecked());
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.pnlSettings = $markup.find('.flex-settings').addBack().filter('.flex-settings');
 | 
			
		||||
            this.pnlApply = $markup.find('.fms-flex-apply').addBack().filter('.fms-flex-apply');
 | 
			
		||||
            this.pnlTable = this.pnlSettings.find('table');
 | 
			
		||||
| 
						 | 
				
			
			@ -596,6 +612,7 @@ define([
 | 
			
		|||
            $('tr.live-viewer', this.el)[mode.canLiveView && !mode.isOffline && mode.canChangeCoAuthoring ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.macros', this.el)[(mode.customization && mode.customization.macros===false) ? 'hide' : 'show']();
 | 
			
		||||
            $('tr.spellcheck', this.el)[mode.isEdit && Common.UI.FeaturesManager.canChange('spellcheck') ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.quick-print', this.el)[mode.canQuickPrint ? 'show' : 'hide']();
 | 
			
		||||
 | 
			
		||||
            if ( !Common.UI.Themes.available() ) {
 | 
			
		||||
                $('tr.themes, tr.themes + tr.divider', this.el).hide();
 | 
			
		||||
| 
						 | 
				
			
			@ -657,6 +674,7 @@ define([
 | 
			
		|||
            this.lblMacrosDesc.text(item ? item.get('descValue') : this.txtWarnMacrosDesc);
 | 
			
		||||
 | 
			
		||||
            this.chPaste.setValue(Common.Utils.InternalSettings.get("pe-settings-paste-button"));
 | 
			
		||||
            this.chQuickPrint.setValue(Common.Utils.InternalSettings.get("pe-settings-quick-print-button"));
 | 
			
		||||
 | 
			
		||||
            var data = [];
 | 
			
		||||
            for (var t in Common.UI.Themes.map()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -702,6 +720,7 @@ define([
 | 
			
		|||
            Common.Utils.InternalSettings.set("pe-macros-mode", this.cmbMacros.getValue());
 | 
			
		||||
 | 
			
		||||
            Common.localStorage.setItem("pe-settings-paste-button", this.chPaste.isChecked() ? 1 : 0);
 | 
			
		||||
            Common.localStorage.setBool("pe-settings-quick-print-button", this.chQuickPrint.isChecked());
 | 
			
		||||
 | 
			
		||||
            Common.localStorage.save();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -777,7 +796,10 @@ define([
 | 
			
		|||
        txtStrictTip: 'Use the \'Save\' button to sync the changes you and others make',
 | 
			
		||||
        strIgnoreWordsInUPPERCASE: 'Ignore words in UPPERCASE',
 | 
			
		||||
        strIgnoreWordsWithNumbers: 'Ignore words with numbers',
 | 
			
		||||
        strShowOthersChanges: 'Show changes from other users'
 | 
			
		||||
        strShowOthersChanges: 'Show changes from other users',
 | 
			
		||||
        txtQuickPrint: 'Show the Quick Print button in the editor header',
 | 
			
		||||
        txtQuickPrintTip: 'The document will be printed on the last selected or default printer'
 | 
			
		||||
 | 
			
		||||
    }, PE.Views.FileMenuPanels.Settings || {}));
 | 
			
		||||
 | 
			
		||||
    PE.Views.FileMenuPanels.RecentFiles = Common.UI.BaseView.extend({
 | 
			
		||||
| 
						 | 
				
			
			@ -1821,4 +1843,280 @@ define([
 | 
			
		|||
 | 
			
		||||
    }, PE.Views.FileMenuPanels.ProtectDoc || {}));
 | 
			
		||||
 | 
			
		||||
    PE.Views.PrintWithPreview = Common.UI.BaseView.extend(_.extend({
 | 
			
		||||
        el: '#panel-print',
 | 
			
		||||
        menu: undefined,
 | 
			
		||||
 | 
			
		||||
        template: _.template([
 | 
			
		||||
            '<div style="width:100%; height:100%; position: relative;">',
 | 
			
		||||
                '<div id="id-print-settings" class="no-padding">',
 | 
			
		||||
                    '<div class="print-settings">',
 | 
			
		||||
                        '<div class="flex-settings ps-container oo settings-container">',
 | 
			
		||||
                            '<table style="width: 100%;">',
 | 
			
		||||
                                '<tbody>',
 | 
			
		||||
                                    '<tr><td><label class="header"><%= scope.txtPrintRange %></label></td></tr>',
 | 
			
		||||
                                    '<tr><td class="padding-small"><div id="print-combo-range" style="width: 248px;"></div></td></tr>',
 | 
			
		||||
                                    '<tr><td class="padding-large">',
 | 
			
		||||
                                        '<table style="width: 100%;"><tbody><tr>',
 | 
			
		||||
                                        '<td><%= scope.txtPages %></td><td><div id="print-txt-pages" style="width: 100%;padding-left: 5px;"></div></td>',
 | 
			
		||||
                                        '</tr></tbody></table>',
 | 
			
		||||
                                    '</td></tr>',
 | 
			
		||||
                                    '<tr><td><label class="header"><%= scope.txtPaperSize %></label></td></tr>',
 | 
			
		||||
                                    '<tr><td class="padding-large"><div id="print-combo-pages" style="width: 248px;"></div></td></tr>',
 | 
			
		||||
                                    '<tr class="fms-btn-apply"><td>',
 | 
			
		||||
                                        '<div class="footer justify">',
 | 
			
		||||
                                            '<button id="print-btn-print" class="btn normal dlg-btn primary" result="print" style="width: 96px;" data-hint="2" data-hint-direction="bottom" data-hint-offset="big"><%= scope.txtPrint %></button>',
 | 
			
		||||
                                            '<button id="print-btn-print-pdf" class="btn normal dlg-btn" result="pdf" style="width: 96px;" data-hint="2" data-hint-direction="bottom" data-hint-offset="big"><%= scope.txtPrintPdf %></button>',
 | 
			
		||||
                                        '</div>',
 | 
			
		||||
                                    '</td></tr>',
 | 
			
		||||
                                '</tbody>',
 | 
			
		||||
                            '</table>',
 | 
			
		||||
                        '</div>',
 | 
			
		||||
                    '</div>',
 | 
			
		||||
                '</div>',
 | 
			
		||||
                '<div id="print-preview-box" style="position: absolute; left: 280px; top: 0; right: 0; bottom: 0;" class="no-padding">',
 | 
			
		||||
                    '<div id="print-preview"></div>',
 | 
			
		||||
                    '<div id="print-navigation">',
 | 
			
		||||
                        '<div id="print-prev-page" style="display: inline-block; margin-right: 4px;"></div>',
 | 
			
		||||
                        '<div id="print-next-page" style="display: inline-block;"></div>',
 | 
			
		||||
                        '<div class="page-number">',
 | 
			
		||||
                            '<label><%= scope.txtPage %></label>',
 | 
			
		||||
                            '<div id="print-number-page"></div>',
 | 
			
		||||
                            '<label id="print-count-page"><%= scope.txtOf %></label>',
 | 
			
		||||
                        '</div>',
 | 
			
		||||
                    '</div>',
 | 
			
		||||
                '</div>',
 | 
			
		||||
                '<div id="print-preview-empty" class="hidden">',
 | 
			
		||||
                    '<div><%= scope.txtEmptyTable %></div>',
 | 
			
		||||
                '</div>',
 | 
			
		||||
            '</div>'
 | 
			
		||||
        ].join('')),
 | 
			
		||||
 | 
			
		||||
        initialize: function(options) {
 | 
			
		||||
            Common.UI.BaseView.prototype.initialize.call(this,arguments);
 | 
			
		||||
 | 
			
		||||
            this.menu = options.menu;
 | 
			
		||||
 | 
			
		||||
            this._initSettings = true;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        render: function(node) {
 | 
			
		||||
            var me = this;
 | 
			
		||||
 | 
			
		||||
            var $markup = $(this.template({scope: this}));
 | 
			
		||||
 | 
			
		||||
            this.cmbRange = new Common.UI.ComboBox({
 | 
			
		||||
                el: $markup.findById('#print-combo-range'),
 | 
			
		||||
                menuStyle: 'min-width: 248px;max-height: 280px;',
 | 
			
		||||
                editable: false,
 | 
			
		||||
                takeFocusOnClose: true,
 | 
			
		||||
                cls: 'input-group-nr',
 | 
			
		||||
                data: [
 | 
			
		||||
                    { value: 'all', displayValue: this.txtAllPages },
 | 
			
		||||
                    { value: 'current', displayValue: this.txtCurrentPage },
 | 
			
		||||
                    { value: -1, displayValue: this.txtCustomPages }
 | 
			
		||||
                ],
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'bottom',
 | 
			
		||||
                dataHintOffset: 'big'
 | 
			
		||||
            });
 | 
			
		||||
            this.cmbRange.setValue('all');
 | 
			
		||||
 | 
			
		||||
            this.inputPages = new Common.UI.InputField({
 | 
			
		||||
                el: $markup.findById('#print-txt-pages'),
 | 
			
		||||
                allowBlank: true,
 | 
			
		||||
                validateOnChange: true,
 | 
			
		||||
                validateOnBlur: false,
 | 
			
		||||
                maskExp: /[0-9,\-]/,
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.cmbPaperSize = new Common.UI.ComboBox({
 | 
			
		||||
                el: $markup.findById('#print-combo-pages'),
 | 
			
		||||
                menuStyle: 'max-height: 280px; min-width: 248px;',
 | 
			
		||||
                editable: false,
 | 
			
		||||
                takeFocusOnClose: true,
 | 
			
		||||
                cls: 'input-group-nr',
 | 
			
		||||
                data: [
 | 
			
		||||
                    { value: 0, displayValue:'US Letter (21,59cm x 27,94cm)', caption: 'US Letter', size: [215.9, 279.4]},
 | 
			
		||||
                    { value: 1, displayValue:'US Legal (21,59cm x 35,56cm)', caption: 'US Legal', size: [215.9, 355.6]},
 | 
			
		||||
                    { value: 2, displayValue:'A4 (21cm x 29,7cm)', caption: 'A4', size: [210, 297]},
 | 
			
		||||
                    { value: 3, displayValue:'A5 (14,8cm x 21cm)', caption: 'A5', size: [148, 210]},
 | 
			
		||||
                    { value: 4, displayValue:'B5 (17,6cm x 25cm)', caption: 'B5', size: [176, 250]},
 | 
			
		||||
                    { value: 5, displayValue:'Envelope #10 (10,48cm x 24,13cm)', caption: 'Envelope #10', size: [104.8, 241.3]},
 | 
			
		||||
                    { value: 6, displayValue:'Envelope DL (11cm x 22cm)', caption: 'Envelope DL', size: [110, 220]},
 | 
			
		||||
                    { value: 7, displayValue:'Tabloid (27,94cm x 43,18cm)', caption: 'Tabloid', size: [279.4, 431.8]},
 | 
			
		||||
                    { value: 8, displayValue:'A3 (29,7cm x 42cm)', caption: 'A3', size: [297, 420]},
 | 
			
		||||
                    { value: 9, displayValue:'Tabloid Oversize (30,48cm x 45,71cm)', caption: 'Tabloid Oversize', size: [304.8, 457.1]},
 | 
			
		||||
                    { value: 10, displayValue:'ROC 16K (19,68cm x 27,3cm)', caption: 'ROC 16K', size: [196.8, 273]},
 | 
			
		||||
                    { value: 11, displayValue:'Envelope Choukei 3 (11,99cm x 23,49cm)', caption: 'Envelope Choukei 3', size: [119.9, 234.9]},
 | 
			
		||||
                    { value: 12, displayValue:'Super B/A3 (33,02cm x 48,25cm)', caption: 'Super B/A3', size: [330.2, 482.5]},
 | 
			
		||||
                    { value: 13, displayValue:'A4 (84,1cm x 118,9cm)', caption: 'A0', size: [841, 1189]},
 | 
			
		||||
                    { value: 14, displayValue:'A4 (59,4cm x 84,1cm)', caption: 'A1', size: [594, 841]},
 | 
			
		||||
                    { value: 16, displayValue:'A4 (42cm x 59,4cm)', caption: 'A2', size: [420, 594]},
 | 
			
		||||
                    { value: 17, displayValue:'A4 (10,5cm x 14,8cm)', caption: 'A6', size: [105, 148]}
 | 
			
		||||
                ],
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'bottom',
 | 
			
		||||
                dataHintOffset: 'big'
 | 
			
		||||
            });
 | 
			
		||||
            this.cmbPaperSize.setValue(2);
 | 
			
		||||
 | 
			
		||||
            this.pnlSettings = $markup.find('.flex-settings').addBack().filter('.flex-settings');
 | 
			
		||||
            this.pnlTable = $(this.pnlSettings.find('table')[0]);
 | 
			
		||||
            this.trApply = $markup.find('.fms-btn-apply');
 | 
			
		||||
 | 
			
		||||
            this.btnPrint = new Common.UI.Button({
 | 
			
		||||
                el: $markup.findById('#print-btn-print')
 | 
			
		||||
            });
 | 
			
		||||
            this.btnPrintPdf = new Common.UI.Button({
 | 
			
		||||
                el: $markup.findById('#print-btn-print-pdf')
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.btnPrevPage = new Common.UI.Button({
 | 
			
		||||
                parentEl: $markup.findById('#print-prev-page'),
 | 
			
		||||
                cls: 'btn-prev-page',
 | 
			
		||||
                iconCls: 'arrow',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'top'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.btnNextPage = new Common.UI.Button({
 | 
			
		||||
                parentEl: $markup.findById('#print-next-page'),
 | 
			
		||||
                cls: 'btn-next-page',
 | 
			
		||||
                iconCls: 'arrow',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'top'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.countOfPages = $markup.findById('#print-count-page');
 | 
			
		||||
 | 
			
		||||
            this.txtNumberPage = new Common.UI.InputField({
 | 
			
		||||
                el: $markup.findById('#print-number-page'),
 | 
			
		||||
                allowBlank: true,
 | 
			
		||||
                validateOnChange: true,
 | 
			
		||||
                style: 'width: 50px;',
 | 
			
		||||
                maskExp: /[0-9]/,
 | 
			
		||||
                validation: function(value) {
 | 
			
		||||
                    if (/(^[0-9]+$)/.test(value)) {
 | 
			
		||||
                        value = parseInt(value);
 | 
			
		||||
                        if (undefined !== value && value > 0 && value <= me.pageCount)
 | 
			
		||||
                            return true;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    return me.txtPageNumInvalid;
 | 
			
		||||
                },
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.$el = $(node).html($markup);
 | 
			
		||||
            this.$previewBox = $('#print-preview-box');
 | 
			
		||||
            this.$previewEmpty = $('#print-preview-empty');
 | 
			
		||||
 | 
			
		||||
            if (_.isUndefined(this.scroller)) {
 | 
			
		||||
                this.scroller = new Common.UI.Scroller({
 | 
			
		||||
                    el: this.pnlSettings,
 | 
			
		||||
                    suppressScrollX: true,
 | 
			
		||||
                    alwaysVisibleY: true
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Common.NotificationCenter.on({
 | 
			
		||||
                'window:resize': function() {
 | 
			
		||||
                    me.isVisible() && me.updateScroller();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.updateMetricUnit();
 | 
			
		||||
 | 
			
		||||
            this.fireEvent('render:after', this);
 | 
			
		||||
 | 
			
		||||
            return this;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        show: function() {
 | 
			
		||||
            Common.UI.BaseView.prototype.show.call(this,arguments);
 | 
			
		||||
            if (this._initSettings) {
 | 
			
		||||
                this.updateMetricUnit();
 | 
			
		||||
                this._initSettings = false;
 | 
			
		||||
            }
 | 
			
		||||
            this.updateScroller();
 | 
			
		||||
            this.fireEvent('show', this);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateScroller: function() {
 | 
			
		||||
            if (this.scroller) {
 | 
			
		||||
                Common.UI.Menu.Manager.hideAll();
 | 
			
		||||
                var scrolled = this.$el.height()< this.pnlTable.height();
 | 
			
		||||
                this.pnlSettings.css('overflow', scrolled ? 'hidden' : 'visible');
 | 
			
		||||
                this.scroller.update();
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setMode: function(mode) {
 | 
			
		||||
            this.mode = mode;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setApi: function(api) {
 | 
			
		||||
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        isVisible: function() {
 | 
			
		||||
            return (this.$el || $(this.el)).is(":visible");
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        setRange: function(value) {
 | 
			
		||||
            this.cmbRange.setValue(value);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        getRange: function() {
 | 
			
		||||
            return this.cmbRange.getValue();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateCountOfPages: function (count) {
 | 
			
		||||
            this.countOfPages.text(
 | 
			
		||||
                Common.Utils.String.format(this.txtOf, count)
 | 
			
		||||
            );
 | 
			
		||||
            this.pageCount = count;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateCurrentPage: function (index) {
 | 
			
		||||
            this.txtNumberPage.setValue(index + 1);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        updateMetricUnit: function() {
 | 
			
		||||
            if (!this.cmbPaperSize) return;
 | 
			
		||||
            var store = this.cmbPaperSize.store;
 | 
			
		||||
            for (var i=0; i<store.length; i++) {
 | 
			
		||||
                var item = store.at(i),
 | 
			
		||||
                    size = item.get('size'),
 | 
			
		||||
                    pagewidth = size[0],
 | 
			
		||||
                    pageheight = size[1];
 | 
			
		||||
 | 
			
		||||
                item.set('displayValue', item.get('caption') + ' (' + parseFloat(Common.Utils.Metric.fnRecalcFromMM(pagewidth).toFixed(2)) + Common.Utils.Metric.getCurrentMetricName() + ' x ' +
 | 
			
		||||
                    parseFloat(Common.Utils.Metric.fnRecalcFromMM(pageheight).toFixed(2)) + Common.Utils.Metric.getCurrentMetricName() + ')');
 | 
			
		||||
            }
 | 
			
		||||
            var value = this.cmbPaperSize.getValue();
 | 
			
		||||
            this.cmbPaperSize.onResetItems();
 | 
			
		||||
            this.cmbPaperSize.setValue(value);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        txtPrint: 'Print',
 | 
			
		||||
        txtPrintPdf: 'Print to PDF',
 | 
			
		||||
        txtPrintRange: 'Print range',
 | 
			
		||||
        txtCurrentPage: 'Current slide',
 | 
			
		||||
        txtAllPages: 'All slides',
 | 
			
		||||
        txtCustomPages: 'Custom print',
 | 
			
		||||
        txtPage: 'Slide',
 | 
			
		||||
        txtOf: 'of {0}',
 | 
			
		||||
        txtPageNumInvalid: 'Slide number invalid',
 | 
			
		||||
        txtEmptyTable: 'There is nothing to print because the presentation is empty',
 | 
			
		||||
        txtPages: 'Slides',
 | 
			
		||||
        txtPaperSize: 'Paper size'
 | 
			
		||||
 | 
			
		||||
    }, PE.Views.PrintWithPreview || {}));
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,6 +143,7 @@ require([
 | 
			
		|||
            'Main',
 | 
			
		||||
            'ViewTab',
 | 
			
		||||
            'Search',
 | 
			
		||||
            'Print',
 | 
			
		||||
            'Common.Controllers.Fonts',
 | 
			
		||||
            'Common.Controllers.History'
 | 
			
		||||
            /** coauthoring begin **/
 | 
			
		||||
| 
						 | 
				
			
			@ -173,6 +174,7 @@ require([
 | 
			
		|||
            'presentationeditor/main/app/controller/Main',
 | 
			
		||||
            'presentationeditor/main/app/controller/ViewTab',
 | 
			
		||||
            'presentationeditor/main/app/controller/Search',
 | 
			
		||||
            'presentationeditor/main/app/controller/Print',
 | 
			
		||||
            'presentationeditor/main/app/view/FileMenuPanels',
 | 
			
		||||
            'presentationeditor/main/app/view/ParagraphSettings',
 | 
			
		||||
            'presentationeditor/main/app/view/ImageSettings',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -249,6 +249,8 @@
 | 
			
		|||
  "Common.define.effectData.textZigzag": "Zigzag",
 | 
			
		||||
  "Common.define.effectData.textZoom": "Zoom",
 | 
			
		||||
  "Common.Translation.textMoreButton": "More",
 | 
			
		||||
  "Common.Translation.tipFileLocked": "Document is locked for editing. You can make changes and save it as local copy later.",
 | 
			
		||||
  "Common.Translation.tipFileReadOnly": "The file is read-only. To keep your changes, save the file with a new name or in a different location.",
 | 
			
		||||
  "Common.Translation.warnFileLocked": "The file is being edited in another app. You can continue editing and save it as a copy.",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnEdit": "Create a copy",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnView": "Open for viewing",
 | 
			
		||||
| 
						 | 
				
			
			@ -412,6 +414,8 @@
 | 
			
		|||
  "Common.Views.Header.tipViewUsers": "View users and manage document access rights",
 | 
			
		||||
  "Common.Views.Header.txtAccessRights": "Change access rights",
 | 
			
		||||
  "Common.Views.Header.txtRename": "Rename",
 | 
			
		||||
  "Common.Views.Header.tipPrintQuick": "Quick print",
 | 
			
		||||
  "Common.Views.Header.textReadOnly": "Read only",
 | 
			
		||||
  "Common.Views.History.textCloseHistory": "Close History",
 | 
			
		||||
  "Common.Views.History.textHide": "Collapse",
 | 
			
		||||
  "Common.Views.History.textHideAll": "Hide detailed changes",
 | 
			
		||||
| 
						 | 
				
			
			@ -1010,6 +1014,9 @@
 | 
			
		|||
  "PE.Controllers.Main.confirmMaxChangesSize": "The size of actions exceeds the limitation set for your server.<br>Press \"Undo\" to cancel your last action or press \"Continue\" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).",
 | 
			
		||||
  "PE.Controllers.Main.textUndo": "Undo",
 | 
			
		||||
  "PE.Controllers.Main.textContinue": "Continue",
 | 
			
		||||
  "PE.Controllers.Main.textTryQuickPrint": "You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?",
 | 
			
		||||
  "PE.Controllers.Print.txtPrintRangeInvalid": "Invalid print range",
 | 
			
		||||
  "PE.Controllers.Print.txtPrintRangeSingleRange": "Enter either a single slide number or a single slide range (for example, 5-12). Or you can Print to PDF.",
 | 
			
		||||
  "PE.Controllers.Search.notcriticalErrorTitle": "Warning",
 | 
			
		||||
  "PE.Controllers.Search.textNoTextFound": "The data you have been searching for could not be found. Please adjust your search options.",
 | 
			
		||||
  "PE.Controllers.Search.textReplaceSkipped": "The replacement has been made. {0} occurrences were skipped.",
 | 
			
		||||
| 
						 | 
				
			
			@ -1710,6 +1717,8 @@
 | 
			
		|||
  "PE.Views.FileMenuPanels.Settings.txtWarnMacrosDesc": "Disable all macros with a notification",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtWin": "as Windows",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtWorkspace": "Workspace",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtQuickPrint": "Show the Quick Print button in the editor header",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtQuickPrintTip": "The document will be printed on the last selected or default printer",
 | 
			
		||||
  "PE.Views.HeaderFooterDialog.applyAllText": "Apply to all",
 | 
			
		||||
  "PE.Views.HeaderFooterDialog.applyText": "Apply",
 | 
			
		||||
  "PE.Views.HeaderFooterDialog.diffLanguage": "You can’t use a date format in a different language than the slide master.<br>To change the master, click 'Apply to all' instead of 'Apply'",
 | 
			
		||||
| 
						 | 
				
			
			@ -1849,6 +1858,18 @@
 | 
			
		|||
  "PE.Views.ParagraphSettingsAdvanced.textTabRight": "Right",
 | 
			
		||||
  "PE.Views.ParagraphSettingsAdvanced.textTitle": "Paragraph - Advanced Settings",
 | 
			
		||||
  "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Auto",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPrint": "Print",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPrintPdf": "Print to PDF",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPrintRange": "Print range",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtCurrentPage": "Current slide",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtAllPages": "All slides",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtCustomPages": "Custom print",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPage": "Slide",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtOf": "of {0}",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPageNumInvalid": "Slide number invalid",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtEmptyTable": "There is nothing to print because the presentation is empty",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPages": "Slides",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPaperSize": "Paper size",
 | 
			
		||||
  "PE.Views.RightMenu.txtChartSettings": "Chart settings",
 | 
			
		||||
  "PE.Views.RightMenu.txtImageSettings": "Image settings",
 | 
			
		||||
  "PE.Views.RightMenu.txtParagraphSettings": "Paragraph settings",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -249,6 +249,8 @@
 | 
			
		|||
  "Common.define.effectData.textZigzag": "Зигзаг",
 | 
			
		||||
  "Common.define.effectData.textZoom": "Масштабирование",
 | 
			
		||||
  "Common.Translation.textMoreButton": "Ещё",
 | 
			
		||||
  "Common.Translation.tipFileLocked": "Документ заблокирован на редактирование. Вы можете внести изменения и сохранить его как локальную копию позже.",
 | 
			
		||||
  "Common.Translation.tipFileReadOnly": "Файл доступен только для чтения. Чтобы сохранить изменения, сохраните файл с новым названием или в другом месте.",
 | 
			
		||||
  "Common.Translation.warnFileLocked": "Файл редактируется в другом приложении. Вы можете продолжить редактирование и сохранить его как копию.",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnEdit": "Создать копию",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnView": "Открыть на просмотр",
 | 
			
		||||
| 
						 | 
				
			
			@ -391,6 +393,7 @@
 | 
			
		|||
  "Common.Views.Header.textHideLines": "Скрыть линейки",
 | 
			
		||||
  "Common.Views.Header.textHideNotes": "Скрыть заметки",
 | 
			
		||||
  "Common.Views.Header.textHideStatusBar": "Скрыть строку состояния",
 | 
			
		||||
  "Common.Views.Header.textReadOnly": "Только чтение",
 | 
			
		||||
  "Common.Views.Header.textRemoveFavorite": "Удалить из избранного",
 | 
			
		||||
  "Common.Views.Header.textSaveBegin": "Сохранение...",
 | 
			
		||||
  "Common.Views.Header.textSaveChanged": "Изменен",
 | 
			
		||||
| 
						 | 
				
			
			@ -402,6 +405,7 @@
 | 
			
		|||
  "Common.Views.Header.tipDownload": "Скачать файл",
 | 
			
		||||
  "Common.Views.Header.tipGoEdit": "Редактировать текущий файл",
 | 
			
		||||
  "Common.Views.Header.tipPrint": "Напечатать файл",
 | 
			
		||||
  "Common.Views.Header.tipPrintQuick": "Быстрая печать",
 | 
			
		||||
  "Common.Views.Header.tipRedo": "Повторить",
 | 
			
		||||
  "Common.Views.Header.tipSave": "Сохранить",
 | 
			
		||||
  "Common.Views.Header.tipSearch": "Поиск",
 | 
			
		||||
| 
						 | 
				
			
			@ -713,6 +717,7 @@
 | 
			
		|||
  "PE.Controllers.Main.textClose": "Закрыть",
 | 
			
		||||
  "PE.Controllers.Main.textCloseTip": "Щелкните, чтобы закрыть эту подсказку",
 | 
			
		||||
  "PE.Controllers.Main.textContactUs": "Связаться с отделом продаж",
 | 
			
		||||
  "PE.Controllers.Main.textContinue": "Продолжить",
 | 
			
		||||
  "PE.Controllers.Main.textConvertEquation": "Это уравнение создано в старой версии редактора уравнений, которая больше не поддерживается. Чтобы изменить это уравнение, его необходимо преобразовать в формат Office Math ML.<br>Преобразовать сейчас?",
 | 
			
		||||
  "PE.Controllers.Main.textCustomLoader": "Обратите внимание, что по условиям лицензии у вас нет прав изменять экран, отображаемый при загрузке.<br>Пожалуйста, обратитесь в наш отдел продаж, чтобы сделать запрос.",
 | 
			
		||||
  "PE.Controllers.Main.textDisconnect": "Соединение потеряно",
 | 
			
		||||
| 
						 | 
				
			
			@ -731,8 +736,10 @@
 | 
			
		|||
  "PE.Controllers.Main.textRequestMacros": "Макрос делает запрос на URL. Вы хотите разрешить запрос на %1?",
 | 
			
		||||
  "PE.Controllers.Main.textShape": "Фигура",
 | 
			
		||||
  "PE.Controllers.Main.textStrict": "Строгий режим",
 | 
			
		||||
  "PE.Controllers.Main.textTryQuickPrint": "Вы выбрали быструю печать: весь документ будет напечатан на последнем выбранном принтере или на принтере по умолчанию.<br>Вы хотите продолжить?",
 | 
			
		||||
  "PE.Controllers.Main.textTryUndoRedo": "Функции отмены и повтора действий отключены в Быстром режиме совместного редактирования.<br>Нажмите на кнопку 'Строгий режим' для переключения в Строгий режим совместного редактирования, чтобы редактировать файл без вмешательства других пользователей и отправлять изменения только после того, как вы их сохраните. Переключаться между режимами совместного редактирования можно с помощью Дополнительных параметров редактора.",
 | 
			
		||||
  "PE.Controllers.Main.textTryUndoRedoWarn": "Функции отмены и повтора действий отключены в Быстром режиме совместного редактирования.",
 | 
			
		||||
  "PE.Controllers.Main.textUndo": "Отменить",
 | 
			
		||||
  "PE.Controllers.Main.titleLicenseExp": "Истек срок действия лицензии",
 | 
			
		||||
  "PE.Controllers.Main.titleServerVersion": "Редактор обновлен",
 | 
			
		||||
  "PE.Controllers.Main.txtAddFirstSlide": "Нажмите, чтобы добавить первый слайд",
 | 
			
		||||
| 
						 | 
				
			
			@ -1007,6 +1014,8 @@
 | 
			
		|||
  "PE.Controllers.Main.warnNoLicense": "Вы достигли лимита на одновременные подключения к редакторам %1. Этот документ будет открыт на просмотр.<br>Напишите в отдел продаж %1, чтобы обсудить индивидуальные условия лицензирования.",
 | 
			
		||||
  "PE.Controllers.Main.warnNoLicenseUsers": "Вы достигли лимита на одновременные подключения к редакторам %1.<br>Напишите в отдел продаж %1, чтобы обсудить индивидуальные условия лицензирования.",
 | 
			
		||||
  "PE.Controllers.Main.warnProcessRightsChange": "Вам было отказано в праве на редактирование этого файла.",
 | 
			
		||||
  "PE.Controllers.Print.txtPrintRangeInvalid": "Неправильный диапазон печати",
 | 
			
		||||
  "PE.Controllers.Print.txtPrintRangeSingleRange": "Введите или один номер слайда, или один диапазон слайдов (например, 5-12). Или вы можете выбрать печать в PDF.",
 | 
			
		||||
  "PE.Controllers.Search.notcriticalErrorTitle": "Внимание",
 | 
			
		||||
  "PE.Controllers.Search.textNoTextFound": "Искомые данные не найдены. Пожалуйста, измените параметры поиска.",
 | 
			
		||||
  "PE.Controllers.Search.textReplaceSkipped": "Замена выполнена. Пропущено вхождений - {0}.",
 | 
			
		||||
| 
						 | 
				
			
			@ -1695,6 +1704,8 @@
 | 
			
		|||
  "PE.Views.FileMenuPanels.Settings.txtNative": "Собственный",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtProofing": "Правописание",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtPt": "Пункт",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtQuickPrint": "Показывать кнопку Быстрая печать в шапке редактора",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtQuickPrintTip": "Документ будет напечатан на последнем выбранном принтере или на принтере по умолчанию",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtRunMacros": "Включить все",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtRunMacrosDesc": "Включить все макросы без уведомления",
 | 
			
		||||
  "PE.Views.FileMenuPanels.Settings.txtSpellCheck": "Проверка орфографии",
 | 
			
		||||
| 
						 | 
				
			
			@ -1846,6 +1857,18 @@
 | 
			
		|||
  "PE.Views.ParagraphSettingsAdvanced.textTabRight": "По правому краю",
 | 
			
		||||
  "PE.Views.ParagraphSettingsAdvanced.textTitle": "Абзац - дополнительные параметры",
 | 
			
		||||
  "PE.Views.ParagraphSettingsAdvanced.txtAutoText": "Авто",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtAllPages": "Все слайды",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtCurrentPage": "Текущий слайд",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtCustomPages": "Настраиваемая печать",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtEmptyTable": "Нечего печатать, так как презентация пустая",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtOf": "из {0}",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPage": "Слайд",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPageNumInvalid": "Неправильный номер слайда",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPages": "Слайды",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPaperSize": "Размер бумаги",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPrint": "Печать",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPrintPdf": "Печать в PDF",
 | 
			
		||||
  "PE.Views.PrintWithPreview.txtPrintRange": "Диапазон печати",
 | 
			
		||||
  "PE.Views.RightMenu.txtChartSettings": "Параметры диаграммы",
 | 
			
		||||
  "PE.Views.RightMenu.txtImageSettings": "Параметры изображения",
 | 
			
		||||
  "PE.Views.RightMenu.txtParagraphSettings": "Параметры абзаца",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -519,6 +519,128 @@
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #panel-print {
 | 
			
		||||
            padding: 0;
 | 
			
		||||
            #print-preview-empty {
 | 
			
		||||
                padding: 14px;
 | 
			
		||||
                color: @text-tertiary-ie;
 | 
			
		||||
                color: @text-tertiary;
 | 
			
		||||
 | 
			
		||||
                position: absolute;
 | 
			
		||||
                left: 280px;
 | 
			
		||||
                top: 0;
 | 
			
		||||
                right: 0;
 | 
			
		||||
                bottom: 0;
 | 
			
		||||
                display: flex;
 | 
			
		||||
                justify-content: center;
 | 
			
		||||
                align-items: center;
 | 
			
		||||
 | 
			
		||||
                div {
 | 
			
		||||
                    text-align: center;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #id-print-settings {
 | 
			
		||||
                position: absolute;
 | 
			
		||||
                width:280px;
 | 
			
		||||
                top: 0;
 | 
			
		||||
                bottom: 0;
 | 
			
		||||
            }
 | 
			
		||||
            .print-settings {
 | 
			
		||||
                width: 100%;
 | 
			
		||||
                height: 100%;
 | 
			
		||||
                overflow: hidden;
 | 
			
		||||
                display: flex;
 | 
			
		||||
                flex-direction: column;
 | 
			
		||||
                border-right: @scaled-one-px-value-ie solid @border-toolbar-ie;
 | 
			
		||||
                border-right: @scaled-one-px-value solid @border-toolbar;
 | 
			
		||||
                label.header {
 | 
			
		||||
                    font-weight: 700;
 | 
			
		||||
                }
 | 
			
		||||
                .footer {
 | 
			
		||||
                    .btn.primary {
 | 
			
		||||
                        margin-right: 8px;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                .settings-container {
 | 
			
		||||
                    width: 100%;
 | 
			
		||||
                    height: 100%;
 | 
			
		||||
                    overflow: hidden;
 | 
			
		||||
                    padding: 12px 16px;
 | 
			
		||||
                    .padding-small {
 | 
			
		||||
                        padding-bottom: 8px;
 | 
			
		||||
                    }
 | 
			
		||||
                    .padding-large {
 | 
			
		||||
                        padding-bottom: 16px;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    #print-apply-all {
 | 
			
		||||
                        margin-top: 5px;
 | 
			
		||||
                    }
 | 
			
		||||
                    .link {
 | 
			
		||||
                        margin-top: 9px;
 | 
			
		||||
                    }
 | 
			
		||||
                    .footer {
 | 
			
		||||
                        margin-top: 24px;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #print-navigation {
 | 
			
		||||
                height: 50px;
 | 
			
		||||
                padding-left: 20px;
 | 
			
		||||
                padding-top: 10px;
 | 
			
		||||
                display: flex;
 | 
			
		||||
                .btn-prev-page, .btn-next-page {
 | 
			
		||||
                    background-color: transparent;
 | 
			
		||||
                    padding: 0;
 | 
			
		||||
                    height: 20px;
 | 
			
		||||
                    width: 20px;
 | 
			
		||||
                    i.arrow {
 | 
			
		||||
                        display: inline-block;
 | 
			
		||||
                        width: 10px;
 | 
			
		||||
                        height: 10px;
 | 
			
		||||
 | 
			
		||||
                        border: solid @scaled-one-px-value-ie @icon-normal-ie;
 | 
			
		||||
                        border: solid @scaled-one-px-value @icon-normal;
 | 
			
		||||
                        border-bottom: none;
 | 
			
		||||
                        border-right: none;
 | 
			
		||||
                    }
 | 
			
		||||
                    &.disabled {
 | 
			
		||||
                        opacity: @component-disabled-opacity;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    &:hover:not(:disabled):not(.disabled) {
 | 
			
		||||
                        background-color: @highlight-button-hover-ie;
 | 
			
		||||
                        background-color: @highlight-button-hover;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                .btn-prev-page {
 | 
			
		||||
                    i {
 | 
			
		||||
                        transform: rotate(-45deg) translate(-1px, 3px);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                .btn-next-page {
 | 
			
		||||
                    i {
 | 
			
		||||
                        transform: rotate(135deg) translate(4px, 0px);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                .page-number {
 | 
			
		||||
                    display: flex;
 | 
			
		||||
                    align-items: center;
 | 
			
		||||
                    height: 20px;
 | 
			
		||||
                    margin-left: 10px;
 | 
			
		||||
                    label {
 | 
			
		||||
                        .font-weight-bold();
 | 
			
		||||
                    }
 | 
			
		||||
                    #print-count-page, #print-number-page {
 | 
			
		||||
                        margin-left: 4px;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            #print-preview {
 | 
			
		||||
                height: calc(100% - 50px);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1290,7 +1290,9 @@ define([
 | 
			
		|||
                                                 (this.editorConfig.canRequestEditRights || this.editorConfig.mode !== 'view'); // if mode=="view" -> canRequestEditRights must be defined
 | 
			
		||||
                this.appOptions.isEdit         = (this.appOptions.canLicense || this.appOptions.isEditDiagram || this.appOptions.isEditMailMerge || this.appOptions.isEditOle) && this.permissions.edit !== false && this.editorConfig.mode !== 'view';
 | 
			
		||||
                this.appOptions.canDownload    = (this.permissions.download !== false);
 | 
			
		||||
                this.appOptions.canPrint       = (this.permissions.print !== false);
 | 
			
		||||
                this.appOptions.canPrint       = (this.permissions.print !== false) && !(this.appOptions.isEditDiagram || this.appOptions.isEditMailMerge || this.appOptions.isEditOle);
 | 
			
		||||
                this.appOptions.canQuickPrint = this.appOptions.canPrint && !Common.Utils.isMac && this.appOptions.isDesktopApp &&
 | 
			
		||||
                                                !(this.editorConfig.customization && this.editorConfig.customization.compactHeader);
 | 
			
		||||
                this.appOptions.canForcesave   = this.appOptions.isEdit && !this.appOptions.isOffline && !(this.appOptions.isEditDiagram || this.appOptions.isEditMailMerge || this.appOptions.isEditOle) &&
 | 
			
		||||
                                                (typeof (this.editorConfig.customization) == 'object' && !!this.editorConfig.customization.forcesave);
 | 
			
		||||
                this.appOptions.forcesave      = this.appOptions.canForcesave;
 | 
			
		||||
| 
						 | 
				
			
			@ -2873,6 +2875,39 @@ define([
 | 
			
		|||
                if (url) this.iframePrint.src = url;
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            onPrintQuick: function() {
 | 
			
		||||
                if (!this.appOptions.canQuickPrint) return;
 | 
			
		||||
 | 
			
		||||
                var value = Common.localStorage.getBool("sse-hide-quick-print-warning"),
 | 
			
		||||
                    me = this,
 | 
			
		||||
                    handler = function () {
 | 
			
		||||
                        var printopt = new Asc.asc_CAdjustPrint();
 | 
			
		||||
                        printopt.asc_setNativeOptions({quickPrint: true});
 | 
			
		||||
                        var opts = new Asc.asc_CDownloadOptions();
 | 
			
		||||
                        opts.asc_setAdvancedOptions(printopt);
 | 
			
		||||
                        me.api.asc_Print(opts);
 | 
			
		||||
                        Common.component.Analytics.trackEvent('Print');
 | 
			
		||||
                    };
 | 
			
		||||
 | 
			
		||||
                if (value) {
 | 
			
		||||
                    handler.call(this);
 | 
			
		||||
                } else {
 | 
			
		||||
                    Common.UI.warning({
 | 
			
		||||
                        msg: this.textTryQuickPrint,
 | 
			
		||||
                        buttons: ['yes', 'no'],
 | 
			
		||||
                        primary: 'yes',
 | 
			
		||||
                        dontshow: true,
 | 
			
		||||
                        maxwidth: 500,
 | 
			
		||||
                        callback: function(btn, dontshow){
 | 
			
		||||
                            dontshow && Common.localStorage.setBool("sse-hide-quick-print-warning", true);
 | 
			
		||||
                            if (btn === 'yes') {
 | 
			
		||||
                                setTimeout(handler, 1);
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            warningDocumentIsLocked: function() {
 | 
			
		||||
                var me = this;
 | 
			
		||||
                Common.Utils.warningDocumentIsLocked({
 | 
			
		||||
| 
						 | 
				
			
			@ -3653,7 +3688,8 @@ define([
 | 
			
		|||
            textRememberMacros: 'Remember my choice for all macros',
 | 
			
		||||
            confirmMaxChangesSize: 'The size of actions exceeds the limitation set for your server.<br>Press "Undo" to cancel your last action or press "Continue" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).',
 | 
			
		||||
            textUndo: 'Undo',
 | 
			
		||||
            textContinue: 'Continue'
 | 
			
		||||
            textContinue: 'Continue',
 | 
			
		||||
            textTryQuickPrint: 'You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?'
 | 
			
		||||
        }
 | 
			
		||||
    })(), SSE.Controllers.Main || {}))
 | 
			
		||||
});
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -424,6 +424,7 @@ define([
 | 
			
		|||
                this.printSettings.applySettings();
 | 
			
		||||
 | 
			
		||||
                if (print) {
 | 
			
		||||
                    var view = SSE.getController('Toolbar').getView('Toolbar');
 | 
			
		||||
                    var printType = this.printSettings.getRange();
 | 
			
		||||
                    this.adjPrintParams.asc_setPrintType(printType);
 | 
			
		||||
                    this.adjPrintParams.asc_setPageOptionsMap(this._changedProps);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -99,6 +99,10 @@ define([
 | 
			
		|||
                        var _main = this.getApplication().getController('Main');
 | 
			
		||||
                        _main.onPrint();
 | 
			
		||||
                    },
 | 
			
		||||
                    'print-quick': function (opts) {
 | 
			
		||||
                        var _main = this.getApplication().getController('Main');
 | 
			
		||||
                        _main.onPrintQuick();
 | 
			
		||||
                    },
 | 
			
		||||
                    'save': function (opts) {
 | 
			
		||||
                        this.api.asc_Save();
 | 
			
		||||
                    },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -70,7 +70,8 @@ define([
 | 
			
		|||
            this.addListeners({
 | 
			
		||||
                'FileMenu': {
 | 
			
		||||
                    'menu:hide': me.onFileMenu.bind(me, 'hide'),
 | 
			
		||||
                    'menu:show': me.onFileMenu.bind(me, 'show')
 | 
			
		||||
                    'menu:show': me.onFileMenu.bind(me, 'show'),
 | 
			
		||||
                    'settings:apply': me.applySettings.bind(me)
 | 
			
		||||
                },
 | 
			
		||||
                'Statusbar': {
 | 
			
		||||
                    'view:compact': function (statusbar, state) {
 | 
			
		||||
| 
						 | 
				
			
			@ -89,6 +90,10 @@ define([
 | 
			
		|||
                        if ( me.appConfig && me.appConfig.isEdit && !(config.customization && config.customization.compactHeader) && toolbar.btnCollabChanges )
 | 
			
		||||
                            toolbar.btnCollabChanges = me.header.btnSave;
 | 
			
		||||
 | 
			
		||||
                        var value = Common.localStorage.getBool("sse-settings-quick-print-button", true);
 | 
			
		||||
                        Common.Utils.InternalSettings.set("sse-settings-quick-print-button", value);
 | 
			
		||||
                        if (me.header && me.header.btnPrintQuick)
 | 
			
		||||
                            me.header.btnPrintQuick[value ? 'show' : 'hide']();
 | 
			
		||||
                    },
 | 
			
		||||
                    'view:compact'  : function (toolbar, state) {
 | 
			
		||||
                        me.viewport.vlayout.getItem('toolbar').height = state ?
 | 
			
		||||
| 
						 | 
				
			
			@ -111,6 +116,8 @@ define([
 | 
			
		|||
                    'print:disabled' : function (state) {
 | 
			
		||||
                        if ( me.header.btnPrint )
 | 
			
		||||
                            me.header.btnPrint.setDisabled(state);
 | 
			
		||||
                        if ( me.header.btnPrintQuick )
 | 
			
		||||
                            me.header.btnPrintQuick.setDisabled(state);
 | 
			
		||||
                    },
 | 
			
		||||
                    'save:disabled' : function (state) {
 | 
			
		||||
                        if ( me.header.btnSave )
 | 
			
		||||
| 
						 | 
				
			
			@ -285,6 +292,13 @@ define([
 | 
			
		|||
            me.header.lockHeaderBtns( 'users', _need_disable );
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        applySettings: function () {
 | 
			
		||||
            var value = Common.localStorage.getBool("sse-settings-quick-print-button", true);
 | 
			
		||||
            Common.Utils.InternalSettings.set("sse-settings-quick-print-button", value);
 | 
			
		||||
            if (this.header && this.header.btnPrintQuick)
 | 
			
		||||
                this.header.btnPrintQuick[value ? 'show' : 'hide']();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        onApiCoAuthoringDisconnect: function(enableDownload) {
 | 
			
		||||
            if (this.header) {
 | 
			
		||||
                if (this.header.btnDownload && !enableDownload)
 | 
			
		||||
| 
						 | 
				
			
			@ -293,6 +307,8 @@ define([
 | 
			
		|||
                    this.header.btnPrint.hide();
 | 
			
		||||
                if (this.header.btnEdit)
 | 
			
		||||
                    this.header.btnEdit.hide();
 | 
			
		||||
                if (this.header.btnPrintQuick && !enableDownload)
 | 
			
		||||
                    this.header.btnPrintQuick.hide();
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -244,6 +244,12 @@ define([
 | 
			
		|||
                '<tr>',
 | 
			
		||||
                    '<td colspan="2"><div id="fms-chb-use-alt-key"></div></td>',
 | 
			
		||||
                '</tr>',
 | 
			
		||||
                '<tr class="quick-print">',
 | 
			
		||||
                    '<td colspan="2"><div style="display: flex;"><div id="fms-chb-quick-print"></div>',
 | 
			
		||||
                        '<span style ="display: flex; flex-direction: column;"><label><%= scope.txtQuickPrint %></label>',
 | 
			
		||||
                        '<label class="comment-text"><%= scope.txtQuickPrintTip %></label></span></div>',
 | 
			
		||||
                    '</td>',
 | 
			
		||||
                '</tr>',
 | 
			
		||||
                '<tr class="themes">',
 | 
			
		||||
                    '<td><label><%= scope.strTheme %></label></td>',
 | 
			
		||||
                    '<td><span id="fms-cmb-theme"></span></td>',
 | 
			
		||||
| 
						 | 
				
			
			@ -718,6 +724,17 @@ define([
 | 
			
		|||
                })).on('click', _.bind(me.applySettings, me));
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.chQuickPrint = new Common.UI.CheckBox({
 | 
			
		||||
                el: $markup.findById('#fms-chb-quick-print'),
 | 
			
		||||
                labelText: '',
 | 
			
		||||
                dataHint: '2',
 | 
			
		||||
                dataHintDirection: 'left',
 | 
			
		||||
                dataHintOffset: 'small'
 | 
			
		||||
            });
 | 
			
		||||
            this.chQuickPrint.$el.parent().on('click', function (){
 | 
			
		||||
                me.chQuickPrint.setValue(!me.chQuickPrint.isChecked());
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.pnlSettings = $markup.find('.flex-settings').addBack().filter('.flex-settings');
 | 
			
		||||
            this.pnlApply = $markup.find('.fms-flex-apply').addBack().filter('.fms-flex-apply');
 | 
			
		||||
            this.pnlTable = this.pnlSettings.find('table');
 | 
			
		||||
| 
						 | 
				
			
			@ -782,6 +799,7 @@ define([
 | 
			
		|||
            $('tr.coauth.changes', this.el)[mode.isEdit && !mode.isOffline && mode.canCoAuthoring && mode.canChangeCoAuthoring ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.live-viewer', this.el)[mode.canLiveView && !mode.isOffline && mode.canChangeCoAuthoring ? 'show' : 'hide']();
 | 
			
		||||
            $('tr.macros', this.el)[(mode.customization && mode.customization.macros===false) ? 'hide' : 'show']();
 | 
			
		||||
            $('tr.quick-print', this.el)[mode.canQuickPrint ? 'show' : 'hide']();
 | 
			
		||||
 | 
			
		||||
            if ( !Common.UI.Themes.available() ) {
 | 
			
		||||
                $('tr.themes, tr.themes + tr.divider', this.el).hide();
 | 
			
		||||
| 
						 | 
				
			
			@ -877,6 +895,7 @@ define([
 | 
			
		|||
            this.cmbMacros.setValue(item ? item.get('value') : 0);
 | 
			
		||||
 | 
			
		||||
            this.chPaste.setValue(Common.Utils.InternalSettings.get("sse-settings-paste-button"));
 | 
			
		||||
            this.chQuickPrint.setValue(Common.Utils.InternalSettings.get("sse-settings-quick-print-button"));
 | 
			
		||||
 | 
			
		||||
            var data = [];
 | 
			
		||||
            for (var t in Common.UI.Themes.map()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -977,6 +996,7 @@ define([
 | 
			
		|||
            Common.Utils.InternalSettings.set("sse-macros-mode", this.cmbMacros.getValue());
 | 
			
		||||
 | 
			
		||||
            Common.localStorage.setItem("sse-settings-paste-button", this.chPaste.isChecked() ? 1 : 0);
 | 
			
		||||
            Common.localStorage.setBool("sse-settings-quick-print-button", this.chQuickPrint.isChecked());
 | 
			
		||||
 | 
			
		||||
            Common.localStorage.save();
 | 
			
		||||
            if (this.menu) {
 | 
			
		||||
| 
						 | 
				
			
			@ -1169,7 +1189,9 @@ define([
 | 
			
		|||
        txtStrictTip: 'Use the \'Save\' button to sync the changes you and others make',
 | 
			
		||||
        strShowOthersChanges: 'Show changes from other users',
 | 
			
		||||
        txtCalculating: 'Calculating',
 | 
			
		||||
        strDateFormat1904: 'Use 1904 date system'
 | 
			
		||||
        strDateFormat1904: 'Use 1904 date system',
 | 
			
		||||
        txtQuickPrint: 'Show the Quick Print button in the editor header',
 | 
			
		||||
        txtQuickPrintTip: 'The document will be printed on the last selected or default printer'
 | 
			
		||||
 | 
			
		||||
}, SSE.Views.FileMenuPanels.MainSettingsGeneral || {}));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2714,7 +2736,8 @@ SSE.Views.FileMenuPanels.RecentFiles = Common.UI.BaseView.extend({
 | 
			
		|||
 | 
			
		||||
        applySettings: function() {
 | 
			
		||||
            if (this.menu) {
 | 
			
		||||
                this.menu.fireEvent('settings:apply', [this.menu]);
 | 
			
		||||
                this.menu.hide();
 | 
			
		||||
                // this.menu.fireEvent('settings:apply', [this.menu]);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,6 +101,8 @@
 | 
			
		|||
  "Common.define.conditionalData.textValue": "Value is",
 | 
			
		||||
  "Common.define.conditionalData.textYesterday": "Yesterday",
 | 
			
		||||
  "Common.Translation.textMoreButton": "More",
 | 
			
		||||
  "Common.Translation.tipFileLocked": "Document is locked for editing. You can make changes and save it as local copy later.",
 | 
			
		||||
  "Common.Translation.tipFileReadOnly": "The file is read-only. To keep your changes, save the file with a new name or in a different location.",
 | 
			
		||||
  "Common.Translation.warnFileLocked": "The file is being edited in another app. You can continue editing and save it as a copy.",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnEdit": "Create a copy",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnView": "Open for viewing",
 | 
			
		||||
| 
						 | 
				
			
			@ -253,6 +255,8 @@
 | 
			
		|||
  "Common.Views.Header.tipViewUsers": "View users and manage document access rights",
 | 
			
		||||
  "Common.Views.Header.txtAccessRights": "Change access rights",
 | 
			
		||||
  "Common.Views.Header.txtRename": "Rename",
 | 
			
		||||
  "Common.Views.Header.tipPrintQuick": "Quick print",
 | 
			
		||||
  "Common.Views.Header.textReadOnly": "Read only",
 | 
			
		||||
  "Common.Views.History.textCloseHistory": "Close History",
 | 
			
		||||
  "Common.Views.History.textHide": "Collapse",
 | 
			
		||||
  "Common.Views.History.textHideAll": "Hide detailed changes",
 | 
			
		||||
| 
						 | 
				
			
			@ -1123,6 +1127,7 @@
 | 
			
		|||
  "SSE.Controllers.Main.confirmMaxChangesSize": "The size of actions exceeds the limitation set for your server.<br>Press \"Undo\" to cancel your last action or press \"Continue\" to keep action locally (you need to download the file or copy its content to make sure nothing is lost).",
 | 
			
		||||
  "SSE.Controllers.Main.textUndo": "Undo",
 | 
			
		||||
  "SSE.Controllers.Main.textContinue": "Continue",
 | 
			
		||||
  "SSE.Controllers.Main.textTryQuickPrint": "You have selected Quick print: the entire document will be printed on the last selected or default printer.<br>Do you want to continue?",
 | 
			
		||||
  "SSE.Controllers.Print.strAllSheets": "All Sheets",
 | 
			
		||||
  "SSE.Controllers.Print.textFirstCol": "First column",
 | 
			
		||||
  "SSE.Controllers.Print.textFirstRow": "First row",
 | 
			
		||||
| 
						 | 
				
			
			@ -2229,6 +2234,8 @@
 | 
			
		|||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWin": "as Windows",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtWorkspace": "Workspace",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtZh": "Chinese",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtQuickPrint": "Show the Quick Print button in the editor header",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtQuickPrintTip": "The document will be printed on the last selected or default printer",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.ProtectDoc.notcriticalErrorTitle": "Warning",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.ProtectDoc.strEncrypt": "With password",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.ProtectDoc.strProtect": "Protect Spreadsheet",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,6 +101,8 @@
 | 
			
		|||
  "Common.define.conditionalData.textValue": "Значение равно",
 | 
			
		||||
  "Common.define.conditionalData.textYesterday": "Вчера",
 | 
			
		||||
  "Common.Translation.textMoreButton": "Ещё",
 | 
			
		||||
  "Common.Translation.tipFileLocked": "Документ заблокирован на редактирование. Вы можете внести изменения и сохранить его как локальную копию позже.",
 | 
			
		||||
  "Common.Translation.tipFileReadOnly": "Файл доступен только для чтения. Чтобы сохранить изменения, сохраните файл с новым названием или в другом месте.",
 | 
			
		||||
  "Common.Translation.warnFileLocked": "Файл редактируется в другом приложении. Вы можете продолжить редактирование и сохранить его как копию.",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnEdit": "Создать копию",
 | 
			
		||||
  "Common.Translation.warnFileLockedBtnView": "Открыть на просмотр",
 | 
			
		||||
| 
						 | 
				
			
			@ -232,6 +234,7 @@
 | 
			
		|||
  "Common.Views.Header.textCompactView": "Скрыть панель инструментов",
 | 
			
		||||
  "Common.Views.Header.textHideLines": "Скрыть линейки",
 | 
			
		||||
  "Common.Views.Header.textHideStatusBar": "Объединить строки листов и состояния",
 | 
			
		||||
  "Common.Views.Header.textReadOnly": "Только чтение",
 | 
			
		||||
  "Common.Views.Header.textRemoveFavorite": "Удалить из избранного",
 | 
			
		||||
  "Common.Views.Header.textSaveBegin": "Сохранение...",
 | 
			
		||||
  "Common.Views.Header.textSaveChanged": "Изменен",
 | 
			
		||||
| 
						 | 
				
			
			@ -243,6 +246,7 @@
 | 
			
		|||
  "Common.Views.Header.tipDownload": "Скачать файл",
 | 
			
		||||
  "Common.Views.Header.tipGoEdit": "Редактировать текущий файл",
 | 
			
		||||
  "Common.Views.Header.tipPrint": "Напечатать файл",
 | 
			
		||||
  "Common.Views.Header.tipPrintQuick": "Быстрая печать",
 | 
			
		||||
  "Common.Views.Header.tipRedo": "Повторить",
 | 
			
		||||
  "Common.Views.Header.tipSave": "Сохранить",
 | 
			
		||||
  "Common.Views.Header.tipSearch": "Поиск",
 | 
			
		||||
| 
						 | 
				
			
			@ -521,8 +525,8 @@
 | 
			
		|||
  "SSE.Controllers.DocumentHolder.textChangeColumnWidth": "Ширина столбца {0} символов ({1} пикселей)",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textChangeRowHeight": "Высота строки {0} пунктов ({1} пикселей)",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textCtrlClick": "Щелкните по ссылке, чтобы открыть ее, или щелкните и удерживайте кнопку мыши, чтобы выделить ячейку.",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textInsertLeft": "Добавить слева",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textInsertTop": "Добавить сверху",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textInsertLeft": "Добавить столбец слева",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textInsertTop": "Добавить строку сверху",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textPasteSpecial": "Специальная вставка",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textStopExpand": "Не развертывать таблицы автоматически",
 | 
			
		||||
  "SSE.Controllers.DocumentHolder.textSym": "симв",
 | 
			
		||||
| 
						 | 
				
			
			@ -823,6 +827,7 @@
 | 
			
		|||
  "SSE.Controllers.Main.textCloseTip": "Щелкните, чтобы закрыть эту подсказку",
 | 
			
		||||
  "SSE.Controllers.Main.textConfirm": "Подтверждение",
 | 
			
		||||
  "SSE.Controllers.Main.textContactUs": "Связаться с отделом продаж",
 | 
			
		||||
  "SSE.Controllers.Main.textContinue": "Продолжить",
 | 
			
		||||
  "SSE.Controllers.Main.textConvertEquation": "Это уравнение создано в старой версии редактора уравнений, которая больше не поддерживается. Чтобы изменить это уравнение, его необходимо преобразовать в формат Office Math ML.<br>Преобразовать сейчас?",
 | 
			
		||||
  "SSE.Controllers.Main.textCustomLoader": "Обратите внимание, что по условиям лицензии у вас нет прав изменять экран, отображаемый при загрузке.<br>Пожалуйста, обратитесь в наш отдел продаж, чтобы сделать запрос.",
 | 
			
		||||
  "SSE.Controllers.Main.textDisconnect": "Соединение потеряно",
 | 
			
		||||
| 
						 | 
				
			
			@ -849,8 +854,10 @@
 | 
			
		|||
  "SSE.Controllers.Main.textRequestMacros": "Макрос делает запрос на URL. Вы хотите разрешить запрос на %1?",
 | 
			
		||||
  "SSE.Controllers.Main.textShape": "Фигура",
 | 
			
		||||
  "SSE.Controllers.Main.textStrict": "Строгий режим",
 | 
			
		||||
  "SSE.Controllers.Main.textTryQuickPrint": "Вы выбрали быструю печать: весь документ будет напечатан на последнем выбранном принтере или на принтере по умолчанию.<br>Вы хотите продолжить?",
 | 
			
		||||
  "SSE.Controllers.Main.textTryUndoRedo": "Функции отмены и повтора действий отключены в Быстром режиме совместного редактирования.<br>Нажмите на кнопку 'Строгий режим' для переключения в Строгий режим совместного редактирования, чтобы редактировать файл без вмешательства других пользователей и отправлять изменения только после того, как вы их сохраните. Переключаться между режимами совместного редактирования можно с помощью Дополнительных параметров редактора.",
 | 
			
		||||
  "SSE.Controllers.Main.textTryUndoRedoWarn": "Функции отмены и повтора действий отключены в Быстром режиме совместного редактирования.",
 | 
			
		||||
  "SSE.Controllers.Main.textUndo": "Отменить",
 | 
			
		||||
  "SSE.Controllers.Main.textYes": "Да",
 | 
			
		||||
  "SSE.Controllers.Main.titleLicenseExp": "Истек срок действия лицензии",
 | 
			
		||||
  "SSE.Controllers.Main.titleServerVersion": "Редактор обновлен",
 | 
			
		||||
| 
						 | 
				
			
			@ -2205,6 +2212,8 @@
 | 
			
		|||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPt": "Пункт",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPtbr": "Португальский (Бразилия)",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtPtlang": "Португальский (Португалия)",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtQuickPrint": "Показывать кнопку Быстрая печать в шапке редактора",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtQuickPrintTip": "Документ будет напечатан на последнем выбранном принтере или на принтере по умолчанию",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRegion": "Регион",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRo": "Румынский",
 | 
			
		||||
  "SSE.Views.FileMenuPanels.MainSettingsGeneral.txtRu": "Русский",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||