PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.0
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.0
3.7.2 3.7.1 3.7.0 3.6.0 3.6.1 3.5.2 trunk 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5.0 2.5.1 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.6.0 2.6.1 All 73 releases
stockpack / assets / js / utils / stockpack-upgrade.js

stockpack-upgrade.js in StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more 2.0, at assets/js/utils/stockpack-upgrade.js

166 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 export default class StockpackUpgrade {
2 /**
3 * @param {Object} $element
4 * @param {Object} controller
5 */
6 constructor( $element, controller ) {
7 this.$ = {};
8 this.$.element = $element;
9 this.$.iframe = this.$.element.find( 'iframe' );
10 this.iframe = this.$.iframe[ 0 ].contentWindow;
11 this.$.iframeStatus = this.$.element.find( '.iframe-status' );
12 const State = Backbone.Model.extend( {
13 defaults: {
14 loggedIn: false,
15 upgraded: false,
16 page: '',
17 },
18 } );
19 this.controller = controller;
20 this.state = new State();
21 this.setStatus( wp.media.view.l10n.stockpack.limit.free.status.initial );
22 this.bindState();
23 this.bindMessages();
24 this.bindUi();
25 }
26
27 bindState() {
28 this.state.on( 'change:page', this.pageChanged, this );
29 }
30
31 bindUi() {
32 this.$.iframe.on( 'load', () => {
33 this.isLoggedIn();
34 } );
35 // if the iframe was already loaded, the above will not fire initially
36 // so we call it
37 this.pollUntilChange();
38 }
39
40 pollUntilChange() {
41 if ( this.state.get( 'page' ) ) {
42 return false;
43 }
44 this.isLoggedIn();
45 setTimeout( () => {
46 this.pollUntilChange();
47 }, 3000 );
48 }
49
50 pollUntilChangeUpgraded() {
51 if ( this.state.get( 'upgraded' ) ) {
52 return false;
53 }
54 if ( this.state.get( 'page' ) !== '/billing' ) {
55 return false;
56 }
57 this.getUpgraded();
58 setTimeout( () => {
59 this.pollUntilChangeUpgraded();
60 }, 3000 );
61 }
62
63 pageChanged() {
64 const page = this.state.get( 'page' );
65 switch ( page ) {
66 case '/billing':
67 this.setStatus( wp.media.view.l10n.stockpack.limit.free.status.billing );
68 this.pollUntilChangeUpgraded();
69 break;
70 case '/login':
71 this.setStatus( wp.media.view.l10n.stockpack.limit.free.status.login );
72 break;
73 case '/register':
74 this.setStatus( wp.media.view.l10n.stockpack.limit.free.status.register );
75 break;
76 case '/providers':
77 this.setStatus( wp.media.view.l10n.stockpack.limit.free.status.providers );
78 this.getToken();
79 break;
80 default:
81 this.setStatus( wp.media.view.l10n.stockpack.limit.free.status.elsewhere );
82 }
83 }
84
85 getToken() {
86 this.sendMessage( {
87 query: 'getToken',
88 } );
89 }
90
91 receiveToken( token ) {
92 const options = options || {};
93 options.context = this;
94 options.data = _.extend( options.data || {}, {
95 action: 'token-stockpack',
96 security:wp.media.view.settings.stockpack.nonce_token,
97 token,
98 } );
99 wp.media.ajax( options ).done( () => {
100 this.controller.trigger( 'account-upgraded' );
101 } );
102 }
103
104 setStatus( status ) {
105 this.$.iframeStatus.text( status );
106 }
107
108 sendMessage( message ) {
109 this.iframe.postMessage( JSON.stringify( message ), '*' );
110 }
111
112 getUpgraded() {
113 this.sendMessage( {
114 query: 'hasUpgraded',
115 } );
116 }
117
118 hasUpgraded( response ) {
119 this.state.set( 'upgraded', response );
120 if ( response ) {
121 this.sendMessage( {
122 query: 'goToProviders',
123 } );
124 this.pollUntilChange();
125 }
126 }
127
128 isLoggedIn() {
129 this.sendMessage( {
130 query: 'isLoggedIn',
131 } );
132 }
133
134 bindMessages() {
135 window.addEventListener( 'message', ( e ) => {
136 this.receiveMessage( e );
137 } );
138 }
139
140 receiveMessage( event ) {
141 let message = {};
142 try {
143 message = JSON.parse( event.data );
144 } catch ( e ) {
145 // system messages
146 return false;
147 }
148 switch ( message.query ) {
149 case 'isLoggedIn':
150 this.state.set( 'loggedIn', message.value );
151 this.state.set( 'page', message.page );
152 break;
153 case 'hasUpgraded':
154 this.hasUpgraded( message.value );
155 break;
156 case 'getToken':
157 this.receiveToken( message.value );
158 break;
159 }
160 }
161
162 destroy() {
163
164 }
165 }
166