PluginProbe ʕ •ᴥ•ʔ
Shortcoder — Create Shortcodes for Anything / 5.4
Shortcoder — Create Shortcodes for Anything v5.4
trunk 3.0 3.0.1 3.1 3.2 3.3 3.4 3.4.1 4.0 4.0.1 4.0.2 4.0.3 4.1 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2 4.3 4.4 4.5 4.6 5.0 5.0.1 5.0.2 5.0.3 5.0.4 5.1 5.2 5.2.1 5.3 5.3.1 5.3.2 5.3.3 5.3.4 5.4 5.5 5.6 5.7 5.8 6.0 6.1 6.2 6.3 6.3.1 6.3.2 6.4 6.5 6.5.1 6.5.2 6.5.3
shortcoder / admin / js / script.js
shortcoder / admin / js Last commit date
blocks 5 years ago tinymce 5 years ago script-insert.js 5 years ago script-tools.js 5 years ago script.js 5 years ago
script.js
283 lines
1 (function($){
2 $(document).ready(function(){
3
4 var init = function(){
5
6 if(typeof window.SC_EDITOR !== 'undefined' && typeof window.SC_EDITOR.active !== 'undefined' && window.SC_EDITOR.active == 'code'){
7
8 var codemirror_loaded = load_codemirror();
9
10 if(!codemirror_loaded){
11 $('.sc_editor_toolbar').append('<p>Unable to load code editor. Please check browser console (press Ctrl+Shift+J) for errors or try deactivating any code editor related plugin/themes.</p>');
12 }
13
14 $('.sc_editor_toolbar').appendTo('.sc_cm_menu');
15
16 }else{
17 $('.sc_editor_toolbar').appendTo('.wp-media-buttons');
18 }
19
20 if(typeof window.SC_VARS !== 'undefined'){
21
22 if(SC_VARS['screen']['base'] == 'edit'){
23 var version = '<small>v' + SC_VARS['sc_version'] + '</small>';
24 $('.wp-heading-inline').append(version);
25 add_top_import_export_btn();
26 }
27
28 if(SC_VARS['screen']['base'] == 'post'){
29 var $cfe_button = $('.cfe_bottom');
30 if($cfe_button.length > 0){
31 $cfe_button.appendTo('#normal-sortables');
32 }
33 }
34
35 add_top_coffee_btn();
36 }
37
38 $('.sc_params_list').appendTo('body');
39
40 }
41
42 var set_sc_preview_text = function(name){
43 $('.sc_preview_text').text('[sc name="' + name + '"]');
44 }
45
46 var insert_in_editor = function(data){
47 if(window.SC_EDITOR.active == 'code'){
48 var doc = window.sc_cm.getDoc();
49 doc.replaceRange(data, doc.getCursor());
50 }else{
51 send_to_editor(data);
52 }
53 }
54
55 var copy_to_clipboard = function(str){
56 var el = document.createElement('textarea');
57 el.value = str;
58 el.setAttribute('readonly', '');
59 el.style.position = 'absolute';
60 el.style.left = '-9999px';
61 document.body.appendChild(el);
62 el.select();
63 document.execCommand('copy');
64 document.body.removeChild(el);
65 };
66
67 var load_codemirror = function(){
68
69 if(typeof window.SC_CODEMIRROR === 'undefined'){
70 console.error('Shortcoder: Codemirror settings are not loaded');
71 return false;
72 }
73
74 if(typeof window.wp === 'undefined' || typeof window.wp.codeEditor === 'undefined'){
75 console.error('Shortcoder: codeEditor namespace is not available');
76 return false;
77 }
78
79 var sc_mode_loaded = load_cm_sc_mode();
80 var mode = sc_mode_loaded ? 'sc_mode' : 'htmlmixed';
81
82 wp.codeEditor.defaultSettings.codemirror['mode'] = mode;
83
84 var editor = wp.codeEditor.initialize(document.getElementById('sc_content'), window.SC_CODEMIRROR);
85
86 editor.codemirror.setSize( null, 500 );
87 editor.codemirror.on('change', function(){
88 editor.codemirror.save();
89 });
90
91 window.sc_cm = editor.codemirror;
92
93 return true;
94
95 }
96
97 var load_cm_sc_mode = function(){
98
99 if(typeof wp.CodeMirror === 'undefined'){
100 console.error('Shortcoder: CodeMirror library is not loaded/available');
101 return false;
102 }
103
104 if(typeof wp.CodeMirror.overlayMode === 'undefined'){
105 console.error('Shortcoder: CodeMirror overlay method is not available');
106 return false;
107 }
108
109 try{
110 wp.CodeMirror.defineMode('sc_mode', function(config, parserConfig){
111 var sc_overlay = {
112 token: function(stream, state){
113 if(stream.match(/\$\$[a-z0-9A-Z:_]+\$\$/)){
114 return 'number sc_param';
115 }
116 if(stream.match(/%%.*?%%/)){
117 return 'atom sc_param';
118 }
119 if(stream.match(/\[(.+?)?\](?:(.+?)?\[\/\])?/)){
120 return 'string sc_param';
121 }
122 stream.next();
123 }
124 };
125 return wp.CodeMirror.overlayMode(wp.CodeMirror.getMode(config, parserConfig.backdrop || 'htmlmixed'), sc_overlay);
126 });
127 }catch(error){
128 console.error('Shortcoder: Unable to load shortcoder mode.', error);
129 return false;
130 }
131
132 return true;
133
134 }
135
136 var close_params_list = function(){
137 $('.sc_params_list').hide();
138 }
139
140 var add_top_coffee_btn = function(){
141
142 $('#screen-meta-links').prepend('<div class="screen-meta-toggle cfe_top_link"><a class="show-settings button" href="https://www.paypal.me/vaakash/" target="_blank">Buy me a Coffee</a></div>');
143
144 }
145
146 var add_top_import_export_btn = function(){
147
148 $('#screen-meta-links').prepend('<div class="screen-meta-toggle ie_top_link hide-if-no-js"><button aria-controls="import-export-tab" aria-expanded="false" class="show-settings button">Import / Export</button></div>');
149
150 $('#screen-meta').append('<div id="import-export-tab" class="hidden"></div>');
151
152 $('#ie_content > div').appendTo('#import-export-tab');
153
154 }
155
156 $('#post_name').on('change keyup', function(){
157 set_sc_preview_text($(this).val());
158 });
159
160 $('.sc_editor').on('focus', function(){
161 window.sc_old_editor = $(this).val();
162 }).on('change', function(e){
163
164 new_editor = $(this).val();
165 response = confirm(SC_VARS.text_editor_switch_notice);
166
167 if(!response){
168 e.preventDefault();
169 $(this).val(window.sc_old_editor);
170 return false;
171 }
172
173 window.location = window.location + '&editor=' + $(this).val();
174
175 });
176
177 $('.sc_insert_param').on('click', function(e){
178
179 e.preventDefault();
180
181 var offset = $(this).offset();
182 var mtop = offset.top + $(this).outerHeight();
183
184 $('.sc_params_list').css({
185 top: mtop,
186 left: offset.left
187 }).toggle();
188
189 });
190
191 $('.sc_wp_params li').on('click', function(){
192 insert_in_editor('$$' + $(this).data('id') + '$$');
193 close_params_list();
194 });
195
196 $('.sc_cp_btn').on('click', function(){
197
198 var $cp_box = $('.sc_cp_box');
199 var $cp_default = $('.sc_cp_default');
200 var $cp_info = $('.sc_cp_info');
201 var param_val = $cp_box.val().trim();
202 var default_val = $cp_default.val().trim();
203
204 if( param_val != '' && $cp_box[0].checkValidity() ){
205
206 var the_code = '';
207 if(default_val == ''){
208 the_code = '%%' + param_val + '%%';
209 }else{
210 the_code = '%%' + param_val + ':' + default_val + '%%';
211 }
212
213 insert_in_editor(the_code);
214 $cp_info.removeClass('red');
215 close_params_list();
216 }else{
217 $cp_info.addClass('red');
218 }
219
220 });
221
222 $('.sc_cf_btn').on('click', function(){
223
224 var $cf_box = $('.sc_cf_box');
225 var $cf_info = $('.sc_cf_info');
226 var param_val = $cf_box.val().trim();
227
228 if( param_val != '' && $cf_box[0].checkValidity() ){
229 insert_in_editor('$$custom_field:' + param_val + '$$');
230 $cf_info.removeClass('red');
231 close_params_list();
232 }else{
233 $cf_info.addClass('red');
234 }
235
236 });
237
238 $('.sc_copy').on('click', function(){
239 copy_to_clipboard($('.sc_preview_text').text());
240 $this = $(this);
241 $this.addClass('copied');
242 setTimeout(function() {
243 $this.removeClass('copied');
244 }, 3000);
245 })
246
247 $('.sc_changelog .dismiss_btn').on('click', function(){
248 var url = SC_VARS.ajax_url + '?action=sc_admin_ajax&do=close_changelog';
249 $.get(url, function( data ){
250 if(data.search( /done/g ) == -1){
251 $( '.sc_changelog article' ).html('Failed to close window. <a href="' + url + '" target="_blank">Please click here to close</a>');
252 }else{
253 $( '.sc_changelog' ).fadeOut();
254 }
255 });
256 });
257
258 $('.cfe_amt').on('click', function(){
259 var $btn = $(this).closest('.cfe_form').find('.cfe_btn');
260 $btn.attr('href', $btn.data('link') + $(this).val());
261 });
262
263 $('.subscribe_btn').click(function(e){
264 e.preventDefault();
265 var action = $(this).parent().data('action');
266 $.ajax({
267 type: 'get',
268 url: action,
269 cache: false,
270 dataType: 'jsonp',
271 data: {
272 'EMAIL': $('.subscribe_email_box').val()
273 },
274 success : function(data) {
275 }
276 });
277 $('.subscribe_confirm').show();
278 });
279
280 init();
281
282 });
283 })( jQuery );