2014-07-30 18:01:07 +00:00
/*global woocommerce_admin_meta_boxes */
2015-06-03 15:32:40 +00:00
jQuery ( function ( $ ) {
2014-07-08 13:14:29 +00:00
// Scroll to first checked category - https://github.com/scribu/wp-category-checklist-tree/blob/d1c3c1f449e1144542efa17dde84a9f52ade1739/category-checklist-tree.php
2015-06-03 15:32:40 +00:00
$ ( function ( ) {
$ ( '[id$="-all"] > ul.categorychecklist' ) . each ( function ( ) {
var $list = $ ( this ) ;
var $firstChecked = $list . find ( ':checked' ) . first ( ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
if ( ! $firstChecked . length ) {
2014-07-08 13:14:29 +00:00
return ;
2015-06-03 15:32:40 +00:00
}
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
var pos _first = $list . find ( 'input' ) . position ( ) . top ;
2014-07-08 13:14:29 +00:00
var pos _checked = $firstChecked . position ( ) . top ;
2015-06-03 15:32:40 +00:00
$list . closest ( '.tabs-panel' ) . scrollTop ( pos _checked - pos _first + 5 ) ;
2014-07-08 13:14:29 +00:00
} ) ;
} ) ;
// Prevent enter submitting post form
2015-06-03 15:32:40 +00:00
$ ( '#upsell_product_data' ) . bind ( 'keypress' , function ( e ) {
if ( e . keyCode === 13 ) {
return false ;
}
2014-07-08 13:14:29 +00:00
} ) ;
// Type box
$ ( '.type_box' ) . appendTo ( '#woocommerce-product-data h3.hndle span' ) ;
2015-06-03 15:32:40 +00:00
$ ( function ( ) {
2014-07-08 13:14:29 +00:00
// Prevent inputs in meta box headings opening/closing contents
2015-06-03 15:32:40 +00:00
$ ( '#woocommerce-product-data h3.hndle' ) . unbind ( 'click.postboxes' ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
jQuery ( '#woocommerce-product-data' ) . on ( 'click' , 'h3.hndle' , function ( event ) {
2014-07-08 13:14:29 +00:00
// If the user clicks on some form input inside the h3 the box should not be toggled
2015-06-03 15:32:40 +00:00
if ( $ ( event . target ) . filter ( 'input, option, label, select' ) . length ) {
2014-07-08 13:14:29 +00:00
return ;
2015-06-03 15:32:40 +00:00
}
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
$ ( '#woocommerce-product-data' ) . toggleClass ( 'closed' ) ;
2014-07-08 13:14:29 +00:00
} ) ;
} ) ;
// Catalog Visibility
2015-06-03 15:32:40 +00:00
$ ( '#catalog-visibility .edit-catalog-visibility' ) . click ( function ( ) {
if ( $ ( '#catalog-visibility-select' ) . is ( ':hidden' ) ) {
$ ( '#catalog-visibility-select' ) . slideDown ( 'fast' ) ;
$ ( this ) . hide ( ) ;
2014-07-08 13:14:29 +00:00
}
return false ;
} ) ;
$ ( '#catalog-visibility .save-post-visibility' ) . click ( function ( ) {
$ ( '#catalog-visibility-select' ) . slideUp ( 'fast' ) ;
$ ( '#catalog-visibility .edit-catalog-visibility' ) . show ( ) ;
2015-06-03 15:32:40 +00:00
var label = $ ( 'input[name=_visibility]:checked' ) . attr ( 'data-label' ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
if ( $ ( 'input[name=_featured]' ) . is ( ':checked' ) ) {
label = label + ', ' + woocommerce _admin _meta _boxes . featured _label ;
$ ( 'input[name=_featured]' ) . attr ( 'checked' , 'checked' ) ;
2014-07-08 13:14:29 +00:00
}
2015-06-03 15:32:40 +00:00
$ ( '#catalog-visibility-display' ) . text ( label ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
2015-06-03 15:32:40 +00:00
$ ( '#catalog-visibility .cancel-post-visibility' ) . click ( function ( ) {
$ ( '#catalog-visibility-select' ) . slideUp ( 'fast' ) ;
$ ( '#catalog-visibility .edit-catalog-visibility' ) . show ( ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
var current _visibility = $ ( '#current_visibility' ) . val ( ) ;
var current _featured = $ ( '#current_featured' ) . val ( ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
$ ( 'input[name=_visibility]' ) . removeAttr ( 'checked' ) ;
$ ( 'input[name=_visibility][value=' + current _visibility + ']' ) . attr ( 'checked' , 'checked' ) ;
2014-07-08 13:14:29 +00:00
var label = $ ( 'input[name=_visibility]:checked' ) . attr ( 'data-label' ) ;
2015-06-03 15:32:40 +00:00
if ( current _featured === 'yes' ) {
label = label + ', ' + woocommerce _admin _meta _boxes . featured _label ;
$ ( 'input[name=_featured]' ) . attr ( 'checked' , 'checked' ) ;
2014-07-08 13:14:29 +00:00
} else {
2015-06-03 15:32:40 +00:00
$ ( 'input[name=_featured]' ) . removeAttr ( 'checked' ) ;
2014-07-08 13:14:29 +00:00
}
2015-06-03 15:32:40 +00:00
$ ( '#catalog-visibility-display' ) . text ( label ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
// PRODUCT TYPE SPECIFIC OPTIONS
2014-07-30 18:01:07 +00:00
$ ( 'select#product-type' ) . change ( function ( ) {
2014-07-08 13:14:29 +00:00
// Get value
2014-07-30 18:01:07 +00:00
var select _val = $ ( this ) . val ( ) ;
2014-07-08 13:14:29 +00:00
2014-07-30 18:01:07 +00:00
if ( 'variable' === select _val ) {
$ ( 'input#_manage_stock' ) . change ( ) ;
$ ( 'input#_downloadable' ) . prop ( 'checked' , false ) ;
$ ( 'input#_virtual' ) . removeAttr ( 'checked' ) ;
} else if ( 'grouped' === select _val ) {
$ ( 'input#_downloadable' ) . prop ( 'checked' , false ) ;
$ ( 'input#_virtual' ) . removeAttr ( 'checked' ) ;
} else if ( 'external' === select _val ) {
$ ( 'input#_downloadable' ) . prop ( 'checked' , false ) ;
$ ( 'input#_virtual' ) . removeAttr ( 'checked' ) ;
2014-07-08 13:14:29 +00:00
}
show _and _hide _panels ( ) ;
2014-07-30 18:01:07 +00:00
$ ( 'ul.wc-tabs li:visible' ) . eq ( 0 ) . find ( 'a' ) . click ( ) ;
2014-07-08 13:14:29 +00:00
2015-04-13 15:37:22 +00:00
$ ( document . body ) . trigger ( 'woocommerce-product-type-change' , select _val , $ ( this ) ) ;
2014-07-08 13:14:29 +00:00
} ) . change ( ) ;
2015-04-13 15:37:22 +00:00
$ ( document . body ) . on ( 'woocommerce-product-type-change' , function ( e , select _val ) {
if ( 'variable' !== select _val && 0 < $ ( '#variable_product_options input[name^=variable_sku]' ) . length && $ ( document . body ) . triggerHandler ( 'woocommerce-display-product-type-alert' , select _val ) !== false ) {
2014-08-20 22:46:30 +00:00
window . alert ( woocommerce _admin _meta _boxes . i18n _product _type _alert ) ;
}
} ) ;
2015-06-03 15:32:40 +00:00
$ ( 'input#_downloadable, input#_virtual' ) . change ( function ( ) {
2014-07-08 13:14:29 +00:00
show _and _hide _panels ( ) ;
} ) ;
function show _and _hide _panels ( ) {
2015-06-03 15:32:40 +00:00
var product _type = $ ( 'select#product-type' ) . val ( ) ;
var is _virtual = $ ( 'input#_virtual:checked' ) . size ( ) ;
var is _downloadable = $ ( 'input#_downloadable:checked' ) . size ( ) ;
2014-07-08 13:14:29 +00:00
// Hide/Show all with rules
var hide _classes = '.hide_if_downloadable, .hide_if_virtual' ;
var show _classes = '.show_if_downloadable, .show_if_virtual, .show_if_external' ;
$ . each ( woocommerce _admin _meta _boxes . product _types , function ( index , value ) {
hide _classes = hide _classes + ', .hide_if_' + value ;
show _classes = show _classes + ', .show_if_' + value ;
} ) ;
$ ( hide _classes ) . show ( ) ;
$ ( show _classes ) . hide ( ) ;
// Shows rules
if ( is _downloadable ) {
2015-06-03 15:32:40 +00:00
$ ( '.show_if_downloadable' ) . show ( ) ;
2014-07-08 13:14:29 +00:00
}
if ( is _virtual ) {
2015-06-03 15:32:40 +00:00
$ ( '.show_if_virtual' ) . show ( ) ;
2014-07-08 13:14:29 +00:00
}
2015-06-03 15:32:40 +00:00
$ ( '.show_if_' + product _type ) . show ( ) ;
2014-07-08 13:14:29 +00:00
// Hide rules
if ( is _downloadable ) {
2015-06-03 15:32:40 +00:00
$ ( '.hide_if_downloadable' ) . hide ( ) ;
2014-07-08 13:14:29 +00:00
}
if ( is _virtual ) {
2015-06-03 15:32:40 +00:00
$ ( '.hide_if_virtual' ) . hide ( ) ;
2014-07-08 13:14:29 +00:00
}
2015-06-03 15:32:40 +00:00
$ ( '.hide_if_' + product _type ) . hide ( ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
$ ( 'input#_manage_stock' ) . change ( ) ;
2014-07-08 13:14:29 +00:00
}
// Sale price schedule
2015-06-03 15:32:40 +00:00
$ ( '.sale_price_dates_fields' ) . each ( function ( ) {
var $these _sale _dates = $ ( this ) ;
2014-07-08 13:14:29 +00:00
var sale _schedule _set = false ;
var $wrap = $these _sale _dates . closest ( 'div, table' ) ;
2015-06-03 15:32:40 +00:00
$these _sale _dates . find ( 'input' ) . each ( function ( ) {
if ( $ ( this ) . val ( ) !== '' ) {
2014-07-08 13:14:29 +00:00
sale _schedule _set = true ;
2015-06-03 15:32:40 +00:00
}
2014-07-08 13:14:29 +00:00
} ) ;
if ( sale _schedule _set ) {
2015-06-03 15:32:40 +00:00
$wrap . find ( '.sale_schedule' ) . hide ( ) ;
$wrap . find ( '.sale_price_dates_fields' ) . show ( ) ;
2014-07-08 13:14:29 +00:00
} else {
2015-06-03 15:32:40 +00:00
$wrap . find ( '.sale_schedule' ) . show ( ) ;
$wrap . find ( '.sale_price_dates_fields' ) . hide ( ) ;
2014-07-08 13:14:29 +00:00
}
} ) ;
2015-06-03 15:32:40 +00:00
$ ( '#woocommerce-product-data' ) . on ( 'click' , '.sale_schedule' , function ( ) {
var $wrap = $ ( this ) . closest ( 'div, table' ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
$ ( this ) . hide ( ) ;
$wrap . find ( '.cancel_sale_schedule' ) . show ( ) ;
$wrap . find ( '.sale_price_dates_fields' ) . show ( ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
2015-06-03 15:32:40 +00:00
$ ( '#woocommerce-product-data' ) . on ( 'click' , '.cancel_sale_schedule' , function ( ) {
2014-07-08 13:14:29 +00:00
var $wrap = $ ( this ) . closest ( 'div, table' ) ;
$ ( this ) . hide ( ) ;
2015-06-03 15:32:40 +00:00
$wrap . find ( '.sale_schedule' ) . show ( ) ;
$wrap . find ( '.sale_price_dates_fields' ) . hide ( ) ;
$wrap . find ( '.sale_price_dates_fields' ) . find ( 'input' ) . val ( '' ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
// File inputs
2015-06-03 15:32:40 +00:00
$ ( '#woocommerce-product-data' ) . on ( 'click' , '.downloadable_files a.insert' , function ( ) {
$ ( this ) . closest ( '.downloadable_files' ) . find ( 'tbody' ) . append ( $ ( this ) . data ( 'row' ) ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
2015-06-03 15:32:40 +00:00
$ ( '#woocommerce-product-data' ) . on ( 'click' , '.downloadable_files a.delete' , function ( ) {
$ ( this ) . closest ( 'tr' ) . remove ( ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
// STOCK OPTIONS
2015-06-03 15:32:40 +00:00
$ ( 'input#_manage_stock' ) . change ( function ( ) {
if ( $ ( this ) . is ( ':checked' ) ) {
$ ( 'div.stock_fields' ) . show ( ) ;
2014-07-08 13:14:29 +00:00
} else {
2015-06-03 15:32:40 +00:00
$ ( 'div.stock_fields' ) . hide ( ) ;
2014-07-08 13:14:29 +00:00
}
} ) . change ( ) ;
// DATE PICKER FIELDS
2015-07-07 10:49:12 +00:00
$ ( '.sale_price_dates_fields' ) . each ( function ( ) {
var dates = $ ( this ) . find ( 'input' ) . datepicker ( {
defaultDate : '' ,
dateFormat : 'yy-mm-dd' ,
numberOfMonths : 1 ,
showButtonPanel : true ,
onSelect : function ( selectedDate ) {
var option = $ ( this ) . is ( '#_sale_price_dates_from, .sale_price_dates_from' ) ? 'minDate' : 'maxDate' ;
var instance = $ ( this ) . data ( 'datepicker' ) ;
var date = $ . datepicker . parseDate ( instance . settings . dateFormat || $ . datepicker . _defaults . dateFormat , selectedDate , instance . settings ) ;
dates . not ( this ) . datepicker ( 'option' , option , date ) ;
}
} ) ;
2014-07-08 13:14:29 +00:00
} ) ;
// ATTRIBUTE TABLES
// Initial order
var woocommerce _attribute _items = $ ( '.product_attributes' ) . find ( '.woocommerce_attribute' ) . get ( ) ;
woocommerce _attribute _items . sort ( function ( a , b ) {
2015-06-03 15:32:40 +00:00
var compA = parseInt ( $ ( a ) . attr ( 'rel' ) , 10 ) ;
var compB = parseInt ( $ ( b ) . attr ( 'rel' ) , 10 ) ;
2014-07-08 13:14:29 +00:00
return ( compA < compB ) ? - 1 : ( compA > compB ) ? 1 : 0 ;
2015-06-03 15:32:40 +00:00
} ) ;
$ ( woocommerce _attribute _items ) . each ( function ( idx , itm ) {
$ ( '.product_attributes' ) . append ( itm ) ;
} ) ;
2014-07-08 13:14:29 +00:00
function attribute _row _indexes ( ) {
2015-06-03 15:32:40 +00:00
$ ( '.product_attributes .woocommerce_attribute' ) . each ( function ( index , el ) {
$ ( '.attribute_position' , el ) . val ( parseInt ( $ ( el ) . index ( '.product_attributes .woocommerce_attribute' ) , 10 ) ) ;
2014-07-08 13:14:29 +00:00
} ) ;
2015-06-03 15:32:40 +00:00
}
2014-07-08 13:14:29 +00:00
2015-06-03 15:32:40 +00:00
$ ( '.product_attributes .woocommerce_attribute' ) . each ( function ( index , el ) {
if ( $ ( el ) . css ( 'display' ) !== 'none' && $ ( el ) . is ( '.taxonomy' ) ) {
$ ( 'select.attribute_taxonomy' ) . find ( 'option[value="' + $ ( el ) . data ( 'taxonomy' ) + '"]' ) . attr ( 'disabled' , 'disabled' ) ;
2014-11-26 11:35:07 +00:00
}
} ) ;
2014-07-08 13:14:29 +00:00
// Add rows
2015-06-03 15:53:34 +00:00
$ ( 'button.add_attribute' ) . on ( 'click' , function ( ) {
2014-12-22 14:16:12 +00:00
var size = $ ( '.product_attributes .woocommerce_attribute' ) . size ( ) ;
var attribute = $ ( 'select.attribute_taxonomy' ) . val ( ) ;
var $wrapper = $ ( this ) . closest ( '#product_attributes' ) . find ( '.product_attributes' ) ;
var product _type = $ ( 'select#product-type' ) . val ( ) ;
var data = {
action : 'woocommerce_add_attribute' ,
taxonomy : attribute ,
i : size ,
security : woocommerce _admin _meta _boxes . add _attribute _nonce
} ;
2014-07-08 13:14:29 +00:00
2014-12-22 14:16:12 +00:00
$wrapper . block ( { message : null , overlayCSS : { background : '#fff' , opacity : 0.6 } } ) ;
2014-07-08 13:14:29 +00:00
2014-12-22 14:16:12 +00:00
$ . post ( woocommerce _admin _meta _boxes . ajax _url , data , function ( response ) {
$wrapper . append ( response ) ;
if ( product _type !== 'variable' ) {
$wrapper . find ( '.enable_variation' ) . hide ( ) ;
}
2015-04-13 15:37:22 +00:00
$ ( document . body ) . trigger ( 'wc-enhanced-select-init' ) ;
2014-07-08 13:14:29 +00:00
attribute _row _indexes ( ) ;
2014-12-22 14:16:12 +00:00
$wrapper . unblock ( ) ;
2015-01-20 22:12:55 +00:00
2015-04-13 15:37:22 +00:00
$ ( document . body ) . trigger ( 'woocommerce_added_attribute' ) ;
2014-12-22 14:16:12 +00:00
} ) ;
2014-07-08 13:14:29 +00:00
2014-12-22 14:16:12 +00:00
if ( attribute ) {
$ ( 'select.attribute_taxonomy' ) . find ( 'option[value="' + attribute + '"]' ) . attr ( 'disabled' , 'disabled' ) ;
$ ( 'select.attribute_taxonomy' ) . val ( '' ) ;
2014-07-08 13:14:29 +00:00
}
2014-12-22 14:16:12 +00:00
return false ;
2014-07-08 13:14:29 +00:00
} ) ;
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . on ( 'blur' , 'input.attribute_name' , function ( ) {
$ ( this ) . closest ( '.woocommerce_attribute' ) . find ( 'strong.attribute_name' ) . text ( $ ( this ) . val ( ) ) ;
2014-07-08 13:14:29 +00:00
} ) ;
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . on ( 'click' , 'button.select_all_attributes' , function ( ) {
$ ( this ) . closest ( 'td' ) . find ( 'select option' ) . attr ( 'selected' , 'selected' ) ;
$ ( this ) . closest ( 'td' ) . find ( 'select' ) . change ( ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . on ( 'click' , 'button.select_no_attributes' , function ( ) {
$ ( this ) . closest ( 'td' ) . find ( 'select option' ) . removeAttr ( 'selected' ) ;
$ ( this ) . closest ( 'td' ) . find ( 'select' ) . change ( ) ;
2014-07-08 13:14:29 +00:00
return false ;
} ) ;
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . on ( 'click' , 'button.remove_row' , function ( ) {
2015-07-08 17:48:06 +00:00
if ( window . confirm ( woocommerce _admin _meta _boxes . remove _attribute ) ) {
2015-06-03 15:53:34 +00:00
var $parent = $ ( this ) . parent ( ) . parent ( ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:53:34 +00:00
if ( $parent . is ( '.taxonomy' ) ) {
$parent . find ( 'select, input[type=text]' ) . val ( '' ) ;
2014-07-08 13:14:29 +00:00
$parent . hide ( ) ;
2015-06-03 15:53:34 +00:00
$ ( 'select.attribute_taxonomy' ) . find ( 'option[value="' + $parent . data ( 'taxonomy' ) + '"]' ) . removeAttr ( 'disabled' ) ;
2014-07-08 13:14:29 +00:00
} else {
2015-06-03 15:53:34 +00:00
$parent . find ( 'select, input[type=text]' ) . val ( '' ) ;
2014-07-08 13:14:29 +00:00
$parent . hide ( ) ;
attribute _row _indexes ( ) ;
}
}
return false ;
} ) ;
// Attribute ordering
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . sortable ( {
items : '.woocommerce_attribute' ,
cursor : 'move' ,
axis : 'y' ,
2014-07-08 13:14:29 +00:00
handle : 'h3' ,
2015-06-03 15:53:34 +00:00
scrollSensitivity : 40 ,
2014-07-08 13:14:29 +00:00
forcePlaceholderSize : true ,
helper : 'clone' ,
opacity : 0.65 ,
placeholder : 'wc-metabox-sortable-placeholder' ,
2015-06-03 15:53:34 +00:00
start : function ( event , ui ) {
ui . item . css ( 'background-color' , '#f6f6f6' ) ;
2014-07-08 13:14:29 +00:00
} ,
2015-06-03 15:53:34 +00:00
stop : function ( event , ui ) {
ui . item . removeAttr ( 'style' ) ;
2014-07-08 13:14:29 +00:00
attribute _row _indexes ( ) ;
}
} ) ;
// Add a new attribute (via ajax)
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . on ( 'click' , 'button.add_new_attribute' , function ( ) {
2014-07-08 13:14:29 +00:00
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . block ( { message : null , overlayCSS : { background : '#fff' , opacity : 0.6 } } ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:53:34 +00:00
var $wrapper = $ ( this ) . closest ( '.woocommerce_attribute' ) ;
var attribute = $wrapper . data ( 'taxonomy' ) ;
2015-07-08 17:48:06 +00:00
var new _attribute _name = window . prompt ( woocommerce _admin _meta _boxes . new _attribute _prompt ) ;
2014-07-08 13:14:29 +00:00
if ( new _attribute _name ) {
var data = {
2015-06-03 15:53:34 +00:00
action : 'woocommerce_add_new_attribute' ,
taxonomy : attribute ,
term : new _attribute _name ,
security : woocommerce _admin _meta _boxes . add _attribute _nonce
2014-07-08 13:14:29 +00:00
} ;
$ . post ( woocommerce _admin _meta _boxes . ajax _url , data , function ( response ) {
if ( response . error ) {
// Error
2015-07-08 17:48:06 +00:00
window . alert ( response . error ) ;
2014-07-08 13:14:29 +00:00
} else if ( response . slug ) {
// Success
2015-06-03 15:53:34 +00:00
$wrapper . find ( 'select.attribute_values' ) . append ( '<option value="' + response . slug + '" selected="selected">' + response . name + '</option>' ) ;
$wrapper . find ( 'select.attribute_values' ) . change ( ) ;
2014-07-08 13:14:29 +00:00
}
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . unblock ( ) ;
2014-07-08 13:14:29 +00:00
} ) ;
} else {
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . unblock ( ) ;
2014-07-08 13:14:29 +00:00
}
return false ;
} ) ;
// Save attributes and update variations
2015-06-03 15:53:34 +00:00
$ ( '.save_attributes' ) . on ( 'click' , function ( ) {
2014-07-08 13:14:29 +00:00
2015-07-08 17:48:06 +00:00
$ ( '.product_attributes' ) . block ( {
message : null ,
overlayCSS : {
background : '#fff' ,
opacity : 0.6
}
} ) ;
2014-07-08 13:14:29 +00:00
var data = {
2015-06-03 15:53:34 +00:00
post _id : woocommerce _admin _meta _boxes . post _id ,
data : $ ( '.product_attributes' ) . find ( 'input, select, textarea' ) . serialize ( ) ,
action : 'woocommerce_save_attributes' ,
security : woocommerce _admin _meta _boxes . save _attributes _nonce
2014-07-08 13:14:29 +00:00
} ;
2015-07-08 17:48:06 +00:00
$ . post ( woocommerce _admin _meta _boxes . ajax _url , data , function ( ) {
2014-07-08 13:14:29 +00:00
var this _page = window . location . toString ( ) ;
this _page = this _page . replace ( 'post-new.php?' , 'post.php?post=' + woocommerce _admin _meta _boxes . post _id + '&action=edit&' ) ;
// Load variations panel
2015-06-03 15:53:34 +00:00
$ ( '#variable_product_options' ) . block ( { message : null , overlayCSS : { background : '#fff' , opacity : 0.6 } } ) ;
$ ( '#variable_product_options' ) . load ( this _page + ' #variable_product_options_inner' , function ( ) {
$ ( '#variable_product_options' ) . unblock ( ) ;
} ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:53:34 +00:00
$ ( '.product_attributes' ) . unblock ( ) ;
2014-07-08 13:14:29 +00:00
} ) ;
2014-07-30 18:01:07 +00:00
} ) ;
2014-07-08 13:14:29 +00:00
// Uploading files
var downloadable _file _frame ;
var file _path _field ;
2015-07-08 17:48:06 +00:00
jQuery ( document . body ) . on ( 'click' , '.upload_file_button' , function ( event ) {
var $el = $ ( this ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:53:34 +00:00
file _path _field = $el . closest ( 'tr' ) . find ( 'td.file_url input' ) ;
2014-07-08 13:14:29 +00:00
event . preventDefault ( ) ;
// If the media frame already exists, reopen it.
if ( downloadable _file _frame ) {
downloadable _file _frame . open ( ) ;
return ;
}
var downloadable _file _states = [
// Main states.
new wp . media . controller . Library ( {
library : wp . media . query ( ) ,
multiple : true ,
title : $el . data ( 'choose' ) ,
priority : 20 ,
2015-06-03 15:53:34 +00:00
filterable : 'uploaded'
2014-07-08 13:14:29 +00:00
} )
] ;
// Create the media frame.
downloadable _file _frame = wp . media . frames . downloadable _file = wp . media ( {
// Set the title of the modal.
title : $el . data ( 'choose' ) ,
library : {
type : ''
} ,
button : {
2015-06-03 15:53:34 +00:00
text : $el . data ( 'update' )
2014-07-08 13:14:29 +00:00
} ,
multiple : true ,
2015-06-03 15:53:34 +00:00
states : downloadable _file _states
2014-07-08 13:14:29 +00:00
} ) ;
// When an image is selected, run a callback.
downloadable _file _frame . on ( 'select' , function ( ) {
var file _path = '' ;
2015-06-03 15:53:34 +00:00
var selection = downloadable _file _frame . state ( ) . get ( 'selection' ) ;
2014-07-08 13:14:29 +00:00
selection . map ( function ( attachment ) {
attachment = attachment . toJSON ( ) ;
2015-06-03 15:53:34 +00:00
if ( attachment . url ) {
file _path = attachment . url ;
}
} ) ;
2014-07-08 13:14:29 +00:00
file _path _field . val ( file _path ) ;
} ) ;
// Set post to 0 and set our custom type
downloadable _file _frame . on ( 'ready' , function ( ) {
downloadable _file _frame . uploader . options . uploader . params = {
type : 'downloadable_product'
} ;
} ) ;
// Finally, open the modal.
downloadable _file _frame . open ( ) ;
} ) ;
// Download ordering
2015-06-03 15:53:34 +00:00
jQuery ( '.downloadable_files tbody' ) . sortable ( {
items : 'tr' ,
cursor : 'move' ,
axis : 'y' ,
2014-07-08 13:14:29 +00:00
handle : 'td.sort' ,
2015-06-03 15:53:34 +00:00
scrollSensitivity : 40 ,
2014-07-08 13:14:29 +00:00
forcePlaceholderSize : true ,
helper : 'clone' ,
2015-06-03 15:53:34 +00:00
opacity : 0.65
2014-07-08 13:14:29 +00:00
} ) ;
// Product gallery file uploads
var product _gallery _frame ;
2015-06-03 15:53:34 +00:00
var $image _gallery _ids = $ ( '#product_image_gallery' ) ;
var $product _images = $ ( '#product_images_container ul.product_images' ) ;
2014-07-08 13:14:29 +00:00
2015-06-03 15:53:34 +00:00
jQuery ( '.add_product_images' ) . on ( 'click' , 'a' , function ( event ) {
var $el = $ ( this ) ;
2014-07-08 13:14:29 +00:00
var attachment _ids = $image _gallery _ids . val ( ) ;
event . preventDefault ( ) ;
// If the media frame already exists, reopen it.
if ( product _gallery _frame ) {
product _gallery _frame . open ( ) ;
return ;
}
// Create the media frame.
product _gallery _frame = wp . media . frames . product _gallery = wp . media ( {
// Set the title of the modal.
2015-06-03 15:53:34 +00:00
title : $el . data ( 'choose' ) ,
2014-07-08 13:14:29 +00:00
button : {
2015-06-03 15:53:34 +00:00
text : $el . data ( 'update' )
2014-07-08 13:14:29 +00:00
} ,
2015-06-03 15:53:34 +00:00
states : [
2014-07-08 13:14:29 +00:00
new wp . media . controller . Library ( {
2015-06-03 15:53:34 +00:00
title : $el . data ( 'choose' ) ,
filterable : 'all' ,
multiple : true
2014-07-08 13:14:29 +00:00
} )
]
} ) ;
// When an image is selected, run a callback.
product _gallery _frame . on ( 'select' , function ( ) {
2015-06-03 15:53:34 +00:00
var selection = product _gallery _frame . state ( ) . get ( 'selection' ) ;
2014-07-08 13:14:29 +00:00
selection . map ( function ( attachment ) {
attachment = attachment . toJSON ( ) ;
if ( attachment . id ) {
2015-06-03 15:53:34 +00:00
var attachment _ids = attachment _ids ? attachment _ids + ',' + attachment . id : attachment . id ;
var attachment _image = attachment . sizes . thumbnail ? attachment . sizes . thumbnail . url : attachment . url ;
2015-02-19 14:15:28 +00:00
2015-07-08 17:48:06 +00:00
$product _images . append ( '<li class="image" data-attachment_id="' + attachment . id + '"><img src="' + attachment _image + '" /><ul class="actions"><li><a href="#" class="delete" title="' + $el . data ( 'delete' ) + '">' + $el . data ( 'text' ) + '</a></li></ul></li>' ) ;
2014-07-08 13:14:29 +00:00
}
} ) ;
$image _gallery _ids . val ( attachment _ids ) ;
} ) ;
// Finally, open the modal.
product _gallery _frame . open ( ) ;
} ) ;
// Image ordering
$product _images . sortable ( {
items : 'li.image' ,
cursor : 'move' ,
2015-06-03 15:53:34 +00:00
scrollSensitivity : 40 ,
2014-07-08 13:14:29 +00:00
forcePlaceholderSize : true ,
forceHelperSize : false ,
helper : 'clone' ,
opacity : 0.65 ,
placeholder : 'wc-metabox-sortable-placeholder' ,
2015-06-03 15:53:34 +00:00
start : function ( event , ui ) {
ui . item . css ( 'background-color' , '#f6f6f6' ) ;
2014-07-08 13:14:29 +00:00
} ,
2015-06-03 15:53:34 +00:00
stop : function ( event , ui ) {
ui . item . removeAttr ( 'style' ) ;
2014-07-08 13:14:29 +00:00
} ,
2015-06-03 15:53:34 +00:00
update : function ( ) {
2014-07-08 13:14:29 +00:00
var attachment _ids = '' ;
2015-06-03 15:53:34 +00:00
$ ( '#product_images_container ul li.image' ) . css ( 'cursor' , 'default' ) . each ( function ( ) {
var attachment _id = jQuery ( this ) . attr ( 'data-attachment_id' ) ;
2014-07-08 13:14:29 +00:00
attachment _ids = attachment _ids + attachment _id + ',' ;
} ) ;
$image _gallery _ids . val ( attachment _ids ) ;
}
} ) ;
// Remove images
2015-06-03 15:53:34 +00:00
$ ( '#product_images_container' ) . on ( 'click' , 'a.delete' , function ( ) {
$ ( this ) . closest ( 'li.image' ) . remove ( ) ;
2014-07-08 13:14:29 +00:00
var attachment _ids = '' ;
2015-06-03 15:53:34 +00:00
$ ( '#product_images_container ul li.image' ) . css ( 'cursor' , 'default' ) . each ( function ( ) {
var attachment _id = jQuery ( this ) . attr ( 'data-attachment_id' ) ;
2014-07-08 13:14:29 +00:00
attachment _ids = attachment _ids + attachment _id + ',' ;
} ) ;
$image _gallery _ids . val ( attachment _ids ) ;
2015-01-23 15:45:57 +00:00
// remove any lingering tooltips
$ ( '#tiptip_holder' ) . removeAttr ( 'style' ) ;
$ ( '#tiptip_arrow' ) . removeAttr ( 'style' ) ;
2014-07-08 13:14:29 +00:00
return false ;
2014-07-30 18:01:07 +00:00
} ) ;
} ) ;