JAVASCRIPT   142

panel-tab.js

Guest on 9th September 2021 04:39:11 PM

  1. module.exports = Marionette.CompositeView.extend( {
  2.         id: 'elementor-panel-revisions',
  3.  
  4.         template: '#tmpl-elementor-panel-revisions',
  5.  
  6.         childView: require( './view' ),
  7.  
  8.         childViewContainer: '#elementor-revisions-list',
  9.  
  10.         ui: {
  11.                 discard: '.elementor-panel-scheme-discard .elementor-button',
  12.                 apply: '.elementor-panel-scheme-save .elementor-button',
  13.         },
  14.  
  15.         events: {
  16.                 'click @ui.discard': 'onDiscardClick',
  17.                 'click @ui.apply': 'onApplyClick',
  18.         },
  19.  
  20.         isRevisionApplied: false,
  21.  
  22.         jqueryXhr: null,
  23.  
  24.         currentPreviewId: null,
  25.  
  26.         currentPreviewItem: null,
  27.  
  28.         initialize: function() {
  29.                 this.listenTo( elementor.channels.editor, 'saved', this.onEditorSaved );
  30.                 this.currentPreviewId = elementor.config.current_revision_id;
  31.         },
  32.  
  33.         getRevisionViewData: function( revisionView ) {
  34.                 var self = this;
  35.  
  36.                 this.jqueryXhr = elementor.history.revisions.getRevisionDataAsync( revisionView.model.get( 'id' ), {
  37.                         success: function( data ) {
  38.                                 elementor.history.revisions.setEditorData( data.elements );
  39.                                 elementor.settings.page.model.set( data.settings );
  40.  
  41.                                 self.setRevisionsButtonsActive( true );
  42.  
  43.                                 self.jqueryXhr = null;
  44.  
  45.                                 revisionView.$el.removeClass( 'elementor-revision-item-loading' );
  46.  
  47.                                 self.enterReviewMode();
  48.                         },
  49.                         error: function() {
  50.                                 revisionView.$el.removeClass( 'elementor-revision-item-loading' );
  51.  
  52.                                 if ( 'abort' === self.jqueryXhr.statusText ) {
  53.                                         return;
  54.                                 }
  55.  
  56.                                 self.currentPreviewItem = null;
  57.  
  58.                                 self.currentPreviewId = null;
  59.  
  60.                                 alert( 'An error occurred' );
  61.                         },
  62.                 } );
  63.         },
  64.  
  65.         setRevisionsButtonsActive: function( active ) {
  66.                 this.ui.apply.add( this.ui.discard ).prop( 'disabled', ! active );
  67.         },
  68.  
  69.         deleteRevision: function( revisionView ) {
  70.                 var self = this;
  71.  
  72.                 revisionView.$el.addClass( 'elementor-revision-item-loading' );
  73.  
  74.                 elementor.history.revisions.deleteRevision( revisionView.model, {
  75.                         success: function() {
  76.                                 if ( revisionView.model.get( 'id' ) === self.currentPreviewId ) {
  77.                                         self.onDiscardClick();
  78.                                 }
  79.  
  80.                                 self.currentPreviewId = null;
  81.                         },
  82.                         error: function() {
  83.                                 revisionView.$el.removeClass( 'elementor-revision-item-loading' );
  84.  
  85.                                 alert( 'An error occurred' );
  86.                         },
  87.                 } );
  88.         },
  89.  
  90.         enterReviewMode: function() {
  91.                 elementor.changeEditMode( 'review' );
  92.         },
  93.  
  94.         exitReviewMode: function() {
  95.                 elementor.changeEditMode( 'edit' );
  96.         },
  97.  
  98.         navigate: function( reverse ) {
  99.                 var currentPreviewItemIndex = this.collection.indexOf( this.currentPreviewItem.model ),
  100.                         requiredIndex = reverse ? currentPreviewItemIndex - 1 : currentPreviewItemIndex + 1;
  101.  
  102.                 if ( requiredIndex < 0 ) {
  103.                         requiredIndex = this.collection.length - 1;
  104.                 }
  105.  
  106.                 if ( requiredIndex >= this.collection.length ) {
  107.                         requiredIndex = 0;
  108.                 }
  109.  
  110.                 this.children.findByIndex( requiredIndex ).ui.detailsArea.trigger( 'click' );
  111.         },
  112.  
  113.         onEditorSaved: function() {
  114.                 this.exitReviewMode();
  115.  
  116.                 this.setRevisionsButtonsActive( false );
  117.  
  118.                 this.currentPreviewId = elementor.config.current_revision_id;
  119.         },
  120.  
  121.         onApplyClick: function() {
  122.                 elementor.saver.setFlagEditorChange( true );
  123.  
  124.                 elementor.saver.saveAutoSave();
  125.  
  126.                 this.isRevisionApplied = true;
  127.  
  128.                 this.currentPreviewId = null;
  129.  
  130.                 elementor.history.history.getItems().reset();
  131.         },
  132.  
  133.         onDiscardClick: function() {
  134.                 elementor.history.revisions.setEditorData( elementor.config.data );
  135.  
  136.                 elementor.saver.setFlagEditorChange( this.isRevisionApplied );
  137.  
  138.                 this.isRevisionApplied = false;
  139.  
  140.                 this.setRevisionsButtonsActive( false );
  141.  
  142.                 this.currentPreviewId = null;
  143.  
  144.                 this.exitReviewMode();
  145.  
  146.                 if ( this.currentPreviewItem ) {
  147.                         this.currentPreviewItem.$el.removeClass( 'elementor-revision-current-preview' );
  148.                 }
  149.         },
  150.  
  151.         onDestroy: function() {
  152.                 if ( this.currentPreviewId && this.currentPreviewId !== elementor.config.current_revision_id ) {
  153.                         this.onDiscardClick();
  154.                 }
  155.         },
  156.  
  157.         onRenderCollection: function() {
  158.                 if ( ! this.currentPreviewId ) {
  159.                         return;
  160.                 }
  161.  
  162.                 var currentPreviewModel = this.collection.findWhere( { id: this.currentPreviewId } );
  163.  
  164.                 // Ensure the model is exist and not deleted during a save.
  165.                 if ( currentPreviewModel ) {
  166.                         this.currentPreviewItem = this.children.findByModelCid( currentPreviewModel.cid );
  167.                         this.currentPreviewItem.$el.addClass( 'elementor-revision-current-preview' );
  168.                 }
  169.         },
  170.  
  171.         onChildviewDetailsAreaClick: function( childView ) {
  172.                 var self = this,
  173.                         revisionID = childView.model.get( 'id' );
  174.  
  175.                 if ( revisionID === self.currentPreviewId ) {
  176.                         return;
  177.                 }
  178.  
  179.                 if ( this.jqueryXhr ) {
  180.                         this.jqueryXhr.abort();
  181.                 }
  182.  
  183.                 if ( self.currentPreviewItem ) {
  184.                         self.currentPreviewItem.$el.removeClass( 'elementor-revision-current-preview' );
  185.                 }
  186.  
  187.                 childView.$el.addClass( 'elementor-revision-current-preview elementor-revision-item-loading' );
  188.  
  189.                 if ( elementor.saver.isEditorChanged() && null === self.currentPreviewId ) {
  190.                         elementor.saver.saveEditor( {
  191.                                 status: 'autosave',
  192.                                 onSuccess: function() {
  193.                                         self.getRevisionViewData( childView );
  194.                                 },
  195.                         } );
  196.                 } else {
  197.                         self.getRevisionViewData( childView );
  198.                 }
  199.  
  200.                 self.currentPreviewItem = childView;
  201.  
  202.                 self.currentPreviewId = revisionID;
  203.         },
  204.  
  205.         onChildviewDeleteClick: function( childView ) {
  206.                 var self = this,
  207.                         type = childView.model.get( 'type' );
  208.  
  209.                 var removeDialog = elementor.dialogsManager.createWidget( 'confirm', {
  210.                         message: elementor.translate( 'dialog_confirm_delete', [ type ] ),
  211.                         headerMessage: elementor.translate( 'delete_element', [ type ] ),
  212.                         strings: {
  213.                                 confirm: elementor.translate( 'delete' ),
  214.                                 cancel: elementor.translate( 'cancel' ),
  215.                         },
  216.                         defaultOption: 'confirm',
  217.                         onConfirm: function() {
  218.                                 self.deleteRevision( childView );
  219.                         },
  220.                 } );
  221.  
  222.                 removeDialog.show();
  223.         },
  224. } );

Raw Paste


Login or Register to edit or fork this paste. It's free.