PluginProbe
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more / 2.1
StockPack – Stock photos and AI images from Unsplash, Adobe Stock, Freepik and more v2.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 3.0.0 3.0.1 All 71 releases
stockpack / assets / js / utils / stockpack-register.js

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

131 lines 2.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 export default class StockpackRegister {
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 page: '',
16 },
17 } );
18 this.controller = controller;
19 this.state = new State();
20 this.setStatus( wp.media.view.l10n.stockpack.limit.anonymous.status.initial );
21 this.bindState();
22 this.bindMessages();
23 this.bindUi();
24 }
25
26 bindState() {
27 this.state.on( 'change:page', this.pageChanged, this );
28 }
29
30 bindUi() {
31 this.$.iframe.on( 'load', () => {
32 this.isLoggedIn();
33 } );
34 // if the iframe was already loaded, the above will not fire initially
35 // so we call it
36 this.pollUntilChange();
37 }
38
39 pollUntilChange() {
40 if ( this.state.get( 'page' ) ) {
41 return false;
42 }
43 this.isLoggedIn();
44 setTimeout( () => {
45 this.pollUntilChange();
46 }, 3000 );
47 }
48
49 pageChanged() {
50 const page = this.state.get( 'page' );
51 switch ( page ) {
52 case '/providers':
53 this.setStatus( wp.media.view.l10n.stockpack.limit.anonymous.status.providers );
54 this.getToken();
55 break;
56 case '/login':
57 this.setStatus( wp.media.view.l10n.stockpack.limit.anonymous.status.login );
58 break;
59 case '/register':
60 this.setStatus( wp.media.view.l10n.stockpack.limit.anonymous.status.register );
61 break;
62 default:
63 this.setStatus( wp.media.view.l10n.stockpack.limit.anonymous.status.elsewhere );
64 }
65 }
66
67 setStatus( status ) {
68 this.$.iframeStatus.text( status );
69 }
70
71 sendMessage( message ) {
72 this.iframe.postMessage( JSON.stringify( message ), '*' );
73 }
74
75 getToken() {
76 this.sendMessage( {
77 query: 'getToken',
78 } );
79 }
80
81 receiveToken( token ) {
82 const options = options || {};
83 options.context = this;
84 options.data = _.extend( options.data || {}, {
85 action: 'token-stockpack',
86 security:wp.media.view.settings.stockpack.nonce_token,
87 token,
88 } );
89 wp.media.ajax( options ).done( () => {
90 this.controller.trigger( 'token-updated' );
91 } );
92 }
93
94 isLoggedIn() {
95 this.sendMessage( {
96 query: 'isLoggedIn',
97 } );
98 }
99
100 bindMessages() {
101 window.addEventListener( 'message', ( e ) => {
102 this.receiveMessage( e );
103 } );
104 }
105
106 receiveMessage( event ) {
107 let message = {};
108 try {
109 message = JSON.parse( event.data );
110 } catch ( e ) {
111 // system messages
112 return false;
113 }
114 switch ( message.query ) {
115 case 'isLoggedIn':
116 this.state.set( 'loggedIn', message.value );
117 this.state.set( 'page', message.page );
118 break;
119 case 'getToken':
120 this.receiveToken( message.value );
121 break;
122 }
123 }
124
125 destroy() {
126 if ( this.$.el ) {
127 this.$.el.remove();
128 }
129 }
130 }
131