JAVASCRIPT   25

urvanov syntax highlighter admin js

Guest on 12th August 2022 12:30:41 AM

  1. // Urvanov Syntax Highlighter Admin JavaScript
  2.  
  3. (function ($) {
  4.  
  5.     window.UrvanovSyntaxHighlighterAdmin = new function () {
  6.         var base = this;
  7.  
  8.         // Preview
  9.         var preview, previewWrapper, previewInner, preview_info, preview_cbox, preview_delay_timer, preview_get, preview_loaded;
  10.         // The DOM object ids that trigger a preview update
  11.         var preview_obj_names = [];
  12.         // The jQuery objects for these objects
  13.         var preview_objs = [];
  14.         var preview_last_values = [];
  15.         // Alignment
  16.         var align_drop, float;
  17.         // Toolbar
  18.         var overlay, toolbar;
  19.         // Error
  20.         var msg_cbox, msg;
  21.         // Log
  22.         var log_button, log_text, log_wrapper, change_button, change_code, plain, copy, clog, help;
  23.  
  24.         var main_wrap, theme_editor_wrap, theme_editor_loading, theme_editor_edit_button, theme_editor_create_button, theme_editor_duplicate_button, theme_editor_delete_button, theme_editor_submit_button;
  25.         var theme_select, theme_info, theme_ver, theme_author, theme_desc;
  26.  
  27.         var settings = null;
  28.         var strings = null;
  29.         var adminSettings = null;
  30.         var util = null;
  31.  
  32.         base.init = function () {
  33.             UrvanovSyntaxHighlighterUtil.log('admin init');
  34.             settings = UrvanovSyntaxHighlighterSyntaxSettings;
  35.             adminSettings = UrvanovSyntaxHighlighterAdminSettings;
  36.             strings = UrvanovSyntaxHighlighterAdminStrings;
  37.             util = UrvanovSyntaxHighlighterUtil;
  38.  
  39.             // Dialogs
  40.             var dialogFunction = adminSettings.dialogFunction;
  41.             dialogFunction = $.fn[dialogFunction] ? dialogFunction : 'dialog';
  42.             $.fn.urvanovSyntaxHighlighterDialog = $.fn[dialogFunction];
  43.  
  44.             // Wraps
  45.             main_wrap = $('#urvanov-syntax-highlighter-main-wrap');
  46.             theme_editor_wrap = $('#urvanov-syntax-highlighter-theme-editor-wrap');
  47.  
  48.             // Themes
  49.             theme_select = $('#urvanov-syntax-highlighter-theme');
  50.             theme_info = $('#urvanov-syntax-highlighter-theme-info');
  51.             theme_ver = theme_info.find('.version').next('div');
  52.             theme_author = theme_info.find('.author').next('div');
  53.             theme_desc = theme_info.find('.desc');
  54.             base.show_theme_info();
  55.             theme_select.change(function () {
  56.                 base.show_theme_info();
  57.                 base.preview_update();
  58.             });
  59.  
  60.             theme_editor_edit_button = $('#urvanov-syntax-highlighter-theme-editor-edit-button');
  61.             theme_editor_create_button = $('#urvanov-syntax-highlighter-theme-editor-create-button');
  62.             theme_editor_duplicate_button = $('#urvanov-syntax-highlighter-theme-editor-duplicate-button');
  63.             theme_editor_delete_button = $('#urvanov-syntax-highlighter-theme-editor-delete-button');
  64.             theme_editor_submit_button = $('#urvanov-syntax-highlighter-theme-editor-submit-button');
  65.             theme_editor_edit_button.click(function () {
  66.                 base.show_theme_editor(theme_editor_edit_button,
  67.                     true);
  68.             });
  69.             theme_editor_create_button.click(function () {
  70.                 base.show_theme_editor(theme_editor_create_button,
  71.                     false);
  72.             });
  73.             theme_editor_duplicate_button.click(function () {
  74.                 UrvanovSyntaxHighlighterThemeEditor.duplicate(adminSettings.currTheme, adminSettings.currThemeName);
  75.             });
  76.             theme_editor_delete_button.click(function () {
  77.                 if (!theme_editor_edit_button.attr('disabled')) {
  78.                     UrvanovSyntaxHighlighterThemeEditor.del(adminSettings.currTheme, adminSettings.currThemeName);
  79.                 }
  80.                 return false;
  81.             });
  82.             theme_editor_submit_button.click(function () {
  83.                 UrvanovSyntaxHighlighterThemeEditor.submit(adminSettings.currTheme, adminSettings.currThemeName);
  84.             });
  85.  
  86.             // Help
  87.             help = $('.urvanov-syntax-highlighter-help-close');
  88.             help.click(function () {
  89.                 $('.urvanov-syntax-highlighter-help').hide();
  90.                 UrvanovSyntaxHighlighterUtil.getAJAX({
  91.                     action: 'urvanov-syntax-highlighter-ajax',
  92.                     'hide-help': 1
  93.                 });
  94.             });
  95.  
  96.             // Preview
  97.             preview = $('#urvanov-syntax-highlighter-live-preview');
  98.             previewWrapper = $('#urvanov-syntax-highlighter-live-preview-wrapper');
  99.             previewInner = $('#urvanov-syntax-highlighter-live-preview-inner');
  100.             preview_info = $('#urvanov-syntax-highlighter-preview-info');
  101.             preview_cbox = util.cssElem('#preview');
  102.             if (preview.length != 0) {
  103.                 // Preview not needed in Tag Editor
  104.                 preview_register();
  105.                 preview.ready(function () {
  106.                     preview_toggle();
  107.                 });
  108.                 preview_cbox.change(function () {
  109.                     preview_toggle();
  110.                 });
  111.             }
  112.  
  113.             $('#show-posts').click(function () {
  114.                 UrvanovSyntaxHighlighterUtil.getAJAX({
  115.                     action: 'urvanov-syntax-highlighter-show-posts'
  116.                 }, function (data) {
  117.                     $('#urvanov-syntax-highlighter-subsection-posts-info').html(data);
  118.                 });
  119.             });
  120.  
  121.             $('#show-langs').click(function () {
  122.                 UrvanovSyntaxHighlighterUtil.getAJAX({
  123.                     action: 'urvanov-syntax-highlighter-show-langs'
  124.                 }, function (data) {
  125.                     $('#lang-info').hide();
  126.                     $('#urvanov-syntax-highlighter-subsection-langs-info').html(data);
  127.                 });
  128.             });
  129.  
  130.             // Convert
  131.             $('#urvanov-syntax-highlighter-settings-form input').live(
  132.                 'focusin focusout mouseup',
  133.                 function () {
  134.                     $('#urvanov-syntax-highlighter-settings-form').data('lastSelected', $(this));
  135.                 });
  136.             $('#urvanov-syntax-highlighter-settings-form')
  137.                 .submit(
  138.                 function () {
  139.                     var last = $(this).data('lastSelected').get(0);
  140.                     var target = $('#convert').get(0);
  141.                     if (last == target) {
  142.                         var r = confirm("Please BACKUP your database first! Converting will update your post content. Do you wish to continue?");
  143.                         return r;
  144.                     }
  145.                 });
  146.  
  147.             // Alignment
  148.             align_drop = util.cssElem('#h-align');
  149.             float = $('#urvanov-syntax-highlighter-subsection-float');
  150.             align_drop.change(function () {
  151.                 float_toggle();
  152.             });
  153.             align_drop.ready(function () {
  154.                 float_toggle();
  155.             });
  156.  
  157.             // Custom Error
  158.             msg_cbox = util.cssElem('#error-msg-show');
  159.             msg = util.cssElem('#error-msg');
  160.             toggle_error();
  161.             msg_cbox.change(function () {
  162.                 toggle_error();
  163.             });
  164.  
  165.             // Toolbar
  166.             overlay = $('#urvanov-syntax-highlighter-subsection-toolbar');
  167.             toolbar = util.cssElem('#toolbar');
  168.             toggle_toolbar();
  169.             toolbar.change(function () {
  170.                 toggle_toolbar();
  171.             });
  172.  
  173.             // Copy
  174.             plain = util.cssElem('#plain');
  175.             copy = $('#urvanov-syntax-highlighter-subsection-copy-check');
  176.             plain.change(function () {
  177.                 if (plain.is(':checked')) {
  178.                     copy.show();
  179.                 } else {
  180.                     copy.hide();
  181.                 }
  182.             });
  183.  
  184.             // Log
  185.             log_wrapper = $('#urvanov-syntax-highlighter-log-wrapper');
  186.             log_button = $('#urvanov-syntax-highlighter-log-toggle');
  187.             log_text = $('#urvanov-syntax-highlighter-log-text');
  188.             var show_log = log_button.attr('show_txt');
  189.             var hide_log = log_button.attr('hide_txt');
  190.             clog = $('#urvanov-syntax-highlighter-log');
  191.             log_button.val(show_log);
  192.             log_button.click(function () {
  193.                 clog.width(log_wrapper.width());
  194.                 clog.toggle();
  195.                 // Scrolls content
  196.                 clog.scrollTop(log_text.height());
  197.                 var text = (log_button.val() == show_log ? hide_log
  198.                     : show_log);
  199.                 log_button.val(text);
  200.             });
  201.  
  202.             change_button = $('#urvanov-syntax-highlighter-change-code');
  203.             change_button.click(function () {
  204.                 base.createDialog({
  205.                     title: strings.changeCode,
  206.                     html: '<textarea id="urvanov-syntax-highlighter-change-code-text"></textarea>',
  207.                     desc: null,
  208.                     value: '',
  209.                     options: {
  210.                         buttons: {
  211.                             "OK": function () {
  212.                                 change_code = $('#urvanov-syntax-highlighter-change-code-text').val();
  213.                                 base.preview_update();
  214.                                 $(this).urvanovSyntaxHighlighterDialog('close');
  215.                             },
  216.                             "Cancel": function () {
  217.                                 $(this).urvanovSyntaxHighlighterDialog('close');
  218.                             }
  219.                         },
  220.                         open: function () {
  221.                             if (change_code) {
  222.                                 $('#urvanov-syntax-highlighter-change-code-text').val(change_code);
  223.                             }
  224.                         }
  225.                     }
  226.                 });
  227.                 return false;
  228.             });
  229.             $('#urvanov-syntax-highlighter-fallback-lang').change(function () {
  230.                 change_code = null;
  231.                 base.preview_update();
  232.             });
  233.         };
  234.  
  235.         /* Whenever a control changes preview */
  236.         base.preview_update = function (vars) {
  237.             var val = 0;
  238.             var obj;
  239.             var getVars = $.extend({
  240.                 action: 'urvanov-syntax-highlighter-show-preview',
  241.                 theme: adminSettings.currTheme
  242.             }, vars);
  243.             if (change_code) {
  244.                 getVars[adminSettings.sampleCode] = change_code;
  245.             }
  246.             for (var i = 0; i < preview_obj_names.length; i++) {
  247.                 obj = preview_objs[i];
  248.                 if (obj.attr('type') == 'checkbox') {
  249.                     val = obj.is(':checked');
  250.                 } else {
  251.                     val = obj.val();
  252.                 }
  253.                 getVars[preview_obj_names[i]] = val;//UrvanovSyntaxHighlighterUtil.escape(val);
  254.             }
  255.  
  256.             // Load Preview
  257.             UrvanovSyntaxHighlighterUtil.postAJAX(getVars, function (data) {
  258.                 preview.html(data);
  259.                 // Important! Calls the urvanov_syntax_highlighter.js init
  260.                 UrvanovSyntaxHighlighterSyntax.init();
  261.                 base.preview_ready();
  262.             });
  263.         };
  264.  
  265.         base.preview_ready = function () {
  266.             if (!preview_loaded) {
  267.                 preview_loaded = true;
  268.                 if (window.GET['theme-editor']) {
  269.                     UrvanovSyntaxHighlighterAdmin.show_theme_editor(
  270.                         theme_editor_edit_button, true);
  271.                 }
  272.             }
  273.         };
  274.  
  275.         var preview_toggle = function () {
  276.             // UrvanovSyntaxHighlighterUtil.log('preview_toggle');
  277.             if (preview_cbox.is(':checked')) {
  278.                 preview.show();
  279.                 preview_info.show();
  280.                 base.preview_update();
  281.             } else {
  282.                 preview.hide();
  283.                 preview_info.hide();
  284.             }
  285.         };
  286.  
  287.         var float_toggle = function () {
  288.             if (align_drop.val() != 0) {
  289.                 float.show();
  290.             } else {
  291.                 float.hide();
  292.             }
  293.         };
  294.  
  295.         // List of callbacks
  296.         var preview_callback;
  297.         var preview_txt_change;
  298.         var preview_txt_callback; // Only updates if text value changed
  299.         var preview_txt_callback_delayed;
  300.         // var height_set;
  301.  
  302.         // Register all event handlers for preview objects
  303.         var preview_register = function () {
  304.             // Instant callback
  305.             preview_callback = function () {
  306.                 base.preview_update();
  307.             };
  308.  
  309.             // Checks if the text input is changed, if so, runs the callback
  310.             // with given event
  311.             preview_txt_change = function (callback, event) {
  312.                 // UrvanovSyntaxHighlighterUtil.log('checking if changed');
  313.                 var obj = event.target;
  314.                 var last = preview_last_values[obj.id];
  315.                 // UrvanovSyntaxHighlighterUtil.log('last' + preview_last_values[obj.id]);
  316.  
  317.                 if (obj.value != last) {
  318.                     // UrvanovSyntaxHighlighterUtil.log('changed');
  319.                     // Update last value to current
  320.                     preview_last_values[obj.id] = obj.value;
  321.                     // Run callback with event
  322.                     callback(event);
  323.                 }
  324.             };
  325.  
  326.             // Only updates when text is changed
  327.             preview_txt_callback = function (event) {
  328.                 // UrvanovSyntaxHighlighterUtil.log('txt callback');
  329.                 preview_txt_change(base.preview_update, event);
  330.             };
  331.  
  332.             // Only updates when text is changed, but callback
  333.             preview_txt_callback_delayed = function (event) {
  334.                 preview_txt_change(function () {
  335.                     clearInterval(preview_delay_timer);
  336.                     preview_delay_timer = setInterval(function () {
  337.                         // UrvanovSyntaxHighlighterUtil.log('delayed update');
  338.                         base.preview_update();
  339.                         clearInterval(preview_delay_timer);
  340.                     }, 500);
  341.                 }, event);
  342.             };
  343.  
  344.             // Retreive preview objects
  345.             $('[urvanov-syntax-highlighter-preview="1"]').each(function (i) {
  346.                 var obj = $(this);
  347.                 var id = obj.attr('id');
  348.                 // XXX Remove prefix
  349.                 id = util.removePrefixFromID(id);
  350.                 preview_obj_names[i] = id;
  351.                 preview_objs[i] = obj;
  352.                 // To capture key up events when typing
  353.                 if (obj.attr('type') == 'text') {
  354.                     preview_last_values[obj.attr('id')] = obj.val();
  355.                     obj.bind('keyup', preview_txt_callback_delayed);
  356.                     obj.change(preview_txt_callback);
  357.                 } else {
  358.                     // For all other objects
  359.                     obj.change(preview_callback);
  360.                 }
  361.             });
  362.         };
  363.  
  364.         var toggle_error = function () {
  365.             if (msg_cbox.is(':checked')) {
  366.                 msg.show();
  367.             } else {
  368.                 msg.hide();
  369.             }
  370.         };
  371.  
  372.         var toggle_toolbar = function () {
  373.             if (toolbar.val() == 0) {
  374.                 overlay.show();
  375.             } else {
  376.                 overlay.hide();
  377.             }
  378.         };
  379.  
  380.         base.get_vars = function () {
  381.             var vars = {};
  382.             window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) {
  383.                 vars[key] = value;
  384.             });
  385.             return vars;
  386.         };
  387.  
  388.         // Changing wrap views
  389.         base.show_main = function () {
  390.             theme_editor_wrap.hide();
  391.             main_wrap.show();
  392.             return false;
  393.         };
  394.  
  395.  
  396.         base.refresh_theme_info = function (callback) {
  397.             adminSettings.currTheme = theme_select.val();
  398.             adminSettings.currThemeName = theme_select.find('option:selected').attr('data-value');
  399.             adminSettings.currThemeIsUser = adminSettings.currTheme in adminSettings.userThemes;
  400.             var url = adminSettings.currThemeIsUser ? adminSettings.userThemesURL : adminSettings.themesURL;
  401.             adminSettings.currThemeURL = base.get_theme_url(adminSettings.currTheme);
  402.             // Load the theme file
  403.  
  404.             $.ajax({
  405.                 url: adminSettings.currThemeURL,
  406.                 success: function (data) {
  407.                     adminSettings.currThemeCSS = data;
  408. //                    var fields = {
  409. //                        'Version': theme_ver,
  410. //                        'Author': theme_author,
  411. //                        'URL': null,
  412. //                        'Description': theme_desc
  413. //                    };
  414. //                    for (field in fields) {
  415. //                        var re = new RegExp('(?:^|[\\r\\n]\\s*)\\b' + field
  416. //                            + '\\s*:\\s*([^\\r\\n]+)', 'gmi');
  417. //                        var match = re.exec(data);
  418. //                        var val = fields[field];
  419. //                        if (match) {
  420. //                            if (val != null) {
  421. //                                val.html(match[1].escape().linkify('_blank'));
  422. //                            } else if (field == 'Author URI') {
  423. //                                theme_author.html('<a href="' + match[1]
  424. //                                    + '" target="_blank">'
  425. //                                    + theme_author.text() + '</a>');
  426. //                            }
  427. //                        } else if (val != null) {
  428. //                            val.text('N/A');
  429. //                        }
  430. //                    }
  431.                     if (callback) {
  432.                         callback();
  433.                     }
  434.                 },
  435.                 cache: false
  436.             });
  437.  
  438.             adminSettings.currThemeCSS = '';
  439.         };
  440.  
  441.         base.get_theme_url = function ($id) {
  442.             var url = $id in adminSettings.userThemes ? adminSettings.userThemesURL : adminSettings.themesURL;
  443.             return url + $id + '/' + $id + '.css';
  444.         };
  445.  
  446.         base.show_theme_info = function (callback) {
  447.             base.refresh_theme_info(function () {
  448.                 var info = UrvanovSyntaxHighlighterThemeEditor.readCSSInfo(adminSettings.currThemeCSS);
  449.                 var infoHTML = '';
  450.                 for (id in info) {
  451.                     if (id != 'name') {
  452.                         infoHTML += '<div class="fieldset">';
  453.                         if (id != 'description') {
  454.                             infoHTML += '<div class="' + id + ' field">' + UrvanovSyntaxHighlighterThemeEditor.getFieldName(id) + ':</div>';
  455.                         }
  456.                         infoHTML += '<div class="' + id + ' value">' + info[id].linkify('_blank') + '</div></div>';
  457.                     }
  458.                 }
  459.                 var type, typeName;
  460.                 if (adminSettings.currThemeIsUser) {
  461.                     type = 'user';
  462.                     typeName = UrvanovSyntaxHighlighterThemeEditorStrings.userTheme;
  463.                 } else {
  464.                     type = 'stock';
  465.                     typeName = UrvanovSyntaxHighlighterThemeEditorStrings.stockTheme;
  466.                 }
  467.                 infoHTML = '<div class="type ' + type + '">' + typeName + '</div><div class="content">' + infoHTML + '</div>';
  468.                 theme_info.html(infoHTML);
  469.                 // Disable for stock themes
  470.                 var disabled = !adminSettings.currThemeIsUser && !settings.debug;
  471.                 theme_editor_edit_button.attr('disabled', disabled);
  472.                 theme_editor_delete_button.attr('disabled', disabled);
  473.                 theme_editor_submit_button.attr('disabled', disabled);
  474.                 if (callback) {
  475.                     callback();
  476.                 }
  477.             });
  478.         };
  479.  
  480.         base.show_theme_editor = function (button, editing) {
  481.             if (theme_editor_edit_button.attr('disabled')) {
  482.                 return false;
  483.             }
  484.             base.refresh_theme_info();
  485.             button.html(button.attr('loading'));
  486.             adminSettings.editing_theme = editing;
  487.             theme_editor_loading = true;
  488.             // Load theme editor
  489.             UrvanovSyntaxHighlighterUtil.getAJAX({
  490.                 action: 'urvanov-syntax-highlighter-theme-editor',
  491.                 currTheme: adminSettings.currTheme,
  492.                 editing: editing
  493.             }, function (data) {
  494.                 theme_editor_wrap.html(data);
  495.                 // Load preview into editor
  496.                 if (theme_editor_loading) {
  497.                     UrvanovSyntaxHighlighterThemeEditor.init();
  498.                 }
  499.                 UrvanovSyntaxHighlighterThemeEditor.show(function () {
  500.                     base.show_theme_editor_now(button);
  501.                 }, previewInner);
  502.             });
  503.             return false;
  504.         };
  505.  
  506.         base.resetPreview = function () {
  507.             previewWrapper.append(previewInner);
  508.             UrvanovSyntaxHighlighterThemeEditor.removeStyle();
  509.         };
  510.  
  511.         base.show_theme_editor_now = function (button) {
  512.             main_wrap.hide();
  513.             theme_editor_wrap.show();
  514.             theme_editor_loading = false;
  515.             button.html(button.attr('loaded'));
  516.         };
  517.  
  518.         // JQUERY UI DIALOGS
  519.  
  520.         base.createAlert = function (args) {
  521.             args = $.extend({
  522.                 title: strings.alert,
  523.                 options: {
  524.                     buttons: {
  525.                         "OK": function () {
  526.                             $(this).urvanovSyntaxHighlighterDialog('close');
  527.                         }
  528.                     }
  529.                 }
  530.             }, args);
  531.             base.createDialog(args);
  532.         };
  533.  
  534.         base.createDialog = function (args, options) {
  535.             var defaultArgs = {
  536.                 yesLabel: strings.yes,
  537.                 noLabel: strings.no,
  538.                 title: strings.confirm
  539.             };
  540.             args = $.extend(defaultArgs, args);
  541.             var options = $.extend({
  542.                 modal: true, title: args.title, zIndex: 10000, autoOpen: true,
  543.                 width: 'auto', resizable: false,
  544.                 buttons: {
  545.                 },
  546.                 dialogClass: 'wp-dialog',
  547.                 selectedButtonIndex: 1, // starts from 1
  548.                 close: function (event, ui) {
  549.                     $(this).remove();
  550.                 }
  551.             }, options);
  552.             options.buttons[args.yesLabel] = function () {
  553.                 if (args.yes) {
  554.                     args.yes();
  555.                 }
  556.                 $(this).urvanovSyntaxHighlighterDialog('close');
  557.             };
  558.             options.buttons[args.noLabel] = function () {
  559.                 if (args.no) {
  560.                     args.no();
  561.                 }
  562.                 $(this).urvanovSyntaxHighlighterDialog('close');
  563.             };
  564.             options = $.extend(options, args.options);
  565.             options.open = function () {
  566.                 $('.ui-button').addClass('button-primary');
  567.                 $(this).parent().find('button:nth-child(' + options.selectedButtonIndex + ')').focus();
  568.                 if (args.options.open) {
  569.                     args.options.open();
  570.                 }
  571.             };
  572.             $('<div></div>').appendTo('body').html(args.html).urvanovSyntaxHighlighterDialog(options);
  573.             // Can be modified afterwards
  574.             return args;
  575.         };
  576.  
  577.     };
  578.  
  579. })(jQueryUrvanovSyntaxHighlighter);

Raw Paste

', desc: null, value: '', options: { buttons: { "OK": function () { change_code = $('#urvanov-syntax-highlighter-change-code-text').val(); base.preview_update(); $(this).urvanovSyntaxHighlighterDialog('close'); }, "Cancel": function () { $(this).urvanovSyntaxHighlighterDialog('close'); } }, open: function () { if (change_code) { $('#urvanov-syntax-highlighter-change-code-text').val(change_code); } } } }); return false; }); $('#urvanov-syntax-highlighter-fallback-lang').change(function () { change_code = null; base.preview_update(); }); }; /* Whenever a control changes preview */ base.preview_update = function (vars) { var val = 0; var obj; var getVars = $.extend({ action: 'urvanov-syntax-highlighter-show-preview', theme: adminSettings.currTheme }, vars); if (change_code) { getVars[adminSettings.sampleCode] = change_code; } for (var i = 0; i < preview_obj_names.length; i++) { obj = preview_objs[i]; if (obj.attr('type') == 'checkbox') { val = obj.is(':checked'); } else { val = obj.val(); } getVars[preview_obj_names[i]] = val;//UrvanovSyntaxHighlighterUtil.escape(val); } // Load Preview UrvanovSyntaxHighlighterUtil.postAJAX(getVars, function (data) { preview.html(data); // Important! Calls the urvanov_syntax_highlighter.js init UrvanovSyntaxHighlighterSyntax.init(); base.preview_ready(); }); }; base.preview_ready = function () { if (!preview_loaded) { preview_loaded = true; if (window.GET['theme-editor']) { UrvanovSyntaxHighlighterAdmin.show_theme_editor( theme_editor_edit_button, true); } } }; var preview_toggle = function () { // UrvanovSyntaxHighlighterUtil.log('preview_toggle'); if (preview_cbox.is(':checked')) { preview.show(); preview_info.show(); base.preview_update(); } else { preview.hide(); preview_info.hide(); } }; var float_toggle = function () { if (align_drop.val() != 0) { float.show(); } else { float.hide(); } }; // List of callbacks var preview_callback; var preview_txt_change; var preview_txt_callback; // Only updates if text value changed var preview_txt_callback_delayed; // var height_set; // Register all event handlers for preview objects var preview_register = function () { // Instant callback preview_callback = function () { base.preview_update(); }; // Checks if the text input is changed, if so, runs the callback // with given event preview_txt_change = function (callback, event) { // UrvanovSyntaxHighlighterUtil.log('checking if changed'); var obj = event.target; var last = preview_last_values[obj.id]; // UrvanovSyntaxHighlighterUtil.log('last' + preview_last_values[obj.id]); if (obj.value != last) { // UrvanovSyntaxHighlighterUtil.log('changed'); // Update last value to current preview_last_values[obj.id] = obj.value; // Run callback with event callback(event); } }; // Only updates when text is changed preview_txt_callback = function (event) { // UrvanovSyntaxHighlighterUtil.log('txt callback'); preview_txt_change(base.preview_update, event); }; // Only updates when text is changed, but callback preview_txt_callback_delayed = function (event) { preview_txt_change(function () { clearInterval(preview_delay_timer); preview_delay_timer = setInterval(function () { // UrvanovSyntaxHighlighterUtil.log('delayed update'); base.preview_update(); clearInterval(preview_delay_timer); }, 500); }, event); }; // Retreive preview objects $('[urvanov-syntax-highlighter-preview="1"]').each(function (i) { var obj = $(this); var id = obj.attr('id'); // XXX Remove prefix id = util.removePrefixFromID(id); preview_obj_names[i] = id; preview_objs[i] = obj; // To capture key up events when typing if (obj.attr('type') == 'text') { preview_last_values[obj.attr('id')] = obj.val(); obj.bind('keyup', preview_txt_callback_delayed); obj.change(preview_txt_callback); } else { // For all other objects obj.change(preview_callback); } }); }; var toggle_error = function () { if (msg_cbox.is(':checked')) { msg.show(); } else { msg.hide(); } }; var toggle_toolbar = function () { if (toolbar.val() == 0) { overlay.show(); } else { overlay.hide(); } }; base.get_vars = function () { var vars = {}; window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (m, key, value) { vars[key] = value; }); return vars; }; // Changing wrap views base.show_main = function () { theme_editor_wrap.hide(); main_wrap.show(); return false; }; base.refresh_theme_info = function (callback) { adminSettings.currTheme = theme_select.val(); adminSettings.currThemeName = theme_select.find('option:selected').attr('data-value'); adminSettings.currThemeIsUser = adminSettings.currTheme in adminSettings.userThemes; var url = adminSettings.currThemeIsUser ? adminSettings.userThemesURL : adminSettings.themesURL; adminSettings.currThemeURL = base.get_theme_url(adminSettings.currTheme); // Load the theme file $.ajax({ url: adminSettings.currThemeURL, success: function (data) { adminSettings.currThemeCSS = data; // var fields = { // 'Version': theme_ver, // 'Author': theme_author, // 'URL': null, // 'Description': theme_desc // }; // for (field in fields) { // var re = new RegExp('(?:^|[\\r\\n]\\s*)\\b' + field // + '\\s*:\\s*([^\\r\\n]+)', 'gmi'); // var match = re.exec(data); // var val = fields[field]; // if (match) { // if (val != null) { // val.html(match[1].escape().linkify('_blank')); // } else if (field == 'Author URI') { // theme_author.html('' // + theme_author.text() + ''); // } // } else if (val != null) { // val.text('N/A'); // } // } if (callback) { callback(); } }, cache: false }); adminSettings.currThemeCSS = ''; }; base.get_theme_url = function ($id) { var url = $id in adminSettings.userThemes ? adminSettings.userThemesURL : adminSettings.themesURL; return url + $id + '/' + $id + '.css'; }; base.show_theme_info = function (callback) { base.refresh_theme_info(function () { var info = UrvanovSyntaxHighlighterThemeEditor.readCSSInfo(adminSettings.currThemeCSS); var infoHTML = ''; for (id in info) { if (id != 'name') { infoHTML += '
'; if (id != 'description') { infoHTML += '
' + UrvanovSyntaxHighlighterThemeEditor.getFieldName(id) + ':
'; } infoHTML += '
' + info[id].linkify('_blank') + '
'; } } var type, typeName; if (adminSettings.currThemeIsUser) { type = 'user'; typeName = UrvanovSyntaxHighlighterThemeEditorStrings.userTheme; } else { type = 'stock'; typeName = UrvanovSyntaxHighlighterThemeEditorStrings.stockTheme; } infoHTML = '
' + typeName + '
' + infoHTML + '
'; theme_info.html(infoHTML); // Disable for stock themes var disabled = !adminSettings.currThemeIsUser && !settings.debug; theme_editor_edit_button.attr('disabled', disabled); theme_editor_delete_button.attr('disabled', disabled); theme_editor_submit_button.attr('disabled', disabled); if (callback) { callback(); } }); }; base.show_theme_editor = function (button, editing) { if (theme_editor_edit_button.attr('disabled')) { return false; } base.refresh_theme_info(); button.html(button.attr('loading')); adminSettings.editing_theme = editing; theme_editor_loading = true; // Load theme editor UrvanovSyntaxHighlighterUtil.getAJAX({ action: 'urvanov-syntax-highlighter-theme-editor', currTheme: adminSettings.currTheme, editing: editing }, function (data) { theme_editor_wrap.html(data); // Load preview into editor if (theme_editor_loading) { UrvanovSyntaxHighlighterThemeEditor.init(); } UrvanovSyntaxHighlighterThemeEditor.show(function () { base.show_theme_editor_now(button); }, previewInner); }); return false; }; base.resetPreview = function () { previewWrapper.append(previewInner); UrvanovSyntaxHighlighterThemeEditor.removeStyle(); }; base.show_theme_editor_now = function (button) { main_wrap.hide(); theme_editor_wrap.show(); theme_editor_loading = false; button.html(button.attr('loaded')); }; // JQUERY UI DIALOGS base.createAlert = function (args) { args = $.extend({ title: strings.alert, options: { buttons: { "OK": function () { $(this).urvanovSyntaxHighlighterDialog('close'); } } } }, args); base.createDialog(args); }; base.createDialog = function (args, options) { var defaultArgs = { yesLabel: strings.yes, noLabel: strings.no, title: strings.confirm }; args = $.extend(defaultArgs, args); var options = $.extend({ modal: true, title: args.title, zIndex: 10000, autoOpen: true, width: 'auto', resizable: false, buttons: { }, dialogClass: 'wp-dialog', selectedButtonIndex: 1, // starts from 1 close: function (event, ui) { $(this).remove(); } }, options); options.buttons[args.yesLabel] = function () { if (args.yes) { args.yes(); } $(this).urvanovSyntaxHighlighterDialog('close'); }; options.buttons[args.noLabel] = function () { if (args.no) { args.no(); } $(this).urvanovSyntaxHighlighterDialog('close'); }; options = $.extend(options, args.options); options.open = function () { $('.ui-button').addClass('button-primary'); $(this).parent().find('button:nth-child(' + options.selectedButtonIndex + ')').focus(); if (args.options.open) { args.options.open(); } }; $('
').appendTo('body').html(args.html).urvanovSyntaxHighlighterDialog(options); // Can be modified afterwards return args; }; }; })(jQueryUrvanovSyntaxHighlighter);

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