JAVASCRIPT 13
Scripts.js Guest on 29th September 2020 03:17:05 PM
  1.  
  2.  
  3. if (typeof jscolor != "undefined") {
  4.         jscolor.bindClass = "simple-fields-field-type-color";
  5. }
  6.  
  7. // global js stuff; sorry about that...
  8. var simple_fields_metabox_field_file_select_input_selectedID = null,
  9.         simple_fields_is_simple_fields_popup = false,
  10.         simple_fields_datepicker_args = { "clickInput": true },
  11.         simple_fields_tinymce_iframes = [];
  12.  
  13. // Global module for Simple Fields, using the reveal module pattern
  14. var simple_fields = (function() {
  15.  
  16.         var
  17.                 my = {};
  18.  
  19.         // Output debug/log
  20.         my.log = function() {
  21.                 if ( typeof console !== "undefined" ) {
  22.                         console.log.apply( console, arguments );
  23.                 }
  24.         };
  25.  
  26.         my.init = function() {
  27.                 my.addListeners();
  28.         };
  29.  
  30.         my.addListeners = function() {
  31.  
  32.         };
  33.  
  34.         return my;
  35.  
  36. })();
  37.  
  38. // Class for file field
  39. // Handles showing media popup, selecting and clearing files
  40. var simple_fields_file_field = (function($) {
  41.  
  42.         var my = {
  43.                 media_frame: null,
  44.                 selectors : {
  45.                         select: ".simple-fields-metabox-field-file-select",
  46.                         clear: ".simple-fields-metabox-field-file-clear"
  47.                 }
  48.         };
  49.  
  50.         my.init = function() {
  51.                 //simple_fields.log("init simple_fields_file_field");
  52.                 my.addListeners();
  53.         };
  54.  
  55.         my.openFileBrowser = function(e) {
  56.  
  57.                 e.preventDefault();
  58.  
  59.                 var target = $(e.target),
  60.                         container_div = target.closest(".simple-fields-metabox-field-file");
  61.  
  62.                 // Code based on https://github.com/thomasgriffin/New-Media-Image-Uploader/blob/master/js/media.js
  63.                 // TODO: how do i get the filter dropdown?? i think i've tried everything!
  64.  
  65.                 /*
  66.         my.media_frame = wp.media({
  67.             className: 'media-frame simple-fields-media-frame',
  68.             frame: 'select', // select | post. select removed left nav (insert media, create gallery, set featured image)
  69.             multiple: false,
  70.             title: _wpMediaViewsL10n.mediaLibraryTitle,
  71.             button: {
  72.                 text: _wpMediaViewsL10n.insertIntoPost
  73.             }
  74.         });
  75.                 */
  76.  
  77.                 // http://simple-fields.com/documentation/field-types/file/#comment-1182
  78.                 //ā€”ā€”ā€”ā€“ replaced with the following: ā€”ā€”ā€”-
  79.                 //see: http://stackoverflow.com/questions/14674948/wordpress-3-5-media-manager-add-my-own-backbone-js-views
  80.                 my.media_frame = wp.media({
  81.                         state: 'mystate',
  82.                         className: 'media-frame simple-fields-media-frame',
  83.                         frame: 'select', // select | post. select removed left nav (insert media, create gallery, set featured image)
  84.                         multiple: false,
  85.                         title: _wpMediaViewsL10n.mediaLibraryTitle,
  86.                         button: {
  87.                                 text: _wpMediaViewsL10n.insertIntoPost
  88.                         }
  89.                 });
  90.  
  91.                 my.media_frame.states.add([
  92.  
  93.                         new wp.media.controller.Library({
  94.                                 id: 'mystate',
  95.                                 title: _wpMediaViewsL10n.mediaLibraryTitle,
  96.                                 priority: 2,
  97.                                 toolbar: 'select',
  98.                                 filterable: 'uploaded',
  99.                                 library: wp.media.query(my.media_frame.options.library),
  100.                                 multiple: my.media_frame.options.multiple ? 'reset' : true,
  101.                                 editable: true,
  102.                                 displayUserSettings: true,
  103.                                 displaySettings: true,
  104.                                 allowLocalEdits: true
  105.                                 //AttachmentView: ?
  106.  
  107.                         }),
  108.                 ]);
  109.  
  110.  
  111.  
  112.  
  113.         my.media_frame.on('select', function(){
  114.  
  115.             var file_json = my.media_frame.state().get('selection').first().toJSON(),
  116.                                 file_thumb = "",
  117.                                 thumb_url = "";
  118.  
  119.                         if (file_json.type === "image") {
  120.  
  121.                                 if (file_json.sizes) {
  122.  
  123.                                         // get thumbnail for image. in rare cases thumbs are missing and then fallback to full size
  124.                                         if (file_json.sizes.thumbnail && file_json.sizes.thumbnail.url) {
  125.                                                 thumb_url = file_json.sizes.thumbnail.url;
  126.                                         } else if (file_json.sizes.full && file_json.sizes.full.url) {
  127.                                                 thumb_url = file_json.sizes.full.url;
  128.                                         }
  129.  
  130.                                 } else if (file_json.url) {
  131.  
  132.                                         thumb_url = file_json.url;
  133.  
  134.                                 }
  135.                         }
  136.  
  137.                         if ( ! thumb_url && file_json.icon) {
  138.  
  139.                                 thumb_url = file_json.icon;
  140.  
  141.                         }
  142.  
  143.                         if (thumb_url) {
  144.                                 file_thumb = "<img src='" + thumb_url + "' alt='' />";
  145.                         }
  146.  
  147.                         container_div.find(".simple-fields-metabox-field-file-selected-image").html( file_thumb );
  148.  
  149.                         container_div.find(".simple-fields-metabox-field-file-fileID").val( file_json.id );
  150.                         container_div.find(".simple-fields-metabox-field-file-view").attr( "href", file_json.url );
  151.                         container_div.find(".simple-fields-metabox-field-file-edit").attr( "href", file_json.editLink );
  152.                         container_div.find(".simple-fields-metabox-field-file-selected-image-name").text( file_json.title + " (" + file_json.filename + ")" );
  153.  
  154.             container_div.addClass("simple-fields-metabox-field-file-is-selected");
  155.                         container_div.effect("highlight", 4000);
  156.  
  157.         });
  158.  
  159.         my.media_frame.open();
  160.  
  161.         };
  162.  
  163.         my.clearSelectedFile = function(e) {
  164.  
  165.                 e.preventDefault();
  166.  
  167.                 var target = $(e.target),
  168.                         container_div = target.closest(".simple-fields-metabox-field-file");
  169.  
  170.                         container_div.find(".simple-fields-metabox-field-file-fileID").val("");
  171.                         container_div.find(".simple-fields-metabox-field-file-selected-image").html("");
  172.                         container_div.removeClass("simple-fields-metabox-field-file-is-selected");
  173.  
  174.         };
  175.  
  176.         my.addListeners = function() {
  177.                 jQuery(document).on("click", my.selectors.select, my.openFileBrowser);
  178.                 jQuery(document).on("click", my.selectors.clear, my.clearSelectedFile);
  179.         };
  180.  
  181.         return my;
  182.  
  183. })(jQuery);
  184.  
  185. // Self invoking function for our JS stuff
  186. (function($) {
  187.  
  188.         // add new field to the field group
  189.         function simple_fields_field_group_add_field() {
  190.  
  191.                 simple_fields_highest_field_id++;
  192.  
  193.                 var data = {
  194.                         action: 'simple_fields_field_group_add_field',
  195.                         simple_fields_highest_field_id: simple_fields_highest_field_id
  196.                 };
  197.  
  198.                 $.post(ajaxurl, data, function(response) {
  199.                         var ul = $("#simple-fields-field-group-existing-fields ul:first"),
  200.                                 $response = $(response);
  201.                         ul.append($response);
  202.                         ul.find(".simple-fields-field-group-one-field:last").effect("highlight").find(".simple-fields-field-group-one-field-name").focus();
  203.                 });
  204.  
  205.         }
  206.  
  207.         // Add TinyMCE-editors to textareas of type WYSIWYG
  208.         // Script for this is usually outputted by wp_editor, but it does not exist when calling via ajax
  209.         function simple_fields_metabox_tinymce_attach() {
  210.                 //return;
  211.                 simple_fields.log("simple_fields_metabox_tinymce_attach()");
  212.  
  213.                 if (typeof( tinyMCE ) == "object" && typeof( tinyMCEPreInit ) == "object" ) {
  214.                         var tiny_init = {};
  215.                         var qt_init = {};
  216.                         var elms_to_convert = jQuery("textarea.simple-fields-metabox-field-textarea-tinymce");
  217.                         var dom = tinymce.DOM;
  218.                         var id, qt, visual_tab, html_tab, is_new, new_ed, new_qt, wrap_id, qttb, txtarea_el, qtname, qtbuttons;
  219.                         for (var i=0; i<elms_to_convert.length; i++) {
  220.                                 id = elms_to_convert[i].id;
  221.                                 is_new = (id + '').indexOf('new', 0);
  222.                                 is_new = is_new === -1 ? false : true;
  223.                                 if (is_new && typeof(tinyMCE.editors[id]) === 'undefined') {
  224.                                         wrap_id = 'wp-'+id+'-wrap';
  225.                                         iframe_id = id+"_ifr";
  226.                                         iframe_el = jQuery("#"+iframe_id);
  227.                                         txtarea_el = dom.get(id);
  228.                                         qtname = 'qt_'+id;
  229.                                         qttb = 'qt_'+id+'_toolbar';
  230.                                         if ( typeof(QTags) !== undefined && iframe_el.canvas !== undefined ) {
  231.                                                 QTags.closeAllTags(iframe_el.id);
  232.                                         }
  233.                                         if (!tinyMCEPreInit.qtInit[id]) {
  234.                                                 qt_init = tinyMCEPreInit.qtInit[id] = jQuery.extend({}, tinyMCEPreInit.qtInit['content']);
  235.                                                 qt_init.id = id;
  236.                                                 qt_init.buttons = qt_init.buttons.replace(",fullscreen", "");
  237.                                                 try { new_qt = new QTags( tinyMCEPreInit.qtInit[id] ); } catch(e){}
  238.                                                 QTags._buttonsInit();
  239.                                         }
  240.  
  241.                                         if (!tinyMCEPreInit.mceInit[id]) {
  242.                                                 tiny_init = tinyMCEPreInit.mceInit[id] = jQuery.extend({}, tinyMCEPreInit.mceInit['content']);
  243.                                         } else {
  244.                                                 tiny_init = tinyMCEPreInit.mceInit[id];
  245.                                         }
  246.                                         tiny_init.mode = 'exact';
  247.                                         tiny_init.elements = id;
  248.                                         tiny_init.theme_advanced_resizing = true;
  249.                                         new_ed = new tinymce.Editor(id, tiny_init);
  250.                                         new_ed.render();
  251.  
  252.                                         visual_tab = jQuery("#"+id+"-tmce");
  253.                                         visual_tab.removeAttr('onclick').click(function() {
  254.                                                 var id = this.id.substr(0, (this.id.length-5));
  255.                                                 var wrap_id = 'wp-'+id+'-wrap';
  256.                                                 var qttb = 'qt_'+id+'_toolbar';
  257.                                                 var dom = tinyMCE.DOM;
  258.                                                 var ed = tinyMCE.get(id);
  259.                                                 ed.show();
  260.                                                 dom.hide(qttb);
  261.                                                 dom.addClass(wrap_id, 'tmce-active');
  262.                                                 dom.removeClass(wrap_id, 'html-active');
  263.                                         });
  264.  
  265.                                         html_tab = jQuery("#"+id+"-html");
  266.                                         html_tab.removeAttr('onclick').click(function() {
  267.                                                 var id = this.id.substr(0, (this.id.length-5));
  268.                                                 var wrap_id = 'wp-'+id+'-wrap';
  269.                                                 var qttb = 'qt_'+id+'_toolbar';
  270.                                                 var dom = tinyMCE.DOM;
  271.                                                 var ed = tinyMCE.get(id);
  272.                                                 ed.hide();
  273.                                                 dom.show(qttb);
  274.                                                 dom.addClass(wrap_id, 'html-active');
  275.                                                 dom.removeClass(wrap_id, 'tmce-active');
  276.                                         });
  277.                                 dom.hide(qttb);
  278.                                 dom.addClass(wrap_id, 'tmce-active');
  279.                                 dom.removeClass(wrap_id, 'html-active');
  280.                                 }
  281.                         }
  282.                 }
  283.  
  284.                 return false;
  285.  
  286.         }
  287.  
  288.         function simple_fields_get_fieldID_from_this(t) {
  289.                 var $t = $(t);
  290.                 return $t.closest(".simple-fields-field-group-one-field").find(".simple-fields-field-group-one-field-id").val();
  291.         }
  292.  
  293.         /* radiobuttons */
  294.         function simple_fields_field_type_options_radiobutton_values_add(fieldID, fieldRadiobuttonID) {
  295.                 var $html = $("<li>\n<div class='simple-fields-field-type-options-radiobutton-handle'></div>\n<input class='regular-text' name='field["+fieldID+"][type_radiobuttons_options][radiobutton_num_"+fieldRadiobuttonID+"][value]' type='text' />\n<input class='simple-fields-field-type-options-radiobutton-deleted' name='field["+fieldID+"][type_radiobuttons_options][radiobutton_num_"+fieldRadiobuttonID+"][deleted]' type='hidden' value='0' />\n<input class='simple-fields-field-type-options-radiobutton-checked-by-default-values' type='radio' name='field["+fieldID+"][type_radiobuttons_options][checked_by_default_num]' value='radiobutton_num_"+fieldRadiobuttonID+"' />\n <a class='simple-fields-field-type-options-radiobutton-delete' href='#' style='display: none;'>"+sfstrings.txtDelete+"</a> </li>");
  296.                 var $fieldLI = $(".simple-fields-field-group-one-field-id-"+fieldID);
  297.                 $fieldLI.find(".simple-fields-field-type-options-radiobutton-values-added").append($html);
  298.                 $html.effect("highlight");
  299.                 $html.find("input:first").focus();
  300.                 $fieldLI.find(".simple-fields-field-type-options-radiobutton-values-added").sortable({
  301.                         axis: 'y',
  302.                         containment: "parent",
  303.                         handle: ".simple-fields-field-type-options-radiobutton-handle"
  304.                 });
  305.         }
  306.  
  307.  
  308.         function simple_fields_field_type_options_dropdown_values_add(fieldID, fieldDropdownID) {
  309.                 var $html = $("<li>\n<div class='simple-fields-field-type-options-dropdown-handle'></div>\n<input class='regular-text' name='field["+fieldID+"][type_dropdown_options][dropdown_num_"+fieldDropdownID+"][value]' type='text' />\n<input class='simple-fields-field-type-options-dropdown-deleted' name='field["+fieldID+"][type_dropdown_options][dropdown_num_"+fieldDropdownID+"][deleted]' type='hidden' value='0' />\n <a class='simple-fields-field-type-options-dropdown-delete' href='#' style='display: none;'>"+sfstrings.txtDelete+"</a> </li>");
  310.                 var $fieldLI = $(".simple-fields-field-group-one-field-id-"+fieldID);
  311.                 $fieldLI.find(".simple-fields-field-type-options-dropdown-values-added").append($html);
  312.                 $html.find("input:first").focus();
  313.                 $html.effect("highlight");
  314.                 $("ul.simple-fields-field-type-options-dropdown-values-added").sortable({
  315.                         axis: 'y',
  316.                         containment: "parent",
  317.                         handle: ".simple-fields-field-type-options-dropdown-handle"
  318.                 });
  319.         }
  320.  
  321.         /**
  322.          * Edit field types/fields: on field type dropdown change
  323.          */
  324.         $(document).on("change", "select.simple-fields-field-type", function(e) {
  325.                 // look for simple-fields-field-type-options-<type> and show if
  326.                 var $t = $(this);
  327.                 var selectedFieldType = $t.val();
  328.                 var $li = $t.closest("li");
  329.                 $li.find(".simple-fields-field-type-options").hide();
  330.                 $li.find(".simple-fields-field-type-options-" + selectedFieldType).fadeIn("slow");
  331.         });
  332.  
  333.         // Field group edit, show delete icon for field
  334.         $(document).on("mouseenter mouseleave", "li.simple-fields-field-group-one-field", function(e) {
  335.                 var $t = $(this);
  336.                 if ("mouseenter" == e.type) {
  337.                         $t.find("div.delete").show();
  338.                 } else {
  339.                         $t.find("div.delete").hide();
  340.                 }
  341.         });
  342.  
  343.         // field group field: click on delete button
  344.         $(document).on("click", "li.simple-fields-field-group-one-field div.delete a", function() {
  345.                 if (confirm(sfstrings.confirmDelete)) {
  346.                         $(this).closest("li").find(".hidden_deleted").attr("value", 1);
  347.                         $(this).closest("li").hide("slow");
  348.                         // Remove required attribute on slug so we can post the form even if slug is empty
  349.                         $(this).closest("li").find("input[required]").removeAttr("required");
  350.                 } else {
  351.                 }
  352.                 return false;
  353.         });
  354.  
  355.         // Field group edit, confirm delete field group
  356.         $(document).on("click", ".simple-fields-field-group-delete a", function() {
  357.                 if (confirm(sfstrings.confirmDeleteGroup)) return true;
  358.                 return false;
  359.         });
  360.  
  361.         // Edit post connector, confirm connector delete
  362.         $(document).on("click", ".simple-fields-post-connector-delete a", function() {
  363.                 if (confirm(sfstrings.confirmDeleteConnector)) return true;
  364.                 return false;
  365.         });
  366.  
  367.         // Edit field group, field radiobutton
  368.         $(document).on("click", "a.simple-fields-field-type-options-radiobutton-values-add", function(e) {
  369.                 // finds the highest existing button id
  370.                 var $fieldRadiobuttonHighestID = $(this).closest(".simple-fields-field-group-one-field").find(".simple-fields-field-group-one-field-radiobuttons-highest-id");
  371.                 var fieldRadiobuttonHighestID = $fieldRadiobuttonHighestID.val();
  372.                 fieldRadiobuttonHighestID++;
  373.                 // add it
  374.                 simple_fields_field_type_options_radiobutton_values_add(simple_fields_get_fieldID_from_this(this), fieldRadiobuttonHighestID);
  375.                 $fieldRadiobuttonHighestID.val(fieldRadiobuttonHighestID);
  376.                 return false;
  377.         });
  378.         // Radiobutton: show delete link
  379.         $(document).on("mouseenter mouseleave", "ul.simple-fields-field-type-options-radiobutton-values-added li", function(e) {
  380.                 var $t = $(this);
  381.                 if ("mouseenter" == e.type) {
  382.                         $t.find(".simple-fields-field-type-options-radiobutton-delete").show();
  383.                 } else {
  384.                         $t.find(".simple-fields-field-type-options-radiobutton-delete").hide();
  385.                 }
  386.         });
  387.  
  388.         // Radiobutton: click delete
  389.         $(document).on("click", ".simple-fields-field-type-options-radiobutton-delete", function(e) {
  390.                 if (confirm(sfstrings.confirmDeleteRadio)) {
  391.                         $(this).closest("li").hide("slow").find(".simple-fields-field-type-options-radiobutton-deleted").val("1");
  392.                 }
  393.                 return false;
  394.         });
  395.  
  396.         // Dropdown: add value
  397.         $(document).on("click", "a.simple-fields-field-type-options-dropdown-values-add", function(e) {
  398.                 // finds the highest existing button id
  399.                 var $fieldDropdownHighestID = $(this).closest(".simple-fields-field-group-one-field").find(".simple-fields-field-group-one-field-dropdown-highest-id");
  400.                 var fieldDropdownHighestID = $fieldDropdownHighestID.val();
  401.                 fieldDropdownHighestID++;
  402.                 // add it
  403.                 simple_fields_field_type_options_dropdown_values_add(simple_fields_get_fieldID_from_this(this), fieldDropdownHighestID);
  404.                 $fieldDropdownHighestID.val(fieldDropdownHighestID);
  405.                 return false;
  406.         });
  407.  
  408.         $(document).on("mouseenter mouseleave", "ul.simple-fields-field-type-options-dropdown-values-added li", function(e) {
  409.                 var $t = $(this);
  410.                 if ("mouseenter" == e.type) {
  411.                         $t.find(".simple-fields-field-type-options-dropdown-delete").show();
  412.                 } else {
  413.                         $t.find(".simple-fields-field-type-options-dropdown-delete").hide();
  414.                 }
  415.         });
  416.  
  417.         // Dropdown: delete
  418.         $(document).on("click", ".simple-fields-field-type-options-dropdown-delete", function(e) {
  419.                 if (confirm(sfstrings.confirmDeleteDropdown)) {
  420.                         $(this).closest("li").hide("slow").find(".simple-fields-field-type-options-dropdown-deleted").val("1");
  421.                 }
  422.                 return false;
  423.         });
  424.  
  425.         // get a field group from the server and add it to the page (aka "the add button")
  426.         // what we need:
  427.         // - field group id
  428.         // - post id
  429.         // - num in (new) set
  430.         var simple_fields_new_fields_count = 0;
  431.         $(document).on("click", "div.simple-fields-metabox-field-add a:nth-child(1)", function(e) {
  432.  
  433.                 var $t = $(this).closest("div.simple-fields-metabox-field-add");
  434.  
  435.                 $t.text(sfstrings.adding);
  436.                 var $wrapper = $t.parents(".simple-fields-meta-box-field-group-wrapper");
  437.                 var field_group_id = $wrapper.find("input[name=simple-fields-meta-box-field-group-id]").val();
  438.                 var post_id = jQuery("#post_ID").val();
  439.  
  440.                 var data = {
  441.                         "action": 'simple_fields_metabox_fieldgroup_add',
  442.                         "simple_fields_new_fields_count": simple_fields_new_fields_count,
  443.                         "field_group_id": field_group_id,
  444.                         "post_id": post_id
  445.                 };
  446.  
  447.                 var is_link_at_bottom = $t.hasClass("simple-fields-metabox-field-add-bottom");
  448.  
  449.                 $.post(ajaxurl, data, function(response) {
  450.  
  451.                         $ul = $wrapper.find("ul.simple-fields-metabox-field-group-fields");
  452.                         $response = $( response.replace(/^\s+/, '') );
  453.                         $response.hide();
  454.                         if (is_link_at_bottom) {
  455.                                 $ul.append($response);
  456.                         } else {
  457.                                 $ul.prepend($response);
  458.                         }
  459.  
  460.                         var wrapper = $ul.closest("div.simple-fields-meta-box-field-group-wrapper");
  461.  
  462.                         $response.slideDown("slow", function() {
  463.  
  464.                                 simple_fields_metabox_tinymce_attach();
  465.  
  466.                                 // add jscolor to possibly new fields
  467.                                 jscolor.init();
  468.  
  469.                                 // add datepicker too
  470.                                 $('input.simple-fields-field-type-date', $ul).datePicker(simple_fields_datepicker_args);
  471.  
  472.                                 // Fire event so plugins can listen to the add-button
  473.                                 $(document.body).trigger("field_group_added", $response);
  474.  
  475.                         });
  476.  
  477.                         $t.html("<a href='#'>+ "+sfstrings.add+"</a>");
  478.  
  479.                         wrapper.addClass("simple-fields-meta-box-field-group-wrapper-has-fields-added");
  480.  
  481.                 });
  482.  
  483.                 simple_fields_new_fields_count++;
  484.  
  485.                 return false;
  486.         });
  487.  
  488.         // edit post connector: delete
  489.         $(document).on("click", "a.simple-fields-post-connector-addded-fields-delete", function(e) {
  490.                 if (confirm(sfstrings.confirmRemoveGroupConnector)) {
  491.                         $(this).closest("li").hide("slow").find(".simple-fields-post-connector-added-field-deleted").val("1");
  492.                 }
  493.                 return false;
  494.         });
  495.  
  496.         // Edit post, field group delete
  497.         $(document).on("click", "div.simple-fields-metabox-field-group-delete a", function(e) {
  498.  
  499.                 if (confirm(sfstrings.confirmRemoveGroup)) {
  500.                         var li = $(this).closest("li");
  501.                         li.hide("slow", function() {
  502.  
  503.                                 var wrapper = li.closest("div.simple-fields-meta-box-field-group-wrapper");
  504.                                 var ul = li.closest("ul.simple-fields-metabox-field-group-fields");
  505.                                 li.remove();
  506.  
  507.                                 // If removed last fieldgroup, hide the add link
  508.                                 if (ul.find(">li").length === 0) {
  509.                                         //wrapper.find("div.simple-fields-metabox-field-add-bottom").hide("slow");
  510.                                         wrapper.removeClass("simple-fields-meta-box-field-group-wrapper-has-fields-added");
  511.                                 } else {
  512.                                         wrapper.addClass("simple-fields-meta-box-field-group-wrapper-has-fields-added");
  513.                                 }
  514.  
  515.                         });
  516.  
  517.                 }
  518.  
  519.                 return false;
  520.  
  521.         });
  522.  
  523.  
  524.  
  525.         // media buttons
  526.         /*
  527.         $(document).on("click", ".simple_fields_tiny_media_button", function(e){
  528.                 var id = $(this).closest(".simple-fields-metabox-field").find("textarea").attr("id");
  529.                 simple_fields_focusTextArea(id);
  530.                 simple_fields_thickbox($(this).get(0));
  531.                 return false;
  532.         });
  533.         */
  534.  
  535.         // field type post
  536.         // popup a dialog where the user can choose the post to attach
  537.         $(document).on("click", "a.simple-fields-metabox-field-post-select", function(e) {
  538.  
  539.                 e.preventDefault();
  540.  
  541.                 var a = $(this),
  542.                         div = a.closest(".simple-fields-metabox-field"),
  543.                         enabled_post_types = div.find("input[name='simple-fields-metabox-field-post-enabled-post-types']").val(),
  544.                         additional_args = div.find('input[name="additional_arguments"]').val();
  545.  
  546.                 $("div.simple-fields-meta-box-field-group-field-type-post-dialog").data("originLink", this).dialog({
  547.                         width: 480,
  548.                         height: 'auto',
  549.                         modal: true,
  550.                         dialogClass: 'wp-dialog',
  551.                         zIndex: 300000,
  552.                         open: function(event, ui) {
  553.                                 var originLink = $($(this).data("originLink")),
  554.                                         arr_enabled_post_types = enabled_post_types.split(",");
  555.                                 $(this).text("Loading...").load(ajaxurl, {
  556.                                         "action": "simple_fields_field_type_post_dialog_load",
  557.                                         "arr_enabled_post_types": arr_enabled_post_types,
  558.                                         "additional_arguments" : additional_args
  559.                                 });
  560.                         }
  561.                 });
  562.  
  563.         });
  564.  
  565.  
  566.         /**
  567.          * Post type dialog: click on cancel link
  568.          * Close the dialog
  569.          */
  570.         $(document).on("click", ".simple-fields-postdialog-link-cancel", function(e) {
  571.                 e.preventDefault();
  572.                 $("div.simple-fields-meta-box-field-group-field-type-post-dialog").dialog("close");
  573.         });
  574.  
  575.         /**
  576.          * in dialog: click on post type = show posts of that type
  577.          */
  578.         $(document).on("click", ".simple-fields-meta-box-field-group-field-type-post-dialog-post-types a", function(e) {
  579.  
  580.                 e.preventDefault();
  581.  
  582.                 var a = $(this),
  583.                         dialog = $("div.simple-fields-meta-box-field-group-field-type-post-dialog"),
  584.                         originLink = $(dialog.data("originLink")),
  585.                         div = originLink.closest(".simple-fields-metabox-field"),
  586.                         enabled_post_types = div.find("input[name='simple-fields-metabox-field-post-enabled-post-types']").val();
  587.  
  588.                 // add this too?
  589.                 // additional_args = div.find('input[name="additional_arguments"]').val();
  590.  
  591.                 dialog.load(ajaxurl, {
  592.                         "action": "simple_fields_field_type_post_dialog_load",
  593.                         "str_enabled_post_types": enabled_post_types,
  594.                         "selected_post_type": a.attr("href")
  595.                 });
  596.  
  597.         });
  598.  
  599.         /**
  600.          * in dialog: click on a post = update input in field group and then close dialog
  601.          */
  602.         $(document).on("click", ".simple-fields-meta-box-field-group-field-type-post-dialog-post-posts a", function(e) {
  603.  
  604.                 e.preventDefault();
  605.  
  606.                 var a = $(this);
  607.                 var post_id = a.attr("href").match(/post=([\d]+)/)[1];
  608.                 var dialog = $("div.simple-fields-meta-box-field-group-field-type-post-dialog");
  609.                 var originLink = dialog.data("originLink");
  610.                 originLink = $(originLink);
  611.  
  612.                 var div = originLink.closest(".simple-fields-metabox-field");
  613.                 div.find(".simple-fields-field-type-post-postID").attr("value", post_id);
  614.                 div.find(".simple-fields-field-type-post-postName").text(a.text());
  615.                 div.find(".simple-fields-metabox-field-post-clear").show();
  616.                 div.find(".simple-fields-field-type-post-postName").show();
  617.  
  618.                 dialog.dialog("close");
  619.  
  620.         });
  621.  
  622.         /**
  623.          * Field type post: link clear = clear post id and name
  624.          */
  625.         $(document).on("click", ".simple-fields-metabox-field-post-clear", function(e) {
  626.                 e.preventDefault();
  627.                 var a = $(this);
  628.                 var div = a.closest(".simple-fields-metabox-field");
  629.                 div.find(".simple-fields-metabox-field-post-clear").hide("fast");
  630.                 div.find(".simple-fields-field-type-post-postName").hide("fast");
  631.                 div.find(".simple-fields-field-type-post-postID").attr("value", "");
  632.         });
  633.  
  634.         /**
  635.          * ondomready
  636.          */
  637.         $(function() {
  638.  
  639.                 // boot up
  640.                 simple_fields.init();
  641.                 simple_fields_file_field.init();
  642.  
  643.                 // If meta_box_field_group_wrapper exists on the page then it's a page with simple fields-fields
  644.                 var meta_box_field_group_wrapper = $("div.simple-fields-meta-box-field-group-wrapper");
  645.                 if (meta_box_field_group_wrapper.length) {
  646.  
  647.                         // Add chosen to select dropdown
  648.                         // ...or not, didn't get the widths to work
  649.                         // $("div.simple-fields-fieldgroups-field-type-dropdown select").chosen({});
  650.  
  651.                 }
  652.  
  653.                 $("#simple-fields-field-group-existing-fields ul:first").sortable({
  654.                         distance: 10,
  655.                         axis: 'y',
  656.                         handle: ".simple-fields-field-group-one-field-handle"
  657.                 });
  658.  
  659.                 // radiobutton
  660.                 $(".simple-fields-field-type-options-radiobutton-values-added").sortable({
  661.                         axis: 'y',
  662.                         containment: "parent",
  663.                         handle: ".simple-fields-field-type-options-radiobutton-handle"
  664.                 });
  665.  
  666.                 $("#simple-fields-field-group-add-field").click(function() {
  667.                         simple_fields_field_group_add_field();
  668.                         return false;
  669.                 });
  670.  
  671.                 /* dropdown */
  672.                 $("ul.simple-fields-field-type-options-dropdown-values-added").sortable({
  673.                         axis: 'y',
  674.                         containment: "parent",
  675.                         handle: ".simple-fields-field-type-options-dropdown-handle"
  676.                 });
  677.  
  678.                 /**
  679.                  * post connector
  680.                  */
  681.                 $("#simple-fields-post-connector-add-fields").change(function() {
  682.                         var selectedVal = $(this).val();
  683.                         var selectedValName = $(this).find(":selected").text();
  684.                         $(this).val("");
  685.  
  686.                         var str_html = "";
  687.                         str_html += "<li>";
  688.  
  689.                         str_html += "<div class='simple-fields-post-connector-addded-fields-handle'></div>";
  690.                         str_html += "<div class='simple-fields-post-connector-addded-fields-field-name'>" + selectedValName + "</div>";
  691.                         str_html += "<input type='hidden' name='added_fields["+selectedVal+"][id]' value='"+selectedVal+"' />";
  692.                         str_html += "<input type='hidden' name='added_fields["+selectedVal+"][name]' value='"+selectedValName+"' />";
  693.                         str_html += "<input type='hidden' name='added_fields["+selectedVal+"][deleted]' value='0' />";
  694.  
  695.                         str_html += "<div class='simple-fields-post-connector-addded-fields-options'>";
  696.                         str_html += sfstrings.context;
  697.                         str_html += "<select class='simple-fields-post-connector-addded-fields-option-context' name='added_fields["+selectedVal+"][context]'>";
  698.                         str_html += "<option value='normal'>"+sfstrings.normal+"</option>";
  699.                         str_html += "<option value='advanced'>"+sfstrings.advanced+"</option>";
  700.                         str_html += "<option value='side'>"+sfstrings.side+"</option>";
  701.                         str_html += "</select>";
  702.  
  703.                         str_html += "Priority";
  704.                         str_html += "<select class='simple-fields-post-connector-addded-fields-option-priority' name='added_fields["+selectedVal+"][priority]'>";
  705.                         str_html += "<option value='low'>"+sfstrings.low+"</option>";
  706.                         str_html += "<option value='high'>"+sfstrings.high+"</option>";
  707.                         str_html += "</select>";
  708.                         str_html += "</div>";
  709.  
  710.                         str_html += "<a href='#' class='simple-fields-post-connector-addded-fields-delete'>"+sfstrings.txtDelete+"</a>";
  711.  
  712.                         str_html += "</li>";
  713.  
  714.                         var $html = $(str_html);
  715.  
  716.                         $("#simple-fields-post-connector-added-fields").append($html);
  717.  
  718.                         $html.effect("highlight");
  719.  
  720.  
  721.                 });
  722.  
  723.                 // Edit post connector, add sortable to list of added fields
  724.                 $("#simple-fields-post-connector-added-fields").sortable({
  725.                         axis: 'y',
  726.                         xcontainment: "parent",
  727.                         handle: ".simple-fields-post-connector-addded-fields-handle"
  728.                 });
  729.  
  730.                 // Edit post connector, show delete link on mouse over
  731.                 $(document).on("mouseenter mouseleave", "#simple-fields-post-connector-added-fields li", function(e) {
  732.                         $t = $(this);
  733.                         if ("mouseenter" == e.type) {
  734.                                 $t.find(".simple-fields-post-connector-addded-fields-delete").show();
  735.                         } else {
  736.                                 $t.find(".simple-fields-post-connector-addded-fields-delete").hide();
  737.                         }
  738.                 });
  739.  
  740.  
  741.                 /**
  742.                  * edit posts
  743.                  */
  744.                 // Change connector, show message that you must save
  745.                 $(document).on("change", "#simple-fields-post-edit-side-field-settings-select-connector", function() {
  746.                         $("#simple-fields-post-edit-side-field-settings-select-connector-please-save").show("fast");
  747.                 });
  748.  
  749.                 // Click show custom field keys
  750.                 $(document).on("click", "#simple-fields-post-edit-side-field-settings-show-keys", function() {
  751.                         var $this = $(this),
  752.                                 divs = $("div.simple-fields-metabox-field-custom-field-key");
  753.  
  754.                         if (divs.is(":hidden")) {
  755.                                 divs.addClass("simple-fields-metabox-field-custom-field-key-visible");
  756.                         } else {
  757.                                 divs.removeClass("simple-fields-metabox-field-custom-field-key-visible");
  758.                         }
  759.                         return false;
  760.                 });
  761.  
  762.                 // array with the ids of the textareas that are converted to tiny editors
  763.                 var arr_tiny_mce_buffers;
  764.  
  765.                 // Edit post, make repeatable field sortable
  766.                 $("ul.simple-fields-metabox-field-group-fields-repeatable").sortable({
  767.                         distance: 10,
  768.                         axis: 'y',
  769.                         handle: ".simple-fields-metabox-field-group-handle",
  770.                         start: function(event, ui) {
  771.  
  772.                                 // when sorting starts we must do things with the tinymce editors, or content will get lost
  773.  
  774.                                 // the item being moved
  775.                                 var li = $( ui.item.get(0) );
  776.  
  777.                                 // get all the textareas that are wysiwyg-editors
  778.                                 var tinymce_textareas = li.find(".simple-fields-metabox-field-textarea-tinymce-wrapper textarea.simple-fields-metabox-field-textarea-tinymce");
  779.  
  780.                                 arr_tiny_mce_buffers = [];
  781.  
  782.                                 // Add contents of each tiny editor to buffer
  783.                                 tinymce_textareas.each(function() {
  784.  
  785.                                         var elm = $(this),
  786.                                                 elm_id = elm.attr("id");
  787.  
  788.                                         if ( elm_id ) {
  789.  
  790.                                                 arr_tiny_mce_buffers.push ({
  791.                                                         "id": elm_id,
  792.                                                         "html": $('#' + elm_id + '_ifr').contents().find('body').html()
  793.                                                 });
  794.  
  795.                                                 // Remove editor instance
  796.                                                 tinyMCE.execCommand('mceRemoveControl', false, elm_id);
  797.  
  798.  
  799.                                         }
  800.                                 });
  801.  
  802.                         },
  803.                         stop: function(event, ui) {
  804.  
  805.                                 // when sorting stops we restore values to tiny mce editors
  806.                                 if (arr_tiny_mce_buffers && arr_tiny_mce_buffers.length) {
  807.  
  808.                                         $.each(arr_tiny_mce_buffers, function(i, val) {
  809.  
  810.                                                 tinyMCE.execCommand('mceAddControl', false, val.id);
  811.                                                 $('#' + val.id + '_ifr').contents().find('body').html(val.html);
  812.                                                 tinyMCE.get(val.id).execCommand('mceRepaint');
  813.  
  814.                                         });
  815.  
  816.                                 }
  817.  
  818.                         }
  819.                 });
  820.  
  821.                 // Media browser: make sure search and filter works by adding hidden inputs
  822.                 // would have been best to do this in PHP, but I can't find any filter for it
  823.                 if ( window.pagenow && window.pagenow == "media-upload-popup" && window.location.search.match(/simple_fields_dummy=/) ) {
  824.  
  825.                         var frm_filter = $("form#filter");
  826.  
  827.                         // http://localhost/wp-admin/media-upload.php?simple_fields_dummy=1&simple_fields_action=select_file&simple_fields_file_field_unique_id=simple_fields_fieldgroups_12_1_0&post_id=-1&
  828.                         // get these
  829.                         // simple_fields_dummy=1
  830.                         // simple_fields_action=select_file
  831.                         // simple_fields_file_field_unique_id=simple_fields_fieldgroups_12_1_0
  832.                         var params = {
  833.                                 "simple_fields_dummy": 1,
  834.                                 "simple_fields_action": "select_file"
  835.                         };
  836.  
  837.                         var match = window.location.search.match(/simple_fields_file_field_unique_id=([\w]+)/);
  838.                         params.simple_fields_file_field_unique_id = match[1];
  839.  
  840.                         // all params that start with "simple_fields_"
  841.                         $.each(params, function(key, val) {
  842.                                 frm_filter.append("<input type='hidden' name='"+key+"' value='"+val+"' />");
  843.                         });
  844.  
  845.                 }
  846.  
  847.                 if (sfstrings.page_type == "post") {
  848.  
  849.                         // attach TinyMCE to textareas
  850.                         // this is only needen when adding with ajax?
  851.                         //simple_fields_metabox_tinymce_attach();
  852.  
  853.                         // type date
  854.                         $('input.simple-fields-field-type-date').datePicker();
  855.  
  856.                 }
  857.  
  858.         }); // end domready
  859.  
  860. }(jQuery)); // self invoke function
  861.  
  862.  
  863. // for media selectors
  864. // code from custom field template by Hiroaki Miyashita
  865. var simple_fields_tmpFocus; // will contain the id of the tinymce field we are adding a file to
  866. var simple_fields_isTinyMCE = false;
  867. // when click the thickbox-link, "unset" our vars
  868. jQuery(".thickbox").bind("click", function (e) {
  869.         simple_fields_tmpFocus = undefined;
  870.         simple_fields_isTinyMCE = false;
  871. });
  872.  
  873. function simple_fields_focusTextArea(id) {
  874.         var elm;
  875.         if ( typeof tinyMCE != "undefined" ) {
  876.                 elm = tinyMCE.get(id);
  877.         }
  878.         if (!elm || elm.isHidden()) {
  879.                 elm = document.getElementById(id);
  880.                 simple_fields_isTinyMCE = false;
  881.         } else {
  882.                 simple_fields_isTinyMCE = true;
  883.         }
  884.         simple_fields_tmpFocus = elm;
  885.         elm.focus();
  886.         if (elm.createTextRange) {
  887.                 var range = elm.createTextRange();
  888.                 range.move("character", elm.value.length);
  889.                 range.select();
  890.         } else if (elm.setSelectionRange) {
  891.                 elm.setSelectionRange(elm.value.length, elm.value.length);
  892.         }
  893. }
  894.  
  895. function simple_fields_thickbox(link) {
  896.         var t = link.title || link.name || null;
  897.         var a = link.href || link.alt;
  898.         var g = link.rel || false;
  899.         tb_show(t,a,g);
  900.         link.blur();
  901.         return false;
  902. }
  903.  
  904.  
  905. // called when selecting file from tiny-area, if I remember correct
  906. /*
  907. function simple_fields_metabox_file_select(file_id, file_thumb, file_name) {
  908.         simple_fields_metabox_field_file_select_input_selectedID.val(file_id);
  909.         $file_thumb_tag = jQuery("<img src='"+file_thumb+"' alt='' />");
  910.         var sfmf = simple_fields_metabox_field_file_select_input_selectedID.closest(".simple-fields-metabox-field");
  911.         sfmf.find(".simple-fields-metabox-field-file-selected-image").html($file_thumb_tag);
  912.         sfmf.find(".simple-fields-metabox-field-file-selected-image-name").text(file_name);
  913.         sfmf.effect("highlight", 4000);
  914.  
  915. }
  916. */
  917. // simple-fields-metabox-field-file

Paste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

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