JAVASCRIPT   96

manager.js

Guest on 9th September 2021 04:29:09 PM

  1. var RevisionsCollection = require( './collection' ),
  2.         RevisionsManager;
  3.  
  4. RevisionsManager = function() {
  5.         var self = this,
  6.                 revisions;
  7.  
  8.         this.getItems = function() {
  9.                 return revisions;
  10.         };
  11.  
  12.         var onEditorSaved = function( data ) {
  13.                 if ( data.latest_revisions ) {
  14.                         self.addRevisions( data.latest_revisions );
  15.                 }
  16.  
  17.                 if ( data.revisions_ids ) {
  18.                         var revisionsToKeep = revisions.filter( function( revision ) {
  19.                                 return -1 !== data.revisions_ids.indexOf( revision.get( 'id' ) );
  20.                         } );
  21.  
  22.                         revisions.reset( revisionsToKeep );
  23.                 }
  24.         };
  25.  
  26.         var attachEvents = function() {
  27.                 elementor.channels.editor.on( 'saved', onEditorSaved );
  28.         };
  29.  
  30.         var addHotKeys = function() {
  31.                 var UP_ARROW_KEY = 38,
  32.                         DOWN_ARROW_KEY = 40;
  33.  
  34.                 var navigationHandler = {
  35.                         isWorthHandling: function() {
  36.                                 var panel = elementor.getPanelView();
  37.  
  38.                                 if ( 'historyPage' !== panel.getCurrentPageName() ) {
  39.                                         return false;
  40.                                 }
  41.  
  42.                                 var revisionsTab = panel.getCurrentPageView().getCurrentTab();
  43.  
  44.                                 return revisionsTab.currentPreviewId && revisionsTab.currentPreviewItem && revisionsTab.children.length > 1;
  45.                         },
  46.                         handle: function( event ) {
  47.                                 elementor.getPanelView().getCurrentPageView().getCurrentTab().navigate( UP_ARROW_KEY === event.which );
  48.                         },
  49.                 };
  50.  
  51.                 elementor.hotKeys.addHotKeyHandler( UP_ARROW_KEY, 'revisionNavigation', navigationHandler );
  52.  
  53.                 elementor.hotKeys.addHotKeyHandler( DOWN_ARROW_KEY, 'revisionNavigation', navigationHandler );
  54.         };
  55.  
  56.         this.setEditorData = function( data ) {
  57.                 var collection = elementor.getRegion( 'sections' ).currentView.collection;
  58.  
  59.                 // Don't track in history.
  60.                 elementor.history.history.setActive( false );
  61.                 collection.reset( data );
  62.                 elementor.history.history.setActive( true );
  63.         };
  64.  
  65.         this.getRevisionDataAsync = function( id, options ) {
  66.                 _.extend( options, {
  67.                         data: {
  68.                                 id: id,
  69.                         },
  70.                 } );
  71.  
  72.                 return elementor.ajax.send( 'get_revision_data', options );
  73.         };
  74.  
  75.         this.addRevisions = function( items ) {
  76.                 items.forEach( function( item ) {
  77.                         var existedModel = revisions.findWhere( {
  78.                                 id: item.id,
  79.                         } );
  80.  
  81.                         if ( existedModel ) {
  82.                                 revisions.remove( existedModel );
  83.                         }
  84.  
  85.                         revisions.add( item );
  86.                 } );
  87.         };
  88.  
  89.         this.deleteRevision = function( revisionModel, options ) {
  90.                 var params = {
  91.                         data: {
  92.                                 id: revisionModel.get( 'id' ),
  93.                         },
  94.                         success: function() {
  95.                                 if ( options.success ) {
  96.                                         options.success();
  97.                                 }
  98.  
  99.                                 revisionModel.destroy();
  100.  
  101.                                 if ( ! revisions.length ) {
  102.                                         var panel = elementor.getPanelView();
  103.                                         if ( 'historyPage' === panel.getCurrentPageName() ) {
  104.                                                 panel.getCurrentPageView().activateTab( 'revisions' );
  105.                                         }
  106.                                 }
  107.                         },
  108.                 };
  109.  
  110.                 if ( options.error ) {
  111.                         params.error = options.error;
  112.                 }
  113.  
  114.                 elementor.ajax.send( 'delete_revision', params );
  115.         };
  116.  
  117.         this.init = function() {
  118.                 revisions = new RevisionsCollection( elementor.config.revisions );
  119.  
  120.                 attachEvents();
  121.  
  122.                 addHotKeys();
  123.         };
  124. };
  125.  
  126. module.exports = new RevisionsManager();

Raw Paste


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