Genesis Title Toggle - Version 1.6

Version Description

  • Updated the metabox code to prevent conflicts with other plugins
  • General refresh of the code to make it cleaner and easier to read
Download this release

Release Info

Developer billerickson
Plugin Icon 128x128 Genesis Title Toggle
Version 1.6
Comparing to
See all releases

Code changes from version 1.5 to 1.6

genesis-title-toggle.php CHANGED
@@ -1,188 +1,273 @@
1
  <?php
2
- /*
3
- Plugin Name: Genesis Title Toggle
4
- Plugin URI: http://www.billerickson.net/
5
- Description: Turn on/off page titles on a per page basis, and set sitewide defaults from Theme Settings. Must be using the Genesis theme.
6
- Version: 1.5
7
- Author: Bill Erickson
8
- Author URI: http://www.billerickson.net
9
- License: GPLv2
10
- */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
 
 
 
 
 
 
 
 
 
12
  class BE_Title_Toggle {
13
- var $instance;
14
-
 
 
 
 
15
  function __construct() {
16
- $this->instance =& $this;
 
17
  register_activation_hook( __FILE__, array( $this, 'activation_hook' ) );
 
 
18
  add_action( 'init', array( $this, 'init' ) );
19
  }
20
-
 
 
 
 
 
21
  function init() {
 
22
  // Translations
23
  load_plugin_textdomain( 'genesis-title-toggle', false, basename( dirname( __FILE__ ) ) . '/languages' );
24
 
25
  // Metabox on Theme Settings, for Sitewide Default
26
- add_filter( 'genesis_theme_settings_defaults', array( $this, 'setting_defaults' ) );
27
- add_action( 'genesis_settings_sanitizer_init', array( $this, 'sanitization' ) );
28
- add_action( 'genesis_theme_settings_metaboxes', array( $this, 'register_metabox' ) );
29
-
30
- // Metabox on Edit screen, for Page Override
31
- add_filter( 'cmb_meta_boxes', array( $this, 'create_metaboxes' ) );
32
- add_action( 'init', array( $this, 'initialize_cmb_meta_boxes' ), 50 );
33
-
34
- // Removes Page Title
35
- add_action( 'genesis_before', array( $this, 'title_toggle' ) );
36
-
37
- // If using post formats, have to hook in later for some themes
38
- if( current_theme_supports( 'post-formats' ) )
39
  add_action( 'genesis_before_post', array( $this, 'title_toggle' ), 20 );
 
 
 
40
  }
41
 
42
  /**
43
  * Activation Hook - Confirm site is using Genesis
44
  *
 
45
  */
46
  function activation_hook() {
 
47
  if ( 'genesis' != basename( TEMPLATEPATH ) ) {
48
  deactivate_plugins( plugin_basename( __FILE__ ) );
49
- wp_die( sprintf( __( 'Sorry, you can&rsquo;t activate unless you have installed <a href="%s">Genesis</a>', 'genesis-title-toggle'), 'http://www.billerickson.net/get-genesis' ) );
50
  }
51
  }
52
 
53
  /**
54
  * Sitewide Setting - Register Defaults
55
- * @link http://www.billerickson.net/genesis-theme-options/
56
  *
 
 
57
  * @param array $defaults
58
  * @return array modified defaults
59
- *
60
  */
61
- function setting_defaults( $defaults ) {
 
62
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
63
- foreach ( $post_types as $post_type )
64
  $defaults[] = array( 'be_title_toggle_' . $post_type => '' );
 
65
  return $defaults;
66
  }
67
 
68
  /**
69
  * Sitewide Setting - Sanitization
70
- * @link http://www.billerickson.net/genesis-theme-options/
71
  *
 
 
72
  */
73
- function sanitization() {
 
74
  $fields = array();
75
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
76
- foreach ( $post_types as $post_type )
77
  $fields[] = 'be_title_toggle_' . $post_type;
 
78
 
79
  genesis_add_option_filter( 'one_zero', GENESIS_SETTINGS_FIELD, $fields );
80
  }
81
 
82
  /**
83
  * Sitewide Setting - Register Metabox
84
- * @link http://www.billerickson.net/genesis-theme-options/
85
  *
 
 
86
  * @param string, Genesis theme settings page hook
87
  */
88
-
89
- function register_metabox( $_genesis_theme_settings_pagehook ) {
90
- add_meta_box('be-title-toggle', __( 'Title Toggle', 'genesis-title-toggle' ), array( $this, 'create_sitewide_metabox' ), $_genesis_theme_settings_pagehook, 'main', 'high');
91
  }
92
 
93
  /**
94
  * Sitewide Setting - Create Metabox
95
- * @link http://www.billerickson.net/genesis-theme-options/
96
  *
 
 
97
  */
98
- function create_sitewide_metabox() {
 
99
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
100
- foreach ( $post_types as $post_type )
101
  echo '<p><input type="checkbox" name="' . GENESIS_SETTINGS_FIELD . '[be_title_toggle_' . $post_type . ']" id="' . GENESIS_SETTINGS_FIELD . '[be_title_toggle_' . $post_type . ']" value="1" ' . checked( 1, genesis_get_option( 'be_title_toggle_' . $post_type ), false ) .' /> <label for="' . GENESIS_SETTINGS_FIELD . '[be_title_toggle_' . $post_type . ']"> ' . sprintf( __( 'By default, remove titles in the <strong>%s</strong> post type.', 'genesis-title-toggle' ), $post_type ) .'</label></p>';
102
-
103
-
104
  }
105
-
106
  /**
107
- * Create Page Specific Metaboxes
108
- * @link http://www.billerickson.net/wordpress-metaboxes/
109
- *
110
- * @param array $meta_boxes, current metaboxes
111
- * @return array $meta_boxes, current + new metaboxes
112
  *
 
113
  */
114
- function create_metaboxes( $meta_boxes ) {
115
-
116
  // Make sure we're still in Genesis, plugins like WP Touch need this check
117
- if ( !function_exists( 'genesis_get_option' ) )
118
  return $meta_boxes;
 
119
 
120
-
121
- // Get all post types used by plugin and split them up into show and hide.
122
- // Sitewide default checked = hide by default, so metabox should let you override that and show the title
123
- // Sitewide default empty = display by default, so metabox should let you override that and hide the title
124
-
125
- $show = array();
126
- $hide = array();
127
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
 
 
128
  foreach ( $post_types as $post_type ) {
129
- $default = genesis_get_option( 'be_title_toggle_' . $post_type );
130
- if ( !empty( $default ) ) $show[] = $post_type;
131
- else $hide[] = $post_type;
132
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
 
135
- // Create the show and hide metaboxes that override the default
136
-
137
- if ( !empty( $show ) ) {
138
- $meta_boxes[] = array(
139
- 'id' => 'be_title_toggle_show',
140
- 'title' => __( 'Title Toggle', 'genesis-title-toggle' ),
141
- 'pages' => $show,
142
- 'context' => 'normal',
143
- 'priority' => 'high',
144
- 'show_names' => true,
145
- 'fields' => array(
146
- array(
147
- 'name' => __( 'Show Title', 'genesis-title-toggle' ),
148
- 'desc' => __( 'By default, this post type is set to remove titles. This checkbox lets you show this specific page&rsquo;s title', 'genesis-title-toggle' ),
149
- 'id' => 'be_title_toggle_show',
150
- 'type' => 'checkbox'
151
- )
152
- )
153
- );
154
  }
155
 
156
- if ( !empty( $hide ) ) {
157
- $meta_boxes[] = array(
158
- 'id' => 'be_title_toggle_hide',
159
- 'title' => __( 'Title Toggle', 'genesis-title-toggle' ),
160
- 'pages' => $hide,
161
- 'context' => 'normal',
162
- 'priority' => 'high',
163
- 'show_names' => true,
164
- 'fields' => array(
165
- array(
166
- 'name' => __( 'Hide Title', 'genesis-title-toggle' ),
167
- 'desc' => __( 'By default, this post type is set to display titles. This checkbox lets you hide this specific page&rsquo;s title', 'genesis-title-toggle' ),
168
- 'id' => 'be_title_toggle_hide',
169
- 'type' => 'checkbox'
170
- )
171
- )
172
- );
173
- }
174
-
175
- return $meta_boxes;
176
  }
177
 
178
- function initialize_cmb_meta_boxes() {
179
- $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
180
- if ( !class_exists('cmb_Meta_Box') && !empty( $post_types ) ) {
181
- require_once( dirname( __FILE__) . '/lib/metabox/init.php' );
182
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  }
184
 
 
 
 
 
 
185
  function title_toggle() {
 
186
  // Make sure we're on the single page
187
  if ( !is_singular() )
188
  return;
@@ -198,9 +283,11 @@ class BE_Title_Toggle {
198
  $override = get_post_meta( $post->ID, 'be_title_toggle_show', true );
199
 
200
  // If override is empty, get rid of that title
201
- if (empty( $override ) ) {
202
  remove_action( 'genesis_post_title', 'genesis_do_post_title' );
203
  remove_action( 'genesis_entry_header', 'genesis_do_post_title' );
 
 
204
  }
205
 
206
  // If titles are turned on by default, let's see if this specific one is turned off
@@ -211,9 +298,11 @@ class BE_Title_Toggle {
211
  if ( !empty( $override ) ) {
212
  remove_action( 'genesis_post_title', 'genesis_do_post_title' );
213
  remove_action( 'genesis_entry_header', 'genesis_do_post_title' );
 
 
214
  }
215
  }
216
  }
217
  }
218
 
219
- new BE_Title_Toggle;
1
  <?php
2
+ /**
3
+ * Plugin Name: Genesis Title Toggle
4
+ * Plugin URI: http://www.billerickson.net/
5
+ * Description: Turn on/off page titles on a per page basis, and set sitewide defaults from Theme Settings. Must be using the Genesis theme.
6
+ * Author: Bill Erickson
7
+ * Author URI: http://www.billerickson.net
8
+ * Version: 1.6.0
9
+ * Text Domain: genesis-title-toggle
10
+ * Domain Path: languages
11
+ *
12
+ * Genesis Title Toggle is free software: you can redistribute it and/or modify
13
+ * it under the terms of the GNU General Public License as published by
14
+ * the Free Software Foundation, either version 2 of the License, or
15
+ * any later version.
16
+ *
17
+ * Genesis Title Toggle is distributed in the hope that it will be useful,
18
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ * GNU General Public License for more details.
21
+ *
22
+ * You should have received a copy of the GNU General Public License
23
+ * along with Genesis Title Toggle. If not, see <http://www.gnu.org/licenses/>.
24
+ *
25
+ * @package BE_Title_Toggle
26
+ * @author Bill Erickson
27
+ * @since 1.0.0
28
+ * @license GPL-2.0+
29
+ */
30
 
31
+ // Exit if accessed directly
32
+ if ( ! defined( 'ABSPATH' ) ) exit;
33
+
34
+ /**
35
+ * Main BE_Title_Toggle class
36
+ *
37
+ * @since 1.0.0
38
+ * @package BE_Title_Toggle
39
+ */
40
  class BE_Title_Toggle {
41
+
42
+ /**
43
+ * Primary constructor.
44
+ *
45
+ * @since 1.0.0
46
+ */
47
  function __construct() {
48
+
49
+ // Run on plugin activation
50
  register_activation_hook( __FILE__, array( $this, 'activation_hook' ) );
51
+
52
+ // Bootstrap and go
53
  add_action( 'init', array( $this, 'init' ) );
54
  }
55
+
56
+ /**
57
+ * Initialize the plugin.
58
+ *
59
+ * @since 1.0.0
60
+ */
61
  function init() {
62
+
63
  // Translations
64
  load_plugin_textdomain( 'genesis-title-toggle', false, basename( dirname( __FILE__ ) ) . '/languages' );
65
 
66
  // Metabox on Theme Settings, for Sitewide Default
67
+ add_filter( 'genesis_theme_settings_defaults', array( $this, 'settings_defaults' ) );
68
+ add_action( 'genesis_settings_sanitizer_init', array( $this, 'settings_sanitization' ) );
69
+ add_action( 'genesis_theme_settings_metaboxes', array( $this, 'settings_register_metabox' ) );
70
+
71
+ // Pages metaboxes
72
+ add_action( 'add_meta_boxes', array( $this, 'metabox_register' ) );
73
+ add_action( 'save_post', array( $this, 'metabox_save' ), 1, 2 );
74
+
75
+ // Show/hide Page Title - If using post formats, have to hook in later for some themes
76
+ if ( current_theme_supports( 'post-formats' ) ) {
 
 
 
77
  add_action( 'genesis_before_post', array( $this, 'title_toggle' ), 20 );
78
+ } else {
79
+ add_action( 'genesis_before', array( $this, 'title_toggle' ) );
80
+ }
81
  }
82
 
83
  /**
84
  * Activation Hook - Confirm site is using Genesis
85
  *
86
+ * @since 1.0.0
87
  */
88
  function activation_hook() {
89
+
90
  if ( 'genesis' != basename( TEMPLATEPATH ) ) {
91
  deactivate_plugins( plugin_basename( __FILE__ ) );
92
+ wp_die( sprintf( __( 'Sorry, you can&rsquo;t activate unless you have installed <a href="%s">Genesis</a>', 'genesis-title-toggle' ), 'http://www.billerickson.net/get-genesis' ) );
93
  }
94
  }
95
 
96
  /**
97
  * Sitewide Setting - Register Defaults
 
98
  *
99
+ * @since 1.0.0
100
+ * @link http://www.billerickson.net/genesis-theme-options/
101
  * @param array $defaults
102
  * @return array modified defaults
 
103
  */
104
+ function settings_defaults( $defaults ) {
105
+
106
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
107
+ foreach ( $post_types as $post_type ) {
108
  $defaults[] = array( 'be_title_toggle_' . $post_type => '' );
109
+ }
110
  return $defaults;
111
  }
112
 
113
  /**
114
  * Sitewide Setting - Sanitization
 
115
  *
116
+ * @since 1.0.0
117
+ * @link http://www.billerickson.net/genesis-theme-options/
118
  */
119
+ function settings_sanitization() {
120
+
121
  $fields = array();
122
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
123
+ foreach ( $post_types as $post_type ) {
124
  $fields[] = 'be_title_toggle_' . $post_type;
125
+ }
126
 
127
  genesis_add_option_filter( 'one_zero', GENESIS_SETTINGS_FIELD, $fields );
128
  }
129
 
130
  /**
131
  * Sitewide Setting - Register Metabox
 
132
  *
133
+ * @since 1.0.0
134
+ * @link http://www.billerickson.net/genesis-theme-options/
135
  * @param string, Genesis theme settings page hook
136
  */
137
+ function settings_register_metabox( $_genesis_theme_settings_pagehook ) {
138
+
139
+ add_meta_box( 'be-title-toggle', __( 'Title Toggle', 'genesis-title-toggle' ), array( $this, 'settings_render_metabox' ), $_genesis_theme_settings_pagehook, 'main', 'high' );
140
  }
141
 
142
  /**
143
  * Sitewide Setting - Create Metabox
 
144
  *
145
+ * @since 1.0.0
146
+ * @link http://www.billerickson.net/genesis-theme-options/
147
  */
148
+ function settings_render_metabox() {
149
+
150
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
151
+ foreach ( $post_types as $post_type ) {
152
  echo '<p><input type="checkbox" name="' . GENESIS_SETTINGS_FIELD . '[be_title_toggle_' . $post_type . ']" id="' . GENESIS_SETTINGS_FIELD . '[be_title_toggle_' . $post_type . ']" value="1" ' . checked( 1, genesis_get_option( 'be_title_toggle_' . $post_type ), false ) .' /> <label for="' . GENESIS_SETTINGS_FIELD . '[be_title_toggle_' . $post_type . ']"> ' . sprintf( __( 'By default, remove titles in the <strong>%s</strong> post type.', 'genesis-title-toggle' ), $post_type ) .'</label></p>';
153
+ }
 
154
  }
155
+
156
  /**
157
+ * Register the metabox
 
 
 
 
158
  *
159
+ * @since 1.6.0
160
  */
161
+ function metabox_register() {
162
+
163
  // Make sure we're still in Genesis, plugins like WP Touch need this check
164
+ if ( !function_exists( 'genesis_get_option' ) ){
165
  return $meta_boxes;
166
+ }
167
 
168
+ // Allow devs to control what post types this is allowed on
 
 
 
 
 
 
169
  $post_types = apply_filters( 'be_title_toggle_post_types', array( 'page' ) );
170
+
171
+ // Add metabox for each post type found
172
  foreach ( $post_types as $post_type ) {
173
+ add_meta_box( 'be-title-toggle', 'Title Toggle', array( $this, 'metabox_render' ), $post_type, 'normal', 'high' );
 
 
174
  }
175
+ }
176
+
177
+ /**
178
+ * Output the metabox
179
+ *
180
+ * @since 1.6.0
181
+ */
182
+ function metabox_render() {
183
+
184
+ // Grab this post type
185
+ $post_type = get_post_type();
186
+
187
+ // Grab default state - True means hidden, empty means displayed
188
+ $default = genesis_get_option( 'be_title_toggle_' . $post_type );
189
+
190
+ // Grab current value
191
+ $value = get_post_meta( get_the_ID(), 'be_title_toggle_hide', true );
192
+ $value = ( !empty( $value ) ? true : false );
193
 
194
+ // Security nonce
195
+ wp_nonce_field( 'be_title_toggle', 'be_title_toggle_nonce' );
196
+
197
+ echo '<p style="padding-top:10px;">';
198
+
199
+ if ( $default ) {
200
+
201
+ // Hide by default
202
+ printf( '<label for="be_title_toggle_show">%s</label>', __( 'Show Title', 'genesis-title-toggle' ) );
203
+
204
+ echo '<input type="checkbox" id="be_title_toggle_show" name="be_title_toggle_show" ' . checked( true , $value, false ) . ' style="margin:0 20px 0 10px;">';
205
+
206
+ printf( '<span style="color:#999;">%s</span>', __( 'By default, this post type is set to remove titles. This checkbox lets you show this specific page&rsquo;s title.', 'genesis-title-toggle' ) );
207
+
208
+ echo '<input type="hidden" name="be_title_toggle_key" value="show">';
209
+
210
+ } else {
211
+
212
+ // Show by default
213
+ printf( '<label for="be_title_toggle_hide">%s</label>', __( 'Hide Title', 'genesis-title-toggle' ) );
214
+
215
+ echo '<input type="checkbox" id="be_title_toggle_hide" name="be_title_toggle_hide" ' . checked( true , $value, false ) . ' style="margin:0 20px 0 10px;">';
216
+
217
+ printf( '<span style="color:#999;">%s</span>', __( 'By default, this post type is set to display titles. This checkbox lets you hide this specific page&rsquo;s title.', 'genesis-title-toggle' ) );
218
 
219
+ echo '<input type="hidden" name="be_title_toggle_key" value="hide">';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  }
221
 
222
+ echo '</p>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223
  }
224
 
225
+ /**
226
+ * Handle metabox saves
227
+ *
228
+ * @since 1.6.0
229
+ */
230
+ function metabox_save( $post_id, $post ) {
231
+
232
+ // Security check
233
+ if ( ! isset( $_POST['be_title_toggle_nonce'] ) || ! wp_verify_nonce( $_POST['be_title_toggle_nonce'], 'be_title_toggle' ) ) {
234
+ return;
235
+ }
236
+
237
+ // Bail out if running an autosave, ajax, cron.
238
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
239
+ return;
240
+ }
241
+ if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
242
+ return;
243
+ }
244
+ if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
245
+ return;
246
+ }
247
+
248
+ // Bail out if the user doesn't have the correct permissions to update the slider.
249
+ if ( ! current_user_can( 'edit_post', $post_id ) ) {
250
+ return;
251
+ }
252
+
253
+ // Which key do we use
254
+ $key = 'be_title_toggle_' . $_POST['be_title_toggle_key'];
255
+
256
+ // Either save or delete they post meta
257
+ if ( isset( $_POST[ $key ] ) ) {
258
+ update_post_meta( $post_id, $key, '1' );
259
+ } else {
260
+ delete_post_meta( $post_id, $key );
261
+ }
262
  }
263
 
264
+ /**
265
+ * Logic that determines if we should show/hide the title.
266
+ *
267
+ * @since 1.0.0
268
+ */
269
  function title_toggle() {
270
+
271
  // Make sure we're on the single page
272
  if ( !is_singular() )
273
  return;
283
  $override = get_post_meta( $post->ID, 'be_title_toggle_show', true );
284
 
285
  // If override is empty, get rid of that title
286
+ if ( empty( $override ) ) {
287
  remove_action( 'genesis_post_title', 'genesis_do_post_title' );
288
  remove_action( 'genesis_entry_header', 'genesis_do_post_title' );
289
+ remove_action( 'genesis_entry_header', 'genesis_entry_header_markup_open', 5 );
290
+ remove_action( 'genesis_entry_header', 'genesis_entry_header_markup_close', 15 );
291
  }
292
 
293
  // If titles are turned on by default, let's see if this specific one is turned off
298
  if ( !empty( $override ) ) {
299
  remove_action( 'genesis_post_title', 'genesis_do_post_title' );
300
  remove_action( 'genesis_entry_header', 'genesis_do_post_title' );
301
+ remove_action( 'genesis_entry_header', 'genesis_entry_header_markup_open', 5 );
302
+ remove_action( 'genesis_entry_header', 'genesis_entry_header_markup_close', 15 );
303
  }
304
  }
305
  }
306
  }
307
 
308
+ new BE_Title_Toggle;
lib/metabox/example-functions.php DELETED
@@ -1,222 +0,0 @@
1
- <?php
2
- /**
3
- * Include and setup custom metaboxes and fields.
4
- *
5
- * @category YourThemeOrPlugin
6
- * @package Metaboxes
7
- * @license http://www.opensource.org/licenses/gpl-license.php GPL v2.0 (or later)
8
- * @link https://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress
9
- */
10
-
11
- add_filter( 'cmb_meta_boxes', 'cmb_sample_metaboxes' );
12
- /**
13
- * Define the metabox and field configurations.
14
- *
15
- * @param array $meta_boxes
16
- * @return array
17
- */
18
- function cmb_sample_metaboxes( array $meta_boxes ) {
19
-
20
- // Start with an underscore to hide fields from custom fields list
21
- $prefix = '_cmb_';
22
-
23
- $meta_boxes[] = array(
24
- 'id' => 'test_metabox',
25
- 'title' => 'Test Metabox',
26
- 'pages' => array( 'page', ), // Post type
27
- 'context' => 'normal',
28
- 'priority' => 'high',
29
- 'show_names' => true, // Show field names on the left
30
- 'fields' => array(
31
- array(
32
- 'name' => 'Test Text',
33
- 'desc' => 'field description (optional)',
34
- 'id' => $prefix . 'test_text',
35
- 'type' => 'text',
36
- ),
37
- array(
38
- 'name' => 'Test Text Small',
39
- 'desc' => 'field description (optional)',
40
- 'id' => $prefix . 'test_textsmall',
41
- 'type' => 'text_small',
42
- ),
43
- array(
44
- 'name' => 'Test Text Medium',
45
- 'desc' => 'field description (optional)',
46
- 'id' => $prefix . 'test_textmedium',
47
- 'type' => 'text_medium',
48
- ),
49
- array(
50
- 'name' => 'Test Date Picker',
51
- 'desc' => 'field description (optional)',
52
- 'id' => $prefix . 'test_textdate',
53
- 'type' => 'text_date',
54
- ),
55
- array(
56
- 'name' => 'Test Date Picker (UNIX timestamp)',
57
- 'desc' => 'field description (optional)',
58
- 'id' => $prefix . 'test_textdate_timestamp',
59
- 'type' => 'text_date_timestamp',
60
- ),
61
- array(
62
- 'name' => 'Test Date/Time Picker Combo (UNIX timestamp)',
63
- 'desc' => 'field description (optional)',
64
- 'id' => $prefix . 'test_datetime_timestamp',
65
- 'type' => 'text_datetime_timestamp',
66
- ),
67
- array(
68
- 'name' => 'Test Time',
69
- 'desc' => 'field description (optional)',
70
- 'id' => $prefix . 'test_time',
71
- 'type' => 'text_time',
72
- ),
73
- array(
74
- 'name' => 'Test Money',
75
- 'desc' => 'field description (optional)',
76
- 'id' => $prefix . 'test_textmoney',
77
- 'type' => 'text_money',
78
- ),
79
- array(
80
- 'name' => 'Test Color Picker',
81
- 'desc' => 'field description (optional)',
82
- 'id' => $prefix . 'test_colorpicker',
83
- 'type' => 'colorpicker',
84
- 'std' => '#ffffff'
85
- ),
86
- array(
87
- 'name' => 'Test Text Area',
88
- 'desc' => 'field description (optional)',
89
- 'id' => $prefix . 'test_textarea',
90
- 'type' => 'textarea',
91
- ),
92
- array(
93
- 'name' => 'Test Text Area Small',
94
- 'desc' => 'field description (optional)',
95
- 'id' => $prefix . 'test_textareasmall',
96
- 'type' => 'textarea_small',
97
- ),
98
- array(
99
- 'name' => 'Test Text Area Code',
100
- 'desc' => 'field description (optional)',
101
- 'id' => $prefix . 'test_textarea_code',
102
- 'type' => 'textarea_code',
103
- ),
104
- array(
105
- 'name' => 'Test Title Weeeee',
106
- 'desc' => 'This is a title description',
107
- 'id' => $prefix . 'test_title',
108
- 'type' => 'title',
109
- ),
110
- array(
111
- 'name' => 'Test Select',
112
- 'desc' => 'field description (optional)',
113
- 'id' => $prefix . 'test_select',
114
- 'type' => 'select',
115
- 'options' => array(
116
- array( 'name' => 'Option One', 'value' => 'standard', ),
117
- array( 'name' => 'Option Two', 'value' => 'custom', ),
118
- array( 'name' => 'Option Three', 'value' => 'none', ),
119
- ),
120
- ),
121
- array(
122
- 'name' => 'Test Radio inline',
123
- 'desc' => 'field description (optional)',
124
- 'id' => $prefix . 'test_radio_inline',
125
- 'type' => 'radio_inline',
126
- 'options' => array(
127
- array( 'name' => 'Option One', 'value' => 'standard', ),
128
- array( 'name' => 'Option Two', 'value' => 'custom', ),
129
- array( 'name' => 'Option Three', 'value' => 'none', ),
130
- ),
131
- ),
132
- array(
133
- 'name' => 'Test Radio',
134
- 'desc' => 'field description (optional)',
135
- 'id' => $prefix . 'test_radio',
136
- 'type' => 'radio',
137
- 'options' => array(
138
- array( 'name' => 'Option One', 'value' => 'standard', ),
139
- array( 'name' => 'Option Two', 'value' => 'custom', ),
140
- array( 'name' => 'Option Three', 'value' => 'none', ),
141
- ),
142
- ),
143
- array(
144
- 'name' => 'Test Taxonomy Radio',
145
- 'desc' => 'Description Goes Here',
146
- 'id' => $prefix . 'text_taxonomy_radio',
147
- 'type' => 'taxonomy_radio',
148
- 'taxonomy' => '', // Taxonomy Slug
149
- ),
150
- array(
151
- 'name' => 'Test Taxonomy Select',
152
- 'desc' => 'Description Goes Here',
153
- 'id' => $prefix . 'text_taxonomy_select',
154
- 'type' => 'taxonomy_select',
155
- 'taxonomy' => '', // Taxonomy Slug
156
- ),
157
- array(
158
- 'name' => 'Test Checkbox',
159
- 'desc' => 'field description (optional)',
160
- 'id' => $prefix . 'test_checkbox',
161
- 'type' => 'checkbox',
162
- ),
163
- array(
164
- 'name' => 'Test Multi Checkbox',
165
- 'desc' => 'field description (optional)',
166
- 'id' => $prefix . 'test_multicheckbox',
167
- 'type' => 'multicheck',
168
- 'options' => array(
169
- 'check1' => 'Check One',
170
- 'check2' => 'Check Two',
171
- 'check3' => 'Check Three',
172
- ),
173
- ),
174
- array(
175
- 'name' => 'Test wysiwyg',
176
- 'desc' => 'field description (optional)',
177
- 'id' => $prefix . 'test_wysiwyg',
178
- 'type' => 'wysiwyg',
179
- 'options' => array( 'textarea_rows' => 5, ),
180
- ),
181
- array(
182
- 'name' => 'Test Image',
183
- 'desc' => 'Upload an image or enter an URL.',
184
- 'id' => $prefix . 'test_image',
185
- 'type' => 'file',
186
- ),
187
- ),
188
- );
189
-
190
- $meta_boxes[] = array(
191
- 'id' => 'about_page_metabox',
192
- 'title' => 'About Page Metabox',
193
- 'pages' => array( 'page', ), // Post type
194
- 'context' => 'normal',
195
- 'priority' => 'high',
196
- 'show_names' => true, // Show field names on the left
197
- 'show_on' => array( 'key' => 'id', 'value' => array( 2, ), ), // Specific post IDs to display this metabox
198
- 'fields' => array(
199
- array(
200
- 'name' => 'Test Text',
201
- 'desc' => 'field description (optional)',
202
- 'id' => $prefix . 'test_text',
203
- 'type' => 'text',
204
- ),
205
- )
206
- );
207
-
208
- // Add other metaboxes as needed
209
-
210
- return $meta_boxes;
211
- }
212
-
213
- add_action( 'init', 'cmb_initialize_cmb_meta_boxes', 9999 );
214
- /**
215
- * Initialize the metabox class.
216
- */
217
- function cmb_initialize_cmb_meta_boxes() {
218
-
219
- if ( ! class_exists( 'cmb_Meta_Box' ) )
220
- require_once 'init.php';
221
-
222
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/metabox/images/ico-delete.png DELETED
Binary file
lib/metabox/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
lib/metabox/images/ui-bg_flat_75_ffffff_40x100.png DELETED
Binary file
lib/metabox/images/ui-bg_glass_55_fbf9ee_1x400.png DELETED
Binary file
lib/metabox/images/ui-bg_glass_65_ffffff_1x400.png DELETED
Binary file
lib/metabox/images/ui-bg_glass_75_dadada_1x400.png DELETED
Binary file
lib/metabox/images/ui-bg_glass_75_e6e6e6_1x400.png DELETED
Binary file
lib/metabox/images/ui-bg_glass_95_fef1ec_1x400.png DELETED
Binary file
lib/metabox/images/ui-bg_highlight-soft_75_cccccc_1x100.png DELETED
Binary file
lib/metabox/images/ui-icons_222222_256x240.png DELETED
Binary file
lib/metabox/images/ui-icons_2e83ff_256x240.png DELETED
Binary file
lib/metabox/images/ui-icons_454545_256x240.png DELETED
Binary file
lib/metabox/images/ui-icons_888888_256x240.png DELETED
Binary file
lib/metabox/images/ui-icons_cd0a0a_256x240.png DELETED
Binary file
lib/metabox/init.php DELETED
@@ -1,569 +0,0 @@
1
- <?php
2
- /*
3
- Script Name: Custom Metaboxes and Fields
4
- Contributors: Andrew Norcross (@norcross / andrewnorcross.com)
5
- Jared Atchison (@jaredatch / jaredatchison.com)
6
- Bill Erickson (@billerickson / billerickson.net)
7
- Description: This will create metaboxes with custom fields that will blow your mind.
8
- Version: 0.9
9
- */
10
-
11
- /**
12
- * Released under the GPL license
13
- * http://www.opensource.org/licenses/gpl-license.php
14
- *
15
- * This is an add-on for WordPress
16
- * http://wordpress.org/
17
- *
18
- * **********************************************************************
19
- * This program is free software; you can redistribute it and/or modify
20
- * it under the terms of the GNU General Public License as published by
21
- * the Free Software Foundation; either version 2 of the License, or
22
- * (at your option) any later version.
23
- *
24
- * This program is distributed in the hope that it will be useful,
25
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
26
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
- * GNU General Public License for more details.
28
- * **********************************************************************
29
- */
30
-
31
- /************************************************************************
32
- You should not edit the code below or things might explode!
33
- *************************************************************************/
34
-
35
- $meta_boxes = array();
36
- $meta_boxes = apply_filters ( 'cmb_meta_boxes' , $meta_boxes );
37
- foreach ( $meta_boxes as $meta_box ) {
38
- $my_box = new cmb_Meta_Box( $meta_box );
39
- }
40
-
41
- /**
42
- * Validate value of meta fields
43
- * Define ALL validation methods inside this class and use the names of these
44
- * methods in the definition of meta boxes (key 'validate_func' of each field)
45
- */
46
- class cmb_Meta_Box_Validate {
47
- function check_text( $text ) {
48
- if ($text != 'hello') {
49
- return false;
50
- }
51
- return true;
52
- }
53
- }
54
-
55
- /**
56
- * Defines the url to which is used to load local resources.
57
- * This may need to be filtered for local Window installations.
58
- * If resources do not load, please check the wiki for details.
59
- */
60
- define( 'CMB_META_BOX_URL', apply_filters( 'cmb_meta_box_url', trailingslashit( str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, dirname( __FILE__ ) ) ) ) );
61
-
62
- /**
63
- * Create meta boxes
64
- */
65
- class cmb_Meta_Box {
66
- protected $_meta_box;
67
-
68
- function __construct( $meta_box ) {
69
- if ( !is_admin() ) return;
70
-
71
- $this->_meta_box = $meta_box;
72
-
73
- $upload = false;
74
- foreach ( $meta_box['fields'] as $field ) {
75
- if ( $field['type'] == 'file' || $field['type'] == 'file_list' ) {
76
- $upload = true;
77
- break;
78
- }
79
- }
80
-
81
- global $pagenow;
82
- if ( $upload && in_array( $pagenow, array( 'page.php', 'page-new.php', 'post.php', 'post-new.php' ) ) ) {
83
- add_action( 'admin_head', array( &$this, 'add_post_enctype' ) );
84
- }
85
-
86
- add_action( 'admin_menu', array( &$this, 'add' ) );
87
- add_action( 'save_post', array( &$this, 'save' ) );
88
-
89
- add_filter( 'cmb_show_on', array( &$this, 'add_for_id' ), 10, 2 );
90
- add_filter( 'cmb_show_on', array( &$this, 'add_for_page_template' ), 10, 2 );
91
- }
92
-
93
- function add_post_enctype() {
94
- echo '
95
- <script type="text/javascript">
96
- jQuery(document).ready(function(){
97
- jQuery("#post").attr("enctype", "multipart/form-data");
98
- jQuery("#post").attr("encoding", "multipart/form-data");
99
- });
100
- </script>';
101
- }
102
-
103
- // Add metaboxes
104
- function add() {
105
- $this->_meta_box['context'] = empty($this->_meta_box['context']) ? 'normal' : $this->_meta_box['context'];
106
- $this->_meta_box['priority'] = empty($this->_meta_box['priority']) ? 'high' : $this->_meta_box['priority'];
107
- $this->_meta_box['show_on'] = empty( $this->_meta_box['show_on'] ) ? array('key' => false, 'value' => false) : $this->_meta_box['show_on'];
108
-
109
- foreach ( $this->_meta_box['pages'] as $page ) {
110
- if( apply_filters( 'cmb_show_on', true, $this->_meta_box ) )
111
- add_meta_box( $this->_meta_box['id'], $this->_meta_box['title'], array(&$this, 'show'), $page, $this->_meta_box['context'], $this->_meta_box['priority']) ;
112
- }
113
- }
114
-
115
- /**
116
- * Show On Filters
117
- * Use the 'cmb_show_on' filter to further refine the conditions under which a metabox is displayed.
118
- * Below you can limit it by ID and page template
119
- */
120
-
121
- // Add for ID
122
- function add_for_id( $display, $meta_box ) {
123
- if ( 'id' !== $meta_box['show_on']['key'] )
124
- return $display;
125
-
126
- // If we're showing it based on ID, get the current ID
127
- if( isset( $_GET['post'] ) ) $post_id = $_GET['post'];
128
- elseif( isset( $_POST['post_ID'] ) ) $post_id = $_POST['post_ID'];
129
- if( !isset( $post_id ) )
130
- return false;
131
-
132
- // If value isn't an array, turn it into one
133
- $meta_box['show_on']['value'] = !is_array( $meta_box['show_on']['value'] ) ? array( $meta_box['show_on']['value'] ) : $meta_box['show_on']['value'];
134
-
135
- // If current page id is in the included array, display the metabox
136
-
137
- if ( in_array( $post_id, $meta_box['show_on']['value'] ) )
138
- return true;
139
- else
140
- return false;
141
- }
142
-
143
- // Add for Page Template
144
- function add_for_page_template( $display, $meta_box ) {
145
- if( 'page-template' !== $meta_box['show_on']['key'] )
146
- return $display;
147
-
148
- // Get the current ID
149
- if( isset( $_GET['post'] ) ) $post_id = $_GET['post'];
150
- elseif( isset( $_POST['post_ID'] ) ) $post_id = $_POST['post_ID'];
151
- if( !( isset( $post_id ) || is_page() ) ) return false;
152
-
153
- // Get current template
154
- $current_template = get_post_meta( $post_id, '_wp_page_template', true );
155
-
156
- // If value isn't an array, turn it into one
157
- $meta_box['show_on']['value'] = !is_array( $meta_box['show_on']['value'] ) ? array( $meta_box['show_on']['value'] ) : $meta_box['show_on']['value'];
158
-
159
- // See if there's a match
160
- if( in_array( $current_template, $meta_box['show_on']['value'] ) )
161
- return true;
162
- else
163
- return false;
164
- }
165
-
166
- // Show fields
167
- function show() {
168
-
169
- global $post;
170
-
171
- // Use nonce for verification
172
- echo '<input type="hidden" name="wp_meta_box_nonce" value="', wp_create_nonce( basename(__FILE__) ), '" />';
173
- echo '<table class="form-table cmb_metabox">';
174
-
175
- foreach ( $this->_meta_box['fields'] as $field ) {
176
- // Set up blank or default values for empty ones
177
- if ( !isset( $field['name'] ) ) $field['name'] = '';
178
- if ( !isset( $field['desc'] ) ) $field['desc'] = '';
179
- if ( !isset( $field['std'] ) ) $field['std'] = '';
180
- if ( 'file' == $field['type'] && !isset( $field['allow'] ) ) $field['allow'] = array( 'url', 'attachment' );
181
- if ( 'file' == $field['type'] && !isset( $field['save_id'] ) ) $field['save_id'] = false;
182
- if ( 'multicheck' == $field['type'] ) $field['multiple'] = true;
183
-
184
- $meta = get_post_meta( $post->ID, $field['id'], 'multicheck' != $field['type'] /* If multicheck this can be multiple values */ );
185
-
186
- echo '<tr>';
187
-
188
- if ( $field['type'] == "title" ) {
189
- echo '<td colspan="2">';
190
- } else {
191
- if( $this->_meta_box['show_names'] == true ) {
192
- echo '<th style="width:18%"><label for="', $field['id'], '">', $field['name'], '</label></th>';
193
- }
194
- echo '<td>';
195
- }
196
-
197
- switch ( $field['type'] ) {
198
-
199
- case 'text':
200
- echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? $meta : $field['std'], '" />','<p class="cmb_metabox_description">', $field['desc'], '</p>';
201
- break;
202
- case 'text_small':
203
- echo '<input class="cmb_text_small" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? $meta : $field['std'], '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
204
- break;
205
- case 'text_medium':
206
- echo '<input class="cmb_text_medium" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? $meta : $field['std'], '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
207
- break;
208
- case 'text_date':
209
- echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? $meta : $field['std'], '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
210
- break;
211
- case 'text_date_timestamp':
212
- echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? date( 'm\/d\/Y', $meta ) : $field['std'], '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
213
- break;
214
-
215
- case 'text_datetime_timestamp':
216
- echo '<input class="cmb_text_small cmb_datepicker" type="text" name="', $field['id'], '[date]" id="', $field['id'], '_date" value="', '' !== $meta ? date( 'm\/d\/Y', $meta ) : $field['std'], '" />';
217
- echo '<input class="cmb_timepicker text_time" type="text" name="', $field['id'], '[time]" id="', $field['id'], '_time" value="', '' !== $meta ? date( 'h:i A', $meta ) : $field['std'], '" /><span class="cmb_metabox_description" >', $field['desc'], '</span>';
218
- break;
219
- case 'text_time':
220
- echo '<input class="cmb_timepicker text_time" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? $meta : $field['std'], '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
221
- break;
222
- case 'text_money':
223
- echo '$ <input class="cmb_text_money" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', '' !== $meta ? $meta : $field['std'], '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
224
- break;
225
- case 'colorpicker':
226
- $meta = '' !== $meta ? $meta : $field['std'];
227
- $hex_color = '(([a-fA-F0-9]){3}){1,2}$';
228
- if ( preg_match( '/^' . $hex_color . '/i', $meta ) ) // Value is just 123abc, so prepend #.
229
- $meta = '#' . $meta;
230
- elseif ( ! preg_match( '/^#' . $hex_color . '/i', $meta ) ) // Value doesn't match #123abc, so sanitize to just #.
231
- $meta = "#";
232
- echo '<input class="cmb_colorpicker cmb_text_small" type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta, '" /><span class="cmb_metabox_description">', $field['desc'], '</span>';
233
- break;
234
- case 'textarea':
235
- echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="10">', '' !== $meta ? $meta : $field['std'], '</textarea>','<p class="cmb_metabox_description">', $field['desc'], '</p>';
236
- break;
237
- case 'textarea_small':
238
- echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="4">', '' !== $meta ? $meta : $field['std'], '</textarea>','<p class="cmb_metabox_description">', $field['desc'], '</p>';
239
- break;
240
- case 'textarea_code':
241
- echo '<textarea name="', $field['id'], '" id="', $field['id'], '" cols="60" rows="10" class="cmb_textarea_code">', '' !== $meta ? $meta : $field['std'], '</textarea>','<p class="cmb_metabox_description">', $field['desc'], '</p>';
242
- break;
243
- case 'select':
244
- if( empty( $meta ) && !empty( $field['std'] ) ) $meta = $field['std'];
245
- echo '<select name="', $field['id'], '" id="', $field['id'], '">';
246
- foreach ($field['options'] as $option) {
247
- echo '<option value="', $option['value'], '"', $meta == $option['value'] ? ' selected="selected"' : '', '>', $option['name'], '</option>';
248
- }
249
- echo '</select>';
250
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
251
- break;
252
- case 'radio_inline':
253
- if( empty( $meta ) && !empty( $field['std'] ) ) $meta = $field['std'];
254
- echo '<div class="cmb_radio_inline">';
255
- $i = 1;
256
- foreach ($field['options'] as $option) {
257
- echo '<div class="cmb_radio_inline_option"><input type="radio" name="', $field['id'], '" id="', $field['id'], $i, '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' /><label for="', $field['id'], $i, '">', $option['name'], '</label></div>';
258
- $i++;
259
- }
260
- echo '</div>';
261
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
262
- break;
263
- case 'radio':
264
- if( empty( $meta ) && !empty( $field['std'] ) ) $meta = $field['std'];
265
- echo '<ul>';
266
- $i = 1;
267
- foreach ($field['options'] as $option) {
268
- echo '<li><input type="radio" name="', $field['id'], '" id="', $field['id'], $i,'" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' /><label for="', $field['id'], $i, '">', $option['name'].'</label></li>';
269
- $i++;
270
- }
271
- echo '</ul>';
272
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
273
- break;
274
- case 'checkbox':
275
- echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' />';
276
- echo '<span class="cmb_metabox_description">', $field['desc'], '</span>';
277
- break;
278
- case 'multicheck':
279
- echo '<ul>';
280
- $i = 1;
281
- foreach ( $field['options'] as $value => $name ) {
282
- // Append `[]` to the name to get multiple values
283
- // Use in_array() to check whether the current option should be checked
284
- echo '<li><input type="checkbox" name="', $field['id'], '[]" id="', $field['id'], $i, '" value="', $value, '"', in_array( $value, $meta ) ? ' checked="checked"' : '', ' /><label for="', $field['id'], $i, '">', $name, '</label></li>';
285
- $i++;
286
- }
287
- echo '</ul>';
288
- echo '<span class="cmb_metabox_description">', $field['desc'], '</span>';
289
- break;
290
- case 'title':
291
- echo '<h5 class="cmb_metabox_title">', $field['name'], '</h5>';
292
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
293
- break;
294
- case 'wysiwyg':
295
- wp_editor( $meta ? $meta : $field['std'], $field['id'], isset( $field['options'] ) ? $field['options'] : array() );
296
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
297
- break;
298
- case 'taxonomy_select':
299
- echo '<select name="', $field['id'], '" id="', $field['id'], '">';
300
- $names= wp_get_object_terms( $post->ID, $field['taxonomy'] );
301
- $terms = get_terms( $field['taxonomy'], 'hide_empty=0' );
302
- foreach ( $terms as $term ) {
303
- if (!is_wp_error( $names ) && !empty( $names ) && !strcmp( $term->slug, $names[0]->slug ) ) {
304
- echo '<option value="' . $term->slug . '" selected>' . $term->name . '</option>';
305
- } else {
306
- echo '<option value="' . $term->slug . ' ' , $meta == $term->slug ? $meta : ' ' ,' ">' . $term->name . '</option>';
307
- }
308
- }
309
- echo '</select>';
310
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
311
- break;
312
- case 'taxonomy_radio':
313
- $names= wp_get_object_terms( $post->ID, $field['taxonomy'] );
314
- $terms = get_terms( $field['taxonomy'], 'hide_empty=0' );
315
- echo '<ul>';
316
- foreach ( $terms as $term ) {
317
- if ( !is_wp_error( $names ) && !empty( $names ) && !strcmp( $term->slug, $names[0]->slug ) ) {
318
- echo '<li><input type="radio" name="', $field['id'], '" value="'. $term->slug . '" checked>' . $term->name . '</li>';
319
- } else {
320
- echo '<li><input type="radio" name="', $field['id'], '" value="' . $term->slug . ' ' , $meta == $term->slug ? $meta : ' ' ,' ">' . $term->name .'</li>';
321
- }
322
- }
323
- echo '</ul>';
324
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
325
- break;
326
- case 'taxonomy_multicheck':
327
- echo '<ul>';
328
- $names = wp_get_object_terms( $post->ID, $field['taxonomy'] );
329
- $terms = get_terms( $field['taxonomy'], 'hide_empty=0' );
330
- foreach ($terms as $term) {
331
- echo '<li><input type="checkbox" name="', $field['id'], '[]" id="', $field['id'], '" value="', $term->name , '"';
332
- foreach ($names as $name) {
333
- if ( $term->slug == $name->slug ){ echo ' checked="checked" ';};
334
- }
335
- echo' /><label>', $term->name , '</label></li>';
336
- }
337
- break;
338
- case 'file_list':
339
- echo '<input class="cmb_upload_file" type="text" size="36" name="', $field['id'], '" value="" />';
340
- echo '<input class="cmb_upload_button button" type="button" value="Upload File" />';
341
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
342
- $args = array(
343
- 'post_type' => 'attachment',
344
- 'numberposts' => null,
345
- 'post_status' => null,
346
- 'post_parent' => $post->ID
347
- );
348
- $attachments = get_posts($args);
349
- if ($attachments) {
350
- echo '<ul class="attach_list">';
351
- foreach ($attachments as $attachment) {
352
- echo '<li>'.wp_get_attachment_link($attachment->ID, 'thumbnail', 0, 0, 'Download');
353
- echo '<span>';
354
- echo apply_filters('the_title', '&nbsp;'.$attachment->post_title);
355
- echo '</span></li>';
356
- }
357
- echo '</ul>';
358
- }
359
- break;
360
- case 'file':
361
- $input_type_url = "hidden";
362
- if ( 'url' == $field['allow'] || ( is_array( $field['allow'] ) && in_array( 'url', $field['allow'] ) ) )
363
- $input_type_url="text";
364
- echo '<input class="cmb_upload_file" type="' . $input_type_url . '" size="45" id="', $field['id'], '" name="', $field['id'], '" value="', $meta, '" />';
365
- echo '<input class="cmb_upload_button button" type="button" value="Upload File" />';
366
- echo '<input class="cmb_upload_file_id" type="hidden" id="', $field['id'], '_id" name="', $field['id'], '_id" value="', get_post_meta( $post->ID, $field['id'] . "_id",true), '" />';
367
- echo '<p class="cmb_metabox_description">', $field['desc'], '</p>';
368
- echo '<div id="', $field['id'], '_status" class="cmb_upload_status">';
369
- if ( $meta != '' ) {
370
- $check_image = preg_match( '/(^.*\.jpg|jpeg|png|gif|ico*)/i', $meta );
371
- if ( $check_image ) {
372
- echo '<div class="img_status">';
373
- echo '<img src="', $meta, '" alt="" />';
374
- echo '<a href="#" class="cmb_remove_file_button" rel="', $field['id'], '">Remove Image</a>';
375
- echo '</div>';
376
- } else {
377
- $parts = explode( '/', $meta );
378
- for( $i = 0; $i < count( $parts ); ++$i ) {
379
- $title = $parts[$i];
380
- }
381
- echo 'File: <strong>', $title, '</strong>&nbsp;&nbsp;&nbsp; (<a href="', $meta, '" target="_blank" rel="external">Download</a> / <a href="#" class="cmb_remove_file_button" rel="', $field['id'], '">Remove</a>)';
382
- }
383
- }
384
- echo '</div>';
385
- break;
386
- default:
387
- do_action('cmb_render_' . $field['type'] , $field, $meta);
388
- }
389
-
390
- echo '</td>','</tr>';
391
- }
392
- echo '</table>';
393
- }
394
-
395
- // Save data from metabox
396
- function save( $post_id) {
397
-
398
- // verify nonce
399
- if ( ! isset( $_POST['wp_meta_box_nonce'] ) || !wp_verify_nonce( $_POST['wp_meta_box_nonce'], basename(__FILE__) ) ) {
400
- return $post_id;
401
- }
402
-
403
- // check autosave
404
- if ( defined('DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
405
- return $post_id;
406
- }
407
-
408
- // check permissions
409
- if ( 'page' == $_POST['post_type'] ) {
410
- if ( !current_user_can( 'edit_page', $post_id ) ) {
411
- return $post_id;
412
- }
413
- } elseif ( !current_user_can( 'edit_post', $post_id ) ) {
414
- return $post_id;
415
- }
416
-
417
- foreach ( $this->_meta_box['fields'] as $field ) {
418
- $name = $field['id'];
419
-
420
- if ( ! isset( $field['multiple'] ) )
421
- $field['multiple'] = ( 'multicheck' == $field['type'] ) ? true : false;
422
-
423
- $old = get_post_meta( $post_id, $name, !$field['multiple'] /* If multicheck this can be multiple values */ );
424
- $new = isset( $_POST[$field['id']] ) ? $_POST[$field['id']] : null;
425
-
426
- if ( in_array( $field['type'], array( 'taxonomy_select', 'taxonomy_radio', 'taxonomy_multicheck' ) ) ) {
427
- $new = wp_set_object_terms( $post_id, $new, $field['taxonomy'] );
428
- }
429
-
430
- if ( ($field['type'] == 'textarea') || ($field['type'] == 'textarea_small') ) {
431
- $new = htmlspecialchars( $new );
432
- }
433
-
434
- if ( ($field['type'] == 'textarea_code') ) {
435
- $new = htmlspecialchars_decode( $new );
436
- }
437
-
438
- if ( $field['type'] == 'text_date_timestamp' ) {
439
- $new = strtotime( $new );
440
- }
441
-
442
- if ( $field['type'] == 'text_datetime_timestamp' ) {
443
- $string = $new['date'] . ' ' . $new['time'];
444
- $new = strtotime( $string );
445
- }
446
-
447
- $new = apply_filters('cmb_validate_' . $field['type'], $new, $post_id, $field);
448
-
449
- // validate meta value
450
- if ( isset( $field['validate_func']) ) {
451
- $ok = call_user_func( array( 'cmb_Meta_Box_Validate', $field['validate_func']), $new );
452
- if ( $ok === false ) { // pass away when meta value is invalid
453
- continue;
454
- }
455
- } elseif ( $field['multiple'] ) {
456
- delete_post_meta( $post_id, $name );
457
- if ( !empty( $new ) ) {
458
- foreach ( $new as $add_new ) {
459
- add_post_meta( $post_id, $name, $add_new, false );
460
- }
461
- }
462
- } elseif ( '' !== $new && $new != $old ) {
463
- update_post_meta( $post_id, $name, $new );
464
- } elseif ( '' == $new ) {
465
- delete_post_meta( $post_id, $name );
466
- }
467
-
468
- if ( 'file' == $field['type'] ) {
469
- $name = $field['id'] . "_id";
470
- $old = get_post_meta( $post_id, $name, !$field['multiple'] /* If multicheck this can be multiple values */ );
471
- if ( isset( $field['save_id'] ) && $field['save_id'] ) {
472
- $new = isset( $_POST[$name] ) ? $_POST[$name] : null;
473
- } else {
474
- $new = "";
475
- }
476
-
477
- if ( $new && $new != $old ) {
478
- update_post_meta( $post_id, $name, $new );
479
- } elseif ( '' == $new && $old ) {
480
- delete_post_meta( $post_id, $name, $old );
481
- }
482
- }
483
- }
484
- }
485
- }
486
-
487
- /**
488
- * Adding scripts and styles
489
- */
490
- function cmb_scripts( $hook ) {
491
- if ( $hook == 'post.php' || $hook == 'post-new.php' || $hook == 'page-new.php' || $hook == 'page.php' ) {
492
- wp_register_script( 'cmb-timepicker', CMB_META_BOX_URL . 'js/jquery.timePicker.min.js' );
493
- wp_register_script( 'cmb-scripts', CMB_META_BOX_URL . 'js/cmb.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'media-upload', 'thickbox', 'farbtastic' ) );
494
- wp_enqueue_script( 'cmb-timepicker' );
495
- wp_enqueue_script( 'cmb-scripts' );
496
- wp_register_style( 'cmb-styles', CMB_META_BOX_URL . 'style.css', array( 'thickbox', 'farbtastic' ) );
497
- wp_enqueue_style( 'cmb-styles' );
498
- }
499
- }
500
- add_action( 'admin_enqueue_scripts', 'cmb_scripts', 10 );
501
-
502
- function cmb_editor_footer_scripts() { ?>
503
- <?php
504
- if ( isset( $_GET['cmb_force_send'] ) && 'true' == $_GET['cmb_force_send'] ) {
505
- $label = $_GET['cmb_send_label'];
506
- if ( empty( $label ) ) $label="Select File";
507
- ?>
508
- <script type="text/javascript">
509
- jQuery(function($) {
510
- $('td.savesend input').val('<?php echo $label; ?>');
511
- });
512
- </script>
513
- <?php
514
- }
515
- }
516
- add_action( 'admin_print_footer_scripts', 'cmb_editor_footer_scripts', 99 );
517
-
518
- // Force 'Insert into Post' button from Media Library
519
- add_filter( 'get_media_item_args', 'cmb_force_send' );
520
- function cmb_force_send( $args ) {
521
-
522
- // if the Gallery tab is opened from a custom meta box field, add Insert Into Post button
523
- if ( isset( $_GET['cmb_force_send'] ) && 'true' == $_GET['cmb_force_send'] )
524
- $args['send'] = true;
525
-
526
- // if the From Computer tab is opened AT ALL, add Insert Into Post button after an image is uploaded
527
- if ( isset( $_POST['attachment_id'] ) && '' != $_POST["attachment_id"] ) {
528
-
529
- $args['send'] = true;
530
-
531
- // TO DO: Are there any conditions in which we don't want the Insert Into Post
532
- // button added? For example, if a post type supports thumbnails, does not support
533
- // the editor, and does not have any cmb file inputs? If so, here's the first
534
- // bits of code needed to check all that.
535
- // $attachment_ancestors = get_post_ancestors( $_POST["attachment_id"] );
536
- // $attachment_parent_post_type = get_post_type( $attachment_ancestors[0] );
537
- // $post_type_object = get_post_type_object( $attachment_parent_post_type );
538
- }
539
-
540
- // change the label of the button on the From Computer tab
541
- if ( isset( $_POST['attachment_id'] ) && '' != $_POST["attachment_id"] ) {
542
-
543
- echo '
544
- <script type="text/javascript">
545
- function cmbGetParameterByNameInline(name) {
546
- name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
547
- var regexS = "[\\?&]" + name + "=([^&#]*)";
548
- var regex = new RegExp(regexS);
549
- var results = regex.exec(window.location.href);
550
- if(results == null)
551
- return "";
552
- else
553
- return decodeURIComponent(results[1].replace(/\+/g, " "));
554
- }
555
-
556
- jQuery(function($) {
557
- if (cmbGetParameterByNameInline("cmb_force_send")=="true") {
558
- var cmb_send_label = cmbGetParameterByNameInline("cmb_send_label");
559
- $("td.savesend input").val(cmb_send_label);
560
- }
561
- });
562
- </script>
563
- ';
564
- }
565
-
566
- return $args;
567
-
568
- }
569
- // End. That's it, folks! //
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/metabox/js/cmb.js DELETED
@@ -1,128 +0,0 @@
1
- /**
2
- * Controls the behaviours of custom metabox fields.
3
- *
4
- * @author Andrew Norcross
5
- * @author Jared Atchison
6
- * @author Bill Erickson
7
- * @see https://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress
8
- */
9
-
10
- /*jslint browser: true, devel: true, indent: 4, maxerr: 50, sub: true */
11
- /*global jQuery, tb_show, tb_remove */
12
-
13
- /**
14
- * Custom jQuery for Custom Metaboxes and Fields
15
- */
16
- jQuery(document).ready(function ($) {
17
- 'use strict';
18
-
19
- var formfield;
20
-
21
- /**
22
- * Initialize timepicker (this will be moved inline in a future release)
23
- */
24
- $('.cmb_timepicker').each(function () {
25
- $('#' + jQuery(this).attr('id')).timePicker({
26
- startTime: "07:00",
27
- endTime: "22:00",
28
- show24Hours: false,
29
- separator: ':',
30
- step: 30
31
- });
32
- });
33
-
34
- /**
35
- * Initialize jQuery UI datepicker (this will be moved inline in a future release)
36
- */
37
- $('.cmb_datepicker').each(function () {
38
- $('#' + jQuery(this).attr('id')).datepicker();
39
- // $('#' + jQuery(this).attr('id')).datepicker({ dateFormat: 'yy-mm-dd' });
40
- // For more options see http://jqueryui.com/demos/datepicker/#option-dateFormat
41
- });
42
- // Wrap date picker in class to narrow the scope of jQuery UI CSS and prevent conflicts
43
- $("#ui-datepicker-div").wrap('<div class="cmb_element" />');
44
-
45
- /**
46
- * Initialize color picker
47
- */
48
- $('input:text.cmb_colorpicker').each(function (i) {
49
- $(this).after('<div id="picker-' + i + '" style="z-index: 1000; background: #EEE; border: 1px solid #CCC; position: absolute; display: block;"></div>');
50
- $('#picker-' + i).hide().farbtastic($(this));
51
- })
52
- .focus(function() {
53
- $(this).next().show();
54
- })
55
- .blur(function() {
56
- $(this).next().hide();
57
- });
58
-
59
- /**
60
- * File and image upload handling
61
- */
62
- $('.cmb_upload_file').change(function () {
63
- formfield = $(this).attr('name');
64
- $('#' + formfield + '_id').val("");
65
- });
66
-
67
- $('.cmb_upload_button').live('click', function () {
68
- var buttonLabel;
69
- formfield = $(this).prev('input').attr('name');
70
- buttonLabel = 'Use as ' + $('label[for=' + formfield + ']').text();
71
- tb_show('', 'media-upload.php?post_id=' + $('#post_ID').val() + '&type=file&cmb_force_send=true&cmb_send_label=' + buttonLabel + '&TB_iframe=true');
72
- return false;
73
- });
74
-
75
- $('.cmb_remove_file_button').live('click', function () {
76
- formfield = $(this).attr('rel');
77
- $('input#' + formfield).val('');
78
- $('input#' + formfield + '_id').val('');
79
- $(this).parent().remove();
80
- return false;
81
- });
82
-
83
- window.original_send_to_editor = window.send_to_editor;
84
- window.send_to_editor = function (html) {
85
- var itemurl, itemclass, itemClassBits, itemid, htmlBits, itemtitle,
86
- image, uploadStatus = true;
87
-
88
- if (formfield) {
89
-
90
- if ($(html).html(html).find('img').length > 0) {
91
- itemurl = $(html).html(html).find('img').attr('src'); // Use the URL to the size selected.
92
- itemclass = $(html).html(html).find('img').attr('class'); // Extract the ID from the returned class name.
93
- itemClassBits = itemclass.split(" ");
94
- itemid = itemClassBits[itemClassBits.length - 1];
95
- itemid = itemid.replace('wp-image-', '');
96
- } else {
97
- // It's not an image. Get the URL to the file instead.
98
- htmlBits = html.split("'"); // jQuery seems to strip out XHTML when assigning the string to an object. Use alternate method.
99
- itemurl = htmlBits[1]; // Use the URL to the file.
100
- itemtitle = htmlBits[2];
101
- itemtitle = itemtitle.replace('>', '');
102
- itemtitle = itemtitle.replace('</a>', '');
103
- itemid = ""; // TO DO: Get ID for non-image attachments.
104
- }
105
-
106
- image = /(jpe?g|png|gif|ico)$/gi;
107
-
108
- if (itemurl.match(image)) {
109
- uploadStatus = '<div class="img_status"><img src="' + itemurl + '" alt="" /><a href="#" class="cmb_remove_file_button" rel="' + formfield + '">Remove Image</a></div>';
110
- } else {
111
- // No output preview if it's not an image
112
- // Standard generic output if it's not an image.
113
- html = '<a href="' + itemurl + '" target="_blank" rel="external">View File</a>';
114
- uploadStatus = '<div class="no_image"><span class="file_link">' + html + '</span>&nbsp;&nbsp;&nbsp;<a href="#" class="cmb_remove_file_button" rel="' + formfield + '">Remove</a></div>';
115
- }
116
-
117
- $('#' + formfield).val(itemurl);
118
- $('#' + formfield + '_id').val(itemid);
119
- $('#' + formfield).siblings('.cmb_upload_status').slideDown().html(uploadStatus);
120
- tb_remove();
121
-
122
- } else {
123
- window.original_send_to_editor(html);
124
- }
125
-
126
- formfield = '';
127
- };
128
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/metabox/js/jquery.timePicker.min.js DELETED
@@ -1,13 +0,0 @@
1
- /**
2
- * A time picker for jQuery.
3
- *
4
- * Dual licensed under the MIT and GPL licenses.
5
- * Copyright (c) 2009 Anders Fajerson
6
- *
7
- * @name timePicker
8
- * @author Anders Fajerson (http://perifer.se)
9
- * @see http://github.com/perifer/timePicker
10
- * @example $("#mytime").timePicker();
11
- * @example $("#mytime").timePicker({step:30, startTime:"15:00", endTime:"18:00"});
12
- */
13
- (function(a){function g(a){a.setFullYear(2001),a.setMonth(0),a.setDate(0);return a}function f(a,b){if(a){var c=a.split(b.separator),d=parseFloat(c[0]),e=parseFloat(c[1]);b.show24Hours||(d===12&&a.indexOf("AM")!==-1?d=0:d!==12&&a.indexOf("PM")!==-1&&(d+=12));var f=new Date(0,0,0,d,e,0);return g(f)}return null}function e(a,b){return typeof a=="object"?g(a):f(a,b)}function d(a){return(a<10?"0":"")+a}function c(a,b){var c=a.getHours(),e=b.show24Hours?c:(c+11)%12+1,f=a.getMinutes();return d(e)+b.separator+d(f)+(b.show24Hours?"":c<12?" AM":" PM")}function b(b,c,d,e){b.value=a(c).text(),a(b).change(),a.browser.msie||b.focus(),d.hide()}a.fn.timePicker=function(b){var c=a.extend({},a.fn.timePicker.defaults,b);return this.each(function(){a.timePicker(this,c)})},a.timePicker=function(b,c){var d=a(b)[0];return d.timePicker||(d.timePicker=new jQuery._timePicker(d,c))},a.timePicker.version="0.3",a._timePicker=function(d,h){var i=!1,j=!1,k=e(h.startTime,h),l=e(h.endTime,h),m="selected",n="li."+m;a(d).attr("autocomplete","OFF");var o=[],p=new Date(k);while(p<=l)o[o.length]=c(p,h),p=new Date(p.setMinutes(p.getMinutes()+h.step));var q=a('<div class="time-picker'+(h.show24Hours?"":" time-picker-12hours")+'"></div>'),r=a("<ul></ul>");for(var s=0;s<o.length;s++)r.append("<li>"+o[s]+"</li>");q.append(r),q.appendTo("body").hide(),q.mouseover(function(){i=!0}).mouseout(function(){i=!1}),a("li",r).mouseover(function(){j||(a(n,q).removeClass(m),a(this).addClass(m))}).mousedown(function(){i=!0}).click(function(){b(d,this,q,h),i=!1});var t=function(){if(q.is(":visible"))return!1;a("li",q).removeClass(m);var b=a(d).offset();q.css({top:b.top+d.offsetHeight,left:b.left}),q.show();var e=d.value?f(d.value,h):k,i=k.getHours()*60+k.getMinutes(),j=e.getHours()*60+e.getMinutes()-i,n=Math.round(j/h.step),o=g(new Date(0,0,0,0,n*h.step+i,0));o=k<o&&o<=l?o:k;var p=a("li:contains("+c(o,h)+")",q);p.length&&(p.addClass(m),q[0].scrollTop=p[0].offsetTop);return!0};a(d).focus(t).click(t),a(d).blur(function(){i||q.hide()});var u=a.browser.opera||a.browser.mozilla?"keypress":"keydown";a(d)[u](function(c){var e;j=!0;var f=q[0].scrollTop;switch(c.keyCode){case 38:if(t())return!1;e=a(n,r);var g=e.prev().addClass(m)[0];g?(e.removeClass(m),g.offsetTop<f&&(q[0].scrollTop=f-g.offsetHeight)):(e.removeClass(m),g=a("li:last",r).addClass(m)[0],q[0].scrollTop=g.offsetTop-g.offsetHeight);return!1;case 40:if(t())return!1;e=a(n,r);var i=e.next().addClass(m)[0];i?(e.removeClass(m),i.offsetTop+i.offsetHeight>f+q[0].offsetHeight&&(q[0].scrollTop=f+i.offsetHeight)):(e.removeClass(m),i=a("li:first",r).addClass(m)[0],q[0].scrollTop=0);return!1;case 13:if(q.is(":visible")){var k=a(n,r)[0];b(d,k,q,h)}return!1;case 27:q.hide();return!1}return!0}),a(d).keyup(function(a){j=!1}),this.getTime=function(){return f(d.value,h)},this.setTime=function(b){d.value=c(e(b,h),h),a(d).change()}},a.fn.timePicker.defaults={step:30,startTime:new Date(0,0,0,0,0,0),endTime:new Date(0,0,0,23,30,0),separator:":",show24Hours:!0}})(jQuery)
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/metabox/readme.md DELETED
@@ -1,121 +0,0 @@
1
- # Custom Metaboxes and Fields for WordPress
2
-
3
- **Contributors**:
4
-
5
- * Andrew Norcross ( [@norcross](http://twitter.com/norcross ) / [andrewnorcross.com](http://andrewnorcross.com/) )
6
- * Jared Atchison ( [@jaredatch](http://twitter.com/jaredatch ) / [jaredatchison.com](http://jaredatchison.com/) )
7
- * Bill Erickson ( [@billerickson](http://twitter.com/billerickson ) / [billerickson.net](http://billerickson.net/) )
8
-
9
- **Version**: 0.9
10
- **Requires at least**: 3.3
11
- **Tested up to**: 3.3
12
- **License**: GPLv2
13
-
14
- ## Description
15
-
16
- Custom Metaboxes and Fields (CMB for short) will create metaboxes with custom fields that will blow your mind.
17
-
18
- ##### Links
19
- * [Github project page](http://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress)
20
- * [Documentation (GitHub wiki)](http://github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress/wiki)
21
-
22
- ##### Field Types:
23
- * text
24
- * text small
25
- * text medium
26
- * text money
27
- * date picker
28
- * date picker (unix timestamp)
29
- * date time picker combo (unix timestamp)
30
- * time picker
31
- * color picker
32
- * textarea
33
- * textarea small
34
- * textarea code
35
- * select
36
- * radio
37
- * radio inline
38
- * taxonomy radio
39
- * taxonomy select
40
- * checkbox
41
- * multicheck
42
- * WYSIWYG/TinyMCE
43
- * Image/file upload
44
-
45
- [More on field types (GitHub wiki)](github.com/jaredatch/Custom-Metaboxes-and-Fields-for-WordPress/wiki/Field-Types)
46
-
47
- ## Installation
48
-
49
- This script is easy to install. If you can't figure it out you probably shouldn't be using it.
50
-
51
- 1. Place `metabox` directory inside of your (activated) theme. E.g. inside `/themes/twentyten/lib/metabox/`.
52
- 2. Include `init.php`.
53
- 3. See `example-functions.php` for further guidance.
54
- 4. Profit.
55
-
56
- ## Known Issues
57
-
58
- * Problem inserting file url inside field for image with caption (issue #50)
59
- * `CMB_META_BOX_URL` does not define properly in WAMP/XAMP (Windows) (issue #31)
60
- * Metabox containing WYSIWYG editor cannot be moved (this is a TinyMCE issue)
61
-
62
- ## To-do
63
- * Fix known issues (above)
64
- * clean up code
65
- * improve inline documentation
66
- * move timepicker and datepicker jQuery inline
67
- * support for multiple configurable timepickers/datepickers
68
- * add ability to save fields in a single custom field
69
- * add ability to mark fields as required
70
- * add ability to define `placeholder` text
71
- * repeatable fields
72
- * look at possiblity of tabs
73
- * look at preserving taxonomy hierarchies
74
-
75
- ## Changelog
76
-
77
- ### 0.9
78
- * __Note: This release requires WordPress 3.3+__
79
- * Cleaned up scripts being queued, props @jaredatch
80
- * Cleaned up and reorganized jQuery, props @GaryJones
81
- * Use $pagenow instead of custom $current_page, props @jaredatch
82
- * Fixed CSS, removed inline styles, now all in style.css, props @jaredatch
83
- * Fixed multicheck issues (issue #48), props @jaredatch
84
- * Fixed jQuery UI datepicker CSS conflicting with WordPress UI elements, props @jaredatch
85
- * Fixed zeros not saving in fields, props @GaryJones
86
- * Fixed improper labels on radio and multicheck fields, props @jaredatch
87
- * Fixed fields not rendering properly when in sidebar, props @jaredatch
88
- * Fixed bug where datepicker triggers extra space after footer in Firefox (issue #14), props @jaredatch
89
- * Added jQuery UI datepicker packaged with 3.3 core, props @jaredatch
90
- * Added date time combo picker, props @jaredatch
91
- * Added color picker, props @jaredatch
92
- * Added readme.md markdown file, props @jaredatch
93
-
94
- ### 0.8
95
- * Added jQuery timepicker, props @norcross
96
- * Added 'raw' textarea to convert special HTML entities back to characters, props @norcross
97
- * Added missing examples on example-functions.php, props @norcross
98
-
99
- ### 0.7
100
- * Added the new wp_editor() function for the WYSIWYG dialog box, props @jcpry
101
- * Created 'cmb_show_on' filter to define your own Show On Filters, props @billerickson
102
- * Added page template show_on filter, props @billerickson
103
- * Improvements to the 'file' field type, props @randyhoyt
104
- * Allow for default values on 'radio' and 'radio_inline' field types, props @billerickson
105
-
106
- ### 0.6.1
107
- * Enabled the ability to define your own custom field types (issue #28). props @randyhoyt
108
-
109
- ### 0.6
110
- * Added the ability to limit metaboxes to certain posts by id. props @billerickson
111
-
112
- ### 0.5
113
- * Fixed define to prevent notices. props @destos
114
- * Added text_date_timestap option. props @andrewyno
115
- * Fixed WYSIWYG paragraph breaking/spacing bug. props @wpsmith
116
- * Added taxonomy_radio and taxonomies_select options. props @c3mdigital
117
- * Fixed script causing the dashboard widgets to not be collapsible.
118
- * Fixed various spacing and whitespace inconsistencies
119
-
120
- ### 0.4
121
- * Think we have a release that is mostly working. We'll say the initial release :)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/metabox/style.css DELETED
@@ -1,329 +0,0 @@
1
- /**
2
- * CMB Styling
3
- */
4
- table.cmb_metabox td, table.cmb_metabox th { border-bottom: 1px solid #E9E9E9; }
5
- table.cmb_metabox th { text-align: right; font-weight:bold;}
6
- table.cmb_metabox th label { margin-top:5px; display:block;}
7
- p.cmb_metabox_description { color: #AAA; font-style: italic; margin: 2px 0 !important;}
8
- span.cmb_metabox_description { color: #AAA; font-style: italic;}
9
- table.cmb_metabox input, table.cmb_metabox textarea { font-size:12px; padding: 5px; }
10
- table.cmb_metabox input[type=text], table.cmb_metabox textarea { width: 97%; }
11
- table.cmb_metabox textarea.cmb_textarea_code { font-family: Consolas,Monaco,monospace; line-height: 16px; }
12
- table.cmb_metabox input.cmb_text_small { width: 100px; margin-right: 15px;}
13
- table.cmb_metabox input.cmb_timepicker { width: 100px; margin-right: 15px;}
14
- table.cmb_metabox input.cmb_text_money { width: 90px; margin-right: 15px;}
15
- table.cmb_metabox input.cmb_text_medium { width: 230px; margin-right: 15px;}
16
- table.cmb_metabox input.cmb_upload_file { width: 65%; }
17
- table.cmb_metabox li { font-size:12px; margin: 1px 0 5px 0; line-height: 16px; }
18
- table.cmb_metabox ul { padding-top:5px; margin: 0; }
19
- table.cmb_metabox select { font-size:12px; margin-top: 3px;}
20
- table.cmb_metabox input:focus, table.cmb_metabox textarea:focus { background: #fffff8;}
21
- .cmb_metabox_title { margin: 0 0 5px 0; padding: 5px 0 0 0; font: italic 24px/35px Georgia,"Times New Roman","Bitstream Charter",Times,serif;}
22
- .cmb_radio_inline { padding: 4px 0 0 0;}
23
- .cmb_radio_inline_option {display: inline; padding-right: 18px;}
24
- table.cmb_metabox input[type="radio"] { margin: 0 5px 0 0; padding: 0;}
25
- table.cmb_metabox input[type="checkbox"] { margin: 0 5px 0 0; padding: 0;}
26
- table.cmb_metabox .mceLayout {border:1px solid #DFDFDF !important;}
27
- table.cmb_metabox .mceIframeContainer {background:#FFF;}
28
- table.cmb_metabox .meta_mce {width:97%;}
29
- table.cmb_metabox .meta_mce textarea {width:100%;}
30
- table.cmb_metabox .cmb_upload_status { margin: 10px 0 0 0;}
31
- table.cmb_metabox .cmb_upload_status .img_status { position: relative; }
32
- table.cmb_metabox .cmb_upload_status .img_status img { border:1px solid #DFDFDF; background: #FAFAFA; max-width:350px; padding: 5px; -moz-border-radius: 2px; border-radius: 2px;}
33
- table.cmb_metabox .cmb_upload_status .img_status .cmb_remove_file_button { text-indent: -9999px; background: url(images/ico-delete.png); width: 16px; height: 16px; position: absolute; top: -5px; left: -5px;}
34
- /* Sidebar placement adjustments */
35
- .inner-sidebar table.cmb_metabox input[type=text], table.cmb_metabox textarea { width: 95%; }
36
- .inner-sidebar table.cmb_metabox .cmb_upload_status .img_status img { width: 90%; }
37
-
38
- /**
39
- * Timepicker
40
- */
41
- div.time-picker { position: absolute; height: 191px; width:6em; /* needed for IE */overflow: auto; background: #fff; border: 1px solid #aaa; z-index: 99; margin: 0;}
42
- div.time-picker-12hours { width:8em; /* needed for IE */}
43
- div.time-picker ul { list-style-type: none; margin: 0; padding: 0; }
44
- div.time-picker li { cursor: pointer; height: 10px; font: 12px/1 Helvetica, Arial, sans-serif; padding: 4px 3px; }
45
- div.time-picker li.selected { background: #0063CE; color: #fff; }
46
-
47
- /**
48
- * jQuery UI CSS Framework 1.8.16
49
- *
50
- * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
51
- * Dual licensed under the MIT or GPL Version 2 licenses.
52
- * http://jquery.org/license
53
- *
54
- * http://docs.jquery.com/UI/Theming/API
55
- */
56
- .cmb_element .ui-helper-hidden { display: none; }
57
- .cmb_element .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
58
- .cmb_element .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
59
- .cmb_element .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
60
- .cmb_element .ui-helper-clearfix { display: inline-block; }
61
- * html .ui-helper-clearfix { height:1%; }
62
- .cmb_element .ui-helper-clearfix { display:block; }
63
- .cmb_element .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
64
- .cmb_element .ui-state-disabled { cursor: default !important; }
65
- .cmb_element .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
66
- .cmb_element .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
67
- .cmb_element .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
68
- .cmb_element .ui-widget .ui-widget { font-size: 1em; }
69
- .cmb_element .ui-widget input, .cmb_element .ui-widget select, .cmb_element .ui-widget textarea, .cmb_element .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
70
- .cmb_element .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
71
- .cmb_element .ui-widget-content a { color: #222222; }
72
- .cmb_element .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
73
- .cmb_element .ui-widget-header a { color: #222222; }
74
- .cmb_element .ui-state-default, .cmb_element .ui-widget-content .ui-state-default, .cmb_element .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
75
- .cmb_element .ui-state-default a, .cmb_element .ui-state-default a:link, .cmb_element .ui-state-default a:visited { color: #555555; text-decoration: none; }
76
- .cmb_element .ui-state-hover, .cmb_element .ui-widget-content .ui-state-hover, .cmb_element .ui-widget-header .ui-state-hover, .cmb_element .ui-state-focus, .cmb_element .ui-widget-content .ui-state-focus, .cmb_element .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
77
- .cmb_element .ui-state-hover a, .cmb_element .ui-state-hover a:hover { color: #212121; text-decoration: none; }
78
- .cmb_element .ui-state-active, .cmb_element .ui-widget-content .ui-state-active, .cmb_element .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
79
- .cmb_element .ui-state-active a, .cmb_element .ui-state-active a:link, .cmb_element .ui-state-active a:visited { color: #212121; text-decoration: none; }
80
- .cmb_element .ui-widget :active { outline: none; }
81
- .cmb_element .ui-state-highlight, .cmb_element .ui-widget-content .ui-state-highlight, .cmb_element .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
82
- .cmb_element .ui-state-highlight a, .cmb_element .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
83
- .cmb_element .ui-state-error, .cmb_element .ui-widget-content .ui-state-error, .cmb_element .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
84
- .cmb_element .ui-state-error a, .cmb_element .ui-widget-content .ui-state-error a, .cmb_element .ui-widget-header .ui-state-error a { color: #cd0a0a; }
85
- .cmb_element .ui-state-error-text, .cmb_element .ui-widget-content .ui-state-error-text, .cmb_element .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
86
- .cmb_element .ui-priority-primary, .cmb_element .ui-widget-content .ui-priority-primary, .cmb_element .ui-widget-header .ui-priority-primary { font-weight: bold; }
87
- .cmb_element .ui-priority-secondary, .cmb_element .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
88
- .cmb_element .ui-state-disabled, .cmb_element .ui-widget-content .ui-state-disabled, .cmb_element .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
89
- .cmb_element .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
90
- .cmb_element .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
91
- .cmb_element .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
92
- .cmb_element .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
93
- .cmb_element .ui-state-hover .ui-icon, .cmb_element .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
94
- .cmb_element .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
95
- .cmb_element .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
96
- .cmb_element .ui-state-error .ui-icon, .cmb_element .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
97
- .cmb_element .ui-icon-carat-1-n { background-position: 0 0; }
98
- .cmb_element .ui-icon-carat-1-ne { background-position: -16px 0; }
99
- .cmb_element .ui-icon-carat-1-e { background-position: -32px 0; }
100
- .cmb_element .ui-icon-carat-1-se { background-position: -48px 0; }
101
- .cmb_element .ui-icon-carat-1-s { background-position: -64px 0; }
102
- .cmb_element .ui-icon-carat-1-sw { background-position: -80px 0; }
103
- .cmb_element .ui-icon-carat-1-w { background-position: -96px 0; }
104
- .cmb_element .ui-icon-carat-1-nw { background-position: -112px 0; }
105
- .cmb_element .ui-icon-carat-2-n-s { background-position: -128px 0; }
106
- .cmb_element .ui-icon-carat-2-e-w { background-position: -144px 0; }
107
- .cmb_element .ui-icon-triangle-1-n { background-position: 0 -16px; }
108
- .cmb_element .ui-icon-triangle-1-ne { background-position: -16px -16px; }
109
- .cmb_element .ui-icon-triangle-1-e { background-position: -32px -16px; }
110
- .cmb_element .ui-icon-triangle-1-se { background-position: -48px -16px; }
111
- .cmb_element .ui-icon-triangle-1-s { background-position: -64px -16px; }
112
- .cmb_element .ui-icon-triangle-1-sw { background-position: -80px -16px; }
113
- .cmb_element .ui-icon-triangle-1-w { background-position: -96px -16px; }
114
- .cmb_element .ui-icon-triangle-1-nw { background-position: -112px -16px; }
115
- .cmb_element .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
116
- .cmb_element .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
117
- .cmb_element .ui-icon-arrow-1-n { background-position: 0 -32px; }
118
- .cmb_element .ui-icon-arrow-1-ne { background-position: -16px -32px; }
119
- .cmb_element .ui-icon-arrow-1-e { background-position: -32px -32px; }
120
- .cmb_element .ui-icon-arrow-1-se { background-position: -48px -32px; }
121
- .cmb_element .ui-icon-arrow-1-s { background-position: -64px -32px; }
122
- .cmb_element .ui-icon-arrow-1-sw { background-position: -80px -32px; }
123
- .cmb_element .ui-icon-arrow-1-w { background-position: -96px -32px; }
124
- .cmb_element .ui-icon-arrow-1-nw { background-position: -112px -32px; }
125
- .cmb_element .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
126
- .cmb_element .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
127
- .cmb_element .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
128
- .cmb_element .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
129
- .cmb_element .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
130
- .cmb_element .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
131
- .cmb_element .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
132
- .cmb_element .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
133
- .cmb_element .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
134
- .cmb_element .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
135
- .cmb_element .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
136
- .cmb_element .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
137
- .cmb_element .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
138
- .cmb_element .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
139
- .cmb_element .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
140
- .cmb_element .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
141
- .cmb_element .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
142
- .cmb_element .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
143
- .cmb_element .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
144
- .cmb_element .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
145
- .cmb_element .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
146
- .cmb_element .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
147
- .cmb_element .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
148
- .cmb_element .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
149
- .cmb_element .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
150
- .cmb_element .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
151
- .cmb_element .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
152
- .cmb_element .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
153
- .cmb_element .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
154
- .cmb_element .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
155
- .cmb_element .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
156
- .cmb_element .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
157
- .cmb_element .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
158
- .cmb_element .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
159
- .cmb_element .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
160
- .cmb_element .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
161
- .cmb_element .ui-icon-arrow-4 { background-position: 0 -80px; }
162
- .cmb_element .ui-icon-arrow-4-diag { background-position: -16px -80px; }
163
- .cmb_element .ui-icon-extlink { background-position: -32px -80px; }
164
- .cmb_element .ui-icon-newwin { background-position: -48px -80px; }
165
- .cmb_element .ui-icon-refresh { background-position: -64px -80px; }
166
- .cmb_element .ui-icon-shuffle { background-position: -80px -80px; }
167
- .cmb_element .ui-icon-transfer-e-w { background-position: -96px -80px; }
168
- .cmb_element .ui-icon-transferthick-e-w { background-position: -112px -80px; }
169
- .cmb_element .ui-icon-folder-collapsed { background-position: 0 -96px; }
170
- .cmb_element .ui-icon-folder-open { background-position: -16px -96px; }
171
- .cmb_element .ui-icon-document { background-position: -32px -96px; }
172
- .cmb_element .ui-icon-document-b { background-position: -48px -96px; }
173
- .cmb_element .ui-icon-note { background-position: -64px -96px; }
174
- .cmb_element .ui-icon-mail-closed { background-position: -80px -96px; }
175
- .cmb_element .ui-icon-mail-open { background-position: -96px -96px; }
176
- .cmb_element .ui-icon-suitcase { background-position: -112px -96px; }
177
- .cmb_element .ui-icon-comment { background-position: -128px -96px; }
178
- .cmb_element .ui-icon-person { background-position: -144px -96px; }
179
- .cmb_element .ui-icon-print { background-position: -160px -96px; }
180
- .cmb_element .ui-icon-trash { background-position: -176px -96px; }
181
- .cmb_element .ui-icon-locked { background-position: -192px -96px; }
182
- .cmb_element .ui-icon-unlocked { background-position: -208px -96px; }
183
- .cmb_element .ui-icon-bookmark { background-position: -224px -96px; }
184
- .cmb_element .ui-icon-tag { background-position: -240px -96px; }
185
- .cmb_element .ui-icon-home { background-position: 0 -112px; }
186
- .cmb_element .ui-icon-flag { background-position: -16px -112px; }
187
- .cmb_element .ui-icon-calendar { background-position: -32px -112px; }
188
- .cmb_element .ui-icon-cart { background-position: -48px -112px; }
189
- .cmb_element .ui-icon-pencil { background-position: -64px -112px; }
190
- .cmb_element .ui-icon-clock { background-position: -80px -112px; }
191
- .cmb_element .ui-icon-disk { background-position: -96px -112px; }
192
- .cmb_element .ui-icon-calculator { background-position: -112px -112px; }
193
- .cmb_element .ui-icon-zoomin { background-position: -128px -112px; }
194
- .cmb_element .ui-icon-zoomout { background-position: -144px -112px; }
195
- .cmb_element .ui-icon-search { background-position: -160px -112px; }
196
- .cmb_element .ui-icon-wrench { background-position: -176px -112px; }
197
- .cmb_element .ui-icon-gear { background-position: -192px -112px; }
198
- .cmb_element .ui-icon-heart { background-position: -208px -112px; }
199
- .cmb_element .ui-icon-star { background-position: -224px -112px; }
200
- .cmb_element .ui-icon-link { background-position: -240px -112px; }
201
- .cmb_element .ui-icon-cancel { background-position: 0 -128px; }
202
- .cmb_element .ui-icon-plus { background-position: -16px -128px; }
203
- .cmb_element .ui-icon-plusthick { background-position: -32px -128px; }
204
- .cmb_element .ui-icon-minus { background-position: -48px -128px; }
205
- .cmb_element .ui-icon-minusthick { background-position: -64px -128px; }
206
- .cmb_element .ui-icon-close { background-position: -80px -128px; }
207
- .cmb_element .ui-icon-closethick { background-position: -96px -128px; }
208
- .cmb_element .ui-icon-key { background-position: -112px -128px; }
209
- .cmb_element .ui-icon-lightbulb { background-position: -128px -128px; }
210
- .cmb_element .ui-icon-scissors { background-position: -144px -128px; }
211
- .cmb_element .ui-icon-clipboard { background-position: -160px -128px; }
212
- .cmb_element .ui-icon-copy { background-position: -176px -128px; }
213
- .cmb_element .ui-icon-contact { background-position: -192px -128px; }
214
- .cmb_element .ui-icon-image { background-position: -208px -128px; }
215
- .cmb_element .ui-icon-video { background-position: -224px -128px; }
216
- .cmb_element .ui-icon-script { background-position: -240px -128px; }
217
- .cmb_element .ui-icon-alert { background-position: 0 -144px; }
218
- .cmb_element .ui-icon-info { background-position: -16px -144px; }
219
- .cmb_element .ui-icon-notice { background-position: -32px -144px; }
220
- .cmb_element .ui-icon-help { background-position: -48px -144px; }
221
- .cmb_element .ui-icon-check { background-position: -64px -144px; }
222
- .cmb_element .ui-icon-bullet { background-position: -80px -144px; }
223
- .cmb_element .ui-icon-radio-off { background-position: -96px -144px; }
224
- .cmb_element .ui-icon-radio-on { background-position: -112px -144px; }
225
- .cmb_element .ui-icon-pin-w { background-position: -128px -144px; }
226
- .cmb_element .ui-icon-pin-s { background-position: -144px -144px; }
227
- .cmb_element .ui-icon-play { background-position: 0 -160px; }
228
- .cmb_element .ui-icon-pause { background-position: -16px -160px; }
229
- .cmb_element .ui-icon-seek-next { background-position: -32px -160px; }
230
- .cmb_element .ui-icon-seek-prev { background-position: -48px -160px; }
231
- .cmb_element .ui-icon-seek-end { background-position: -64px -160px; }
232
- .cmb_element .ui-icon-seek-start { background-position: -80px -160px; }
233
- .cmb_element .ui-icon-seek-first { background-position: -80px -160px; }
234
- .cmb_element .ui-icon-stop { background-position: -96px -160px; }
235
- .cmb_element .ui-icon-eject { background-position: -112px -160px; }
236
- .cmb_element .ui-icon-volume-off { background-position: -128px -160px; }
237
- .cmb_element .ui-icon-volume-on { background-position: -144px -160px; }
238
- .cmb_element .ui-icon-power { background-position: 0 -176px; }
239
- .cmb_element .ui-icon-signal-diag { background-position: -16px -176px; }
240
- .cmb_element .ui-icon-signal { background-position: -32px -176px; }
241
- .cmb_element .ui-icon-battery-0 { background-position: -48px -176px; }
242
- .cmb_element .ui-icon-battery-1 { background-position: -64px -176px; }
243
- .cmb_element .ui-icon-battery-2 { background-position: -80px -176px; }
244
- .cmb_element .ui-icon-battery-3 { background-position: -96px -176px; }
245
- .cmb_element .ui-icon-circle-plus { background-position: 0 -192px; }
246
- .cmb_element .ui-icon-circle-minus { background-position: -16px -192px; }
247
- .cmb_element .ui-icon-circle-close { background-position: -32px -192px; }
248
- .cmb_element .ui-icon-circle-triangle-e { background-position: -48px -192px; }
249
- .cmb_element .ui-icon-circle-triangle-s { background-position: -64px -192px; }
250
- .cmb_element .ui-icon-circle-triangle-w { background-position: -80px -192px; }
251
- .cmb_element .ui-icon-circle-triangle-n { background-position: -96px -192px; }
252
- .cmb_element .ui-icon-circle-arrow-e { background-position: -112px -192px; }
253
- .cmb_element .ui-icon-circle-arrow-s { background-position: -128px -192px; }
254
- .cmb_element .ui-icon-circle-arrow-w { background-position: -144px -192px; }
255
- .cmb_element .ui-icon-circle-arrow-n { background-position: -160px -192px; }
256
- .cmb_element .ui-icon-circle-zoomin { background-position: -176px -192px; }
257
- .cmb_element .ui-icon-circle-zoomout { background-position: -192px -192px; }
258
- .cmb_element .ui-icon-circle-check { background-position: -208px -192px; }
259
- .cmb_element .ui-icon-circlesmall-plus { background-position: 0 -208px; }
260
- .cmb_element .ui-icon-circlesmall-minus { background-position: -16px -208px; }
261
- .cmb_element .ui-icon-circlesmall-close { background-position: -32px -208px; }
262
- .cmb_element .ui-icon-squaresmall-plus { background-position: -48px -208px; }
263
- .cmb_element .ui-icon-squaresmall-minus { background-position: -64px -208px; }
264
- .cmb_element .ui-icon-squaresmall-close { background-position: -80px -208px; }
265
- .cmb_element .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
266
- .cmb_element .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
267
- .cmb_element .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
268
- .cmb_element .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
269
- .cmb_element .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
270
- .cmb_element .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
271
- .cmb_element .ui-corner-all, .cmb_element .ui-corner-top, .cmb_element .ui-corner-left, .cmb_element .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; -khtml-border-top-left-radius: 4px; border-top-left-radius: 4px; }
272
- .cmb_element .ui-corner-all, .cmb_element .ui-corner-top, .cmb_element .ui-corner-right, .cmb_element .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; -khtml-border-top-right-radius: 4px; border-top-right-radius: 4px; }
273
- .cmb_element .ui-corner-all, .cmb_element .ui-corner-bottom, .cmb_element .ui-corner-left, .cmb_element .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; -khtml-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
274
- .cmb_element .ui-corner-all, .cmb_element .ui-corner-bottom, .cmb_element .ui-corner-right, .cmb_element .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; -khtml-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
275
- .cmb_element .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
276
- .cmb_element .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
277
- .cmb_element .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
278
- .cmb_element .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
279
- .cmb_element .ui-datepicker .ui-datepicker-prev, .cmb_element .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
280
- .cmb_element .ui-datepicker .ui-datepicker-prev-hover, .cmb_element .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
281
- .cmb_element .ui-datepicker .ui-datepicker-prev { left:2px; }
282
- .cmb_element .ui-datepicker .ui-datepicker-next { right:2px; }
283
- .cmb_element .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
284
- .cmb_element .ui-datepicker .ui-datepicker-next-hover { right:1px; }
285
- .cmb_element .ui-datepicker .ui-datepicker-prev span, .cmb_element .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
286
- .cmb_element .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
287
- .cmb_element .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
288
- .cmb_element .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
289
- .cmb_element .ui-datepicker select.ui-datepicker-month,
290
- .cmb_element .ui-datepicker select.ui-datepicker-year { width: 49%;}
291
- .cmb_element .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
292
- .cmb_element .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
293
- .cmb_element .ui-datepicker td { border: 0; padding: 1px; }
294
- .cmb_element .ui-datepicker td span, .cmb_element .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
295
- .cmb_element .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
296
- .cmb_element .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
297
- .cmb_element .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
298
- .cmb_element .ui-datepicker.ui-datepicker-multi { width:auto; }
299
- .cmb_element .ui-datepicker-multi .ui-datepicker-group { float:left; }
300
- .cmb_element .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
301
- .cmb_element .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
302
- .cmb_element .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
303
- .cmb_element .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
304
- .cmb_element .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
305
- .cmb_element .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
306
- .cmb_element .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
307
- .cmb_element .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
308
- .cmb_element .ui-datepicker-rtl { direction: rtl; }
309
- .cmb_element .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
310
- .cmb_element .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
311
- .cmb_element .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
312
- .cmb_element .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
313
- .cmb_element .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
314
- .cmb_element .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
315
- .cmb_element .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
316
- .cmb_element .ui-datepicker-rtl .ui-datepicker-group { float:right; }
317
- .cmb_element .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
318
- .cmb_element .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
319
- .cmb_element .ui-datepicker-cover {
320
- display: none; /*sorry for IE5*/
321
- display/**/: block; /*sorry for IE5*/
322
- position: absolute; /*must have*/
323
- z-index: -1; /*must have*/
324
- filter: mask(); /*must have*/
325
- top: -4px; /*must have*/
326
- left: -4px; /*must have*/
327
- width: 200px; /*must have*/
328
- height: 200px; /*must have*/
329
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
4
  Tags: genesis, genesiswp, title,
5
  Requires at least: 3.0
6
  Tested up to: 3.9
7
- Stable tag: 1.5
8
 
9
  Turn on/off page titles on a per page basis, and set sitewide defaults from Theme Settings. Must be using the Genesis theme.
10
 
@@ -16,7 +16,7 @@ You can also set sitewide defaults. If you don't want page titles on any pages,
16
 
17
  Finally, if you're comfortable with code you can use the `be_title_toggle_post_types` filter to change the post types this applies to (it only applies to pages by default).
18
 
19
- **No support will be provided by the developer**
20
 
21
 
22
  == Installation ==
@@ -40,6 +40,10 @@ Finally, if you're comfortable with code you can use the `be_title_toggle_post_t
40
 
41
  == Changelog ==
42
 
 
 
 
 
43
  = 1.5 =
44
  * Add HTML5 Support for Genesis 2.0
45
 
4
  Tags: genesis, genesiswp, title,
5
  Requires at least: 3.0
6
  Tested up to: 3.9
7
+ Stable tag: 1.6
8
 
9
  Turn on/off page titles on a per page basis, and set sitewide defaults from Theme Settings. Must be using the Genesis theme.
10
 
16
 
17
  Finally, if you're comfortable with code you can use the `be_title_toggle_post_types` filter to change the post types this applies to (it only applies to pages by default).
18
 
19
+ [Support Forum](https://github.com/billerickson/Genesis-Title-Toggle/issues)
20
 
21
 
22
  == Installation ==
40
 
41
  == Changelog ==
42
 
43
+ = 1.6 =
44
+ * Updated the metabox code to prevent conflicts with other plugins
45
+ * General refresh of the code to make it cleaner and easier to read
46
+
47
  = 1.5 =
48
  * Add HTML5 Support for Genesis 2.0
49