{"size": 6375, "ext": "js", "max_stars_repo_path": "node_modules/sbis3-ws/WS.Deprecated/Controls/PrintDialog/PrintDialog.js", "max_stars_repo_name": "nikitabelotelov/coffee", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": "node_modules/sbis3-ws/WS.Deprecated/Controls/PrintDialog/PrintDialog.js", "max_issues_repo_name": "nikitabelotelov/coffee", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "node_modules/sbis3-ws/WS.Deprecated/Controls/PrintDialog/PrintDialog.js", "max_forks_repo_name": "nikitabelotelov/coffee", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": null, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 37.0639534884, "max_line_length": 204, "alphanum_fraction": 0.6105098039}
/**
 * Модуль "Компонент PrintDialog".
 * @description
 */
define('Deprecated/Controls/PrintDialog/PrintDialog', [
   'Lib/Control/LoadingIndicator/LoadingIndicator',
   'Browser/Storage',
   'Core/Deferred',
   'Core/CommandDispatcher',
   'Env/Env',
   'Lib/Control/Dialog/Dialog',
   'Lib/Control/CompoundControl/CompoundControl',
   'html!Deprecated/Controls/PrintDialog/PrintDialogInner',
   'i18n!Deprecated/Controls/PrintDialog/PrintDialog',
   'css!Deprecated/Controls/PrintDialog/PrintDialogInner',
   'Deprecated/Controls/CloseButton/CloseButton',
   'Deprecated/Controls/Button/Button',
   'Lib/Control/HTMLView/HTMLView'
], function(
   LoadingIndicator,
   Storage,
   cDeferred,
   CommandDispatcher,
   Env,
   Dialog,
   CompoundControl,
   PrintDialogInnerTpl
) {
   "use strict";

   var autoTestsConfig = Storage.SessionStorage.get('autoTestConfig');
   var needShowReportDialog = !Env.constants.browser.chrome || autoTestsConfig && autoTestsConfig.showPrintReportForTests;

   var PrintDialogInner = CompoundControl.extend({
      _dotTplFn: PrintDialogInnerTpl,
      $protected: {
         _options: {
            autoHeight: true,
            autoWidth: true,
            minWidth: 398,
            minHeight : 384
         }
      }
   });

   /**
    * @class Deprecated/Controls/PrintDialog/PrintDialog
    * @extends Lib/Control/Dialog/Dialog
    * @author Крайнов Д.О.
    * @public
    * @deprecated
    */
   var PrintDialog = Dialog.extend(/** @lends Deprecated/Controls/PrintDialog/PrintDialog.prototype */{
      $protected: {
         _options: {
            caption: rk('Предварительный просмотр'),
            disableActions: true,
            isRelativeTemplate: true,
            resizable: false,
            autoHeight: true,
            autoWidth: true,
            visible: false,
            maximizedVertical: false, //Опция для отображение печати при содержимом контейнера c height:100% Подробности: https://online.sbis.ru/opendoc.html?guid=9af1894e-e011-4280-a5a0-35efa596c4a2&des=
            // При величине документа в 3 млн. символов производительность браузера сильно ухудшается, возможны падения.
            maxHTMLLength: 3*1000*1000
         },

         _readyDeferred: null
      },

      $constructor: function() {
         this._readyDeferred = new cDeferred();
         if (this._options.maximizedVertical){
            this.getContainer().closest('.ws-window').addClass('ws-printdialog-maximized-vertical');
         }
         CommandDispatcher.declareCommand(this, 'print', function() {
            this._getHtmlView().print();
         });
      },

      _getHtmlView: function() {
         return this.getChildControlByName('ws-dataview-print-report');
      },

      getReadyDeferred: function() {
         return this._readyDeferred.createDependent();
      },

      _templateInnerCallbackBeforeReady: function() {
         PrintDialog.superclass._templateInnerCallbackBeforeReady.apply(this, arguments);

         var
            htmlView = this._getHtmlView(),
            self = this;

         htmlView.once('onContentReady', function(){
            LoadingIndicator.toggleIndicator(false);
            self._readyDeferred.callback();
            if (needShowReportDialog) {
               //Блокируем навигацию по клику на ссылки
               $(htmlView.getIframeDocument()).delegate('a', 'click', function(event) {
                  event.preventDefault();
               });
               self._setMaxIframeHTMLHeight(htmlView);
               self.show();
               self._adjustWindowPosition();
            } else {
               //Если не нужно показывать наш диалог перед печатью, то скроем окно диалога и сразу отправим данные на печать
               //Вешать класс ws-hidden нельзя, иначе в 59 хроме начинаются баги, подробности в ошибке
               //https://online.sbis.ru/opendoc.html?guid=ebadd542-85a6-4b65-bfca-c7487c6a6299
               self.getContainer().css('visibility', 'hidden');
               //Из-за того, что нельзя навесить ws-hidden, нужно сдвинуть окно в левый верхний угол, чтобы оно не растягивало
               //боди и на нем не появлялся скролл
               self._window.css({'top': 0, 'left': 0});
               htmlView.print().addCallback(function () {
                  self._clearDocumentTitle();
                  self.close();
               });
            }
         });

         if (!htmlView.setHTML(this._options.htmlText, this._options.maxHTMLLength)) {
            // Длина документа превысила установленное значение, диалог показан не будет, отменяем печать.
            LoadingIndicator.toggleIndicator(false);
            self._readyDeferred.errback(new Error('PrintDialog: Cannot open preview - document is too large!'));
            // Закрываем диалог печати.
            self.close();
         }
      },

      _setMaxIframeHTMLHeight: function(htmlView) {
         if (this._options.maximizedVertical){
            var html = $('html', htmlView.getIframeDocument());
            setTimeout(function() {
               html.css({
                  height: '100%',
                  overflowY: 'auto'
               });
            }, 100);
         }
      },

      _loadControls: function(pdResult, template, parentId, checkDestroyed, errorHandler) {
         var
            cfg = {
               visible: true,
               parent: this,
               element: this.getContainer(),
               linkedContext: this.getLinkedContext()
            },
            innerArea;
         if (this._options.minWidth) {
            cfg.minWidth = this._options.minWidth;
         }
         if (this._options.minHeight) {
            cfg.minHeight = this._options.minHeight;
         }
         cfg.autoHeight = this._options.autoHeight;
         cfg.autoWidth = this._options.autoWidth;
         //Диалог создается на контейнере, но у диалога нет шаблона. Поэтому контейнер остается пуст.
         //Ранее не было проверки и можно было создавать несколько инстансов в одном контейнере. При этом
         //новый инстанс перетирал свойство wsControl.  Менять старый фнукционал не стали
         //а просто вставили элегантный костыль
         this.getContainer()[0].wsControl = undefined;
         innerArea = new PrintDialogInner(cfg);
         return pdResult.done([innerArea]);
      }
   });

   return PrintDialog;
});
