/*jslint browser: true, devel: true, indent: 4, maxerr: 50, sub: true */ /*global jQuery, tb_show, tb_remove */ /** * Custom jQuery for Custom Metaboxes and Fields */ jQuery(document).ready(function (jQuery) { 'use strict'; var formfield; /** * Initialize timepicker (this will be moved inline in a future release) */ jQuery('.bsf_timepicker').each(function () { jQuery('#' + jQuery(this).attr('id')).timePicker({ startTime: "07:00", endTime: "22:00", show24Hours: false, separator: ':', step: 30 }); }); /** * Initialize jQuery UI datepicker (this will be moved inline in a future release) */ jQuery('.bsf_datepicker').each(function () { //jQuery('#' + jQuery(this).attr('id')).datepicker(); jQuery('#' + jQuery(this).attr('id')).datepicker({ dateFormat: 'yy-mm-dd' }); // For more options see http://jqueryui.com/demos/datepicker/#option-dateFormat }); // Wrap date picker in class to narrow the scope of jQuery UI CSS and prevent conflicts jQuery("#ui-datepicker-div").wrap('
'); /** * Initialize color picker */ if (typeof jQuery.wp === 'object' && typeof jQuery.wp.wpColorPicker === 'function') { jQuery('input:text.bsf_colorpicker').wpColorPicker(); } else { jQuery('input:text.bsf_colorpicker').each(function (i) { jQuery(this).after('
'); jQuery('#picker-' + i).hide().farbtastic(jQuery(this)); }) .focus(function () { jQuery(this).next().show(); }) .blur(function () { jQuery(this).next().hide(); }); } /** * File and image upload handling */ jQuery('.bsf_upload_file').change(function () { formfield = jQuery(this).attr('name'); jQuery('#' + formfield + '_id').val(""); }); jQuery('.bsf_upload_button').live('click', function () { var buttonLabel; formfield = jQuery(this).prev('input').attr('name'); buttonLabel = 'Use as ' + jQuery('label[for=' + formfield + ']').text(); tb_show('', 'media-upload.php?post_id=' + jQuery('#post_ID').val() + '&type=file&bsf_force_send=true&bsf_send_label=' + buttonLabel + '&TB_iframe=true'); return false; }); jQuery('.bsf_remove_file_button').live('click', function () { formfield = jQuery(this).attr('rel'); jQuery('input#' + formfield).val(''); jQuery('input#' + formfield + '_id').val(''); jQuery(this).parent().remove(); return false; }); window.original_send_to_editor = window.send_to_editor; window.send_to_editor = function (html) { var itemurl, itemclass, itemClassBits, itemid, htmlBits, itemtitle, image, uploadStatus = true; if (formfield) { if (jQuery(html).html(html).find('img').length > 0) { itemurl = jQuery(html).html(html).find('img').attr('src'); // Use the URL to the size selected. itemclass = jQuery(html).html(html).find('img').attr('class'); // Extract the ID from the returned class name. itemClassBits = itemclass.split(" "); itemid = itemClassBits[itemClassBits.length - 1]; itemid = itemid.replace('wp-image-', ''); } else { // It's not an image. Get the URL to the file instead. htmlBits = html.split("'"); // jQuery seems to strip out XHTML when assigning the string to an object. Use alternate method. itemurl = htmlBits[1]; // Use the URL to the file. itemtitle = htmlBits[2]; itemtitle = itemtitle.replace('>', ''); itemtitle = itemtitle.replace('', ''); itemid = ""; // TO DO: Get ID for non-image attachments. } image = /(jpe?g|png|gif|ico)jQuery/gi; if (itemurl.match(image)) { uploadStatus = '
Remove Image
'; } else { // No output preview if it's not an image // Standard generic output if it's not an image. html = 'View File'; uploadStatus = '
' + html + '   Remove
'; } jQuery('#' + formfield).val(itemurl); jQuery('#' + formfield + '_id').val(itemid); jQuery('#' + formfield).siblings('.bsf_media_status').slideDown().html(uploadStatus); tb_remove(); } else { window.original_send_to_editor(html); } formfield = ''; }; /** * Ajax oEmbed display */ // ajax on paste jQuery('.bsf_oembed').bind('paste', function (e) { var pasteitem = jQuery(this); // paste event is fired before the value is filled, so wait a bit setTimeout(function () { // fire our ajax function doCMBajax(pasteitem, 'paste'); }, 100); }).blur(function () { // when leaving the input setTimeout(function () { // if it's been 2 seconds, hide our spinner jQuery('.postbox table.bsf_metabox .cmb-spinner').hide(); }, 2000); }); // ajax when typing jQuery('.bsf_metabox').on('keyup', '.bsf_oembed', function (event) { // fire our ajax function doCMBajax(jQuery(this), event); }); // function for running our ajax function doCMBajax(obj, e) { // get typed value var oembed_url = obj.val(); // only proceed if the field contains more than 6 characters if (oembed_url.length < 6) return; // only proceed if the user has pasted, pressed a number, letter, or whitelisted characters if (e === 'paste' || e.which <= 90 && e.which >= 48 || e.which >= 96 && e.which <= 111 || e.which == 8 || e.which == 9 || e.which == 187 || e.which == 190) { // get field id var field_id = obj.attr('id'); // get our inputs context for pinpointing var context = obj.parents('.bsf_metabox tr td'); // show our spinner jQuery('.cmb-spinner', context).show(); // clear out previous results jQuery('.embed_wrap', context).html(''); // and run our ajax function setTimeout(function () { // if they haven't typed in 500 ms if (jQuery('.bsf_oembed:focus').val() == oembed_url) { jQuery.ajax({ type : 'post', dataType : 'json', url : window.ajaxurl, data : { 'action': 'bsf_oembed_handler', 'oembed_url': oembed_url, 'field_id': field_id, 'post_id': window.bsf_ajax_data.post_id, 'bsf_ajax_nonce': window.bsf_ajax_data.ajax_nonce }, success: function (response) { // if we have a response id if (typeof response.id !== 'undefined') { // hide our spinner jQuery('.cmb-spinner', context).hide(); // and populate our results from ajax response jQuery('.embed_wrap', context).html(response.result); } } }); } }, 500); } } });