/** * Register and enqueue a style with a closure. * * @see wp_enqueue_script() for detail about $handle, $path, $deps, $ver, and $media. * @see FM_GLOBAL_ASSET_VERSION for detail about the fallback value of $ver. * @see fieldmanager_get_baseurl() for detail about base URL. * * @param string $handle Stylesheet name. * @param string $path Path to the file inside of the Fieldmanager base URL. * @param array $deps Stylesheet dependencies. Default empty array. * @param string|bool Stylesheet version. Default none. * @param string $media Media for this stylesheet. Default 'all'. * @param bool $admin Unused. */ function fm_add_style($handle, $path, $deps = array(), $ver = false, $media = 'all', $admin = true) { if (!is_admin()) { return; } if (!$ver) { $ver = FM_GLOBAL_ASSET_VERSION; } $add_script = function () use($handle, $path, $deps, $ver, $media) { wp_register_style($handle, fieldmanager_get_baseurl() . $path, $deps, $ver, $media); wp_enqueue_style($handle); }; add_action('admin_enqueue_scripts', $add_script); add_action('wp_enqueue_scripts', $add_script); }
/** * Output the Javascript required for validation, if any fields require it * * @access public */ public function add_validation() { // Iterate through the fields and output the required Javascript $rules = array(); $messages = array(); foreach ($this->fields as $field) { // Add the rule string to an array $rule = $this->value_to_js($field, $this->rules); if (!empty($rule)) { $rules[] = $rule; // Add the message to an array, if it exists $message = $this->value_to_js($field, $this->messages); if (!empty($message)) { $messages[] = $message; } } } // Create final rule string if (!empty($rules)) { $rules_js = $this->array_to_js($rules, "rules"); $messages_js = $this->array_to_js($messages, "messages"); // Add a comma and newline if messages is not empty if (!empty($messages_js)) { $rules_js .= ",\n"; } // Fields that should always be ignored $ignore[] = ".fm-autocomplete"; $ignore[] = "input[type='button']"; $ignore[] = ":hidden"; // Certain fields need to be ignored depending on the context switch ($this->context) { case "post": $ignore[] = "#active_post_lock"; break; } // Add JS for fields to ignore $ignore_js = implode(", ", $ignore); // Add the Fieldmanager validation script and CSS // This is not done via the normal enqueue process since there is no way to know at that point if any fields will require validation // Doing this here avoids loading JS/CSS for validation if not in use echo "<link rel='stylesheet' id='fm-validation-css' href='" . fieldmanager_get_baseurl() . "css/fieldmanager-validation.css' />\n"; echo "<script type='text/javascript' src='" . fieldmanager_get_baseurl() . "js/validation/fieldmanager-validation.js?ver=0.3'></script>\n"; // Add the jQuery validation script echo "<script type='text/javascript' src='" . fieldmanager_get_baseurl() . "js/validation/jquery.validate.min.js'></script>\n"; // Add the ignore, rules and messages to final validate method with form ID, wrap in script tags and output echo sprintf("\t<script type='text/javascript'>\n\t\t( function( \$ ) {\n\t\t\$( document ).ready( function () {\n\t\t\tvar validator = \$( '#%s' ).validate( {\n\t\t\t\tinvalidHandler: function( event, validator ) { fm_validation.invalidHandler( event, validator ); },\n\t\t\t\tsubmitHandler: function( form ) { fm_validation.submitHandler( form ); },\n\t\t\t\terrorClass: \"fm-js-error\",\n\t\t\t\tignore: \"%s\",\n%s%s\n\t\t\t} );\n\t\t} );\n\t\t} )( jQuery );\n\t</script>\n", esc_attr($this->form_id), $ignore_js, $rules_js, $messages_js); } }