| @@ -4,9 +4,9 @@ | ||
| 4 | 4 | * @description: The Give Admin Shortcode scripts. Only enqueued on the admin widgets screen; used to show shortcode dialogs, show/hide, and other functions |
| 5 | 5 | * @package: Give |
| 6 | 6 | * @subpackage: Assets/JS |
| 7 | 7 | * @author: Paul Ryley |
| 8 | - * @copyright: Copyright (c) 2016, WordImpress | |
| 8 | + * @copyright: Copyright (c) 2016, GiveWP | |
| 9 | 9 | * @license: http://opensource.org/licenses/gpl-2.0.php GNU Public License |
| 10 | 10 | * @since: 1.3.0 |
| 11 | 11 | */ |
| 12 | 12 | |
| @@ -11,218 +11,248 @@ | ||
| 11 | 11 | */ |
| 12 | 12 | |
| 13 | 13 | /* global Give, ajaxurl, jQuery, scShortcodes, tinymce */ |
| 14 | 14 | |
| 15 | -var scShortcode, scButton; | |
| 15 | +let scShortcode, scButton; | |
| 16 | 16 | |
| 17 | +jQuery( | |
| 18 | + function( $ ) { | |
| 19 | + const doc = $( this ); | |
| 17 | 20 | |
| 18 | -jQuery( function( $ ) { | |
| 21 | + /** | |
| 22 | + * Show continue button title setting field only if display style is not All Fields. | |
| 23 | + */ | |
| 24 | + window.render_continue_button_title_field = function() { | |
| 25 | + const selected_display_style = $( '.mce-txt', '.mce-give-display-style' ).text(), | |
| 26 | + expected_display_styles = [ '- Select -', 'All Fields' ]; | |
| 19 | 27 | |
| 20 | - let doc = $( this ); | |
| 21 | - | |
| 22 | - /** | |
| 23 | - * Show continue button title setting field only if display style is not All Fields. | |
| 24 | - */ | |
| 25 | - window.render_continue_button_title_field = function() { | |
| 26 | - var selected_display_style = $('.mce-txt', '.mce-give-display-style').text(), | |
| 27 | - expected_display_styles = [ '- Select -', 'All Fields' ]; | |
| 28 | - | |
| 29 | - if( -1 !== $.inArray( selected_display_style, expected_display_styles ) ) { | |
| 30 | - $('.mce-give-continue-button-title').closest('.mce-container' ).hide() | |
| 31 | - } else { | |
| 32 | - $('.mce-give-continue-button-title').closest('.mce-container' ).show() | |
| 33 | - } | |
| 34 | - }; | |
| 35 | - | |
| 36 | - window.scForm = { | |
| 37 | - | |
| 38 | - open: function( editor_id ) { | |
| 39 | - var editor = tinymce.get( editor_id ); | |
| 40 | - | |
| 41 | - if ( ! editor ) { | |
| 42 | - return; | |
| 28 | + if ( -1 !== $.inArray( selected_display_style, expected_display_styles ) ) { | |
| 29 | + $( '.mce-give-continue-button-title' ).closest( '.mce-container' ).hide(); | |
| 30 | + } else { | |
| 31 | + $( '.mce-give-continue-button-title' ).closest( '.mce-container' ).show(); | |
| 43 | 32 | } |
| 33 | + }; | |
| 44 | 34 | |
| 45 | - var data, field, required, valid, win; | |
| 35 | + window.scForm = { | |
| 46 | 36 | |
| 47 | - data = { | |
| 48 | - action : 'give_shortcode', | |
| 49 | - shortcode : scShortcode | |
| 50 | - }; | |
| 37 | + open: function( editor_id ) { | |
| 38 | + const editor = tinymce.get( editor_id ); | |
| 51 | 39 | |
| 52 | - $.post( ajaxurl, data, function( response ) { | |
| 53 | - | |
| 54 | - // what happens if response === false? | |
| 55 | - if ( ! response.body ) { | |
| 56 | - console.error( 'Bad AJAX response!' ); | |
| 40 | + if ( ! editor ) { | |
| 57 | 41 | return; |
| 58 | 42 | } |
| 59 | 43 | |
| 60 | - if ( response.body.length === 0 ) { | |
| 61 | - window.send_to_editor( '[' + response.shortcode + ']' ); | |
| 44 | + let data, field, required, valid, win; | |
| 62 | 45 | |
| 63 | - scForm.destroy(); | |
| 46 | + data = { | |
| 47 | + action: 'give_shortcode', | |
| 48 | + shortcode: scShortcode, | |
| 49 | + }; | |
| 64 | 50 | |
| 65 | - return; | |
| 66 | - } | |
| 51 | + $.post( | |
| 52 | + ajaxurl, | |
| 53 | + data, | |
| 54 | + function( response ) { | |
| 55 | + // what happens if response === false? | |
| 56 | + if ( ! response.body ) { | |
| 57 | + console.error( 'Bad AJAX response!' ); | |
| 58 | + return; | |
| 59 | + } | |
| 67 | 60 | |
| 68 | - /** | |
| 69 | - * Render continue button title setting field on basis of display style value. | |
| 70 | - */ | |
| 71 | - $.each( response.body, function( index, item ){ | |
| 61 | + if ( response.body.length === 0 ) { | |
| 62 | + window.send_to_editor( '[' + response.shortcode + ']' ); | |
| 72 | 63 | |
| 73 | - if( 'display_style' === item.name ) { | |
| 74 | - response.body[index].onselect = function(){ | |
| 75 | - render_continue_button_title_field(); | |
| 76 | - }; | |
| 77 | - } | |
| 78 | - }); | |
| 64 | + scForm.destroy(); | |
| 79 | 65 | |
| 80 | - var popup = { | |
| 81 | - title : response.title, | |
| 82 | - body : response.body, | |
| 83 | - classes: 'sc-popup', | |
| 84 | - minWidth: 320, | |
| 85 | - buttons : [ { | |
| 86 | - text : response.ok, | |
| 87 | - classes : 'primary sc-primary', | |
| 88 | - onclick : function() { | |
| 89 | - // Get the top most window object | |
| 90 | - win = editor.windowManager.getWindows()[0]; | |
| 66 | + return; | |
| 67 | + } | |
| 91 | 68 | |
| 92 | - // Get the shortcode required attributes | |
| 93 | - required = scShortcodes[ scShortcode ]; | |
| 69 | + /** | |
| 70 | + * Render continue button title setting field on basis of display style value. | |
| 71 | + */ | |
| 72 | + $.each( | |
| 73 | + response.body, | |
| 74 | + function( index, item ) { | |
| 75 | + if ( 'display_style' === item.name ) { | |
| 76 | + response.body[ index ].onselect = function() { | |
| 77 | + render_continue_button_title_field(); | |
| 78 | + }; | |
| 79 | + } | |
| 80 | + } | |
| 81 | + ); | |
| 94 | 82 | |
| 95 | - valid = true; | |
| 83 | + const popup = { | |
| 84 | + title: response.title, | |
| 85 | + body: response.body, | |
| 86 | + classes: 'sc-popup', | |
| 87 | + minWidth: 320, | |
| 88 | + buttons: [ { | |
| 89 | + text: response.ok, | |
| 90 | + classes: 'primary sc-primary', | |
| 91 | + onclick: function() { | |
| 92 | + // Get the top most window object | |
| 93 | + win = editor.windowManager.getWindows()[ 0 ]; | |
| 96 | 94 | |
| 97 | - // Do some validation voodoo | |
| 98 | - for ( var id in required ) { | |
| 99 | - if ( required.hasOwnProperty( id ) ) { | |
| 95 | + // Get the shortcode required attributes | |
| 96 | + required = scShortcodes[ scShortcode ]; | |
| 100 | 97 | |
| 101 | - field = win.find( '#' + id )[0]; | |
| 98 | + valid = true; | |
| 102 | 99 | |
| 103 | - if ( typeof field !== 'undefined' && field.state.data.value === '' ) { | |
| 100 | + // Do some validation voodoo | |
| 101 | + for ( const id in required ) { | |
| 102 | + if ( required.hasOwnProperty( id ) ) { | |
| 103 | + field = win.find( '#' + id )[ 0 ]; | |
| 104 | 104 | |
| 105 | - valid = false; | |
| 105 | + if ( typeof field !== 'undefined' && field.state.data.value === '' ) { | |
| 106 | + valid = false; | |
| 106 | 107 | |
| 107 | - new Give.modal.GiveErrorAlert({ | |
| 108 | - modalContent:{ | |
| 109 | - desc: required[ id ], | |
| 110 | - cancelBtnTitle: Give.fn.getGlobalVar('ok'), | |
| 108 | + new Give.modal.GiveErrorAlert( | |
| 109 | + { | |
| 110 | + modalContent: { | |
| 111 | + desc: required[ id ], | |
| 112 | + cancelBtnTitle: Give.fn.getGlobalVar( 'ok' ), | |
| 113 | + }, | |
| 114 | + } | |
| 115 | + ).render(); | |
| 116 | + | |
| 117 | + break; | |
| 111 | 118 | } |
| 112 | - }).render(); | |
| 119 | + } | |
| 120 | + } | |
| 113 | 121 | |
| 114 | - break; | |
| 122 | + if ( valid ) { | |
| 123 | + win.submit(); | |
| 115 | 124 | } |
| 125 | + }, | |
| 126 | + }, | |
| 127 | + { | |
| 128 | + text: response.close, | |
| 129 | + onclick: 'close', | |
| 130 | + } ], | |
| 131 | + onsubmit: function( e ) { | |
| 132 | + let attributes = ''; | |
| 133 | + | |
| 134 | + for ( const key in e.data ) { | |
| 135 | + if ( e.data.hasOwnProperty( key ) && e.data[ key ] !== '' ) { | |
| 136 | + attributes += ' ' + key + '="' + e.data[ key ] + '"'; | |
| 137 | + } | |
| 116 | 138 | } |
| 117 | - } | |
| 118 | 139 | |
| 119 | - if ( valid ) { | |
| 120 | - win.submit(); | |
| 121 | - } | |
| 122 | - } | |
| 123 | - }, | |
| 124 | - { | |
| 125 | - text : response.close, | |
| 126 | - onclick : 'close' | |
| 127 | - }, ], | |
| 128 | - onsubmit: function( e ) { | |
| 129 | - var attributes = ''; | |
| 140 | + // Insert shortcode into the WP_Editor | |
| 141 | + window.send_to_editor( '[' + response.shortcode + attributes + ']' ); | |
| 142 | + }, | |
| 143 | + onclose: function() { | |
| 144 | + scForm.destroy(); | |
| 145 | + }, | |
| 146 | + onopen: function() { | |
| 147 | + // Hacky way to remove scrollbars when not necessary. | |
| 148 | + const popup = $( '.mce-sc-popup' ); | |
| 149 | + popup.css( | |
| 150 | + { | |
| 151 | + width: popup.width(), | |
| 152 | + height: popup.height(), | |
| 153 | + overflow: 'auto', | |
| 154 | + } | |
| 155 | + ); | |
| 130 | 156 | |
| 131 | - for ( var key in e.data ) { | |
| 132 | - if ( e.data.hasOwnProperty( key ) && e.data[ key ] !== '' ) { | |
| 133 | - attributes += ' ' + key + '="' + e.data[ key ] + '"'; | |
| 134 | - } | |
| 157 | + // Conditional fields. | |
| 158 | + render_continue_button_title_field(); | |
| 159 | + }, | |
| 160 | + }; | |
| 161 | + | |
| 162 | + // Change the buttons if server-side validation failed | |
| 163 | + if ( response.ok.constructor === Array ) { | |
| 164 | + popup.buttons[ 0 ].text = response.ok[ 0 ]; | |
| 165 | + popup.buttons[ 0 ].onclick = 'close'; | |
| 166 | + delete popup.buttons[ 1 ]; | |
| 135 | 167 | } |
| 136 | 168 | |
| 137 | - // Insert shortcode into the WP_Editor | |
| 138 | - window.send_to_editor( '[' + response.shortcode + attributes + ']' ); | |
| 139 | - }, | |
| 140 | - onclose: function() { | |
| 141 | - scForm.destroy(); | |
| 142 | - }, | |
| 143 | - onopen: function() { | |
| 144 | - // Conditional fields. | |
| 145 | - render_continue_button_title_field(); | |
| 169 | + editor.windowManager.open( popup ); | |
| 146 | 170 | } |
| 147 | - }; | |
| 171 | + ); | |
| 172 | + }, | |
| 148 | 173 | |
| 149 | - // Change the buttons if server-side validation failed | |
| 150 | - if ( response.ok.constructor === Array ) { | |
| 151 | - popup.buttons[0].text = response.ok[0]; | |
| 152 | - popup.buttons[0].onclick = 'close'; | |
| 153 | - delete popup.buttons[1]; | |
| 174 | + destroy: function() { | |
| 175 | + const tmp = $( '#scTemp' ); | |
| 176 | + | |
| 177 | + if ( tmp.length ) { | |
| 178 | + tinymce.get( 'scTemp' ).remove(); | |
| 179 | + tmp.remove(); | |
| 154 | 180 | } |
| 181 | + }, | |
| 182 | + }; | |
| 155 | 183 | |
| 156 | - editor.windowManager.open( popup ); | |
| 157 | - }); | |
| 158 | - }, | |
| 184 | + const scOpen = function() { | |
| 185 | + scButton.addClass( 'active' ).parent().find( '.sc-menu' ).show(); | |
| 186 | + }; | |
| 159 | 187 | |
| 160 | - destroy: function() { | |
| 161 | - var tmp = $( '#scTemp' ); | |
| 188 | + const scClose = function() { | |
| 189 | + if ( typeof scButton !== 'undefined' ) { | |
| 190 | + scButton.removeClass( 'active' ).parent().find( '.sc-menu' ).hide(); | |
| 191 | + } | |
| 192 | + }; | |
| 162 | 193 | |
| 163 | - if ( tmp.length ) { | |
| 164 | - tinymce.get( 'scTemp' ).remove(); | |
| 165 | - tmp.remove(); | |
| 194 | + doc.on( | |
| 195 | + 'click', | |
| 196 | + function( e ) { | |
| 197 | + if ( ! $( e.target ).closest( '.sc-wrap' ).length ) { | |
| 198 | + scClose(); | |
| 199 | + } | |
| 166 | 200 | } |
| 167 | - } | |
| 168 | - }; | |
| 201 | + ); | |
| 169 | 202 | |
| 170 | - var scOpen = function() { | |
| 171 | - scButton.addClass( 'active' ).parent().find( '.sc-menu' ).show(); | |
| 172 | - }; | |
| 203 | + doc.on( | |
| 204 | + 'click', | |
| 205 | + '.sc-button', | |
| 206 | + function( e ) { | |
| 207 | + e.preventDefault(); | |
| 173 | 208 | |
| 174 | - var scClose = function() { | |
| 175 | - if ( typeof scButton !== 'undefined' ) { | |
| 176 | - scButton.removeClass( 'active' ).parent().find( '.sc-menu' ).hide(); | |
| 177 | - } | |
| 178 | - }; | |
| 209 | + scButton = $( this ); | |
| 179 | 210 | |
| 180 | - doc.on( 'click', function( e ) { | |
| 181 | - if ( ! $( e.target ).closest( '.sc-wrap' ).length ) { | |
| 182 | - scClose(); | |
| 183 | - } | |
| 184 | - }); | |
| 211 | + if ( scButton.hasClass( 'active' ) ) { | |
| 212 | + scClose(); | |
| 213 | + } else { | |
| 214 | + scOpen(); | |
| 215 | + } | |
| 216 | + } | |
| 217 | + ); | |
| 185 | 218 | |
| 186 | - doc.on( 'click', '.sc-button', function( e ) { | |
| 187 | - e.preventDefault(); | |
| 219 | + doc.on( | |
| 220 | + 'click', | |
| 221 | + '.sc-shortcode', | |
| 222 | + function( e ) { | |
| 223 | + e.preventDefault(); | |
| 188 | 224 | |
| 189 | - scButton = $( this ); | |
| 225 | + // scShortcode is used by scForm to trigger the correct popup | |
| 226 | + scShortcode = $( this ).attr( 'data-shortcode' ); | |
| 190 | 227 | |
| 191 | - if ( scButton.hasClass( 'active' ) ) { | |
| 192 | - scClose(); | |
| 193 | - } else { | |
| 194 | - scOpen(); | |
| 195 | - } | |
| 196 | - }); | |
| 228 | + if ( scShortcode ) { | |
| 229 | + if ( ! tinymce.get( window.wpActiveEditor ) ) { | |
| 230 | + if ( ! $( '#scTemp' ).length ) { | |
| 231 | + $( 'body' ).append( '<textarea id="scTemp" style="display: none;" />' ); | |
| 197 | 232 | |
| 198 | - doc.on( 'click', '.sc-shortcode', function( e ) { | |
| 199 | - e.preventDefault(); | |
| 233 | + tinymce.init( | |
| 234 | + { | |
| 235 | + mode: 'exact', | |
| 236 | + elements: 'scTemp', | |
| 237 | + plugins: [ 'give_shortcode', 'wplink' ], | |
| 238 | + } | |
| 239 | + ); | |
| 240 | + } | |
| 200 | 241 | |
| 201 | - // scShortcode is used by scForm to trigger the correct popup | |
| 202 | - scShortcode = $( this ).attr( 'data-shortcode' ); | |
| 242 | + setTimeout( function() { | |
| 243 | + tinymce.execCommand( 'Give_Shortcode' ); | |
| 244 | + }, 200 ); | |
| 245 | + } else { | |
| 246 | + tinymce.execCommand( 'Give_Shortcode' ); | |
| 247 | + } | |
| 203 | 248 | |
| 204 | - if ( scShortcode ) { | |
| 205 | - if ( ! tinymce.get( window.wpActiveEditor ) ) { | |
| 206 | - | |
| 207 | - if ( ! $( '#scTemp' ).length ) { | |
| 208 | - | |
| 209 | - $( 'body' ).append( '<textarea id="scTemp" style="display: none;" />' ); | |
| 210 | - | |
| 211 | - tinymce.init({ | |
| 212 | - mode : "exact", | |
| 213 | - elements : "scTemp", | |
| 214 | - plugins : ['give_shortcode', 'wplink'] | |
| 215 | - }); | |
| 249 | + setTimeout( function() { | |
| 250 | + scClose(); | |
| 251 | + }, 100 ); | |
| 252 | + } else { | |
| 253 | + console.warn( 'That is not a valid shortcode link.' ); | |
| 216 | 254 | } |
| 217 | - | |
| 218 | - setTimeout( function() { tinymce.execCommand( 'Give_Shortcode' ); }, 200 ); | |
| 219 | - } else { | |
| 220 | - tinymce.execCommand( 'Give_Shortcode' ); | |
| 221 | 255 | } |
| 222 | - | |
| 223 | - setTimeout( function() { scClose(); }, 100 ); | |
| 224 | - } else { | |
| 225 | - console.warn( 'That is not a valid shortcode link.' ); | |
| 226 | - } | |
| 227 | - }); | |
| 228 | -}); | |
| 256 | + ); | |
| 257 | + } | |
| 258 | +); | |