Team Members - Version 2.0.1

Version Description

  • SAFE UPDATE: No data loss for those upgrading from version 1.0 or higher
  • Bug fix on update
Download this release

Release Info

Developer spwebguy
Plugin Icon 128x128 Team Members
Version 2.0.1
Comparing to
See all releases

Code changes from version 1.3.1 to 2.0.1

Files changed (164) hide show
  1. cmb2/bootstrap.php +61 -0
  2. cmb2/css/cmb2.css +2928 -0
  3. cmb2/css/cmb2.css.map +7 -0
  4. cmb2/css/cmb2.min.css +1 -0
  5. cmb2/css/index.php +0 -0
  6. cmb2/css/sass/cmb2.scss +14 -0
  7. cmb2/css/sass/index.php +0 -0
  8. cmb2/css/sass/partials/_collapsible_ui.scss +52 -0
  9. cmb2/css/sass/partials/_jquery_ui.scss +289 -0
  10. cmb2/css/sass/partials/_main_wrap.scss +438 -0
  11. cmb2/css/sass/partials/_misc.scss +20 -0
  12. cmb2/css/sass/partials/_mixins.scss +40 -0
  13. cmb2/css/sass/partials/_post_metaboxes.scss +114 -0
  14. cmb2/css/sass/partials/_sidebar_placements.scss +153 -0
  15. cmb2/css/sass/partials/_timepicker.scss +40 -0
  16. cmb2/css/sass/partials/_variables.scss +22 -0
  17. cmb2/css/sass/partials/index.php +0 -0
  18. cmb2/images/ico-delete.png +0 -0
  19. cmb2/images/index.php +0 -0
  20. cmb2/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  21. cmb2/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  22. cmb2/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  23. cmb2/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  24. cmb2/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  25. cmb2/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  26. cmb2/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  27. cmb2/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  28. cmb2/images/ui-icons_222222_256x240.png +0 -0
  29. cmb2/images/ui-icons_2e83ff_256x240.png +0 -0
  30. cmb2/images/ui-icons_454545_256x240.png +0 -0
  31. cmb2/images/ui-icons_888888_256x240.png +0 -0
  32. cmb2/images/ui-icons_cd0a0a_256x240.png +0 -0
  33. cmb2/includes/CMB2.php +859 -0
  34. cmb2/includes/CMB2_Ajax.php +209 -0
  35. cmb2/includes/CMB2_Boxes.php +36 -0
  36. cmb2/includes/CMB2_Field.php +892 -0
  37. cmb2/includes/CMB2_Options.php +178 -0
  38. cmb2/includes/CMB2_Sanitize.php +376 -0
  39. cmb2/includes/CMB2_Show_Filters.php +168 -0
  40. cmb2/includes/CMB2_Types.php +962 -0
  41. cmb2/includes/CMB2_Utils.php +181 -0
  42. cmb2/includes/CMB2_hookup.php +395 -0
  43. cmb2/includes/helper-functions.php +283 -0
  44. cmb2/includes/index.php +0 -0
  45. cmb2/index.php +0 -0
  46. cmb2/init.php +78 -0
  47. cmb2/js/cmb2.js +891 -0
  48. cmb2/js/cmb2.min.js +1 -0
  49. cmb2/js/index.php +0 -0
  50. cmb2/js/jquery.timePicker.min.js +13 -0
  51. css/admin_de_style.css +88 -0
  52. css/admin_de_style.min.css +1 -0
  53. css/tmm_custom_style.css +4 -1
  54. css/tmm_custom_style.min.css +1 -1
  55. drkfr/Gruntfile.js +0 -39
  56. drkfr/class.drkfr-meta-box.php +0 -379
  57. drkfr/classes.fields.php +0 -1675
  58. drkfr/css/dist/drkfr.css +0 -63
  59. drkfr/css/dist/drkfr.min.css +0 -63
  60. drkfr/css/legacy.css +0 -319
  61. drkfr/css/src/file.css +0 -166
  62. drkfr/css/src/generic.css +0 -55
  63. drkfr/css/src/group.css +0 -82
  64. drkfr/css/src/layout.css +0 -57
  65. drkfr/css/src/misc-fields.css +0 -71
  66. drkfr/css/src/repeatable.css +0 -88
  67. drkfr/css/src/sortable.css +0 -40
  68. drkfr/css/vendor/jquery-ui/images/animated-overlay.gif +0 -0
  69. drkfr/css/vendor/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  70. drkfr/css/vendor/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  71. drkfr/css/vendor/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  72. drkfr/css/vendor/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  73. drkfr/css/vendor/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  74. drkfr/css/vendor/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  75. drkfr/css/vendor/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  76. drkfr/css/vendor/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  77. drkfr/css/vendor/jquery-ui/images/ui-icons_222222_256x240.png +0 -0
  78. drkfr/css/vendor/jquery-ui/images/ui-icons_2e83ff_256x240.png +0 -0
  79. drkfr/css/vendor/jquery-ui/images/ui-icons_454545_256x240.png +0 -0
  80. drkfr/css/vendor/jquery-ui/images/ui-icons_888888_256x240.png +0 -0
  81. drkfr/css/vendor/jquery-ui/images/ui-icons_cd0a0a_256x240.png +0 -0
  82. drkfr/css/vendor/jquery-ui/jquery-ui.css +0 -1175
  83. drkfr/css/vendor/jquery-ui/jquery-ui.min.css +0 -5
  84. drkfr/css/vendor/jquery-ui/jquery.ui.theme.css +0 -406
  85. drkfr/custom-meta-boxes.php +0 -136
  86. drkfr/fields-anywhere.php +0 -92
  87. drkfr/images/drkfr-icon-remove.png +0 -0
  88. drkfr/images/drkfr-icon-remove@2x.png +0 -0
  89. drkfr/images/wpspin-2x.gif +0 -0
  90. drkfr/images/wpspin.gif +0 -0
  91. drkfr/js/drkfr.js +0 -315
  92. drkfr/js/field-gmap.js +0 -93
  93. drkfr/js/field-wysiwyg.js +0 -106
  94. drkfr/js/field.colorpicker.js +0 -18
  95. drkfr/js/field.datetime.js +0 -47
  96. drkfr/js/field.select.js +0 -29
  97. drkfr/js/file-upload.js +0 -129
  98. drkfr/js/jquery.timePicker.min.js +0 -20
  99. drkfr/js/vendor/select2/.bower.json +0 -25
  100. drkfr/js/vendor/select2/.gitignore +0 -2
  101. drkfr/js/vendor/select2/LICENSE +0 -18
  102. drkfr/js/vendor/select2/README.md +0 -99
  103. drkfr/js/vendor/select2/bower.json +0 -8
  104. drkfr/js/vendor/select2/component.json +0 -66
  105. drkfr/js/vendor/select2/composer.json +0 -29
  106. drkfr/js/vendor/select2/package.json +0 -20
  107. drkfr/js/vendor/select2/release.sh +0 -79
  108. drkfr/js/vendor/select2/select2-bootstrap.css +0 -87
  109. drkfr/js/vendor/select2/select2-spinner.gif +0 -0
  110. drkfr/js/vendor/select2/select2.css +0 -704
  111. drkfr/js/vendor/select2/select2.jquery.json +0 -36
  112. drkfr/js/vendor/select2/select2.js +0 -3508
  113. drkfr/js/vendor/select2/select2.min.js +0 -23
  114. drkfr/js/vendor/select2/select2.png +0 -0
  115. drkfr/js/vendor/select2/select2_locale_ar.js +0 -19
  116. drkfr/js/vendor/select2/select2_locale_az.js +0 -20
  117. drkfr/js/vendor/select2/select2_locale_bg.js +0 -20
  118. drkfr/js/vendor/select2/select2_locale_ca.js +0 -19
  119. drkfr/js/vendor/select2/select2_locale_cs.js +0 -51
  120. drkfr/js/vendor/select2/select2_locale_da.js +0 -19
  121. drkfr/js/vendor/select2/select2_locale_de.js +0 -18
  122. drkfr/js/vendor/select2/select2_locale_el.js +0 -19
  123. drkfr/js/vendor/select2/select2_locale_en.js.template +0 -20
  124. drkfr/js/vendor/select2/select2_locale_es.js +0 -17
  125. drkfr/js/vendor/select2/select2_locale_et.js +0 -19
  126. drkfr/js/vendor/select2/select2_locale_eu.js +0 -45
  127. drkfr/js/vendor/select2/select2_locale_fa.js +0 -21
  128. drkfr/js/vendor/select2/select2_locale_fi.js +0 -30
  129. drkfr/js/vendor/select2/select2_locale_fr.js +0 -18
  130. drkfr/js/vendor/select2/select2_locale_gl.js +0 -45
  131. drkfr/js/vendor/select2/select2_locale_he.js +0 -19
  132. drkfr/js/vendor/select2/select2_locale_hr.js +0 -24
  133. drkfr/js/vendor/select2/select2_locale_hu.js +0 -17
  134. drkfr/js/vendor/select2/select2_locale_id.js +0 -19
  135. drkfr/js/vendor/select2/select2_locale_is.js +0 -17
  136. drkfr/js/vendor/select2/select2_locale_it.js +0 -17
  137. drkfr/js/vendor/select2/select2_locale_ja.js +0 -17
  138. drkfr/js/vendor/select2/select2_locale_ka.js +0 -19
  139. drkfr/js/vendor/select2/select2_locale_ko.js +0 -19
  140. drkfr/js/vendor/select2/select2_locale_lt.js +0 -26
  141. drkfr/js/vendor/select2/select2_locale_lv.js +0 -19
  142. drkfr/js/vendor/select2/select2_locale_mk.js +0 -19
  143. drkfr/js/vendor/select2/select2_locale_ms.js +0 -19
  144. drkfr/js/vendor/select2/select2_locale_nl.js +0 -17
  145. drkfr/js/vendor/select2/select2_locale_no.js +0 -20
  146. drkfr/js/vendor/select2/select2_locale_pl.js +0 -25
  147. drkfr/js/vendor/select2/select2_locale_pt-BR.js +0 -17
  148. drkfr/js/vendor/select2/select2_locale_pt-PT.js +0 -17
  149. drkfr/js/vendor/select2/select2_locale_ro.js +0 -17
  150. drkfr/js/vendor/select2/select2_locale_rs.js +0 -19
  151. drkfr/js/vendor/select2/select2_locale_ru.js +0 -23
  152. drkfr/js/vendor/select2/select2_locale_sk.js +0 -50
  153. drkfr/js/vendor/select2/select2_locale_sv.js +0 -19
  154. drkfr/js/vendor/select2/select2_locale_th.js +0 -19
  155. drkfr/js/vendor/select2/select2_locale_tr.js +0 -19
  156. drkfr/js/vendor/select2/select2_locale_ug-CN.js +0 -16
  157. drkfr/js/vendor/select2/select2_locale_uk.js +0 -25
  158. drkfr/js/vendor/select2/select2_locale_vi.js +0 -20
  159. drkfr/js/vendor/select2/select2_locale_zh-CN.js +0 -16
  160. drkfr/js/vendor/select2/select2_locale_zh-TW.js +0 -16
  161. drkfr/js/vendor/select2/select2x2.png +0 -0
  162. drkfr/phpunit.xml +0 -14
  163. readme.txt +14 -1
  164. tmm.php +498 -177
cmb2/bootstrap.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Helper function to provide directory path to CMB
5
+ * @since 2.0.0
6
+ * @param string $path Path to append
7
+ * @return string Directory with optional path appended
8
+ */
9
+ function cmb2_dir( $path = '' ) {
10
+ static $cmb2_dir = null;
11
+ if ( is_null( $cmb2_dir ) ) {
12
+ $cmb2_dir = trailingslashit( dirname( __FILE__ ) );
13
+ }
14
+ return $cmb2_dir . $path;
15
+ }
16
+
17
+ /**
18
+ * Include helper functions,
19
+ * and more importantly, the class/file autoloader
20
+ */
21
+ require_once cmb2_dir( 'includes/helper-functions.php' );
22
+
23
+ /**
24
+ * Fires when CMB2 is included/loaded
25
+ *
26
+ * Should be used to to add metaboxes. See example-functions.php
27
+ */
28
+ do_action( 'cmb2_init' );
29
+
30
+ /**
31
+ * For back-compat. Does the dirtywork of instantiatiating all the
32
+ * CMB2 instances for the cmb2_meta_boxes filter
33
+ * @since 2.0.2
34
+ */
35
+ $all_meta_boxes_config = apply_filters( 'cmb2_meta_boxes', array() );
36
+ foreach ( (array) $all_meta_boxes_config as $meta_box_config ) {
37
+ new CMB2( $meta_box_config );
38
+ }
39
+
40
+ /**
41
+ * Fires after all CMB2 instances are created
42
+ */
43
+ do_action( 'cmb2_init_before_hookup' );
44
+
45
+ /**
46
+ * Get all created metaboxes, and instantiate CMB2_hookup
47
+ * on metaboxes which require it.
48
+ * @since 2.0.2
49
+ */
50
+ foreach ( CMB2_Boxes::get_all() as $cmb ) {
51
+ if ( $cmb->prop( 'hookup' ) ) {
52
+ $hookup = new CMB2_hookup( $cmb );
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Fires after CMB2 initiation process has been completed
58
+ */
59
+ do_action( 'cmb2_after_init' );
60
+
61
+ // End. That's it, folks! //
cmb2/css/cmb2.css ADDED
@@ -0,0 +1,2928 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * CMB Styling
3
+ */
4
+
5
+ /*--------------------------------------------------------------
6
+ Main Wrap
7
+ --------------------------------------------------------------*/
8
+
9
+ /* line 5, sass/partials/_main_wrap.scss */
10
+
11
+ .cmb2-wrap {
12
+ margin: 0;
13
+ }
14
+
15
+ /* line 8, sass/partials/_main_wrap.scss */
16
+
17
+ .cmb2-wrap input,
18
+ .cmb2-wrap textarea {
19
+ font-size: 14px;
20
+ max-width: 100%;
21
+ padding: 5px;
22
+ }
23
+
24
+ /* line 18, sass/partials/_main_wrap.scss */
25
+
26
+ .cmb2-wrap input[type=text].cmb2-oembed {
27
+ width: 100%;
28
+ }
29
+
30
+ /* line 23, sass/partials/_main_wrap.scss */
31
+
32
+ .cmb2-wrap textarea {
33
+ width: 500px;
34
+ }
35
+
36
+ /* line 26, sass/partials/_main_wrap.scss */
37
+
38
+ .cmb2-wrap textarea.cmb2-textarea-code {
39
+ font-family: "Courier 10 Pitch", Courier, monospace;
40
+ line-height: 16px;
41
+ }
42
+
43
+ /* line 34, sass/partials/_main_wrap.scss */
44
+
45
+ .cmb2-wrap input.cmb2-text-small,
46
+ .cmb2-wrap input.cmb2-timepicker {
47
+ width: 100px;
48
+ }
49
+
50
+ /* line 40, sass/partials/_main_wrap.scss */
51
+
52
+ .cmb2-wrap input.cmb2-text-money {
53
+ width: 90px;
54
+ }
55
+
56
+ /* line 45, sass/partials/_main_wrap.scss */
57
+
58
+ .cmb2-wrap input.cmb2-text-medium {
59
+ width: 230px;
60
+ }
61
+
62
+ /* line 50, sass/partials/_main_wrap.scss */
63
+
64
+ .cmb2-wrap input.cmb2-upload-file {
65
+ width: 65%;
66
+ }
67
+
68
+ /* line 54, sass/partials/_main_wrap.scss */
69
+
70
+ .cmb2-wrap input.ed_button {
71
+ padding: 2px 4px;
72
+ }
73
+
74
+ /* line 59, sass/partials/_main_wrap.scss */
75
+
76
+ .cmb2-wrap input:not([type="hidden"]) + input,
77
+ .cmb2-wrap input:not([type="hidden"]) + .button,
78
+ .cmb2-wrap input:not([type="hidden"]) + select {
79
+ margin-left: 20px;
80
+ }
81
+
82
+ /* line 67, sass/partials/_main_wrap.scss */
83
+
84
+ .cmb2-wrap ul {
85
+ margin: 0;
86
+ }
87
+
88
+ /* line 71, sass/partials/_main_wrap.scss */
89
+
90
+ .cmb2-wrap li {
91
+ font-size: 14px;
92
+ line-height: 16px;
93
+ margin: 1px 0 5px 0;
94
+ }
95
+
96
+ /* line 82, sass/partials/_main_wrap.scss */
97
+
98
+ .cmb2-wrap select {
99
+ font-size: 14px;
100
+ margin-top: 3px;
101
+ }
102
+
103
+ /* line 87, sass/partials/_main_wrap.scss */
104
+
105
+ .cmb2-wrap input:focus,
106
+ .cmb2-wrap textarea:focus {
107
+ background: #fffff8;
108
+ }
109
+
110
+ /* line 92, sass/partials/_main_wrap.scss */
111
+
112
+ .cmb2-wrap input[type="radio"] {
113
+ margin: 0 5px 0 0;
114
+ padding: 0;
115
+ }
116
+
117
+ /* line 97, sass/partials/_main_wrap.scss */
118
+
119
+ .cmb2-wrap input[type="checkbox"] {
120
+ margin: 0 5px 0 0;
121
+ padding: 0;
122
+ }
123
+
124
+ /* line 102, sass/partials/_main_wrap.scss */
125
+
126
+ .cmb2-wrap button,
127
+ .cmb2-wrap .button {
128
+ white-space: nowrap;
129
+ }
130
+
131
+ /* line 107, sass/partials/_main_wrap.scss */
132
+
133
+ .cmb2-wrap .mceLayout {
134
+ border: 1px solid #e9e9e9 !important;
135
+ }
136
+
137
+ /* line 111, sass/partials/_main_wrap.scss */
138
+
139
+ .cmb2-wrap .mceIframeContainer {
140
+ background: #fff;
141
+ }
142
+
143
+ /* line 115, sass/partials/_main_wrap.scss */
144
+
145
+ .cmb2-wrap .meta_mce {
146
+ width: 97%;
147
+ }
148
+
149
+ /* line 118, sass/partials/_main_wrap.scss */
150
+
151
+ .cmb2-wrap .meta_mce textarea {
152
+ width: 100%;
153
+ }
154
+
155
+ /* line 126, sass/partials/_main_wrap.scss */
156
+
157
+ .cmb2-wrap .wp-color-result,
158
+ .cmb2-wrap .wp-picker-input-wrap {
159
+ vertical-align: middle;
160
+ }
161
+
162
+ /* line 131, sass/partials/_main_wrap.scss */
163
+
164
+ .cmb2-wrap .wp-color-result,
165
+ .cmb2-wrap .wp-picker-container {
166
+ margin: 0 10px 0 0;
167
+ }
168
+
169
+ /* line 136, sass/partials/_main_wrap.scss */
170
+
171
+ .cmb2-wrap .cmb-row {
172
+ margin: 0;
173
+ }
174
+
175
+ /* line 139, sass/partials/_main_wrap.scss */
176
+
177
+ .cmb2-wrap .cmb-row:after {
178
+ content: '';
179
+ clear: both;
180
+ display: block;
181
+ width: 100%;
182
+ }
183
+
184
+ /* line 146, sass/partials/_main_wrap.scss */
185
+
186
+ .cmb2-wrap .cmb-row.cmb-repeat-row {
187
+ padding: 1.8em 0 0;
188
+ }
189
+
190
+ /* line 149, sass/partials/_main_wrap.scss */
191
+
192
+ .cmb2-wrap .cmb-row.cmb-repeat-row:first-of-type {
193
+ padding: 0;
194
+ }
195
+
196
+ /* line 154, sass/partials/_main_wrap.scss */
197
+
198
+ .cmb2-wrap .cmb-row.cmb-repeat .cmb2-metabox-description {
199
+ padding-top: 0;
200
+ padding-bottom: 1.8em;
201
+ }
202
+
203
+ /* line 161, sass/partials/_main_wrap.scss */
204
+
205
+ .cmb2-metabox {
206
+ clear: both;
207
+ margin: 0;
208
+ }
209
+
210
+ /* line 167, sass/partials/_main_wrap.scss */
211
+
212
+ .cmb2-metabox > .cmb-row:first-of-type > .cmb-td,
213
+ .cmb2-metabox > .cmb-row:first-of-type > .cmb-th,
214
+ .cmb2-metabox .cmb-field-list > .cmb-row:first-of-type > .cmb-td,
215
+ .cmb2-metabox .cmb-field-list > .cmb-row:first-of-type > .cmb-th {
216
+ border: 0;
217
+ }
218
+
219
+ /* line 174, sass/partials/_main_wrap.scss */
220
+
221
+ .cmb2-metabox > .cmb-row .cmb-repeat-table .cmb-row > .cmb-td {
222
+ padding-right: 20px;
223
+ box-sizing: border-box;
224
+ float: left;
225
+ }
226
+
227
+ /* line 182, sass/partials/_main_wrap.scss */
228
+
229
+ .cmb-add-row {
230
+ margin: 1.8em 0 0;
231
+ }
232
+
233
+ /* line 186, sass/partials/_main_wrap.scss */
234
+
235
+ .cmb-nested .cmb-td,
236
+ .cmb-repeatable-group .cmb-th,
237
+ .cmb-repeatable-group:first-of-type {
238
+ border: 0;
239
+ }
240
+
241
+ /* line 192, sass/partials/_main_wrap.scss */
242
+
243
+ .cmb-row:last-of-type,
244
+ .cmb2-wrap .cmb-row:last-of-type,
245
+ .cmb-repeatable-group:last-of-type {
246
+ border-bottom: 0;
247
+ }
248
+
249
+ /* line 198, sass/partials/_main_wrap.scss */
250
+
251
+ .cmb-repeatable-grouping {
252
+ border: 1px solid #e9e9e9;
253
+ padding: 0 1em;
254
+ max-width: 1000px;
255
+ }
256
+
257
+ /* line 202, sass/partials/_main_wrap.scss */
258
+
259
+ .cmb-repeatable-grouping.cmb-row {
260
+ margin: 0 0 0.8em;
261
+ }
262
+
263
+ /* line 209, sass/partials/_main_wrap.scss */
264
+
265
+ .cmb-th {
266
+ color: #222222;
267
+ float: left;
268
+ font-weight: 600;
269
+ line-height: 1.3;
270
+ padding: 20px 10px 20px 0;
271
+ vertical-align: top;
272
+ width: 200px;
273
+ }
274
+
275
+ /* line 223, sass/partials/_main_wrap.scss */
276
+
277
+ .cmb-td {
278
+ line-height: 1.3;
279
+ max-width: 100%;
280
+ padding: 15px 10px;
281
+ vertical-align: middle;
282
+ }
283
+
284
+ /* line 232, sass/partials/_main_wrap.scss */
285
+
286
+ .cmb-type-title .cmb-td {
287
+ padding: 0;
288
+ }
289
+
290
+ /* line 237, sass/partials/_main_wrap.scss */
291
+
292
+ .cmb-th label {
293
+ display: block;
294
+ padding: 5px 0;
295
+ }
296
+
297
+ /* line 242, sass/partials/_main_wrap.scss */
298
+
299
+ .cmb-th + .cmb-td {
300
+ float: left;
301
+ }
302
+
303
+ /* line 246, sass/partials/_main_wrap.scss */
304
+
305
+ .cmb-td .cmb-td {
306
+ padding-bottom: 1em;
307
+ }
308
+
309
+ /* line 250, sass/partials/_main_wrap.scss */
310
+
311
+ .cmb-remove-row {
312
+ text-align: right;
313
+ }
314
+
315
+ /* line 254, sass/partials/_main_wrap.scss */
316
+
317
+ .empty-row.hidden {
318
+ display: none;
319
+ }
320
+
321
+ /* line 260, sass/partials/_main_wrap.scss */
322
+
323
+ .cmb-repeatable-group .cmb-th {
324
+ padding: 5px;
325
+ }
326
+
327
+ /* line 264, sass/partials/_main_wrap.scss */
328
+
329
+ .cmb-repeatable-group .cmb-group-title {
330
+ background-color: #e9e9e9;
331
+ padding: 8px 12px 8px 2.2em;
332
+ margin: 0 -1em;
333
+ min-height: 1.5em;
334
+ font-size: 14px;
335
+ line-height: 1.4;
336
+ }
337
+
338
+ /* line 272, sass/partials/_main_wrap.scss */
339
+
340
+ .cmb-repeatable-group .cmb-group-title h4 {
341
+ border: 0;
342
+ margin: 0;
343
+ font-size: 1.2em;
344
+ font-weight: 500;
345
+ padding: 0.5em 0.75em;
346
+ }
347
+
348
+ /* line 280, sass/partials/_main_wrap.scss */
349
+
350
+ .cmb-repeatable-group .cmb-group-title .cmb-th {
351
+ display: block;
352
+ width: 100%;
353
+ }
354
+
355
+ /* line 286, sass/partials/_main_wrap.scss */
356
+
357
+ .cmb-repeatable-group .cmb-group-description .cmb-th {
358
+ font-size: 1.2em;
359
+ display: block;
360
+ float: none;
361
+ padding-bottom: 1em;
362
+ text-align: left;
363
+ width: 100%;
364
+ }
365
+
366
+ /* line 27, sass/partials/_mixins.scss */
367
+
368
+ .cmb-repeatable-group .cmb-group-description .cmb-th label {
369
+ display: block;
370
+ margin-top: 0em;
371
+ padding-bottom: 5px;
372
+ }
373
+
374
+ /* line 32, sass/partials/_mixins.scss */
375
+
376
+ .cmb-repeatable-group .cmb-group-description .cmb-th label:after {
377
+ border-bottom: 1px solid #e9e9e9;
378
+ content: '';
379
+ clear: both;
380
+ display: block;
381
+ padding-top: .4em;
382
+ }
383
+
384
+ /* line 290, sass/partials/_main_wrap.scss */
385
+
386
+ .cmb-repeatable-group .cmb-shift-rows {
387
+ font-size: 1em;
388
+ margin-right: 1em;
389
+ text-decoration: none;
390
+ }
391
+
392
+ /* line 295, sass/partials/_main_wrap.scss */
393
+
394
+ .cmb-repeatable-group .cmb-shift-rows .dashicons {
395
+ font-size: 1.5em;
396
+ height: 1.5em;
397
+ line-height: 1.2em;
398
+ width: 1em;
399
+ }
400
+
401
+ /* line 301, sass/partials/_main_wrap.scss */
402
+
403
+ .cmb-repeatable-group .cmb-shift-rows .dashicons.dashicons-arrow-down-alt2 {
404
+ line-height: 1.3em;
405
+ }
406
+
407
+ /* line 308, sass/partials/_main_wrap.scss */
408
+
409
+ .cmb-repeatable-group .cmb2-upload-button {
410
+ float: right;
411
+ }
412
+
413
+ /* line 314, sass/partials/_main_wrap.scss */
414
+
415
+ p.cmb2-metabox-description {
416
+ color: #aaaaaa;
417
+ font-style: italic;
418
+ margin: 0;
419
+ padding-top: .5em;
420
+ }
421
+
422
+ /* line 321, sass/partials/_main_wrap.scss */
423
+
424
+ span.cmb2-metabox-description {
425
+ color: #aaaaaa;
426
+ font-style: italic;
427
+ }
428
+
429
+ /* line 326, sass/partials/_main_wrap.scss */
430
+
431
+ .cmb2-metabox-title {
432
+ margin: 0 0 5px 0;
433
+ padding: 5px 0 0 0;
434
+ font-size: 14px;
435
+ }
436
+
437
+ /* line 332, sass/partials/_main_wrap.scss */
438
+
439
+ .cmb-inline ul {
440
+ padding: 4px 0 0 0;
441
+ }
442
+
443
+ /* line 336, sass/partials/_main_wrap.scss */
444
+
445
+ .cmb-inline li {
446
+ display: inline-block;
447
+ padding-right: 18px;
448
+ }
449
+
450
+ /* line 341, sass/partials/_main_wrap.scss */
451
+
452
+ .cmb-type-textarea-code pre {
453
+ margin: 0;
454
+ }
455
+
456
+ /* line 347, sass/partials/_main_wrap.scss */
457
+
458
+ .cmb2-media-status .img-status {
459
+ clear: none;
460
+ display: inline-block;
461
+ float: left;
462
+ margin-right: 10px;
463
+ width: auto;
464
+ }
465
+
466
+ /* line 354, sass/partials/_main_wrap.scss */
467
+
468
+ .cmb2-media-status .img-status img {
469
+ max-width: 350px;
470
+ }
471
+
472
+ /* line 359, sass/partials/_main_wrap.scss */
473
+
474
+ .cmb2-media-status .img-status img,
475
+ .cmb2-media-status .embed-status {
476
+ background: #ffffff;
477
+ border: 1px solid #e9e9e9;
478
+ border-radius: 2px;
479
+ -moz-border-radius: 2px;
480
+ margin: 15px 0 0 0;
481
+ padding: 5px;
482
+ }
483
+
484
+ /* line 369, sass/partials/_main_wrap.scss */
485
+
486
+ .cmb2-media-status .embed-status {
487
+ float: left;
488
+ max-width: 800px;
489
+ }
490
+
491
+ /* line 374, sass/partials/_main_wrap.scss */
492
+
493
+ .cmb2-media-status .img-status,
494
+ .cmb2-media-status .embed-status {
495
+ position: relative;
496
+ }
497
+
498
+ /* line 377, sass/partials/_main_wrap.scss */
499
+
500
+ .cmb2-media-status .img-status .cmb2-remove-file-button,
501
+ .cmb2-media-status .embed-status .cmb2-remove-file-button {
502
+ background: url(../images/ico-delete.png);
503
+ height: 16px;
504
+ left: -5px;
505
+ position: absolute;
506
+ text-indent: -9999px;
507
+ top: -5px;
508
+ width: 16px;
509
+ }
510
+
511
+ /* line 391, sass/partials/_main_wrap.scss */
512
+
513
+ .cmb2-media-status .img-status .cmb2-remove-file-button {
514
+ top: 10px;
515
+ }
516
+
517
+ /* line 396, sass/partials/_main_wrap.scss */
518
+
519
+ .cmb2-media-status .img-status img,
520
+ .cmb2-media-status .file-status > span {
521
+ cursor: pointer;
522
+ }
523
+
524
+ /* line 402, sass/partials/_main_wrap.scss */
525
+
526
+ .cmb-type-file-list .cmb2-media-status .img-status {
527
+ clear: none;
528
+ float: left;
529
+ margin-right: 10px;
530
+ width: auto;
531
+ }
532
+
533
+ /* line 409, sass/partials/_main_wrap.scss */
534
+
535
+ .cmb-attach-list li {
536
+ clear: both;
537
+ display: inline-block;
538
+ margin-bottom: 25px;
539
+ width: 100%;
540
+ }
541
+
542
+ /* line 415, sass/partials/_main_wrap.scss */
543
+
544
+ .cmb-attach-list li img {
545
+ cursor: move;
546
+ float: left;
547
+ margin-right: 10px;
548
+ }
549
+
550
+ /* line 422, sass/partials/_main_wrap.scss */
551
+
552
+ .cmb2-remove-wrapper {
553
+ margin: 0;
554
+ }
555
+
556
+ /* line 426, sass/partials/_main_wrap.scss */
557
+
558
+ .child-cmb2 .cmb-th {
559
+ text-align: left;
560
+ }
561
+
562
+ /*--------------------------------------------------------------
563
+ Timepicker
564
+ --------------------------------------------------------------*/
565
+
566
+ /* line 7, sass/partials/_timepicker.scss */
567
+
568
+ div.time-picker {
569
+ background: #fff;
570
+ border: 1px solid #aaaaaa;
571
+ height: 191px;
572
+ margin: 0;
573
+ position: absolute;
574
+ overflow: auto;
575
+ width: 6em; /* needed for IE */
576
+ z-index: 99;
577
+ }
578
+
579
+ /* line 17, sass/partials/_timepicker.scss */
580
+
581
+ div.time-picker ul {
582
+ list-style-type: none;
583
+ margin: 0;
584
+ padding: 0;
585
+ }
586
+
587
+ /* line 23, sass/partials/_timepicker.scss */
588
+
589
+ div.time-picker li {
590
+ cursor: pointer;
591
+ margin-bottom: 0;
592
+ font-family: sans-serif;
593
+ font-size: 14px;
594
+ padding: 4px 3px;
595
+ }
596
+
597
+ /* line 30, sass/partials/_timepicker.scss */
598
+
599
+ div.time-picker li.selected {
600
+ background: #0063ce;
601
+ color: #fff;
602
+ }
603
+
604
+ /* line 37, sass/partials/_timepicker.scss */
605
+
606
+ div.time-picker-12hours {
607
+ width: 8em; /* needed for IE */
608
+ }
609
+
610
+ /*--------------------------------------------------------------
611
+ Post Metaboxes
612
+ --------------------------------------------------------------*/
613
+
614
+ /* line 4, sass/partials/_post_metaboxes.scss */
615
+
616
+ #poststuff .cmb-group-title {
617
+ margin-left: -1em;
618
+ margin-right: -1em;
619
+ padding-left: 2.2em;
620
+ min-height: 1.5em;
621
+ }
622
+
623
+ /* line 14, sass/partials/_post_metaboxes.scss */
624
+
625
+ .postbox-container .cmb2-wrap,
626
+ .cmb-repeat-group-wrap .cmb2-wrap {
627
+ margin: 0;
628
+ }
629
+
630
+ /* line 17, sass/partials/_post_metaboxes.scss */
631
+
632
+ .postbox-container .cmb2-wrap > .cmb-field-list > .cmb-row,
633
+ .cmb-repeat-group-wrap .cmb2-wrap > .cmb-field-list > .cmb-row {
634
+ padding: 1.8em 0;
635
+ }
636
+
637
+ /* line 23, sass/partials/_post_metaboxes.scss */
638
+
639
+ .postbox-container .cmb2-wrap input[type=text].cmb2-oembed,
640
+ .cmb-repeat-group-wrap .cmb2-wrap input[type=text].cmb2-oembed {
641
+ width: 100%;
642
+ }
643
+
644
+ /* line 29, sass/partials/_post_metaboxes.scss */
645
+
646
+ .postbox-container .cmb-row,
647
+ .cmb-repeat-group-wrap .cmb-row {
648
+ padding: 0 0 1.8em;
649
+ margin: 0 0 0.8em;
650
+ }
651
+
652
+ /* line 33, sass/partials/_post_metaboxes.scss */
653
+
654
+ .postbox-container .cmb-row .cmbhandle,
655
+ .cmb-repeat-group-wrap .cmb-row .cmbhandle {
656
+ right: -1em;
657
+ position: relative;
658
+ }
659
+
660
+ /* line 39, sass/partials/_post_metaboxes.scss */
661
+
662
+ .postbox-container .cmb-repeatable-grouping,
663
+ .cmb-repeat-group-wrap .cmb-repeatable-grouping {
664
+ padding: 0 1em;
665
+ max-width: 100%;
666
+ min-width: 1px !important;
667
+ }
668
+
669
+ /* line 45, sass/partials/_post_metaboxes.scss */
670
+
671
+ .postbox-container .cmb-repeatable-group > .cmb-row,
672
+ .cmb-repeat-group-wrap .cmb-repeatable-group > .cmb-row {
673
+ padding-bottom: 0;
674
+ }
675
+
676
+ /* line 49, sass/partials/_post_metaboxes.scss */
677
+
678
+ .postbox-container .cmb-th,
679
+ .cmb-repeat-group-wrap .cmb-th {
680
+ width: 18%;
681
+ padding: 0 2% 0 0;
682
+ }
683
+
684
+ /* line 55, sass/partials/_post_metaboxes.scss */
685
+
686
+ .postbox-container .cmb-td,
687
+ .cmb-repeat-group-wrap .cmb-td {
688
+ margin-bottom: 0;
689
+ padding: 0;
690
+ line-height: 1.3;
691
+ }
692
+
693
+ /* line 61, sass/partials/_post_metaboxes.scss */
694
+
695
+ .postbox-container .cmb-repeat-row .cmb-td,
696
+ .cmb-repeat-group-wrap .cmb-repeat-row .cmb-td {
697
+ padding-bottom: 1.8em;
698
+ }
699
+
700
+ /* line 65, sass/partials/_post_metaboxes.scss */
701
+
702
+ .postbox-container .cmb-th + .cmb-td,
703
+ .cmb-repeat-group-wrap .cmb-th + .cmb-td {
704
+ width: 80%;
705
+ float: right;
706
+ }
707
+
708
+ /* line 70, sass/partials/_post_metaboxes.scss */
709
+
710
+ .postbox-container .cmb-row:not(:last-of-type),
711
+ .postbox-container .cmb-repeatable-group:not(:last-of-type),
712
+ .cmb-repeat-group-wrap .cmb-row:not(:last-of-type),
713
+ .cmb-repeat-group-wrap .cmb-repeatable-group:not(:last-of-type) {
714
+ border-bottom: 1px solid #e9e9e9;
715
+ }
716
+
717
+ /* line 79, sass/partials/_post_metaboxes.scss */
718
+
719
+ .postbox-container .cmb-repeat-group-field,
720
+ .postbox-container .cmb-remove-field-row,
721
+ .cmb-repeat-group-wrap .cmb-repeat-group-field,
722
+ .cmb-repeat-group-wrap .cmb-remove-field-row {
723
+ padding-top: 1.8em;
724
+ }
725
+
726
+ /* line 86, sass/partials/_post_metaboxes.scss */
727
+
728
+ .postbox-container .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody,
729
+ .postbox-container .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody,
730
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody,
731
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody {
732
+ display: table;
733
+ width: 100%;
734
+ }
735
+
736
+ /* line 90, sass/partials/_post_metaboxes.scss */
737
+
738
+ .postbox-container .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text,
739
+ .postbox-container .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text,
740
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text,
741
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text {
742
+ width: 100%;
743
+ }
744
+
745
+ /* line 94, sass/partials/_post_metaboxes.scss */
746
+
747
+ .postbox-container .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row),
748
+ .postbox-container .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row),
749
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row),
750
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row) {
751
+ display: table-row;
752
+ }
753
+
754
+ /* line 98, sass/partials/_post_metaboxes.scss */
755
+
756
+ .postbox-container .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td,
757
+ .postbox-container .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td,
758
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td,
759
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td {
760
+ display: table-cell;
761
+ float: none;
762
+ width: 100%;
763
+ }
764
+
765
+ /* line 104, sass/partials/_post_metaboxes.scss */
766
+
767
+ .postbox-container .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td,
768
+ .postbox-container .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td,
769
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td,
770
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td {
771
+ padding-top: 1.8em;
772
+ }
773
+
774
+ /* line 108, sass/partials/_post_metaboxes.scss */
775
+
776
+ .postbox-container .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row,
777
+ .postbox-container .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row,
778
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row,
779
+ .cmb-repeat-group-wrap .cmb2-metabox > .cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row {
780
+ padding-right: 0;
781
+ }
782
+
783
+ /*--------------------------------------------------------------
784
+ Misc.
785
+ --------------------------------------------------------------*/
786
+
787
+ /* line 5, sass/partials/_misc.scss */
788
+
789
+ #poststuff .cmb-repeatable-group h2 {
790
+ margin: 0;
791
+ }
792
+
793
+ /* line 13, sass/partials/_misc.scss */
794
+
795
+ .edit-tags-php .cmb2-metabox-title,
796
+ .profile-php .cmb2-metabox-title,
797
+ .user-edit-php .cmb2-metabox-title {
798
+ font-size: 1.4em;
799
+ }
800
+
801
+ /* line 18, sass/partials/_misc.scss */
802
+
803
+ .postbox .cmb-spinner {
804
+ float: left;
805
+ }
806
+
807
+ /*--------------------------------------------------------------
808
+ Sidebar Placement Adjustments
809
+ --------------------------------------------------------------*/
810
+
811
+ /* line 10, sass/partials/_sidebar_placements.scss */
812
+
813
+ .inner-sidebar .cmb2-wrap > .cmb-field-list > .cmb-row,
814
+ #side-sortables .cmb2-wrap > .cmb-field-list > .cmb-row {
815
+ padding: 1.4em 0;
816
+ }
817
+
818
+ /* line 16, sass/partials/_sidebar_placements.scss */
819
+
820
+ .inner-sidebar .cmb2-wrap input[type=text]:not(.wp-color-picker),
821
+ #side-sortables .cmb2-wrap input[type=text]:not(.wp-color-picker) {
822
+ width: 100%;
823
+ }
824
+
825
+ /* line 20, sass/partials/_sidebar_placements.scss */
826
+
827
+ .inner-sidebar .cmb2-wrap input + input:not(.wp-picker-clear),
828
+ .inner-sidebar .cmb2-wrap input + select,
829
+ #side-sortables .cmb2-wrap input + input:not(.wp-picker-clear),
830
+ #side-sortables .cmb2-wrap input + select {
831
+ margin-left: 0;
832
+ margin-top: 1em;
833
+ display: block;
834
+ }
835
+
836
+ /* line 27, sass/partials/_sidebar_placements.scss */
837
+
838
+ .inner-sidebar .cmb2-wrap label,
839
+ #side-sortables .cmb2-wrap label {
840
+ display: block;
841
+ font-weight: 700;
842
+ padding: 0 0 5px;
843
+ }
844
+
845
+ /* line 35, sass/partials/_sidebar_placements.scss */
846
+
847
+ .inner-sidebar .cmb-repeatable-group,
848
+ #side-sortables .cmb-repeatable-group {
849
+ border-bottom: 1px solid #e9e9e9;
850
+ }
851
+
852
+ /* line 39, sass/partials/_sidebar_placements.scss */
853
+
854
+ .inner-sidebar .cmb-repeat-group-wrap > .cmb-td > .cmb-repeatable-group,
855
+ #side-sortables .cmb-repeat-group-wrap > .cmb-td > .cmb-repeatable-group {
856
+ border-bottom: 0;
857
+ margin-bottom: -1.4em;
858
+ }
859
+
860
+ /* line 44, sass/partials/_sidebar_placements.scss */
861
+
862
+ .inner-sidebar .cmb-th,
863
+ .inner-sidebar .cmb-td,
864
+ .inner-sidebar .cmb-th + .cmb-td,
865
+ #side-sortables .cmb-th,
866
+ #side-sortables .cmb-td,
867
+ #side-sortables .cmb-th + .cmb-td {
868
+ width: 100%;
869
+ display: block;
870
+ float: none;
871
+ }
872
+
873
+ /* line 52, sass/partials/_sidebar_placements.scss */
874
+
875
+ .inner-sidebar .closed .inside,
876
+ #side-sortables .closed .inside {
877
+ display: none;
878
+ }
879
+
880
+ /* line 56, sass/partials/_sidebar_placements.scss */
881
+
882
+ .inner-sidebar .cmb-td .cmb-td,
883
+ #side-sortables .cmb-td .cmb-td {
884
+ padding-bottom: 1em;
885
+ }
886
+
887
+ /* line 60, sass/partials/_sidebar_placements.scss */
888
+
889
+ .inner-sidebar .cmb-th,
890
+ #side-sortables .cmb-th {
891
+ display: block;
892
+ float: none;
893
+ padding-bottom: 1em;
894
+ text-align: left;
895
+ width: 100%;
896
+ padding-left: 0;
897
+ padding-right: 0;
898
+ }
899
+
900
+ /* line 27, sass/partials/_mixins.scss */
901
+
902
+ .inner-sidebar .cmb-th label,
903
+ #side-sortables .cmb-th label {
904
+ display: block;
905
+ margin-top: 0em;
906
+ padding-bottom: 5px;
907
+ }
908
+
909
+ /* line 32, sass/partials/_mixins.scss */
910
+
911
+ .inner-sidebar .cmb-th label:after,
912
+ #side-sortables .cmb-th label:after {
913
+ border-bottom: 1px solid #e9e9e9;
914
+ content: '';
915
+ clear: both;
916
+ display: block;
917
+ padding-top: .4em;
918
+ }
919
+
920
+ /* line 14, sass/partials/_mixins.scss */
921
+
922
+ .inner-sidebar .cmb-th label,
923
+ #side-sortables .cmb-th label {
924
+ font-size: 14px;
925
+ line-height: 1.4em;
926
+ }
927
+
928
+ /* line 67, sass/partials/_sidebar_placements.scss */
929
+
930
+ .inner-sidebar .cmb-group-description .cmb-th,
931
+ #side-sortables .cmb-group-description .cmb-th {
932
+ padding-top: 0;
933
+ }
934
+
935
+ /* line 70, sass/partials/_sidebar_placements.scss */
936
+
937
+ .inner-sidebar .cmb-group-description .cmb2-metabox-description,
938
+ #side-sortables .cmb-group-description .cmb2-metabox-description {
939
+ padding: 0;
940
+ }
941
+
942
+ /* line 77, sass/partials/_sidebar_placements.scss */
943
+
944
+ .inner-sidebar .cmb-group-title .cmb-th,
945
+ #side-sortables .cmb-group-title .cmb-th {
946
+ padding: 0;
947
+ }
948
+
949
+ /* line 83, sass/partials/_sidebar_placements.scss */
950
+
951
+ .inner-sidebar .cmb-repeatable-grouping + .cmb-repeatable-grouping,
952
+ #side-sortables .cmb-repeatable-grouping + .cmb-repeatable-grouping {
953
+ margin-top: 1em;
954
+ }
955
+
956
+ /* line 92, sass/partials/_sidebar_placements.scss */
957
+
958
+ .inner-sidebar .cmb2-media-status .img-status img,
959
+ .inner-sidebar .cmb2-media-status .embed-status img,
960
+ #side-sortables .cmb2-media-status .img-status img,
961
+ #side-sortables .cmb2-media-status .embed-status img {
962
+ max-width: 90%;
963
+ height: auto;
964
+ }
965
+
966
+ /* line 100, sass/partials/_sidebar_placements.scss */
967
+
968
+ .inner-sidebar .cmb2-list label,
969
+ #side-sortables .cmb2-list label {
970
+ display: inline;
971
+ font-weight: normal;
972
+ }
973
+
974
+ /* line 105, sass/partials/_sidebar_placements.scss */
975
+
976
+ .inner-sidebar .cmb2-metabox-description,
977
+ #side-sortables .cmb2-metabox-description {
978
+ display: block;
979
+ padding: 7px 0 0;
980
+ }
981
+
982
+ /* line 112, sass/partials/_sidebar_placements.scss */
983
+
984
+ .inner-sidebar .cmb-type-checkbox .cmb-td label,
985
+ .inner-sidebar .cmb-type-checkbox .cmb2-metabox-description,
986
+ #side-sortables .cmb-type-checkbox .cmb-td label,
987
+ #side-sortables .cmb-type-checkbox .cmb2-metabox-description {
988
+ font-weight: normal;
989
+ display: inline;
990
+ }
991
+
992
+ /* line 119, sass/partials/_sidebar_placements.scss */
993
+
994
+ .inner-sidebar .cmb-row .cmb2-metabox-description,
995
+ #side-sortables .cmb-row .cmb2-metabox-description {
996
+ padding-bottom: 1.8em;
997
+ }
998
+
999
+ /* line 123, sass/partials/_sidebar_placements.scss */
1000
+
1001
+ .inner-sidebar .cmb2-metabox-title,
1002
+ #side-sortables .cmb2-metabox-title {
1003
+ font-size: 1.2em;
1004
+ font-style: italic;
1005
+ }
1006
+
1007
+ /* line 128, sass/partials/_sidebar_placements.scss */
1008
+
1009
+ .inner-sidebar .cmb-remove-row,
1010
+ #side-sortables .cmb-remove-row {
1011
+ clear: both;
1012
+ padding-top: 12px;
1013
+ padding-bottom: 0;
1014
+ }
1015
+
1016
+ /* line 135, sass/partials/_sidebar_placements.scss */
1017
+
1018
+ .inner-sidebar .cmb-type-colorpicker .cmb-repeat-row .cmb-td,
1019
+ #side-sortables .cmb-type-colorpicker .cmb-repeat-row .cmb-td {
1020
+ width: auto;
1021
+ clear: none;
1022
+ float: left;
1023
+ padding-top: 0;
1024
+ }
1025
+
1026
+ /* line 140, sass/partials/_sidebar_placements.scss */
1027
+
1028
+ .inner-sidebar .cmb-type-colorpicker .cmb-repeat-row .cmb-td.cmb-remove-row,
1029
+ #side-sortables .cmb-type-colorpicker .cmb-repeat-row .cmb-td.cmb-remove-row {
1030
+ float: right;
1031
+ margin: 0;
1032
+ }
1033
+
1034
+ /* line 147, sass/partials/_sidebar_placements.scss */
1035
+
1036
+ .inner-sidebar .cmb2-upload-button,
1037
+ #side-sortables .cmb2-upload-button {
1038
+ clear: both;
1039
+ margin-top: 12px;
1040
+ }
1041
+
1042
+ /* line 2, sass/partials/_collapsible_ui.scss */
1043
+
1044
+ .cmb2-metabox .cmb-repeat-group-wrap {
1045
+ max-width: 1000px;
1046
+ }
1047
+
1048
+ /* line 5, sass/partials/_collapsible_ui.scss */
1049
+
1050
+ .cmb2-metabox .cmbhandle {
1051
+ color: #aaa;
1052
+ float: right;
1053
+ width: 27px;
1054
+ height: 30px;
1055
+ cursor: pointer;
1056
+ right: -1em;
1057
+ position: relative;
1058
+ }
1059
+
1060
+ /* line 13, sass/partials/_collapsible_ui.scss */
1061
+
1062
+ .cmb2-metabox .cmbhandle:before {
1063
+ content: '\f142';
1064
+ right: 12px;
1065
+ font: normal 20px/1 'dashicons';
1066
+ speak: none;
1067
+ display: inline-block;
1068
+ padding: 8px 10px;
1069
+ top: 0;
1070
+ position: relative;
1071
+ -webkit-font-smoothing: antialiased;
1072
+ -moz-osx-font-smoothing: grayscale;
1073
+ text-decoration: none !important;
1074
+ }
1075
+
1076
+ /* line 30, sass/partials/_collapsible_ui.scss */
1077
+
1078
+ .cmb2-metabox .postbox.closed .cmbhandle:before {
1079
+ content: '\f140';
1080
+ }
1081
+
1082
+ /* line 36, sass/partials/_collapsible_ui.scss */
1083
+
1084
+ .cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row {
1085
+ -webkit-appearance: none !important;
1086
+ background: none !important;
1087
+ border: none !important;
1088
+ position: absolute;
1089
+ left: 0;
1090
+ top: .5em;
1091
+ line-height: 1em;
1092
+ cursor: pointer;
1093
+ }
1094
+
1095
+ /* line 45, sass/partials/_collapsible_ui.scss */
1096
+
1097
+ .cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]) {
1098
+ color: #a00;
1099
+ }
1100
+
1101
+ /* line 47, sass/partials/_collapsible_ui.scss */
1102
+
1103
+ .cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]):hover {
1104
+ color: #f00;
1105
+ }
1106
+
1107
+ /*
1108
+ * jQuery UI CSS Framework 1.8.16
1109
+ *
1110
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
1111
+ * Dual licensed under the MIT or GPL Version 2 licenses.
1112
+ * http://jquery.org/license
1113
+ *
1114
+ * http://docs.jquery.com/UI/Theming/API
1115
+ */
1116
+
1117
+ /* line 11, sass/partials/_jquery_ui.scss */
1118
+
1119
+ .cmb2-element .ui-helper-hidden {
1120
+ display: none;
1121
+ }
1122
+
1123
+ /* line 12, sass/partials/_jquery_ui.scss */
1124
+
1125
+ .cmb2-element .ui-helper-hidden-accessible {
1126
+ position: absolute !important;
1127
+ clip: rect(1px 1px 1px 1px);
1128
+ clip: rect(1px, 1px, 1px, 1px);
1129
+ }
1130
+
1131
+ /* line 13, sass/partials/_jquery_ui.scss */
1132
+
1133
+ .cmb2-element .ui-helper-reset {
1134
+ margin: 0;
1135
+ padding: 0;
1136
+ border: 0;
1137
+ outline: 0;
1138
+ line-height: 1.3;
1139
+ text-decoration: none;
1140
+ font-size: 100%;
1141
+ list-style: none;
1142
+ }
1143
+
1144
+ /* line 14, sass/partials/_jquery_ui.scss */
1145
+
1146
+ .cmb2-element .ui-helper-clearfix:after {
1147
+ content: ".";
1148
+ display: block;
1149
+ height: 0;
1150
+ clear: both;
1151
+ visibility: hidden;
1152
+ }
1153
+
1154
+ /* line 15, sass/partials/_jquery_ui.scss */
1155
+
1156
+ .cmb2-element .ui-helper-clearfix {
1157
+ display: inline-block;
1158
+ }
1159
+
1160
+ /* line 16, sass/partials/_jquery_ui.scss */
1161
+
1162
+ .cmb2-element * html .ui-helper-clearfix {
1163
+ height: 1%;
1164
+ }
1165
+
1166
+ /* line 17, sass/partials/_jquery_ui.scss */
1167
+
1168
+ .cmb2-element .ui-helper-clearfix {
1169
+ display: block;
1170
+ }
1171
+
1172
+ /* line 18, sass/partials/_jquery_ui.scss */
1173
+
1174
+ .cmb2-element .ui-helper-zfix {
1175
+ width: 100%;
1176
+ height: 100%;
1177
+ top: 0;
1178
+ left: 0;
1179
+ position: absolute;
1180
+ opacity: 0;
1181
+ filter: Alpha(Opacity=0);
1182
+ }
1183
+
1184
+ /* line 19, sass/partials/_jquery_ui.scss */
1185
+
1186
+ .cmb2-element .ui-state-disabled {
1187
+ cursor: default !important;
1188
+ }
1189
+
1190
+ /* line 20, sass/partials/_jquery_ui.scss */
1191
+
1192
+ .cmb2-element .ui-icon {
1193
+ display: block;
1194
+ text-indent: -99999px;
1195
+ overflow: hidden;
1196
+ background-repeat: no-repeat;
1197
+ }
1198
+
1199
+ /* line 21, sass/partials/_jquery_ui.scss */
1200
+
1201
+ .cmb2-element .ui-widget-overlay {
1202
+ position: absolute;
1203
+ top: 0;
1204
+ left: 0;
1205
+ width: 100%;
1206
+ height: 100%;
1207
+ }
1208
+
1209
+ /* line 22, sass/partials/_jquery_ui.scss */
1210
+
1211
+ .cmb2-element .ui-widget {
1212
+ font-family: Verdana,Arial,sans-serif;
1213
+ font-size: 1.1em;
1214
+ }
1215
+
1216
+ /* line 24, sass/partials/_jquery_ui.scss */
1217
+
1218
+ .cmb2-element .ui-widget .ui-widget {
1219
+ font-size: 1em;
1220
+ }
1221
+
1222
+ /* line 25, sass/partials/_jquery_ui.scss */
1223
+
1224
+ .cmb2-element .ui-widget input,
1225
+ .cmb2-element .ui-widget select,
1226
+ .cmb2-element .ui-widget textarea,
1227
+ .cmb2-element .ui-widget button {
1228
+ font-family: Verdana,Arial,sans-serif;
1229
+ font-size: 1em;
1230
+ }
1231
+
1232
+ /* line 27, sass/partials/_jquery_ui.scss */
1233
+
1234
+ .cmb2-element .ui-widget-content {
1235
+ border: 1px solid #aaaaaa;
1236
+ background: #ffffff url(../images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
1237
+ color: #222222;
1238
+ }
1239
+
1240
+ /* line 28, sass/partials/_jquery_ui.scss */
1241
+
1242
+ .cmb2-element .ui-widget-content a {
1243
+ color: #222222;
1244
+ }
1245
+
1246
+ /* line 29, sass/partials/_jquery_ui.scss */
1247
+
1248
+ .cmb2-element .ui-widget-header {
1249
+ border: 1px solid #aaaaaa;
1250
+ background: #cccccc url(../images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
1251
+ color: #222222;
1252
+ font-weight: bold;
1253
+ }
1254
+
1255
+ /* line 30, sass/partials/_jquery_ui.scss */
1256
+
1257
+ .cmb2-element .ui-widget-header a {
1258
+ color: #222222;
1259
+ }
1260
+
1261
+ /* line 31, sass/partials/_jquery_ui.scss */
1262
+
1263
+ .cmb2-element .ui-state-default,
1264
+ .cmb2-element .ui-widget-content .ui-state-default,
1265
+ .cmb2-element .ui-widget-header .ui-state-default {
1266
+ border: 1px solid #d3d3d3;
1267
+ background: #e6e6e6 url(../images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
1268
+ font-weight: normal;
1269
+ color: #555555;
1270
+ }
1271
+
1272
+ /* line 32, sass/partials/_jquery_ui.scss */
1273
+
1274
+ .cmb2-element .ui-state-default a,
1275
+ .cmb2-element .ui-state-default a:link,
1276
+ .cmb2-element .ui-state-default a:visited {
1277
+ color: #555555;
1278
+ text-decoration: none;
1279
+ }
1280
+
1281
+ /* line 33, sass/partials/_jquery_ui.scss */
1282
+
1283
+ .cmb2-element .ui-state-hover,
1284
+ .cmb2-element .ui-widget-content .ui-state-hover,
1285
+ .cmb2-element .ui-widget-header .ui-state-hover,
1286
+ .cmb2-element .ui-state-focus,
1287
+ .cmb2-element .ui-widget-content .ui-state-focus,
1288
+ .cmb2-element .ui-widget-header .ui-state-focus {
1289
+ border: 1px solid #999999;
1290
+ background: #dadada url(../images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
1291
+ font-weight: normal;
1292
+ color: #212121;
1293
+ }
1294
+
1295
+ /* line 34, sass/partials/_jquery_ui.scss */
1296
+
1297
+ .cmb2-element .ui-state-hover a,
1298
+ .cmb2-element .ui-state-hover a:hover {
1299
+ color: #212121;
1300
+ text-decoration: none;
1301
+ }
1302
+
1303
+ /* line 35, sass/partials/_jquery_ui.scss */
1304
+
1305
+ .cmb2-element .ui-state-active,
1306
+ .cmb2-element .ui-widget-content .ui-state-active,
1307
+ .cmb2-element .ui-widget-header .ui-state-active {
1308
+ border: 1px solid #aaaaaa;
1309
+ background: #ffffff url(../images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
1310
+ font-weight: normal;
1311
+ color: #212121;
1312
+ }
1313
+
1314
+ /* line 36, sass/partials/_jquery_ui.scss */
1315
+
1316
+ .cmb2-element .ui-state-active a,
1317
+ .cmb2-element .ui-state-active a:link,
1318
+ .cmb2-element .ui-state-active a:visited {
1319
+ color: #212121;
1320
+ text-decoration: none;
1321
+ }
1322
+
1323
+ /* line 37, sass/partials/_jquery_ui.scss */
1324
+
1325
+ .cmb2-element .ui-widget :active {
1326
+ outline: none;
1327
+ }
1328
+
1329
+ /* line 38, sass/partials/_jquery_ui.scss */
1330
+
1331
+ .cmb2-element .ui-state-highlight,
1332
+ .cmb2-element .ui-widget-content .ui-state-highlight,
1333
+ .cmb2-element .ui-widget-header .ui-state-highlight {
1334
+ border: 1px solid #fcefa1;
1335
+ background: #fbf9ee url(../images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
1336
+ color: #363636;
1337
+ }
1338
+
1339
+ /* line 39, sass/partials/_jquery_ui.scss */
1340
+
1341
+ .cmb2-element .ui-state-highlight a,
1342
+ .cmb2-element .ui-widget-content .ui-state-highlight a,
1343
+ .cmb2-element .ui-widget-header .ui-state-highlight a {
1344
+ color: #363636;
1345
+ }
1346
+
1347
+ /* line 40, sass/partials/_jquery_ui.scss */
1348
+
1349
+ .cmb2-element .ui-state-error,
1350
+ .cmb2-element .ui-widget-content .ui-state-error,
1351
+ .cmb2-element .ui-widget-header .ui-state-error {
1352
+ border: 1px solid #cd0a0a;
1353
+ background: #fef1ec url(../images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
1354
+ color: #cd0a0a;
1355
+ }
1356
+
1357
+ /* line 41, sass/partials/_jquery_ui.scss */
1358
+
1359
+ .cmb2-element .ui-state-error a,
1360
+ .cmb2-element .ui-widget-content .ui-state-error a,
1361
+ .cmb2-element .ui-widget-header .ui-state-error a {
1362
+ color: #cd0a0a;
1363
+ }
1364
+
1365
+ /* line 42, sass/partials/_jquery_ui.scss */
1366
+
1367
+ .cmb2-element .ui-state-error-text,
1368
+ .cmb2-element .ui-widget-content .ui-state-error-text,
1369
+ .cmb2-element .ui-widget-header .ui-state-error-text {
1370
+ color: #cd0a0a;
1371
+ }
1372
+
1373
+ /* line 43, sass/partials/_jquery_ui.scss */
1374
+
1375
+ .cmb2-element .ui-priority-primary,
1376
+ .cmb2-element .ui-widget-content .ui-priority-primary,
1377
+ .cmb2-element .ui-widget-header .ui-priority-primary {
1378
+ font-weight: bold;
1379
+ }
1380
+
1381
+ /* line 44, sass/partials/_jquery_ui.scss */
1382
+
1383
+ .cmb2-element .ui-priority-secondary,
1384
+ .cmb2-element .ui-widget-content .ui-priority-secondary,
1385
+ .cmb2-element .ui-widget-header .ui-priority-secondary {
1386
+ opacity: .7;
1387
+ filter: Alpha(Opacity=70);
1388
+ font-weight: normal;
1389
+ }
1390
+
1391
+ /* line 45, sass/partials/_jquery_ui.scss */
1392
+
1393
+ .cmb2-element .ui-state-disabled,
1394
+ .cmb2-element .ui-widget-content .ui-state-disabled,
1395
+ .cmb2-element .ui-widget-header .ui-state-disabled {
1396
+ opacity: .35;
1397
+ filter: Alpha(Opacity=35);
1398
+ background-image: none;
1399
+ }
1400
+
1401
+ /* line 46, sass/partials/_jquery_ui.scss */
1402
+
1403
+ .cmb2-element .ui-icon {
1404
+ width: 16px;
1405
+ height: 16px;
1406
+ background-image: url(../images/ui-icons_222222_256x240.png);
1407
+ }
1408
+
1409
+ /* line 47, sass/partials/_jquery_ui.scss */
1410
+
1411
+ .cmb2-element .ui-widget-content .ui-icon {
1412
+ background-image: url(../images/ui-icons_222222_256x240.png);
1413
+ }
1414
+
1415
+ /* line 48, sass/partials/_jquery_ui.scss */
1416
+
1417
+ .cmb2-element .ui-widget-header .ui-icon {
1418
+ background-image: url(../images/ui-icons_222222_256x240.png);
1419
+ }
1420
+
1421
+ /* line 49, sass/partials/_jquery_ui.scss */
1422
+
1423
+ .cmb2-element .ui-state-default .ui-icon {
1424
+ background-image: url(../images/ui-icons_888888_256x240.png);
1425
+ }
1426
+
1427
+ /* line 50, sass/partials/_jquery_ui.scss */
1428
+
1429
+ .cmb2-element .ui-state-hover .ui-icon,
1430
+ .cmb2-element .ui-state-focus .ui-icon {
1431
+ background-image: url(../images/ui-icons_454545_256x240.png);
1432
+ }
1433
+
1434
+ /* line 51, sass/partials/_jquery_ui.scss */
1435
+
1436
+ .cmb2-element .ui-state-active .ui-icon {
1437
+ background-image: url(../images/ui-icons_454545_256x240.png);
1438
+ }
1439
+
1440
+ /* line 52, sass/partials/_jquery_ui.scss */
1441
+
1442
+ .cmb2-element .ui-state-highlight .ui-icon {
1443
+ background-image: url(../images/ui-icons_2e83ff_256x240.png);
1444
+ }
1445
+
1446
+ /* line 53, sass/partials/_jquery_ui.scss */
1447
+
1448
+ .cmb2-element .ui-state-error .ui-icon,
1449
+ .cmb2-element .ui-state-error-text .ui-icon {
1450
+ background-image: url(../images/ui-icons_cd0a0a_256x240.png);
1451
+ }
1452
+
1453
+ /* line 54, sass/partials/_jquery_ui.scss */
1454
+
1455
+ .cmb2-element .ui-icon-carat-1-n {
1456
+ background-position: 0 0;
1457
+ }
1458
+
1459
+ /* line 55, sass/partials/_jquery_ui.scss */
1460
+
1461
+ .cmb2-element .ui-icon-carat-1-ne {
1462
+ background-position: -16px 0;
1463
+ }
1464
+
1465
+ /* line 56, sass/partials/_jquery_ui.scss */
1466
+
1467
+ .cmb2-element .ui-icon-carat-1-e {
1468
+ background-position: -32px 0;
1469
+ }
1470
+
1471
+ /* line 57, sass/partials/_jquery_ui.scss */
1472
+
1473
+ .cmb2-element .ui-icon-carat-1-se {
1474
+ background-position: -48px 0;
1475
+ }
1476
+
1477
+ /* line 58, sass/partials/_jquery_ui.scss */
1478
+
1479
+ .cmb2-element .ui-icon-carat-1-s {
1480
+ background-position: -64px 0;
1481
+ }
1482
+
1483
+ /* line 59, sass/partials/_jquery_ui.scss */
1484
+
1485
+ .cmb2-element .ui-icon-carat-1-sw {
1486
+ background-position: -80px 0;
1487
+ }
1488
+
1489
+ /* line 60, sass/partials/_jquery_ui.scss */
1490
+
1491
+ .cmb2-element .ui-icon-carat-1-w {
1492
+ background-position: -96px 0;
1493
+ }
1494
+
1495
+ /* line 61, sass/partials/_jquery_ui.scss */
1496
+
1497
+ .cmb2-element .ui-icon-carat-1-nw {
1498
+ background-position: -112px 0;
1499
+ }
1500
+
1501
+ /* line 62, sass/partials/_jquery_ui.scss */
1502
+
1503
+ .cmb2-element .ui-icon-carat-2-n-s {
1504
+ background-position: -128px 0;
1505
+ }
1506
+
1507
+ /* line 63, sass/partials/_jquery_ui.scss */
1508
+
1509
+ .cmb2-element .ui-icon-carat-2-e-w {
1510
+ background-position: -144px 0;
1511
+ }
1512
+
1513
+ /* line 64, sass/partials/_jquery_ui.scss */
1514
+
1515
+ .cmb2-element .ui-icon-triangle-1-n {
1516
+ background-position: 0 -16px;
1517
+ }
1518
+
1519
+ /* line 65, sass/partials/_jquery_ui.scss */
1520
+
1521
+ .cmb2-element .ui-icon-triangle-1-ne {
1522
+ background-position: -16px -16px;
1523
+ }
1524
+
1525
+ /* line 66, sass/partials/_jquery_ui.scss */
1526
+
1527
+ .cmb2-element .ui-icon-triangle-1-e {
1528
+ background-position: -32px -16px;
1529
+ }
1530
+
1531
+ /* line 67, sass/partials/_jquery_ui.scss */
1532
+
1533
+ .cmb2-element .ui-icon-triangle-1-se {
1534
+ background-position: -48px -16px;
1535
+ }
1536
+
1537
+ /* line 68, sass/partials/_jquery_ui.scss */
1538
+
1539
+ .cmb2-element .ui-icon-triangle-1-s {
1540
+ background-position: -64px -16px;
1541
+ }
1542
+
1543
+ /* line 69, sass/partials/_jquery_ui.scss */
1544
+
1545
+ .cmb2-element .ui-icon-triangle-1-sw {
1546
+ background-position: -80px -16px;
1547
+ }
1548
+
1549
+ /* line 70, sass/partials/_jquery_ui.scss */
1550
+
1551
+ .cmb2-element .ui-icon-triangle-1-w {
1552
+ background-position: -96px -16px;
1553
+ }
1554
+
1555
+ /* line 71, sass/partials/_jquery_ui.scss */
1556
+
1557
+ .cmb2-element .ui-icon-triangle-1-nw {
1558
+ background-position: -112px -16px;
1559
+ }
1560
+
1561
+ /* line 72, sass/partials/_jquery_ui.scss */
1562
+
1563
+ .cmb2-element .ui-icon-triangle-2-n-s {
1564
+ background-position: -128px -16px;
1565
+ }
1566
+
1567
+ /* line 73, sass/partials/_jquery_ui.scss */
1568
+
1569
+ .cmb2-element .ui-icon-triangle-2-e-w {
1570
+ background-position: -144px -16px;
1571
+ }
1572
+
1573
+ /* line 74, sass/partials/_jquery_ui.scss */
1574
+
1575
+ .cmb2-element .ui-icon-arrow-1-n {
1576
+ background-position: 0 -32px;
1577
+ }
1578
+
1579
+ /* line 75, sass/partials/_jquery_ui.scss */
1580
+
1581
+ .cmb2-element .ui-icon-arrow-1-ne {
1582
+ background-position: -16px -32px;
1583
+ }
1584
+
1585
+ /* line 76, sass/partials/_jquery_ui.scss */
1586
+
1587
+ .cmb2-element .ui-icon-arrow-1-e {
1588
+ background-position: -32px -32px;
1589
+ }
1590
+
1591
+ /* line 77, sass/partials/_jquery_ui.scss */
1592
+
1593
+ .cmb2-element .ui-icon-arrow-1-se {
1594
+ background-position: -48px -32px;
1595
+ }
1596
+
1597
+ /* line 78, sass/partials/_jquery_ui.scss */
1598
+
1599
+ .cmb2-element .ui-icon-arrow-1-s {
1600
+ background-position: -64px -32px;
1601
+ }
1602
+
1603
+ /* line 79, sass/partials/_jquery_ui.scss */
1604
+
1605
+ .cmb2-element .ui-icon-arrow-1-sw {
1606
+ background-position: -80px -32px;
1607
+ }
1608
+
1609
+ /* line 80, sass/partials/_jquery_ui.scss */
1610
+
1611
+ .cmb2-element .ui-icon-arrow-1-w {
1612
+ background-position: -96px -32px;
1613
+ }
1614
+
1615
+ /* line 81, sass/partials/_jquery_ui.scss */
1616
+
1617
+ .cmb2-element .ui-icon-arrow-1-nw {
1618
+ background-position: -112px -32px;
1619
+ }
1620
+
1621
+ /* line 82, sass/partials/_jquery_ui.scss */
1622
+
1623
+ .cmb2-element .ui-icon-arrow-2-n-s {
1624
+ background-position: -128px -32px;
1625
+ }
1626
+
1627
+ /* line 83, sass/partials/_jquery_ui.scss */
1628
+
1629
+ .cmb2-element .ui-icon-arrow-2-ne-sw {
1630
+ background-position: -144px -32px;
1631
+ }
1632
+
1633
+ /* line 84, sass/partials/_jquery_ui.scss */
1634
+
1635
+ .cmb2-element .ui-icon-arrow-2-e-w {
1636
+ background-position: -160px -32px;
1637
+ }
1638
+
1639
+ /* line 85, sass/partials/_jquery_ui.scss */
1640
+
1641
+ .cmb2-element .ui-icon-arrow-2-se-nw {
1642
+ background-position: -176px -32px;
1643
+ }
1644
+
1645
+ /* line 86, sass/partials/_jquery_ui.scss */
1646
+
1647
+ .cmb2-element .ui-icon-arrowstop-1-n {
1648
+ background-position: -192px -32px;
1649
+ }
1650
+
1651
+ /* line 87, sass/partials/_jquery_ui.scss */
1652
+
1653
+ .cmb2-element .ui-icon-arrowstop-1-e {
1654
+ background-position: -208px -32px;
1655
+ }
1656
+
1657
+ /* line 88, sass/partials/_jquery_ui.scss */
1658
+
1659
+ .cmb2-element .ui-icon-arrowstop-1-s {
1660
+ background-position: -224px -32px;
1661
+ }
1662
+
1663
+ /* line 89, sass/partials/_jquery_ui.scss */
1664
+
1665
+ .cmb2-element .ui-icon-arrowstop-1-w {
1666
+ background-position: -240px -32px;
1667
+ }
1668
+
1669
+ /* line 90, sass/partials/_jquery_ui.scss */
1670
+
1671
+ .cmb2-element .ui-icon-arrowthick-1-n {
1672
+ background-position: 0 -48px;
1673
+ }
1674
+
1675
+ /* line 91, sass/partials/_jquery_ui.scss */
1676
+
1677
+ .cmb2-element .ui-icon-arrowthick-1-ne {
1678
+ background-position: -16px -48px;
1679
+ }
1680
+
1681
+ /* line 92, sass/partials/_jquery_ui.scss */
1682
+
1683
+ .cmb2-element .ui-icon-arrowthick-1-e {
1684
+ background-position: -32px -48px;
1685
+ }
1686
+
1687
+ /* line 93, sass/partials/_jquery_ui.scss */
1688
+
1689
+ .cmb2-element .ui-icon-arrowthick-1-se {
1690
+ background-position: -48px -48px;
1691
+ }
1692
+
1693
+ /* line 94, sass/partials/_jquery_ui.scss */
1694
+
1695
+ .cmb2-element .ui-icon-arrowthick-1-s {
1696
+ background-position: -64px -48px;
1697
+ }
1698
+
1699
+ /* line 95, sass/partials/_jquery_ui.scss */
1700
+
1701
+ .cmb2-element .ui-icon-arrowthick-1-sw {
1702
+ background-position: -80px -48px;
1703
+ }
1704
+
1705
+ /* line 96, sass/partials/_jquery_ui.scss */
1706
+
1707
+ .cmb2-element .ui-icon-arrowthick-1-w {
1708
+ background-position: -96px -48px;
1709
+ }
1710
+
1711
+ /* line 97, sass/partials/_jquery_ui.scss */
1712
+
1713
+ .cmb2-element .ui-icon-arrowthick-1-nw {
1714
+ background-position: -112px -48px;
1715
+ }
1716
+
1717
+ /* line 98, sass/partials/_jquery_ui.scss */
1718
+
1719
+ .cmb2-element .ui-icon-arrowthick-2-n-s {
1720
+ background-position: -128px -48px;
1721
+ }
1722
+
1723
+ /* line 99, sass/partials/_jquery_ui.scss */
1724
+
1725
+ .cmb2-element .ui-icon-arrowthick-2-ne-sw {
1726
+ background-position: -144px -48px;
1727
+ }
1728
+
1729
+ /* line 100, sass/partials/_jquery_ui.scss */
1730
+
1731
+ .cmb2-element .ui-icon-arrowthick-2-e-w {
1732
+ background-position: -160px -48px;
1733
+ }
1734
+
1735
+ /* line 101, sass/partials/_jquery_ui.scss */
1736
+
1737
+ .cmb2-element .ui-icon-arrowthick-2-se-nw {
1738
+ background-position: -176px -48px;
1739
+ }
1740
+
1741
+ /* line 102, sass/partials/_jquery_ui.scss */
1742
+
1743
+ .cmb2-element .ui-icon-arrowthickstop-1-n {
1744
+ background-position: -192px -48px;
1745
+ }
1746
+
1747
+ /* line 103, sass/partials/_jquery_ui.scss */
1748
+
1749
+ .cmb2-element .ui-icon-arrowthickstop-1-e {
1750
+ background-position: -208px -48px;
1751
+ }
1752
+
1753
+ /* line 104, sass/partials/_jquery_ui.scss */
1754
+
1755
+ .cmb2-element .ui-icon-arrowthickstop-1-s {
1756
+ background-position: -224px -48px;
1757
+ }
1758
+
1759
+ /* line 105, sass/partials/_jquery_ui.scss */
1760
+
1761
+ .cmb2-element .ui-icon-arrowthickstop-1-w {
1762
+ background-position: -240px -48px;
1763
+ }
1764
+
1765
+ /* line 106, sass/partials/_jquery_ui.scss */
1766
+
1767
+ .cmb2-element .ui-icon-arrowreturnthick-1-w {
1768
+ background-position: 0 -64px;
1769
+ }
1770
+
1771
+ /* line 107, sass/partials/_jquery_ui.scss */
1772
+
1773
+ .cmb2-element .ui-icon-arrowreturnthick-1-n {
1774
+ background-position: -16px -64px;
1775
+ }
1776
+
1777
+ /* line 108, sass/partials/_jquery_ui.scss */
1778
+
1779
+ .cmb2-element .ui-icon-arrowreturnthick-1-e {
1780
+ background-position: -32px -64px;
1781
+ }
1782
+
1783
+ /* line 109, sass/partials/_jquery_ui.scss */
1784
+
1785
+ .cmb2-element .ui-icon-arrowreturnthick-1-s {
1786
+ background-position: -48px -64px;
1787
+ }
1788
+
1789
+ /* line 110, sass/partials/_jquery_ui.scss */
1790
+
1791
+ .cmb2-element .ui-icon-arrowreturn-1-w {
1792
+ background-position: -64px -64px;
1793
+ }
1794
+
1795
+ /* line 111, sass/partials/_jquery_ui.scss */
1796
+
1797
+ .cmb2-element .ui-icon-arrowreturn-1-n {
1798
+ background-position: -80px -64px;
1799
+ }
1800
+
1801
+ /* line 112, sass/partials/_jquery_ui.scss */
1802
+
1803
+ .cmb2-element .ui-icon-arrowreturn-1-e {
1804
+ background-position: -96px -64px;
1805
+ }
1806
+
1807
+ /* line 113, sass/partials/_jquery_ui.scss */
1808
+
1809
+ .cmb2-element .ui-icon-arrowreturn-1-s {
1810
+ background-position: -112px -64px;
1811
+ }
1812
+
1813
+ /* line 114, sass/partials/_jquery_ui.scss */
1814
+
1815
+ .cmb2-element .ui-icon-arrowrefresh-1-w {
1816
+ background-position: -128px -64px;
1817
+ }
1818
+
1819
+ /* line 115, sass/partials/_jquery_ui.scss */
1820
+
1821
+ .cmb2-element .ui-icon-arrowrefresh-1-n {
1822
+ background-position: -144px -64px;
1823
+ }
1824
+
1825
+ /* line 116, sass/partials/_jquery_ui.scss */
1826
+
1827
+ .cmb2-element .ui-icon-arrowrefresh-1-e {
1828
+ background-position: -160px -64px;
1829
+ }
1830
+
1831
+ /* line 117, sass/partials/_jquery_ui.scss */
1832
+
1833
+ .cmb2-element .ui-icon-arrowrefresh-1-s {
1834
+ background-position: -176px -64px;
1835
+ }
1836
+
1837
+ /* line 118, sass/partials/_jquery_ui.scss */
1838
+
1839
+ .cmb2-element .ui-icon-arrow-4 {
1840
+ background-position: 0 -80px;
1841
+ }
1842
+
1843
+ /* line 119, sass/partials/_jquery_ui.scss */
1844
+
1845
+ .cmb2-element .ui-icon-arrow-4-diag {
1846
+ background-position: -16px -80px;
1847
+ }
1848
+
1849
+ /* line 120, sass/partials/_jquery_ui.scss */
1850
+
1851
+ .cmb2-element .ui-icon-extlink {
1852
+ background-position: -32px -80px;
1853
+ }
1854
+
1855
+ /* line 121, sass/partials/_jquery_ui.scss */
1856
+
1857
+ .cmb2-element .ui-icon-newwin {
1858
+ background-position: -48px -80px;
1859
+ }
1860
+
1861
+ /* line 122, sass/partials/_jquery_ui.scss */
1862
+
1863
+ .cmb2-element .ui-icon-refresh {
1864
+ background-position: -64px -80px;
1865
+ }
1866
+
1867
+ /* line 123, sass/partials/_jquery_ui.scss */
1868
+
1869
+ .cmb2-element .ui-icon-shuffle {
1870
+ background-position: -80px -80px;
1871
+ }
1872
+
1873
+ /* line 124, sass/partials/_jquery_ui.scss */
1874
+
1875
+ .cmb2-element .ui-icon-transfer-e-w {
1876
+ background-position: -96px -80px;
1877
+ }
1878
+
1879
+ /* line 125, sass/partials/_jquery_ui.scss */
1880
+
1881
+ .cmb2-element .ui-icon-transferthick-e-w {
1882
+ background-position: -112px -80px;
1883
+ }
1884
+
1885
+ /* line 126, sass/partials/_jquery_ui.scss */
1886
+
1887
+ .cmb2-element .ui-icon-folder-collapsed {
1888
+ background-position: 0 -96px;
1889
+ }
1890
+
1891
+ /* line 127, sass/partials/_jquery_ui.scss */
1892
+
1893
+ .cmb2-element .ui-icon-folder-open {
1894
+ background-position: -16px -96px;
1895
+ }
1896
+
1897
+ /* line 128, sass/partials/_jquery_ui.scss */
1898
+
1899
+ .cmb2-element .ui-icon-document {
1900
+ background-position: -32px -96px;
1901
+ }
1902
+
1903
+ /* line 129, sass/partials/_jquery_ui.scss */
1904
+
1905
+ .cmb2-element .ui-icon-document-b {
1906
+ background-position: -48px -96px;
1907
+ }
1908
+
1909
+ /* line 130, sass/partials/_jquery_ui.scss */
1910
+
1911
+ .cmb2-element .ui-icon-note {
1912
+ background-position: -64px -96px;
1913
+ }
1914
+
1915
+ /* line 131, sass/partials/_jquery_ui.scss */
1916
+
1917
+ .cmb2-element .ui-icon-mail-closed {
1918
+ background-position: -80px -96px;
1919
+ }
1920
+
1921
+ /* line 132, sass/partials/_jquery_ui.scss */
1922
+
1923
+ .cmb2-element .ui-icon-mail-open {
1924
+ background-position: -96px -96px;
1925
+ }
1926
+
1927
+ /* line 133, sass/partials/_jquery_ui.scss */
1928
+
1929
+ .cmb2-element .ui-icon-suitcase {
1930
+ background-position: -112px -96px;
1931
+ }
1932
+
1933
+ /* line 134, sass/partials/_jquery_ui.scss */
1934
+
1935
+ .cmb2-element .ui-icon-comment {
1936
+ background-position: -128px -96px;
1937
+ }
1938
+
1939
+ /* line 135, sass/partials/_jquery_ui.scss */
1940
+
1941
+ .cmb2-element .ui-icon-person {
1942
+ background-position: -144px -96px;
1943
+ }
1944
+
1945
+ /* line 136, sass/partials/_jquery_ui.scss */
1946
+
1947
+ .cmb2-element .ui-icon-print {
1948
+ background-position: -160px -96px;
1949
+ }
1950
+
1951
+ /* line 137, sass/partials/_jquery_ui.scss */
1952
+
1953
+ .cmb2-element .ui-icon-trash {
1954
+ background-position: -176px -96px;
1955
+ }
1956
+
1957
+ /* line 138, sass/partials/_jquery_ui.scss */
1958
+
1959
+ .cmb2-element .ui-icon-locked {
1960
+ background-position: -192px -96px;
1961
+ }
1962
+
1963
+ /* line 139, sass/partials/_jquery_ui.scss */
1964
+
1965
+ .cmb2-element .ui-icon-unlocked {
1966
+ background-position: -208px -96px;
1967
+ }
1968
+
1969
+ /* line 140, sass/partials/_jquery_ui.scss */
1970
+
1971
+ .cmb2-element .ui-icon-bookmark {
1972
+ background-position: -224px -96px;
1973
+ }
1974
+
1975
+ /* line 141, sass/partials/_jquery_ui.scss */
1976
+
1977
+ .cmb2-element .ui-icon-tag {
1978
+ background-position: -240px -96px;
1979
+ }
1980
+
1981
+ /* line 142, sass/partials/_jquery_ui.scss */
1982
+
1983
+ .cmb2-element .ui-icon-home {
1984
+ background-position: 0 -112px;
1985
+ }
1986
+
1987
+ /* line 143, sass/partials/_jquery_ui.scss */
1988
+
1989
+ .cmb2-element .ui-icon-flag {
1990
+ background-position: -16px -112px;
1991
+ }
1992
+
1993
+ /* line 144, sass/partials/_jquery_ui.scss */
1994
+
1995
+ .cmb2-element .ui-icon-calendar {
1996
+ background-position: -32px -112px;
1997
+ }
1998
+
1999
+ /* line 145, sass/partials/_jquery_ui.scss */
2000
+
2001
+ .cmb2-element .ui-icon-cart {
2002
+ background-position: -48px -112px;
2003
+ }
2004
+
2005
+ /* line 146, sass/partials/_jquery_ui.scss */
2006
+
2007
+ .cmb2-element .ui-icon-pencil {
2008
+ background-position: -64px -112px;
2009
+ }
2010
+
2011
+ /* line 147, sass/partials/_jquery_ui.scss */
2012
+
2013
+ .cmb2-element .ui-icon-clock {
2014
+ background-position: -80px -112px;
2015
+ }
2016
+
2017
+ /* line 148, sass/partials/_jquery_ui.scss */
2018
+
2019
+ .cmb2-element .ui-icon-disk {
2020
+ background-position: -96px -112px;
2021
+ }
2022
+
2023
+ /* line 149, sass/partials/_jquery_ui.scss */
2024
+
2025
+ .cmb2-element .ui-icon-calculator {
2026
+ background-position: -112px -112px;
2027
+ }
2028
+
2029
+ /* line 150, sass/partials/_jquery_ui.scss */
2030
+
2031
+ .cmb2-element .ui-icon-zoomin {
2032
+ background-position: -128px -112px;
2033
+ }
2034
+
2035
+ /* line 151, sass/partials/_jquery_ui.scss */
2036
+
2037
+ .cmb2-element .ui-icon-zoomout {
2038
+ background-position: -144px -112px;
2039
+ }
2040
+
2041
+ /* line 152, sass/partials/_jquery_ui.scss */
2042
+
2043
+ .cmb2-element .ui-icon-search {
2044
+ background-position: -160px -112px;
2045
+ }
2046
+
2047
+ /* line 153, sass/partials/_jquery_ui.scss */
2048
+
2049
+ .cmb2-element .ui-icon-wrench {
2050
+ background-position: -176px -112px;
2051
+ }
2052
+
2053
+ /* line 154, sass/partials/_jquery_ui.scss */
2054
+
2055
+ .cmb2-element .ui-icon-gear {
2056
+ background-position: -192px -112px;
2057
+ }
2058
+
2059
+ /* line 155, sass/partials/_jquery_ui.scss */
2060
+
2061
+ .cmb2-element .ui-icon-heart {
2062
+ background-position: -208px -112px;
2063
+ }
2064
+
2065
+ /* line 156, sass/partials/_jquery_ui.scss */
2066
+
2067
+ .cmb2-element .ui-icon-star {
2068
+ background-position: -224px -112px;
2069
+ }
2070
+
2071
+ /* line 157, sass/partials/_jquery_ui.scss */
2072
+
2073
+ .cmb2-element .ui-icon-link {
2074
+ background-position: -240px -112px;
2075
+ }
2076
+
2077
+ /* line 158, sass/partials/_jquery_ui.scss */
2078
+
2079
+ .cmb2-element .ui-icon-cancel {
2080
+ background-position: 0 -128px;
2081
+ }
2082
+
2083
+ /* line 159, sass/partials/_jquery_ui.scss */
2084
+
2085
+ .cmb2-element .ui-icon-plus {
2086
+ background-position: -16px -128px;
2087
+ }
2088
+
2089
+ /* line 160, sass/partials/_jquery_ui.scss */
2090
+
2091
+ .cmb2-element .ui-icon-plusthick {
2092
+ background-position: -32px -128px;
2093
+ }
2094
+
2095
+ /* line 161, sass/partials/_jquery_ui.scss */
2096
+
2097
+ .cmb2-element .ui-icon-minus {
2098
+ background-position: -48px -128px;
2099
+ }
2100
+
2101
+ /* line 162, sass/partials/_jquery_ui.scss */
2102
+
2103
+ .cmb2-element .ui-icon-minusthick {
2104
+ background-position: -64px -128px;
2105
+ }
2106
+
2107
+ /* line 163, sass/partials/_jquery_ui.scss */
2108
+
2109
+ .cmb2-element .ui-icon-close {
2110
+ background-position: -80px -128px;
2111
+ }
2112
+
2113
+ /* line 164, sass/partials/_jquery_ui.scss */
2114
+
2115
+ .cmb2-element .ui-icon-closethick {
2116
+ background-position: -96px -128px;
2117
+ }
2118
+
2119
+ /* line 165, sass/partials/_jquery_ui.scss */
2120
+
2121
+ .cmb2-element .ui-icon-key {
2122
+ background-position: -112px -128px;
2123
+ }
2124
+
2125
+ /* line 166, sass/partials/_jquery_ui.scss */
2126
+
2127
+ .cmb2-element .ui-icon-lightbulb {
2128
+ background-position: -128px -128px;
2129
+ }
2130
+
2131
+ /* line 167, sass/partials/_jquery_ui.scss */
2132
+
2133
+ .cmb2-element .ui-icon-scissors {
2134
+ background-position: -144px -128px;
2135
+ }
2136
+
2137
+ /* line 168, sass/partials/_jquery_ui.scss */
2138
+
2139
+ .cmb2-element .ui-icon-clipboard {
2140
+ background-position: -160px -128px;
2141
+ }
2142
+
2143
+ /* line 169, sass/partials/_jquery_ui.scss */
2144
+
2145
+ .cmb2-element .ui-icon-copy {
2146
+ background-position: -176px -128px;
2147
+ }
2148
+
2149
+ /* line 170, sass/partials/_jquery_ui.scss */
2150
+
2151
+ .cmb2-element .ui-icon-contact {
2152
+ background-position: -192px -128px;
2153
+ }
2154
+
2155
+ /* line 171, sass/partials/_jquery_ui.scss */
2156
+
2157
+ .cmb2-element .ui-icon-image {
2158
+ background-position: -208px -128px;
2159
+ }
2160
+
2161
+ /* line 172, sass/partials/_jquery_ui.scss */
2162
+
2163
+ .cmb2-element .ui-icon-video {
2164
+ background-position: -224px -128px;
2165
+ }
2166
+
2167
+ /* line 173, sass/partials/_jquery_ui.scss */
2168
+
2169
+ .cmb2-element .ui-icon-script {
2170
+ background-position: -240px -128px;
2171
+ }
2172
+
2173
+ /* line 174, sass/partials/_jquery_ui.scss */
2174
+
2175
+ .cmb2-element .ui-icon-alert {
2176
+ background-position: 0 -144px;
2177
+ }
2178
+
2179
+ /* line 175, sass/partials/_jquery_ui.scss */
2180
+
2181
+ .cmb2-element .ui-icon-info {
2182
+ background-position: -16px -144px;
2183
+ }
2184
+
2185
+ /* line 176, sass/partials/_jquery_ui.scss */
2186
+
2187
+ .cmb2-element .ui-icon-notice {
2188
+ background-position: -32px -144px;
2189
+ }
2190
+
2191
+ /* line 177, sass/partials/_jquery_ui.scss */
2192
+
2193
+ .cmb2-element .ui-icon-help {
2194
+ background-position: -48px -144px;
2195
+ }
2196
+
2197
+ /* line 178, sass/partials/_jquery_ui.scss */
2198
+
2199
+ .cmb2-element .ui-icon-check {
2200
+ background-position: -64px -144px;
2201
+ }
2202
+
2203
+ /* line 179, sass/partials/_jquery_ui.scss */
2204
+
2205
+ .cmb2-element .ui-icon-bullet {
2206
+ background-position: -80px -144px;
2207
+ }
2208
+
2209
+ /* line 180, sass/partials/_jquery_ui.scss */
2210
+
2211
+ .cmb2-element .ui-icon-radio-off {
2212
+ background-position: -96px -144px;
2213
+ }
2214
+
2215
+ /* line 181, sass/partials/_jquery_ui.scss */
2216
+
2217
+ .cmb2-element .ui-icon-radio-on {
2218
+ background-position: -112px -144px;
2219
+ }
2220
+
2221
+ /* line 182, sass/partials/_jquery_ui.scss */
2222
+
2223
+ .cmb2-element .ui-icon-pin-w {
2224
+ background-position: -128px -144px;
2225
+ }
2226
+
2227
+ /* line 183, sass/partials/_jquery_ui.scss */
2228
+
2229
+ .cmb2-element .ui-icon-pin-s {
2230
+ background-position: -144px -144px;
2231
+ }
2232
+
2233
+ /* line 184, sass/partials/_jquery_ui.scss */
2234
+
2235
+ .cmb2-element .ui-icon-play {
2236
+ background-position: 0 -160px;
2237
+ }
2238
+
2239
+ /* line 185, sass/partials/_jquery_ui.scss */
2240
+
2241
+ .cmb2-element .ui-icon-pause {
2242
+ background-position: -16px -160px;
2243
+ }
2244
+
2245
+ /* line 186, sass/partials/_jquery_ui.scss */
2246
+
2247
+ .cmb2-element .ui-icon-seek-next {
2248
+ background-position: -32px -160px;
2249
+ }
2250
+
2251
+ /* line 187, sass/partials/_jquery_ui.scss */
2252
+
2253
+ .cmb2-element .ui-icon-seek-prev {
2254
+ background-position: -48px -160px;
2255
+ }
2256
+
2257
+ /* line 188, sass/partials/_jquery_ui.scss */
2258
+
2259
+ .cmb2-element .ui-icon-seek-end {
2260
+ background-position: -64px -160px;
2261
+ }
2262
+
2263
+ /* line 189, sass/partials/_jquery_ui.scss */
2264
+
2265
+ .cmb2-element .ui-icon-seek-start {
2266
+ background-position: -80px -160px;
2267
+ }
2268
+
2269
+ /* line 190, sass/partials/_jquery_ui.scss */
2270
+
2271
+ .cmb2-element .ui-icon-seek-first {
2272
+ background-position: -80px -160px;
2273
+ }
2274
+
2275
+ /* line 191, sass/partials/_jquery_ui.scss */
2276
+
2277
+ .cmb2-element .ui-icon-stop {
2278
+ background-position: -96px -160px;
2279
+ }
2280
+
2281
+ /* line 192, sass/partials/_jquery_ui.scss */
2282
+
2283
+ .cmb2-element .ui-icon-eject {
2284
+ background-position: -112px -160px;
2285
+ }
2286
+
2287
+ /* line 193, sass/partials/_jquery_ui.scss */
2288
+
2289
+ .cmb2-element .ui-icon-volume-off {
2290
+ background-position: -128px -160px;
2291
+ }
2292
+
2293
+ /* line 194, sass/partials/_jquery_ui.scss */
2294
+
2295
+ .cmb2-element .ui-icon-volume-on {
2296
+ background-position: -144px -160px;
2297
+ }
2298
+
2299
+ /* line 195, sass/partials/_jquery_ui.scss */
2300
+
2301
+ .cmb2-element .ui-icon-power {
2302
+ background-position: 0 -176px;
2303
+ }
2304
+
2305
+ /* line 196, sass/partials/_jquery_ui.scss */
2306
+
2307
+ .cmb2-element .ui-icon-signal-diag {
2308
+ background-position: -16px -176px;
2309
+ }
2310
+
2311
+ /* line 197, sass/partials/_jquery_ui.scss */
2312
+
2313
+ .cmb2-element .ui-icon-signal {
2314
+ background-position: -32px -176px;
2315
+ }
2316
+
2317
+ /* line 198, sass/partials/_jquery_ui.scss */
2318
+
2319
+ .cmb2-element .ui-icon-battery-0 {
2320
+ background-position: -48px -176px;
2321
+ }
2322
+
2323
+ /* line 199, sass/partials/_jquery_ui.scss */
2324
+
2325
+ .cmb2-element .ui-icon-battery-1 {
2326
+ background-position: -64px -176px;
2327
+ }
2328
+
2329
+ /* line 200, sass/partials/_jquery_ui.scss */
2330
+
2331
+ .cmb2-element .ui-icon-battery-2 {
2332
+ background-position: -80px -176px;
2333
+ }
2334
+
2335
+ /* line 201, sass/partials/_jquery_ui.scss */
2336
+
2337
+ .cmb2-element .ui-icon-battery-3 {
2338
+ background-position: -96px -176px;
2339
+ }
2340
+
2341
+ /* line 202, sass/partials/_jquery_ui.scss */
2342
+
2343
+ .cmb2-element .ui-icon-circle-plus {
2344
+ background-position: 0 -192px;
2345
+ }
2346
+
2347
+ /* line 203, sass/partials/_jquery_ui.scss */
2348
+
2349
+ .cmb2-element .ui-icon-circle-minus {
2350
+ background-position: -16px -192px;
2351
+ }
2352
+
2353
+ /* line 204, sass/partials/_jquery_ui.scss */
2354
+
2355
+ .cmb2-element .ui-icon-circle-close {
2356
+ background-position: -32px -192px;
2357
+ }
2358
+
2359
+ /* line 205, sass/partials/_jquery_ui.scss */
2360
+
2361
+ .cmb2-element .ui-icon-circle-triangle-e {
2362
+ background-position: -48px -192px;
2363
+ }
2364
+
2365
+ /* line 206, sass/partials/_jquery_ui.scss */
2366
+
2367
+ .cmb2-element .ui-icon-circle-triangle-s {
2368
+ background-position: -64px -192px;
2369
+ }
2370
+
2371
+ /* line 207, sass/partials/_jquery_ui.scss */
2372
+
2373
+ .cmb2-element .ui-icon-circle-triangle-w {
2374
+ background-position: -80px -192px;
2375
+ }
2376
+
2377
+ /* line 208, sass/partials/_jquery_ui.scss */
2378
+
2379
+ .cmb2-element .ui-icon-circle-triangle-n {
2380
+ background-position: -96px -192px;
2381
+ }
2382
+
2383
+ /* line 209, sass/partials/_jquery_ui.scss */
2384
+
2385
+ .cmb2-element .ui-icon-circle-arrow-e {
2386
+ background-position: -112px -192px;
2387
+ }
2388
+
2389
+ /* line 210, sass/partials/_jquery_ui.scss */
2390
+
2391
+ .cmb2-element .ui-icon-circle-arrow-s {
2392
+ background-position: -128px -192px;
2393
+ }
2394
+
2395
+ /* line 211, sass/partials/_jquery_ui.scss */
2396
+
2397
+ .cmb2-element .ui-icon-circle-arrow-w {
2398
+ background-position: -144px -192px;
2399
+ }
2400
+
2401
+ /* line 212, sass/partials/_jquery_ui.scss */
2402
+
2403
+ .cmb2-element .ui-icon-circle-arrow-n {
2404
+ background-position: -160px -192px;
2405
+ }
2406
+
2407
+ /* line 213, sass/partials/_jquery_ui.scss */
2408
+
2409
+ .cmb2-element .ui-icon-circle-zoomin {
2410
+ background-position: -176px -192px;
2411
+ }
2412
+
2413
+ /* line 214, sass/partials/_jquery_ui.scss */
2414
+
2415
+ .cmb2-element .ui-icon-circle-zoomout {
2416
+ background-position: -192px -192px;
2417
+ }
2418
+
2419
+ /* line 215, sass/partials/_jquery_ui.scss */
2420
+
2421
+ .cmb2-element .ui-icon-circle-check {
2422
+ background-position: -208px -192px;
2423
+ }
2424
+
2425
+ /* line 216, sass/partials/_jquery_ui.scss */
2426
+
2427
+ .cmb2-element .ui-icon-circlesmall-plus {
2428
+ background-position: 0 -208px;
2429
+ }
2430
+
2431
+ /* line 217, sass/partials/_jquery_ui.scss */
2432
+
2433
+ .cmb2-element .ui-icon-circlesmall-minus {
2434
+ background-position: -16px -208px;
2435
+ }
2436
+
2437
+ /* line 218, sass/partials/_jquery_ui.scss */
2438
+
2439
+ .cmb2-element .ui-icon-circlesmall-close {
2440
+ background-position: -32px -208px;
2441
+ }
2442
+
2443
+ /* line 219, sass/partials/_jquery_ui.scss */
2444
+
2445
+ .cmb2-element .ui-icon-squaresmall-plus {
2446
+ background-position: -48px -208px;
2447
+ }
2448
+
2449
+ /* line 220, sass/partials/_jquery_ui.scss */
2450
+
2451
+ .cmb2-element .ui-icon-squaresmall-minus {
2452
+ background-position: -64px -208px;
2453
+ }
2454
+
2455
+ /* line 221, sass/partials/_jquery_ui.scss */
2456
+
2457
+ .cmb2-element .ui-icon-squaresmall-close {
2458
+ background-position: -80px -208px;
2459
+ }
2460
+
2461
+ /* line 222, sass/partials/_jquery_ui.scss */
2462
+
2463
+ .cmb2-element .ui-icon-grip-dotted-vertical {
2464
+ background-position: 0 -224px;
2465
+ }
2466
+
2467
+ /* line 223, sass/partials/_jquery_ui.scss */
2468
+
2469
+ .cmb2-element .ui-icon-grip-dotted-horizontal {
2470
+ background-position: -16px -224px;
2471
+ }
2472
+
2473
+ /* line 224, sass/partials/_jquery_ui.scss */
2474
+
2475
+ .cmb2-element .ui-icon-grip-solid-vertical {
2476
+ background-position: -32px -224px;
2477
+ }
2478
+
2479
+ /* line 225, sass/partials/_jquery_ui.scss */
2480
+
2481
+ .cmb2-element .ui-icon-grip-solid-horizontal {
2482
+ background-position: -48px -224px;
2483
+ }
2484
+
2485
+ /* line 226, sass/partials/_jquery_ui.scss */
2486
+
2487
+ .cmb2-element .ui-icon-gripsmall-diagonal-se {
2488
+ background-position: -64px -224px;
2489
+ }
2490
+
2491
+ /* line 227, sass/partials/_jquery_ui.scss */
2492
+
2493
+ .cmb2-element .ui-icon-grip-diagonal-se {
2494
+ background-position: -80px -224px;
2495
+ }
2496
+
2497
+ /* line 228, sass/partials/_jquery_ui.scss */
2498
+
2499
+ .cmb2-element .ui-corner-all,
2500
+ .cmb2-element .ui-corner-top,
2501
+ .cmb2-element .ui-corner-left,
2502
+ .cmb2-element .ui-corner-tl {
2503
+ -moz-border-radius-topleft: 4px;
2504
+ -webkit-border-top-left-radius: 4px;
2505
+ -khtml-border-top-left-radius: 4px;
2506
+ border-top-left-radius: 4px;
2507
+ }
2508
+
2509
+ /* line 229, sass/partials/_jquery_ui.scss */
2510
+
2511
+ .cmb2-element .ui-corner-all,
2512
+ .cmb2-element .ui-corner-top,
2513
+ .cmb2-element .ui-corner-right,
2514
+ .cmb2-element .ui-corner-tr {
2515
+ -moz-border-radius-topright: 4px;
2516
+ -webkit-border-top-right-radius: 4px;
2517
+ -khtml-border-top-right-radius: 4px;
2518
+ border-top-right-radius: 4px;
2519
+ }
2520
+
2521
+ /* line 230, sass/partials/_jquery_ui.scss */
2522
+
2523
+ .cmb2-element .ui-corner-all,
2524
+ .cmb2-element .ui-corner-bottom,
2525
+ .cmb2-element .ui-corner-left,
2526
+ .cmb2-element .ui-corner-bl {
2527
+ -moz-border-radius-bottomleft: 4px;
2528
+ -webkit-border-bottom-left-radius: 4px;
2529
+ -khtml-border-bottom-left-radius: 4px;
2530
+ border-bottom-left-radius: 4px;
2531
+ }
2532
+
2533
+ /* line 231, sass/partials/_jquery_ui.scss */
2534
+
2535
+ .cmb2-element .ui-corner-all,
2536
+ .cmb2-element .ui-corner-bottom,
2537
+ .cmb2-element .ui-corner-right,
2538
+ .cmb2-element .ui-corner-br {
2539
+ -moz-border-radius-bottomright: 4px;
2540
+ -webkit-border-bottom-right-radius: 4px;
2541
+ -khtml-border-bottom-right-radius: 4px;
2542
+ border-bottom-right-radius: 4px;
2543
+ }
2544
+
2545
+ /* line 232, sass/partials/_jquery_ui.scss */
2546
+
2547
+ .cmb2-element .ui-widget-overlay {
2548
+ background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
2549
+ opacity: .30;
2550
+ filter: Alpha(Opacity=30);
2551
+ }
2552
+
2553
+ /* line 233, sass/partials/_jquery_ui.scss */
2554
+
2555
+ .cmb2-element .ui-widget-shadow {
2556
+ margin: -8px 0 0 -8px;
2557
+ padding: 8px;
2558
+ background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
2559
+ opacity: .30;
2560
+ filter: Alpha(Opacity=30);
2561
+ -moz-border-radius: 8px;
2562
+ -khtml-border-radius: 8px;
2563
+ -webkit-border-radius: 8px;
2564
+ border-radius: 8px;
2565
+ }
2566
+
2567
+ /* line 234, sass/partials/_jquery_ui.scss */
2568
+
2569
+ .cmb2-element .ui-datepicker {
2570
+ width: 17em;
2571
+ padding: .2em .2em 0;
2572
+ display: none;
2573
+ }
2574
+
2575
+ /* line 235, sass/partials/_jquery_ui.scss */
2576
+
2577
+ .cmb2-element .ui-datepicker .ui-datepicker-header {
2578
+ position: relative;
2579
+ padding: .2em 0;
2580
+ }
2581
+
2582
+ /* line 236, sass/partials/_jquery_ui.scss */
2583
+
2584
+ .cmb2-element .ui-datepicker .ui-datepicker-prev,
2585
+ .cmb2-element .ui-datepicker .ui-datepicker-next {
2586
+ position: absolute;
2587
+ top: 2px;
2588
+ width: 1.8em;
2589
+ height: 1.8em;
2590
+ }
2591
+
2592
+ /* line 237, sass/partials/_jquery_ui.scss */
2593
+
2594
+ .cmb2-element .ui-datepicker .ui-datepicker-prev-hover,
2595
+ .cmb2-element .ui-datepicker .ui-datepicker-next-hover {
2596
+ top: 1px;
2597
+ }
2598
+
2599
+ /* line 238, sass/partials/_jquery_ui.scss */
2600
+
2601
+ .cmb2-element .ui-datepicker .ui-datepicker-prev {
2602
+ left: 2px;
2603
+ }
2604
+
2605
+ /* line 239, sass/partials/_jquery_ui.scss */
2606
+
2607
+ .cmb2-element .ui-datepicker .ui-datepicker-next {
2608
+ right: 2px;
2609
+ }
2610
+
2611
+ /* line 240, sass/partials/_jquery_ui.scss */
2612
+
2613
+ .cmb2-element .ui-datepicker .ui-datepicker-prev-hover {
2614
+ left: 1px;
2615
+ }
2616
+
2617
+ /* line 241, sass/partials/_jquery_ui.scss */
2618
+
2619
+ .cmb2-element .ui-datepicker .ui-datepicker-next-hover {
2620
+ right: 1px;
2621
+ }
2622
+
2623
+ /* line 242, sass/partials/_jquery_ui.scss */
2624
+
2625
+ .cmb2-element .ui-datepicker .ui-datepicker-prev span,
2626
+ .cmb2-element .ui-datepicker .ui-datepicker-next span {
2627
+ display: block;
2628
+ position: absolute;
2629
+ left: 50%;
2630
+ margin-left: -8px;
2631
+ top: 50%;
2632
+ margin-top: -8px;
2633
+ }
2634
+
2635
+ /* line 243, sass/partials/_jquery_ui.scss */
2636
+
2637
+ .cmb2-element .ui-datepicker .ui-datepicker-title {
2638
+ margin: 0 2.3em;
2639
+ line-height: 1.8em;
2640
+ text-align: center;
2641
+ }
2642
+
2643
+ /* line 244, sass/partials/_jquery_ui.scss */
2644
+
2645
+ .cmb2-element .ui-datepicker .ui-datepicker-title select {
2646
+ font-size: 1em;
2647
+ margin: 1px 0;
2648
+ }
2649
+
2650
+ /* line 245, sass/partials/_jquery_ui.scss */
2651
+
2652
+ .cmb2-element .ui-datepicker select.ui-datepicker-month-year {
2653
+ width: 100%;
2654
+ }
2655
+
2656
+ /* line 246, sass/partials/_jquery_ui.scss */
2657
+
2658
+ .cmb2-element .ui-datepicker select.ui-datepicker-month,
2659
+ .cmb2-element .ui-datepicker select.ui-datepicker-year {
2660
+ width: 49%;
2661
+ }
2662
+
2663
+ /* line 248, sass/partials/_jquery_ui.scss */
2664
+
2665
+ .cmb2-element .ui-datepicker table {
2666
+ width: 100%;
2667
+ font-size: .9em;
2668
+ border-collapse: collapse;
2669
+ margin: 0 0 .4em;
2670
+ }
2671
+
2672
+ /* line 249, sass/partials/_jquery_ui.scss */
2673
+
2674
+ .cmb2-element .ui-datepicker th {
2675
+ padding: .7em .3em;
2676
+ text-align: center;
2677
+ font-weight: bold;
2678
+ border: 0;
2679
+ }
2680
+
2681
+ /* line 250, sass/partials/_jquery_ui.scss */
2682
+
2683
+ .cmb2-element .ui-datepicker td {
2684
+ border: 0;
2685
+ padding: 1px;
2686
+ }
2687
+
2688
+ /* line 251, sass/partials/_jquery_ui.scss */
2689
+
2690
+ .cmb2-element .ui-datepicker td span,
2691
+ .cmb2-element .ui-datepicker td a {
2692
+ display: block;
2693
+ padding: .2em;
2694
+ text-align: right;
2695
+ text-decoration: none;
2696
+ }
2697
+
2698
+ /* line 252, sass/partials/_jquery_ui.scss */
2699
+
2700
+ .cmb2-element .ui-datepicker .ui-datepicker-buttonpane {
2701
+ background-image: none;
2702
+ margin: .7em 0 0 0;
2703
+ padding: 0 .2em;
2704
+ border-left: 0;
2705
+ border-right: 0;
2706
+ border-bottom: 0;
2707
+ }
2708
+
2709
+ /* line 253, sass/partials/_jquery_ui.scss */
2710
+
2711
+ .cmb2-element .ui-datepicker .ui-datepicker-buttonpane button {
2712
+ float: right;
2713
+ margin: .5em .2em .4em;
2714
+ cursor: pointer;
2715
+ padding: .2em .6em .3em .6em;
2716
+ width: auto;
2717
+ overflow: visible;
2718
+ }
2719
+
2720
+ /* line 254, sass/partials/_jquery_ui.scss */
2721
+
2722
+ .cmb2-element .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
2723
+ float: left;
2724
+ }
2725
+
2726
+ /* line 255, sass/partials/_jquery_ui.scss */
2727
+
2728
+ .cmb2-element .ui-datepicker.ui-datepicker-multi {
2729
+ width: auto;
2730
+ }
2731
+
2732
+ /* line 256, sass/partials/_jquery_ui.scss */
2733
+
2734
+ .cmb2-element .ui-datepicker-multi .ui-datepicker-group {
2735
+ float: left;
2736
+ }
2737
+
2738
+ /* line 257, sass/partials/_jquery_ui.scss */
2739
+
2740
+ .cmb2-element .ui-datepicker-multi .ui-datepicker-group table {
2741
+ width: 95%;
2742
+ margin: 0 auto .4em;
2743
+ }
2744
+
2745
+ /* line 258, sass/partials/_jquery_ui.scss */
2746
+
2747
+ .cmb2-element .ui-datepicker-multi-2 .ui-datepicker-group {
2748
+ width: 50%;
2749
+ }
2750
+
2751
+ /* line 259, sass/partials/_jquery_ui.scss */
2752
+
2753
+ .cmb2-element .ui-datepicker-multi-3 .ui-datepicker-group {
2754
+ width: 33.3%;
2755
+ }
2756
+
2757
+ /* line 260, sass/partials/_jquery_ui.scss */
2758
+
2759
+ .cmb2-element .ui-datepicker-multi-4 .ui-datepicker-group {
2760
+ width: 25%;
2761
+ }
2762
+
2763
+ /* line 261, sass/partials/_jquery_ui.scss */
2764
+
2765
+ .cmb2-element .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header {
2766
+ border-left-width: 0;
2767
+ }
2768
+
2769
+ /* line 262, sass/partials/_jquery_ui.scss */
2770
+
2771
+ .cmb2-element .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
2772
+ border-left-width: 0;
2773
+ }
2774
+
2775
+ /* line 263, sass/partials/_jquery_ui.scss */
2776
+
2777
+ .cmb2-element .ui-datepicker-multi .ui-datepicker-buttonpane {
2778
+ clear: left;
2779
+ }
2780
+
2781
+ /* line 264, sass/partials/_jquery_ui.scss */
2782
+
2783
+ .cmb2-element .ui-datepicker-row-break {
2784
+ clear: both;
2785
+ width: 100%;
2786
+ font-size: 0em;
2787
+ }
2788
+
2789
+ /* line 265, sass/partials/_jquery_ui.scss */
2790
+
2791
+ .cmb2-element .ui-datepicker-rtl {
2792
+ direction: rtl;
2793
+ }
2794
+
2795
+ /* line 267, sass/partials/_jquery_ui.scss */
2796
+
2797
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-prev {
2798
+ right: 2px;
2799
+ left: auto;
2800
+ }
2801
+
2802
+ /* line 268, sass/partials/_jquery_ui.scss */
2803
+
2804
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-next {
2805
+ left: 2px;
2806
+ right: auto;
2807
+ }
2808
+
2809
+ /* line 269, sass/partials/_jquery_ui.scss */
2810
+
2811
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-prev:hover {
2812
+ right: 1px;
2813
+ left: auto;
2814
+ }
2815
+
2816
+ /* line 270, sass/partials/_jquery_ui.scss */
2817
+
2818
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-next:hover {
2819
+ left: 1px;
2820
+ right: auto;
2821
+ }
2822
+
2823
+ /* line 271, sass/partials/_jquery_ui.scss */
2824
+
2825
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-buttonpane {
2826
+ clear: right;
2827
+ }
2828
+
2829
+ /* line 272, sass/partials/_jquery_ui.scss */
2830
+
2831
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-buttonpane button {
2832
+ float: left;
2833
+ }
2834
+
2835
+ /* line 273, sass/partials/_jquery_ui.scss */
2836
+
2837
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current {
2838
+ float: right;
2839
+ }
2840
+
2841
+ /* line 274, sass/partials/_jquery_ui.scss */
2842
+
2843
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-group {
2844
+ float: right;
2845
+ }
2846
+
2847
+ /* line 275, sass/partials/_jquery_ui.scss */
2848
+
2849
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header {
2850
+ border-right-width: 0;
2851
+ border-left-width: 1px;
2852
+ }
2853
+
2854
+ /* line 276, sass/partials/_jquery_ui.scss */
2855
+
2856
+ .cmb2-element .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
2857
+ border-right-width: 0;
2858
+ border-left-width: 1px;
2859
+ }
2860
+
2861
+ /* line 278, sass/partials/_jquery_ui.scss */
2862
+
2863
+ .cmb2-element .ui-datepicker-cover {
2864
+ display: none; /*sorry for IE5*/
2865
+ display/**/: block; /*sorry for IE5*/
2866
+ position: absolute; /*must have*/
2867
+ z-index: -1; /*must have*/
2868
+ filter: mask(); /*must have*/
2869
+ top: -4px; /*must have*/
2870
+ left: -4px; /*must have*/
2871
+ width: 200px; /*must have*/
2872
+ height: 200px; /*must have*/
2873
+ }
2874
+
2875
+ /*# sourceMappingURL=cmb2.css.map */
2876
+
2877
+ @media (max-width: 450px) {
2878
+
2879
+ /* line 209, sass/partials/_main_wrap.scss */
2880
+
2881
+ .cmb-th {
2882
+ font-size: 1.2em;
2883
+ display: block;
2884
+ float: none;
2885
+ padding-bottom: 1em;
2886
+ text-align: left;
2887
+ width: 100%;
2888
+ }
2889
+
2890
+ /* line 27, sass/partials/_mixins.scss */
2891
+
2892
+ .cmb-th label {
2893
+ display: block;
2894
+ margin-top: 0em;
2895
+ padding-bottom: 5px;
2896
+ }
2897
+
2898
+ /* line 32, sass/partials/_mixins.scss */
2899
+
2900
+ .cmb-th label:after {
2901
+ border-bottom: 1px solid #e9e9e9;
2902
+ content: '';
2903
+ clear: both;
2904
+ display: block;
2905
+ padding-top: .4em;
2906
+ }
2907
+
2908
+ /* line 431, sass/partials/_main_wrap.scss */
2909
+
2910
+ .cmb-th,
2911
+ .cmb-td,
2912
+ .cmb-th + .cmb-td {
2913
+ display: block;
2914
+ float: none;
2915
+ width: 100%;
2916
+ }
2917
+
2918
+ /* line 70, sass/partials/_post_metaboxes.scss */
2919
+
2920
+ .postbox-container .cmb-row:not(:last-of-type),
2921
+ .postbox-container .cmb-repeatable-group:not(:last-of-type),
2922
+ .cmb-repeat-group-wrap .cmb-row:not(:last-of-type),
2923
+ .cmb-repeat-group-wrap .cmb-repeatable-group:not(:last-of-type) {
2924
+ border-bottom: 0;
2925
+ }
2926
+
2927
+ }
2928
+
cmb2/css/cmb2.css.map ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ {
2
+ "version": 3,
3
+ "mappings": ";;;;;;;AAIA,UAAW;EACV,MAAM,EAAE,CAAC;;;AAET;mBACS;EACR,SAAS,ECEK,IAAI;EDDlB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,GAAG;;;AAMZ,uCAAc;EACb,KAAK,EAAE,IAAI;;;AAIb,mBAAS;EACR,KAAK,EAAE,KAAK;;;AAEZ,sCAAqB;EACpB,WAAW,EChBE,sCAAkB;EDiB/B,WAAW,EAAE,IAAI;;;AAMlB,kEACkB;EACjB,KAAK,EAAE,KAAK;;;AAIb,gCAAkB;EACjB,KAAK,EAAE,IAAI;;;AAIZ,iCAAmB;EAClB,KAAK,EAAE,KAAK;;;AAIb,iCAAmB;EAClB,KAAK,EAAE,GAAG;;;AAGX,0BAAY;EACX,OAAO,EAAE,OAAO;;;AAIhB;;8CAES;EACR,WAAW,EAAE,IAAI;;;AAKpB,aAAG;EACF,MAAM,EAAE,CAAC;;;AAGV,aAAG;EACF,SAAS,EC5DK,IAAI;ED6DlB,WAAW,EAAE,IAAI;EACjB,MAAM,EAAE,WAAW;;;AAQpB,iBAAO;EACN,SAAS,ECvEK,IAAI;EDwElB,UAAU,EAAE,GAAG;;;AAGhB;yBACe;EACd,UAAU,ECtEI,OAAO;;;ADyEtB,8BAAoB;EACnB,MAAM,EAAE,SAAS;EACjB,OAAO,EAAE,CAAC;;;AAGX,iCAAuB;EACtB,MAAM,EAAE,SAAS;EACjB,OAAO,EAAE,CAAC;;;AAGX;kBACQ;EACP,WAAW,EAAE,MAAM;;;AAGpB,qBAAW;EACV,MAAM,EAAE,4BAAgC;;;AAGzC,8BAAoB;EACnB,UAAU,EAAE,IAAI;;;AAGjB,oBAAU;EACT,KAAK,EAAE,GAAG;;;AAEV,6BAAS;EACR,KAAK,EAAE,IAAI;;;AAOb;gCACsB;EACrB,cAAc,EAAE,MAAM;;;AAGvB;+BACqB;EACpB,MAAM,EAAE,UAAU;;;AAGnB,mBAAS;EACR,MAAM,EAAE,CAAC;;;AAET,yBAAQ;EACP,OAAO,EAAE,EAAE;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;;;AAGZ,kCAAiB;EAChB,OAAO,EAAE,SAAS;;;AAElB,gDAAgB;EACf,OAAO,EAAE,CAAC;;;AAIZ,wDAAuC;EACtC,WAAW,EAAE,CAAC;EACd,cAAc,EAAE,KAAK;;;;AAKxB,aAAc;EACb,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,CAAC;;;AAIR;;;gEACQ;EACP,MAAM,EAAE,CAAC;;;AAKV,6DAAqC;EACpC,aAAa,EAAE,IAAI;EACnB,UAAU,EAAE,UAAU;EACtB,KAAK,EAAE,IAAI;;;;AAKd,YAAa;EACZ,MAAM,EAAE,SAAS;;;;AAGlB;;mCAEoC;EACnC,MAAM,EAAE,CAAC;;;;AAGV;;kCAEmC;EAClC,aAAa,EAAE,CAAC;;;;AAGjB,wBAAyB;EACxB,MAAM,EAAE,iBAAqB;EAC7B,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,MAAM;;;AACjB,gCAAU;EACT,MAAM,EAAE,SAAS;;;;AAMnB,OAAQ;EACP,KAAK,ECnMU,OAAO;EDoMtB,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,GAAG;EAChB,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,gBAAgB;EACzB,cAAc,EAAE,GAAG;EACnB,KAAK,EAAE,KAAK;;AAEZ,yBAAkC;;EATnC,OAAQ;IE3MP,SAAS,EAAE,KAAK;IAehB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,IAAI;IACX,cAAc,EAAE,GAAG;IACnB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,IAAI;;;EAEX,aAAM;IACL,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,GAAG;IACf,cAAc,EAAE,GAAG;;;EAEnB,mBAAQ;IACP,aAAa,EAAE,iBAAqB;IACpC,OAAO,EAAE,EAAE;IACX,KAAK,EAAE,IAAI;IACX,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,IAAI;;;;;AF0LpB,OAAQ;EACP,WAAW,EAAE,GAAG;EAChB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,SAAS;EAClB,cAAc,EAAE,MAAM;;;;AAKtB,uBAAQ;EACP,OAAO,EAAE,CAAC;;;;AAIZ,aAAc;EACb,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,KAAK;;;;AAGf,iBAAkB;EACjB,KAAK,EAAE,IAAI;;;;AAGZ,eAAgB;EACf,cAAc,EAAE,GAAG;;;;AAGpB,eAAgB;EACf,UAAU,EAAE,KAAK;;;;AAGlB,iBAAkB;EACjB,OAAO,EAAE,IAAI;;;;AAKb,6BAAQ;EACP,OAAO,EAAE,GAAG;;;AAGb,sCAAiB;EAChB,gBAAgB,ECxPF,OAAO;EDyPrB,OAAO,EAAE,kBAAkB;EAC3B,MAAM,EAAE,MAAM;EACd,UAAU,EAAE,KAAK;EACjB,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;;;AAEhB,yCAAG;EACF,MAAM,EAAE,CAAC;EACT,MAAM,EAAE,CAAC;EACT,SAAS,EAAE,KAAK;EAChB,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,YAAY;;;AAGtB,8CAAQ;EACP,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;;;AAIb,oDAA+B;EExR/B,SAAS,EAAE,KAAK;EAehB,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,cAAc,EAAE,GAAG;EACnB,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;;;AAEX,0DAAM;EACL,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,GAAG;EACf,cAAc,EAAE,GAAG;;;AAEnB,gEAAQ;EACP,aAAa,EAAE,iBAAqB;EACpC,OAAO,EAAE,EAAE;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,IAAI;;;AF6PnB,qCAAgB;EACf,SAAS,EAAE,GAAG;EACd,YAAY,EAAE,GAAG;EACjB,eAAe,EAAE,IAAI;;;AAErB,gDAAW;EACV,SAAS,EAAE,KAAK;EAChB,MAAM,EAAE,KAAK;EACb,WAAW,EAAE,KAAK;EAClB,KAAK,EAAE,GAAG;;;AAEV,0EAA4B;EAC3B,WAAW,EAAE,KAAK;;;AAMrB,yCAAoB;EACnB,KAAK,EAAE,KAAK;;;;AAKd,0BAA2B;EAC1B,KAAK,EC3SU,OAAO;ED4StB,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,IAAI;;;;AAGlB,6BAA8B;EAC7B,KAAK,EClTU,OAAO;EDmTtB,UAAU,EAAE,MAAM;;;;AAGnB,mBAAoB;EACnB,MAAM,EAAE,SAAS;EACjB,OAAO,EAAE,SAAS;EAClB,SAAS,EAAE,IAAI;;;;AAGhB,cAAe;EACd,OAAO,EAAE,SAAS;;;;AAGnB,cAAe;EACd,OAAO,EAAE,YAAY;EACrB,aAAa,EAAE,IAAI;;;;AAGpB,2BAA4B;EAC3B,MAAM,EAAE,CAAC;;;;AAKT,8BAAY;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EACrB,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,IAAI;;;AAEX,kCAAI;EACH,SAAS,EAAE,KAAK;;;AAIlB;gCACc;EACb,UAAU,ECrVI,OAAO;EDsVrB,MAAM,EAAE,iBAAqB;EAC7B,aAAa,EAAE,GAAG;EAClB,kBAAkB,EAAE,GAAG;EACtB,MAAM,EAAE,UAAU;EACnB,OAAO,EAAE,GAAG;;;AAGb,gCAAc;EACb,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,KAAK;;;AAGjB,gEAA2B;EAC1B,QAAQ,EAAE,QAAQ;;;AAElB,kHAAyB;EACxB,UAAU,EAAE,6BAA6B;EACzC,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,IAAI;EACV,QAAQ,EAAE,QAAQ;EAClB,WAAW,EAAE,OAAO;EACpB,GAAG,EAAE,IAAI;EACT,KAAK,EAAE,IAAI;;;AAOZ,uDAAyB;EACxB,GAAG,EAAE,IAAI;;;AAIX,0EAAqC;EACpC,MAAM,EAAE,OAAO;;;;AAKjB,kDAAmD;EAClD,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,IAAI;EAClB,KAAK,EAAE,IAAI;;;;AAGZ,mBAAoB;EACnB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EACrB,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,IAAI;;;AAEX,uBAAI;EACH,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,YAAY,EAAE,IAAI;;;;AAIpB,oBAAqB;EACpB,MAAM,EAAE,CAAC;;;;AAGV,mBAAoB;EACnB,UAAU,EAAE,IAAI;;;AAGjB,yBAAkC;;EACjC;;mBAEkB;IACjB,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;;;;;;;AG7aZ,eAAc;EACb,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,iBAAe;EACvB,MAAM,EAAE,KAAK;EACb,MAAM,EAAE,CAAC;EACT,QAAQ,EAAE,QAAQ;EAClB,QAAQ,EAAE,IAAI;EACd,KAAK,EAAE,GAAG;;EACV,OAAO,EAAE,EAAE;;;AAEX,kBAAG;EACF,eAAe,EAAE,IAAI;EACrB,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;;AAGX,kBAAG;EACF,MAAM,EAAE,OAAO;EACf,aAAa,EAAE,CAAC;EAChB,WAAW,EFjBE,UAAU;EEkBvB,SAAS,EAAE,IAAI;EACf,OAAO,EAAE,OAAO;;;AAEhB,2BAAW;EACV,UAAU,EFbE,OAAO;EEcnB,KAAK,EAAE,IAAI;;;AAKd,uBAAsB;EACrB,KAAK,EAAE,GAAG;;;;;;;;AClCZ,2BAA4B;EAC3B,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,IAAI;EAClB,YAAY,EAAE,KAAK;EAEnB,UAAU,EAAE,KAAK;;;;AAKjB,gEAAW;EACV,MAAM,EAAE,CAAC;;;AAET,0HAA6B;EAC5B,OAAO,EAAE,OAAO;;;AAKhB,0HAAc;EACb,KAAK,EAAE,IAAI;;;AAKd,4DAAS;EACR,OAAO,EAAE,SAAS;EAClB,MAAM,EAAE,SAAS;;;AAEjB,kFAAW;EACV,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,QAAQ;;;AAIpB,4FAAyB;EACxB,OAAO,EAAE,KAAK;EACd,SAAS,EAAE,IAAI;EACf,SAAS,EAAE,cAAc;;;AAG1B,4GAAiC;EAChC,cAAc,EAAE,CAAC;;;AAGlB,0DAAQ;EACP,KAAK,EAAE,GAAG;EACV,OAAO,EAAE,QAAQ;;;AAIlB,0DAAQ;EACP,aAAa,EAAE,CAAC;EAChB,OAAO,EAAE,CAAC;EACV,WAAW,EAAE,GAAG;;;AAGjB,0FAAwB;EACvB,cAAc,EAAE,KAAK;;;AAGtB,8EAAkB;EACjB,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,KAAK;;;AAGb;;+DACyC;EACxC,aAAa,EAAE,iBAAqB;;AAEpC,yBAAkC;;EAJnC;;iEACyC;IAIvC,aAAa,EAAE,CAAC;;;;AAIlB;;4CACsB;EACrB,WAAW,EAAE,KAAK;;;AAKjB,oXAA6B;EAC5B,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;;;AAEX,gcAAmB;EAClB,KAAK,EAAE,IAAI;;;AAGZ,4gBAAsC;EACrC,OAAO,EAAE,SAAS;;;AAGnB,oZAAQ;EACP,OAAO,EAAE,UAAU;EACnB,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;;;AAGZ,wgBAAqC;EACpC,WAAW,EAAE,KAAK;;;AAGnB,gdAAuB;EACtB,aAAa,EAAE,CAAC;;;;;;;ACxGrB,mCAAoC;EACnC,MAAM,EAAE,CAAC;;;;AAOT;;kCAAoB;EACnB,SAAS,EAAE,KAAK;;;;AAIlB,qBAAsB;EACrB,KAAK,EAAE,IAAI;;;;;;;ACTV;uDAA6B;EAC5B,OAAO,EAAE,OAAO;;;AAKhB;iEAAqC;EACpC,KAAK,EAAE,IAAI;;;AAGZ;;yCAA0C;EACzC,WAAW,EAAE,CAAC;EACd,UAAU,EAAE,GAAG;EACf,OAAO,EAAE,KAAK;;;AAIhB;gCAAM;EACL,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,GAAG;EAChB,OAAO,EAAE,OAAO;;;AAKlB;qCAAsB;EACrB,aAAa,EAAE,iBAAqB;;;AAGrC;wEAAyD;EACxD,aAAa,EAAE,CAAC;EAChB,aAAa,EAAE,MAAM;;;AAGtB;;;;;iCAEkB;EACjB,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;;;AAGZ;+BAAgB;EACf,OAAO,EAAE,IAAI;;;AAGd;+BAAgB;EACf,cAAc,EAAE,GAAG;;;AAGpB;uBAAQ;EJvCR,OAAO,EAAE,KAAK;EACd,KAAK,EAAE,IAAI;EACX,cAAc,EAAE,GAAG;EACnB,UAAU,EAAE,IAAI;EAChB,KAAK,EAAE,IAAI;EIqCV,YAAY,EAAE,CAAC;EACf,aAAa,EAAE,CAAC;;;AJpCjB;6BAAM;EACL,OAAO,EAAE,KAAK;EACd,UAAU,EAAE,GAAG;EACf,cAAc,EAAE,GAAG;;;AAEnB;mCAAQ;EACP,aAAa,EAAE,iBAAqB;EACpC,OAAO,EAAE,EAAE;EACX,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,KAAK;EACd,WAAW,EAAE,IAAI;;;AAvBnB;6BAAM;EACL,SAAS,EDHK,IAAI;ECIlB,WAAW,EAAE,KAAK;;;AImDlB;8CAAQ;EACP,WAAW,EAAE,CAAC;;;AAEf;gEAA0B;EACzB,OAAO,EAAE,CAAC;;;AAMX;wCAAQ;EACP,OAAO,EAAE,CAAC;;;AAKX;mEAA2B;EAC1B,UAAU,EAAE,GAAG;;;AAQf;;;oDAAI;EACH,SAAS,EAAE,GAAG;EAEd,MAAM,EAAE,IAAI;;;AAKf;gCAAiB;EAChB,OAAO,EAAE,MAAM;EACf,WAAW,EAAE,MAAM;;;AAGpB;yCAA0B;EACzB,OAAO,EAAE,KAAK;EACd,OAAO,EAAE,OAAO;;;AAKhB;;;4DAC0B;EACzB,WAAW,EAAE,MAAM;EACnB,OAAO,EAAE,MAAM;;;AAIjB;kDAAmC;EAClC,cAAc,EAAE,KAAK;;;AAGtB;mCAAoB;EACnB,SAAS,EAAE,KAAK;EAChB,UAAU,EAAE,MAAM;;;AAGnB;+BAAgB;EACf,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,CAAC;;;AAIjB;6DAAQ;EACP,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,IAAI;EACX,WAAW,EAAE,CAAC;;;AACd;4EAAiB;EAChB,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,CAAC;;;AAKZ;mCAAoB;EACnB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,IAAI;;;;ACnJjB,oCAAuB;EACtB,SAAS,EAAE,MAAM;;;AAElB,wBAAW;EACV,KAAK,EAAE,IAAI;EACX,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,MAAM,EAAE,OAAO;EACf,KAAK,EAAE,IAAI;EACX,QAAQ,EAAE,QAAQ;;;AAClB,+BAAS;EACR,OAAO,EAAE,OAAO;EAChB,KAAK,EAAE,IAAI;EACX,IAAI,EAAE,yBAAyB;EAC/B,KAAK,EAAE,IAAI;EACX,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,QAAQ;EACjB,GAAG,EAAE,CAAC;EACN,QAAQ,EAAE,QAAQ;EAClB,sBAAsB,EAAE,WAAW;EACnC,uBAAuB,EAAE,SAAS;EAClC,eAAe,EAAE,eAAe;;;AAMhC,+CAAS;EACR,OAAO,EAAE,OAAO;;;AAKnB,2EAA8D;EAC7D,kBAAkB,EAAE,eAAe;EACnC,UAAU,EAAE,eAAe;EAC3B,MAAM,EAAE,eAAe;EACvB,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,CAAC;EACP,GAAG,EAAE,IAAI;EACT,WAAW,EAAE,GAAG;EAChB,MAAM,EAAE,OAAO;;;AACf,2FAAkB;EACjB,KAAK,ENxBQ,IAAI;;;AMyBjB,iGAAQ;EACP,KAAK,EN3BO,IAAI;;;;;;;;;;;;;AOVnB,+BAAkB;EAAE,OAAO,EAAE,IAAI;;;AACjC,0CAA6B;EAAE,QAAQ,EAAE,mBAAmB;EAAE,IAAI,EAAE,qBAAqB;EAAE,IAAI,EAAE,wBAAqB;;;AACtH,8BAAiB;EAAE,MAAM,EAAE,CAAC;EAAE,OAAO,EAAE,CAAC;EAAE,MAAM,EAAE,CAAC;EAAE,OAAO,EAAE,CAAC;EAAE,WAAW,EAAE,GAAG;EAAE,eAAe,EAAE,IAAI;EAAE,SAAS,EAAE,IAAI;EAAE,UAAU,EAAE,IAAI;;;AAC3I,uCAA0B;EAAE,OAAO,EAAE,GAAG;EAAE,OAAO,EAAE,KAAK;EAAE,MAAM,EAAE,CAAC;EAAE,KAAK,EAAE,IAAI;EAAE,UAAU,EAAE,MAAM;;;AACpG,iCAAoB;EAAE,OAAO,EAAE,YAAY;;;AAC3C,wCAA2B;EAAE,MAAM,EAAC,EAAE;;;AACtC,iCAAoB;EAAE,OAAO,EAAC,KAAK;;;AACnC,6BAAgB;EAAE,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;EAAE,GAAG,EAAE,CAAC;EAAE,IAAI,EAAE,CAAC;EAAE,QAAQ,EAAE,QAAQ;EAAE,OAAO,EAAE,CAAC;EAAE,MAAM,EAAC,gBAAgB;;;AACrH,gCAAmB;EAAE,MAAM,EAAE,kBAAkB;;;AAC/C,sBAAS;EAAE,OAAO,EAAE,KAAK;EAAE,WAAW,EAAE,QAAQ;EAAE,QAAQ,EAAE,MAAM;EAAE,iBAAiB,EAAE,SAAS;;;AAChG,gCAAmB;EAAE,QAAQ,EAAE,QAAQ;EAAE,GAAG,EAAE,CAAC;EAAE,IAAI,EAAE,CAAC;EAAE,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;;;AACnF,wBAAW;EACV,WAAW,EAAE,wBAAwB;EAAE,SAAS,EAAE,KAAK;;;AACvD,mCAAW;EAAE,SAAS,EAAE,GAAG;;;AAC3B,mIAAgC;EAAE,WAAW,EAAE,wBAAwB;EAAE,SAAS,EAAE,GAAG;;;AAExF,gCAAmB;EAAE,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,uEAAuE;EAAE,KAAK,EAAE,OAAO;;;AACnJ,kCAAqB;EAAE,KAAK,EAAE,OAAO;;;AACrC,+BAAkB;EAAE,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,gFAAgF;EAAE,KAAK,EAAE,OAAO;EAAE,WAAW,EAAE,IAAI;;;AAC9K,iCAAoB;EAAE,KAAK,EAAE,OAAO;;;AACpC,sIAA6F;EAAE,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,uEAAuE;EAAE,WAAW,EAAE,MAAM;EAAE,KAAK,EAAE,OAAO;;;AAClP,oHAA2E;EAAE,KAAK,EAAE,OAAO;EAAE,eAAe,EAAE,IAAI;;;AAClH,kQAA+K;EAAE,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,uEAAuE;EAAE,WAAW,EAAE,MAAM;EAAE,KAAK,EAAE,OAAO;;;AACpU,sEAA2C;EAAE,KAAK,EAAE,OAAO;EAAE,eAAe,EAAE,IAAI;;;AAClF,mIAA0F;EAAE,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,uEAAuE;EAAE,WAAW,EAAE,MAAM;EAAE,KAAK,EAAE,OAAO;;;AAC/O,iHAAwE;EAAE,KAAK,EAAE,OAAO;EAAE,eAAe,EAAE,IAAI;;;AAC/G,gCAAmB;EAAE,OAAO,EAAE,IAAI;;;AAClC,4IAAoG;EAAC,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,uEAAuE;EAAE,KAAK,EAAE,OAAO;;;AACnO,kJAAwG;EAAE,KAAK,EAAE,OAAO;;;AACxH,gIAAuF;EAAC,MAAM,EAAE,iBAAiB;EAAE,UAAU,EAAE,uEAAuE;EAAE,KAAK,EAAE,OAAO;;;AACtN,sIAA6F;EAAE,KAAK,EAAE,OAAO;;;AAC7G,+IAAsG;EAAE,KAAK,EAAE,OAAO;;;AACtH,+IAAsG;EAAE,WAAW,EAAE,IAAI;;;AACzH,qJAA6G;EAAE,OAAO,EAAE,EAAE;EAAE,MAAM,EAAC,iBAAiB;EAAE,WAAW,EAAE,MAAM;;;AACzK,yIAAgG;EAAE,OAAO,EAAE,GAAG;EAAE,MAAM,EAAC,iBAAiB;EAAE,gBAAgB,EAAE,IAAI;;;AAChK,sBAAS;EAAE,KAAK,EAAE,IAAI;EAAE,MAAM,EAAE,IAAI;EAAE,gBAAgB,EAAE,0CAA0C;;;AAClG,yCAA4B;EAAC,gBAAgB,EAAE,0CAA0C;;;AACzF,wCAA2B;EAAC,gBAAgB,EAAE,0CAA0C;;;AACxF,wCAA2B;EAAE,gBAAgB,EAAE,0CAA0C;;;AACzF,8EAAmD;EAAC,gBAAgB,EAAE,0CAA0C;;;AAChH,uCAA0B;EAAC,gBAAgB,EAAE,0CAA0C;;;AACvF,0CAA6B;EAAC,gBAAgB,EAAE,0CAA0C;;;AAC1F,mFAAwD;EAAC,gBAAgB,EAAE,0CAA0C;;;AACrH,gCAAmB;EAAE,mBAAmB,EAAE,GAAG;;;AAC7C,iCAAoB;EAAE,mBAAmB,EAAE,OAAO;;;AAClD,gCAAmB;EAAE,mBAAmB,EAAE,OAAO;;;AACjD,iCAAoB;EAAE,mBAAmB,EAAE,OAAO;;;AAClD,gCAAmB;EAAE,mBAAmB,EAAE,OAAO;;;AACjD,iCAAoB;EAAE,mBAAmB,EAAE,OAAO;;;AAClD,gCAAmB;EAAE,mBAAmB,EAAE,OAAO;;;AACjD,iCAAoB;EAAE,mBAAmB,EAAE,QAAQ;;;AACnD,kCAAqB;EAAE,mBAAmB,EAAE,QAAQ;;;AACpD,kCAAqB;EAAE,mBAAmB,EAAE,QAAQ;;;AACpD,mCAAsB;EAAE,mBAAmB,EAAE,OAAO;;;AACpD,oCAAuB;EAAE,mBAAmB,EAAE,WAAW;;;AACzD,mCAAsB;EAAE,mBAAmB,EAAE,WAAW;;;AACxD,oCAAuB;EAAE,mBAAmB,EAAE,WAAW;;;AACzD,mCAAsB;EAAE,mBAAmB,EAAE,WAAW;;;AACxD,oCAAuB;EAAE,mBAAmB,EAAE,WAAW;;;AACzD,mCAAsB;EAAE,mBAAmB,EAAE,WAAW;;;AACxD,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,qCAAwB;EAAE,mBAAmB,EAAE,YAAY;;;AAC3D,qCAAwB;EAAE,mBAAmB,EAAE,YAAY;;;AAC3D,gCAAmB;EAAE,mBAAmB,EAAE,OAAO;;;AACjD,iCAAoB;EAAE,mBAAmB,EAAE,WAAW;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,WAAW;;;AACrD,iCAAoB;EAAE,mBAAmB,EAAE,WAAW;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,WAAW;;;AACrD,iCAAoB;EAAE,mBAAmB,EAAE,WAAW;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,WAAW;;;AACrD,iCAAoB;EAAE,mBAAmB,EAAE,YAAY;;;AACvD,kCAAqB;EAAE,mBAAmB,EAAE,YAAY;;;AACxD,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,kCAAqB;EAAE,mBAAmB,EAAE,YAAY;;;AACxD,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,oCAAuB;EAAE,mBAAmB,EAAE,YAAY;;;AAC1D,qCAAwB;EAAE,mBAAmB,EAAE,OAAO;;;AACtD,sCAAyB;EAAE,mBAAmB,EAAE,WAAW;;;AAC3D,qCAAwB;EAAE,mBAAmB,EAAE,WAAW;;;AAC1D,sCAAyB;EAAE,mBAAmB,EAAE,WAAW;;;AAC3D,qCAAwB;EAAE,mBAAmB,EAAE,WAAW;;;AAC1D,sCAAyB;EAAE,mBAAmB,EAAE,WAAW;;;AAC3D,qCAAwB;EAAE,mBAAmB,EAAE,WAAW;;;AAC1D,sCAAyB;EAAE,mBAAmB,EAAE,YAAY;;;AAC5D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,yCAA4B;EAAE,mBAAmB,EAAE,YAAY;;;AAC/D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,yCAA4B;EAAE,mBAAmB,EAAE,YAAY;;;AAC/D,yCAA4B;EAAE,mBAAmB,EAAE,YAAY;;;AAC/D,yCAA4B;EAAE,mBAAmB,EAAE,YAAY;;;AAC/D,yCAA4B;EAAE,mBAAmB,EAAE,YAAY;;;AAC/D,yCAA4B;EAAE,mBAAmB,EAAE,YAAY;;;AAC/D,2CAA8B;EAAE,mBAAmB,EAAE,OAAO;;;AAC5D,2CAA8B;EAAE,mBAAmB,EAAE,WAAW;;;AAChE,2CAA8B;EAAE,mBAAmB,EAAE,WAAW;;;AAChE,2CAA8B;EAAE,mBAAmB,EAAE,WAAW;;;AAChE,sCAAyB;EAAE,mBAAmB,EAAE,WAAW;;;AAC3D,sCAAyB;EAAE,mBAAmB,EAAE,WAAW;;;AAC3D,sCAAyB;EAAE,mBAAmB,EAAE,WAAW;;;AAC3D,sCAAyB;EAAE,mBAAmB,EAAE,YAAY;;;AAC5D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,8BAAiB;EAAE,mBAAmB,EAAE,OAAO;;;AAC/C,mCAAsB;EAAE,mBAAmB,EAAE,WAAW;;;AACxD,8BAAiB;EAAE,mBAAmB,EAAE,WAAW;;;AACnD,6BAAgB;EAAE,mBAAmB,EAAE,WAAW;;;AAClD,8BAAiB;EAAE,mBAAmB,EAAE,WAAW;;;AACnD,8BAAiB;EAAE,mBAAmB,EAAE,WAAW;;;AACnD,mCAAsB;EAAE,mBAAmB,EAAE,WAAW;;;AACxD,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,uCAA0B;EAAE,mBAAmB,EAAE,OAAO;;;AACxD,kCAAqB;EAAE,mBAAmB,EAAE,WAAW;;;AACvD,+BAAkB;EAAE,mBAAmB,EAAE,WAAW;;;AACpD,iCAAoB;EAAE,mBAAmB,EAAE,WAAW;;;AACtD,2BAAc;EAAE,mBAAmB,EAAE,WAAW;;;AAChD,kCAAqB;EAAE,mBAAmB,EAAE,WAAW;;;AACvD,gCAAmB;EAAE,mBAAmB,EAAE,WAAW;;;AACrD,+BAAkB;EAAE,mBAAmB,EAAE,YAAY;;;AACrD,8BAAiB;EAAE,mBAAmB,EAAE,YAAY;;;AACpD,6BAAgB;EAAE,mBAAmB,EAAE,YAAY;;;AACnD,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,6BAAgB;EAAE,mBAAmB,EAAE,YAAY;;;AACnD,+BAAkB;EAAE,mBAAmB,EAAE,YAAY;;;AACrD,+BAAkB;EAAE,mBAAmB,EAAE,YAAY;;;AACrD,0BAAa;EAAE,mBAAmB,EAAE,YAAY;;;AAChD,2BAAc;EAAE,mBAAmB,EAAE,QAAQ;;;AAC7C,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,+BAAkB;EAAE,mBAAmB,EAAE,YAAY;;;AACrD,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,6BAAgB;EAAE,mBAAmB,EAAE,YAAY;;;AACnD,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,iCAAoB;EAAE,mBAAmB,EAAE,aAAa;;;AACxD,6BAAgB;EAAE,mBAAmB,EAAE,aAAa;;;AACpD,8BAAiB;EAAE,mBAAmB,EAAE,aAAa;;;AACrD,6BAAgB;EAAE,mBAAmB,EAAE,aAAa;;;AACpD,6BAAgB;EAAE,mBAAmB,EAAE,aAAa;;;AACpD,2BAAc;EAAE,mBAAmB,EAAE,aAAa;;;AAClD,4BAAe;EAAE,mBAAmB,EAAE,aAAa;;;AACnD,2BAAc;EAAE,mBAAmB,EAAE,aAAa;;;AAClD,2BAAc;EAAE,mBAAmB,EAAE,aAAa;;;AAClD,6BAAgB;EAAE,mBAAmB,EAAE,QAAQ;;;AAC/C,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,iCAAoB;EAAE,mBAAmB,EAAE,YAAY;;;AACvD,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,iCAAoB;EAAE,mBAAmB,EAAE,YAAY;;;AACvD,0BAAa;EAAE,mBAAmB,EAAE,aAAa;;;AACjD,gCAAmB;EAAE,mBAAmB,EAAE,aAAa;;;AACvD,+BAAkB;EAAE,mBAAmB,EAAE,aAAa;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,aAAa;;;AACvD,2BAAc;EAAE,mBAAmB,EAAE,aAAa;;;AAClD,8BAAiB;EAAE,mBAAmB,EAAE,aAAa;;;AACrD,4BAAe;EAAE,mBAAmB,EAAE,aAAa;;;AACnD,4BAAe;EAAE,mBAAmB,EAAE,aAAa;;;AACnD,6BAAgB;EAAE,mBAAmB,EAAE,aAAa;;;AACpD,4BAAe;EAAE,mBAAmB,EAAE,QAAQ;;;AAC9C,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,6BAAgB;EAAE,mBAAmB,EAAE,YAAY;;;AACnD,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,6BAAgB;EAAE,mBAAmB,EAAE,YAAY;;;AACnD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,+BAAkB;EAAE,mBAAmB,EAAE,aAAa;;;AACtD,4BAAe;EAAE,mBAAmB,EAAE,aAAa;;;AACnD,4BAAe;EAAE,mBAAmB,EAAE,aAAa;;;AACnD,2BAAc;EAAE,mBAAmB,EAAE,QAAQ;;;AAC7C,4BAAe;EAAE,mBAAmB,EAAE,YAAY;;;AAClD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,+BAAkB;EAAE,mBAAmB,EAAE,YAAY;;;AACrD,iCAAoB;EAAE,mBAAmB,EAAE,YAAY;;;AACvD,iCAAoB;EAAE,mBAAmB,EAAE,YAAY;;;AACvD,2BAAc;EAAE,mBAAmB,EAAE,YAAY;;;AACjD,4BAAe;EAAE,mBAAmB,EAAE,aAAa;;;AACnD,iCAAoB;EAAE,mBAAmB,EAAE,aAAa;;;AACxD,gCAAmB;EAAE,mBAAmB,EAAE,aAAa;;;AACvD,4BAAe;EAAE,mBAAmB,EAAE,QAAQ;;;AAC9C,kCAAqB;EAAE,mBAAmB,EAAE,YAAY;;;AACxD,6BAAgB;EAAE,mBAAmB,EAAE,YAAY;;;AACnD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,gCAAmB;EAAE,mBAAmB,EAAE,YAAY;;;AACtD,kCAAqB;EAAE,mBAAmB,EAAE,QAAQ;;;AACpD,mCAAsB;EAAE,mBAAmB,EAAE,YAAY;;;AACzD,mCAAsB;EAAE,mBAAmB,EAAE,YAAY;;;AACzD,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,qCAAwB;EAAE,mBAAmB,EAAE,aAAa;;;AAC5D,qCAAwB;EAAE,mBAAmB,EAAE,aAAa;;;AAC5D,qCAAwB;EAAE,mBAAmB,EAAE,aAAa;;;AAC5D,qCAAwB;EAAE,mBAAmB,EAAE,aAAa;;;AAC5D,oCAAuB;EAAE,mBAAmB,EAAE,aAAa;;;AAC3D,qCAAwB;EAAE,mBAAmB,EAAE,aAAa;;;AAC5D,mCAAsB;EAAE,mBAAmB,EAAE,aAAa;;;AAC1D,uCAA0B;EAAE,mBAAmB,EAAE,QAAQ;;;AACzD,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,wCAA2B;EAAE,mBAAmB,EAAE,YAAY;;;AAC9D,2CAA8B;EAAE,mBAAmB,EAAE,QAAQ;;;AAC7D,6CAAgC;EAAE,mBAAmB,EAAE,YAAY;;;AACnE,0CAA6B;EAAE,mBAAmB,EAAE,YAAY;;;AAChE,4CAA+B;EAAE,mBAAmB,EAAE,YAAY;;;AAClE,4CAA+B;EAAE,mBAAmB,EAAE,YAAY;;;AAClE,uCAA0B;EAAE,mBAAmB,EAAE,YAAY;;;AAC7D,sHAA+D;EAAE,0BAA0B,EAAE,GAAG;EAAE,8BAA8B,EAAE,GAAG;EAAE,6BAA6B,EAAE,GAAG;EAAE,sBAAsB,EAAE,GAAG;;;AACtM,uHAAgE;EAAE,2BAA2B,EAAE,GAAG;EAAE,+BAA+B,EAAE,GAAG;EAAE,8BAA8B,EAAE,GAAG;EAAE,uBAAuB,EAAE,GAAG;;;AAC3M,yHAAkE;EAAE,6BAA6B,EAAE,GAAG;EAAE,iCAAiC,EAAE,GAAG;EAAE,gCAAgC,EAAE,GAAG;EAAE,yBAAyB,EAAE,GAAG;;;AACrN,0HAAmE;EAAE,8BAA8B,EAAE,GAAG;EAAE,kCAAkC,EAAE,GAAG;EAAE,iCAAiC,EAAE,GAAG;EAAE,0BAA0B,EAAE,GAAG;;;AAC1N,gCAAmB;EAAE,UAAU,EAAE,sEAAsE;EAAE,OAAO,EAAE,GAAG;EAAC,MAAM,EAAC,iBAAiB;;;AAC9I,+BAAkB;EAAE,MAAM,EAAE,aAAa;EAAE,OAAO,EAAE,GAAG;EAAE,UAAU,EAAE,sEAAsE;EAAE,OAAO,EAAE,GAAG;EAAC,MAAM,EAAC,iBAAiB;EAAE,kBAAkB,EAAE,GAAG;EAAE,oBAAoB,EAAE,GAAG;EAAE,qBAAqB,EAAE,GAAG;EAAE,aAAa,EAAE,GAAG;;;AACtR,4BAAe;EAAE,KAAK,EAAE,IAAI;EAAE,OAAO,EAAE,WAAW;EAAE,OAAO,EAAE,IAAI;;;AACjE,kDAAqC;EAAE,QAAQ,EAAC,QAAQ;EAAE,OAAO,EAAC,MAAM;;;AACxE,kGAAuE;EAAE,QAAQ,EAAC,QAAQ;EAAE,GAAG,EAAE,GAAG;EAAE,KAAK,EAAE,KAAK;EAAE,MAAM,EAAE,KAAK;;;AACjI,8GAAmF;EAAE,GAAG,EAAE,GAAG;;;AAC7F,gDAAmC;EAAE,IAAI,EAAC,GAAG;;;AAC7C,gDAAmC;EAAE,KAAK,EAAC,GAAG;;;AAC9C,sDAAyC;EAAE,IAAI,EAAC,GAAG;;;AACnD,sDAAyC;EAAE,KAAK,EAAC,GAAG;;;AACpD,4GAAiF;EAAE,OAAO,EAAE,KAAK;EAAE,QAAQ,EAAE,QAAQ;EAAE,IAAI,EAAE,GAAG;EAAE,WAAW,EAAE,IAAI;EAAE,GAAG,EAAE,GAAG;EAAE,UAAU,EAAE,IAAI;;;AAC/K,iDAAoC;EAAE,MAAM,EAAE,OAAO;EAAE,WAAW,EAAE,KAAK;EAAE,UAAU,EAAE,MAAM;;;AAC7F,wDAA2C;EAAE,SAAS,EAAC,GAAG;EAAE,MAAM,EAAC,KAAK;;;AACxE,4DAA+C;EAAC,KAAK,EAAE,IAAI;;;AAC3D;sDACyC;EAAE,KAAK,EAAE,GAAG;;;AACrD,kCAAqB;EAAC,KAAK,EAAE,IAAI;EAAE,SAAS,EAAE,IAAI;EAAE,eAAe,EAAE,QAAQ;EAAE,MAAM,EAAC,QAAQ;;;AAC9F,+BAAkB;EAAE,OAAO,EAAE,SAAS;EAAE,UAAU,EAAE,MAAM;EAAE,WAAW,EAAE,IAAI;EAAE,MAAM,EAAE,CAAC;;;AACxF,+BAAkB;EAAE,MAAM,EAAE,CAAC;EAAE,OAAO,EAAE,GAAG;;;AAC3C,uEAA4C;EAAE,OAAO,EAAE,KAAK;EAAE,OAAO,EAAE,IAAI;EAAE,UAAU,EAAE,KAAK;EAAE,eAAe,EAAE,IAAI;;;AACrH,sDAAyC;EAAE,gBAAgB,EAAE,IAAI;EAAE,MAAM,EAAE,UAAU;EAAE,OAAO,EAAC,MAAM;EAAE,WAAW,EAAE,CAAC;EAAE,YAAY,EAAE,CAAC;EAAE,aAAa,EAAE,CAAC;;;AACxJ,6DAAgD;EAAE,KAAK,EAAE,KAAK;EAAE,MAAM,EAAE,cAAc;EAAE,MAAM,EAAE,OAAO;EAAE,OAAO,EAAE,mBAAmB;EAAE,KAAK,EAAC,IAAI;EAAE,QAAQ,EAAC,OAAO;;;AACnK,mFAAsE;EAAE,KAAK,EAAC,IAAI;;;AAClF,gDAAmC;EAAE,KAAK,EAAC,IAAI;;;AAC/C,uDAA0C;EAAE,KAAK,EAAC,IAAI;;;AACtD,6DAAgD;EAAE,KAAK,EAAC,GAAG;EAAE,MAAM,EAAC,WAAW;;;AAC/E,yDAA4C;EAAE,KAAK,EAAC,GAAG;;;AACvD,yDAA4C;EAAE,KAAK,EAAC,KAAK;;;AACzD,yDAA4C;EAAE,KAAK,EAAC,GAAG;;;AACvD,kFAAqE;EAAE,iBAAiB,EAAC,CAAC;;;AAC1F,oFAAuE;EAAE,iBAAiB,EAAC,CAAC;;;AAC5F,4DAA+C;EAAE,KAAK,EAAC,IAAI;;;AAC3D,sCAAyB;EAAE,KAAK,EAAC,IAAI;EAAE,KAAK,EAAC,IAAI;EAAE,SAAS,EAAC,GAAG;;;AAChE,gCAAmB;EAClB,SAAS,EAAE,GAAG;;;AACd,oDAAoB;EAAE,KAAK,EAAE,GAAG;EAAE,IAAI,EAAE,IAAI;;;AAC5C,oDAAoB;EAAE,IAAI,EAAE,GAAG;EAAE,KAAK,EAAE,IAAI;;;AAC5C,0DAA0B;EAAE,KAAK,EAAE,GAAG;EAAE,IAAI,EAAE,IAAI;;;AAClD,0DAA0B;EAAE,IAAI,EAAE,GAAG;EAAE,KAAK,EAAE,IAAI;;;AAClD,0DAA0B;EAAE,KAAK,EAAC,KAAK;;;AACvC,iEAAiC;EAAE,KAAK,EAAE,IAAI;;;AAC9C,uFAAuD;EAAE,KAAK,EAAC,KAAK;;;AACpE,qDAAqB;EAAE,KAAK,EAAC,KAAK;;;AAClC,gFAAgD;EAAE,kBAAkB,EAAC,CAAC;EAAE,iBAAiB,EAAC,GAAG;;;AAC7F,kFAAkD;EAAE,kBAAkB,EAAC,CAAC;EAAE,iBAAiB,EAAC,GAAG;;;AAEhG,kCAAqB;EACpB,OAAO,EAAE,IAAI;;EACb,WAAW,EAAE,KAAK;;EAClB,QAAQ,EAAE,QAAQ;;EAClB,OAAO,EAAE,EAAE;;EACX,MAAM,EAAE,MAAM;;EACd,GAAG,EAAE,IAAI;;EACT,IAAI,EAAE,IAAI;;EACV,KAAK,EAAE,KAAK;;EACZ,MAAM,EAAE,KAAK",
4
+ "sources": ["sass/partials/_main_wrap.scss","sass/partials/_variables.scss","sass/partials/_mixins.scss","sass/partials/_timepicker.scss","sass/partials/_post_metaboxes.scss","sass/partials/_misc.scss","sass/partials/_sidebar_placements.scss","sass/partials/_collapsible_ui.scss","sass/partials/_jquery_ui.scss"],
5
+ "names": [],
6
+ "file": "cmb2.css"
7
+ }
cmb2/css/cmb2.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .cmb2-wrap{margin:0}.cmb2-wrap input,.cmb2-wrap textarea{font-size:14px;max-width:100%;padding:5px}.cmb2-wrap input[type=text].cmb2-oembed{width:100%}.cmb2-wrap textarea{width:500px}.cmb2-wrap textarea.cmb2-textarea-code{font-family:"Courier 10 Pitch",Courier,monospace;line-height:16px}.cmb2-wrap input.cmb2-text-small,.cmb2-wrap input.cmb2-timepicker{width:100px}.cmb2-wrap input.cmb2-text-money{width:90px}.cmb2-wrap input.cmb2-text-medium{width:230px}.cmb2-wrap input.cmb2-upload-file{width:65%}.cmb2-wrap input.ed_button{padding:2px 4px}.cmb2-wrap input:not([type=hidden])+.button,.cmb2-wrap input:not([type=hidden])+input,.cmb2-wrap input:not([type=hidden])+select{margin-left:20px}.cmb2-wrap ul{margin:0}.cmb2-wrap li{font-size:14px;line-height:16px;margin:1px 0 5px}.cmb2-wrap select{font-size:14px;margin-top:3px}.cmb2-wrap input:focus,.cmb2-wrap textarea:focus{background:#fffff8}.cmb2-wrap input[type=checkbox],.cmb2-wrap input[type=radio]{margin:0 5px 0 0;padding:0}.cmb2-wrap .button,.cmb2-wrap button{white-space:nowrap}.cmb2-wrap .mceLayout{border:1px solid #e9e9e9!important}.cmb2-wrap .mceIframeContainer{background:#fff}.cmb2-wrap .meta_mce{width:97%}.cmb2-wrap .meta_mce textarea{width:100%}.cmb2-wrap .wp-color-result,.cmb2-wrap .wp-picker-input-wrap{vertical-align:middle}.cmb2-wrap .wp-color-result,.cmb2-wrap .wp-picker-container{margin:0 10px 0 0}.cmb2-wrap .cmb-row{margin:0}.cmb2-wrap .cmb-row:after{content:'';clear:both;display:block;width:100%}.cmb2-wrap .cmb-row.cmb-repeat-row{padding:1.8em 0 0}.cmb2-wrap .cmb-row.cmb-repeat-row:first-of-type{padding:0}.cmb2-wrap .cmb-row.cmb-repeat .cmb2-metabox-description{padding-top:0;padding-bottom:1.8em}.cmb2-metabox{clear:both;margin:0}.cmb2-metabox .cmb-field-list>.cmb-row:first-of-type>.cmb-td,.cmb2-metabox .cmb-field-list>.cmb-row:first-of-type>.cmb-th,.cmb2-metabox>.cmb-row:first-of-type>.cmb-td,.cmb2-metabox>.cmb-row:first-of-type>.cmb-th{border:0}.cmb2-metabox>.cmb-row .cmb-repeat-table .cmb-row>.cmb-td{padding-right:20px;box-sizing:border-box;float:left}.cmb-add-row{margin:1.8em 0 0}.cmb-nested .cmb-td,.cmb-repeatable-group .cmb-th,.cmb-repeatable-group:first-of-type{border:0}.cmb-repeatable-group:last-of-type,.cmb-row:last-of-type,.cmb2-wrap .cmb-row:last-of-type{border-bottom:0}.cmb-repeatable-grouping{border:1px solid #e9e9e9;padding:0 1em;max-width:1000px}.cmb-repeatable-grouping.cmb-row{margin:0 0 .8em}.cmb-th{color:#222;float:left;font-weight:600;line-height:1.3;padding:20px 10px 20px 0;vertical-align:top;width:200px}.cmb-td{line-height:1.3;max-width:100%;padding:15px 10px;vertical-align:middle}.cmb-type-title .cmb-td{padding:0}.cmb-th label{display:block;padding:5px 0}.cmb-th+.cmb-td{float:left}.cmb-td .cmb-td{padding-bottom:1em}.cmb-remove-row{text-align:right}.empty-row.hidden{display:none}.cmb-repeatable-group .cmb-th{padding:5px}.cmb-repeatable-group .cmb-group-title{background-color:#e9e9e9;padding:8px 12px 8px 2.2em;margin:0 -1em;min-height:1.5em;font-size:14px;line-height:1.4}.cmb-repeatable-group .cmb-group-title h4{border:0;margin:0;font-size:1.2em;font-weight:500;padding:.5em .75em}.cmb-repeatable-group .cmb-group-title .cmb-th{display:block;width:100%}.cmb-repeatable-group .cmb-group-description .cmb-th{font-size:1.2em;display:block;float:none;padding-bottom:1em;text-align:left;width:100%}.cmb-repeatable-group .cmb-group-description .cmb-th label{display:block;margin-top:0;padding-bottom:5px}.cmb-repeatable-group .cmb-group-description .cmb-th label:after{border-bottom:1px solid #e9e9e9;content:'';clear:both;display:block;padding-top:.4em}.cmb-repeatable-group .cmb-shift-rows{font-size:1em;margin-right:1em;text-decoration:none}.cmb-repeatable-group .cmb-shift-rows .dashicons{font-size:1.5em;height:1.5em;line-height:1.2em;width:1em}.cmb-repeatable-group .cmb-shift-rows .dashicons.dashicons-arrow-down-alt2{line-height:1.3em}.cmb-repeatable-group .cmb2-upload-button{float:right}p.cmb2-metabox-description{color:#aaa;font-style:italic;margin:0;padding-top:.5em}span.cmb2-metabox-description{color:#aaa;font-style:italic}.cmb2-metabox-title{margin:0 0 5px;padding:5px 0 0;font-size:14px}.cmb-inline ul{padding:4px 0 0}.cmb-inline li{display:inline-block;padding-right:18px}.cmb-type-textarea-code pre{margin:0}.cmb2-media-status .img-status{clear:none;display:inline-block;float:left;margin-right:10px;width:auto}.cmb2-media-status .img-status img{max-width:350px}.cmb2-media-status .embed-status,.cmb2-media-status .img-status img{background:#fff;border:1px solid #e9e9e9;border-radius:2px;-moz-border-radius:2px;margin:15px 0 0;padding:5px}.cmb2-media-status .embed-status{float:left;max-width:800px}.cmb2-media-status .embed-status,.cmb2-media-status .img-status{position:relative}.cmb2-media-status .embed-status .cmb2-remove-file-button,.cmb2-media-status .img-status .cmb2-remove-file-button{background:url(../images/ico-delete.png);height:16px;left:-5px;position:absolute;text-indent:-9999px;top:-5px;width:16px}.cmb2-media-status .img-status .cmb2-remove-file-button{top:10px}.cmb2-media-status .file-status>span,.cmb2-media-status .img-status img{cursor:pointer}.cmb-type-file-list .cmb2-media-status .img-status{clear:none;float:left;margin-right:10px;width:auto}.cmb-attach-list li{clear:both;display:inline-block;margin-bottom:25px;width:100%}.cmb-attach-list li img{cursor:move;float:left;margin-right:10px}.cmb2-remove-wrapper{margin:0}.child-cmb2 .cmb-th{text-align:left}div.time-picker{background:#fff;border:1px solid #aaa;height:191px;margin:0;position:absolute;overflow:auto;width:6em;z-index:99}div.time-picker ul{list-style-type:none;margin:0;padding:0}div.time-picker li{cursor:pointer;margin-bottom:0;font-family:sans-serif;font-size:14px;padding:4px 3px}div.time-picker li.selected{background:#0063ce;color:#fff}div.time-picker-12hours{width:8em}#poststuff .cmb-group-title{margin-left:-1em;margin-right:-1em;padding-left:2.2em;min-height:1.5em}.cmb-repeat-group-wrap .cmb2-wrap,.postbox-container .cmb2-wrap{margin:0}.cmb-repeat-group-wrap .cmb2-wrap>.cmb-field-list>.cmb-row,.postbox-container .cmb2-wrap>.cmb-field-list>.cmb-row{padding:1.8em 0}.cmb-repeat-group-wrap .cmb2-wrap input[type=text].cmb2-oembed,.postbox-container .cmb2-wrap input[type=text].cmb2-oembed{width:100%}.cmb-repeat-group-wrap .cmb-row,.postbox-container .cmb-row{padding:0 0 1.8em;margin:0 0 .8em}.cmb-repeat-group-wrap .cmb-row .cmbhandle,.postbox-container .cmb-row .cmbhandle{right:-1em;position:relative}.cmb-repeat-group-wrap .cmb-repeatable-grouping,.postbox-container .cmb-repeatable-grouping{padding:0 1em;max-width:100%;min-width:1px!important}.cmb-repeat-group-wrap .cmb-repeatable-group>.cmb-row,.postbox-container .cmb-repeatable-group>.cmb-row{padding-bottom:0}.cmb-repeat-group-wrap .cmb-th,.postbox-container .cmb-th{width:18%;padding:0 2% 0 0}.cmb-repeat-group-wrap .cmb-td,.postbox-container .cmb-td{margin-bottom:0;padding:0;line-height:1.3}.cmb-repeat-group-wrap .cmb-repeat-row .cmb-td,.postbox-container .cmb-repeat-row .cmb-td{padding-bottom:1.8em}.cmb-repeat-group-wrap .cmb-th+.cmb-td,.postbox-container .cmb-th+.cmb-td{width:80%;float:right}.cmb-repeat-group-wrap .cmb-repeatable-group:not(:last-of-type),.cmb-repeat-group-wrap .cmb-row:not(:last-of-type),.postbox-container .cmb-repeatable-group:not(:last-of-type),.postbox-container .cmb-row:not(:last-of-type){border-bottom:1px solid #e9e9e9}.cmb-repeat-group-wrap .cmb-remove-field-row,.cmb-repeat-group-wrap .cmb-repeat-group-field,.postbox-container .cmb-remove-field-row,.postbox-container .cmb-repeat-group-field{padding-top:1.8em}.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody,.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody,.postbox-container .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody,.postbox-container .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody{display:table;width:100%}.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text,.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text,.postbox-container .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text,.postbox-container .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody input.regular-text{width:100%}.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row),.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row),.postbox-container .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row),.postbox-container .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(.hidden):not(.empty-row){display:table-row}.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td,.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td,.postbox-container .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td,.postbox-container .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td{display:table-cell;float:none;width:100%}.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td,.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td,.postbox-container .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td,.postbox-container .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-row:not(:first-of-type) .cmb-td{padding-top:1.8em}.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row,.cmb-repeat-group-wrap .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row,.postbox-container .cmb2-metabox>.cmb-row .cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row,.postbox-container .cmb2-metabox>.cmb-row.table-layout .cmb-repeat-table .cmb-tbody .cmb-td.cmb-remove-row{padding-right:0}#poststuff .cmb-repeatable-group h2{margin:0}.edit-tags-php .cmb2-metabox-title,.profile-php .cmb2-metabox-title,.user-edit-php .cmb2-metabox-title{font-size:1.4em}.postbox .cmb-spinner{float:left}#side-sortables .cmb2-wrap>.cmb-field-list>.cmb-row,.inner-sidebar .cmb2-wrap>.cmb-field-list>.cmb-row{padding:1.4em 0}#side-sortables .cmb2-wrap input[type=text]:not(.wp-color-picker),.inner-sidebar .cmb2-wrap input[type=text]:not(.wp-color-picker){width:100%}#side-sortables .cmb2-wrap input+input:not(.wp-picker-clear),#side-sortables .cmb2-wrap input+select,.inner-sidebar .cmb2-wrap input+input:not(.wp-picker-clear),.inner-sidebar .cmb2-wrap input+select{margin-left:0;margin-top:1em;display:block}#side-sortables .cmb2-wrap label,.inner-sidebar .cmb2-wrap label{display:block;font-weight:700;padding:0 0 5px}#side-sortables .cmb-repeatable-group,.inner-sidebar .cmb-repeatable-group{border-bottom:1px solid #e9e9e9}#side-sortables .cmb-repeat-group-wrap>.cmb-td>.cmb-repeatable-group,.inner-sidebar .cmb-repeat-group-wrap>.cmb-td>.cmb-repeatable-group{border-bottom:0;margin-bottom:-1.4em}#side-sortables .cmb-td,#side-sortables .cmb-th,#side-sortables .cmb-th+.cmb-td,.inner-sidebar .cmb-td,.inner-sidebar .cmb-th,.inner-sidebar .cmb-th+.cmb-td{width:100%;display:block;float:none}#side-sortables .closed .inside,.inner-sidebar .closed .inside{display:none}#side-sortables .cmb-td .cmb-td,.inner-sidebar .cmb-td .cmb-td{padding-bottom:1em}#side-sortables .cmb-th,.inner-sidebar .cmb-th{display:block;float:none;padding-bottom:1em;text-align:left;width:100%;padding-left:0;padding-right:0}#side-sortables .cmb-th label,.inner-sidebar .cmb-th label{display:block;margin-top:0;padding-bottom:5px}#side-sortables .cmb-th label:after,.inner-sidebar .cmb-th label:after{border-bottom:1px solid #e9e9e9;content:'';clear:both;display:block;padding-top:.4em}#side-sortables .cmb-th label,.inner-sidebar .cmb-th label{font-size:14px;line-height:1.4em}#side-sortables .cmb-group-description .cmb-th,.inner-sidebar .cmb-group-description .cmb-th{padding-top:0}#side-sortables .cmb-group-description .cmb2-metabox-description,#side-sortables .cmb-group-title .cmb-th,.inner-sidebar .cmb-group-description .cmb2-metabox-description,.inner-sidebar .cmb-group-title .cmb-th{padding:0}#side-sortables .cmb-repeatable-grouping+.cmb-repeatable-grouping,.inner-sidebar .cmb-repeatable-grouping+.cmb-repeatable-grouping{margin-top:1em}#side-sortables .cmb2-media-status .embed-status img,#side-sortables .cmb2-media-status .img-status img,.inner-sidebar .cmb2-media-status .embed-status img,.inner-sidebar .cmb2-media-status .img-status img{max-width:90%;height:auto}#side-sortables .cmb2-list label,.inner-sidebar .cmb2-list label{display:inline;font-weight:400}#side-sortables .cmb2-metabox-description,.inner-sidebar .cmb2-metabox-description{display:block;padding:7px 0 0}#side-sortables .cmb-type-checkbox .cmb-td label,#side-sortables .cmb-type-checkbox .cmb2-metabox-description,.inner-sidebar .cmb-type-checkbox .cmb-td label,.inner-sidebar .cmb-type-checkbox .cmb2-metabox-description{font-weight:400;display:inline}#side-sortables .cmb-row .cmb2-metabox-description,.inner-sidebar .cmb-row .cmb2-metabox-description{padding-bottom:1.8em}#side-sortables .cmb2-metabox-title,.inner-sidebar .cmb2-metabox-title{font-size:1.2em;font-style:italic}#side-sortables .cmb-remove-row,.inner-sidebar .cmb-remove-row{clear:both;padding-top:12px;padding-bottom:0}#side-sortables .cmb-type-colorpicker .cmb-repeat-row .cmb-td,.inner-sidebar .cmb-type-colorpicker .cmb-repeat-row .cmb-td{width:auto;clear:none;float:left;padding-top:0}#side-sortables .cmb-type-colorpicker .cmb-repeat-row .cmb-td.cmb-remove-row,.inner-sidebar .cmb-type-colorpicker .cmb-repeat-row .cmb-td.cmb-remove-row{float:right;margin:0}#side-sortables .cmb2-upload-button,.inner-sidebar .cmb2-upload-button{clear:both;margin-top:12px}.cmb2-metabox .cmb-repeat-group-wrap{max-width:1000px}.cmb2-metabox .cmbhandle{color:#aaa;float:right;width:27px;height:30px;cursor:pointer;right:-1em;position:relative}.cmb2-metabox .cmbhandle:before{content:'\f142';right:12px;font:400 20px/1 dashicons;speak:none;display:inline-block;padding:8px 10px;top:0;position:relative;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-decoration:none!important}.cmb2-metabox .postbox.closed .cmbhandle:before{content:'\f140'}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row{-webkit-appearance:none!important;background:none!important;border:none!important;position:absolute;left:0;top:.5em;line-height:1em;cursor:pointer}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]){color:#a00}.cmb2-metabox button.dashicons-before.dashicons-no-alt.cmb-remove-group-row:not([disabled]):hover{color:red}.cmb2-element .ui-helper-hidden{display:none}.cmb2-element .ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.cmb2-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}.cmb2-element .ui-helper-clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.cmb2-element * html .ui-helper-clearfix{height:1%}.cmb2-element .ui-helper-clearfix{display:block}.cmb2-element .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.cmb2-element .ui-state-disabled{cursor:default!important}.cmb2-element .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.cmb2-element .ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.cmb2-element .ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.cmb2-element .ui-widget .ui-widget{font-size:1em}.cmb2-element .ui-widget button,.cmb2-element .ui-widget input,.cmb2-element .ui-widget select,.cmb2-element .ui-widget textarea{font-family:Verdana,Arial,sans-serif;font-size:1em}.cmb2-element .ui-widget-content{border:1px solid #aaa;background:#fff url(../images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.cmb2-element .ui-widget-content a{color:#222}.cmb2-element .ui-widget-header{border:1px solid #aaa;background:#ccc url(../images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:700}.cmb2-element .ui-widget-header a{color:#222}.cmb2-element .ui-state-default,.cmb2-element .ui-widget-content .ui-state-default,.cmb2-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:400;color:#555}.cmb2-element .ui-state-default a,.cmb2-element .ui-state-default a:link,.cmb2-element .ui-state-default a:visited{color:#555;text-decoration:none}.cmb2-element .ui-state-focus,.cmb2-element .ui-state-hover,.cmb2-element .ui-widget-content .ui-state-focus,.cmb2-element .ui-widget-content .ui-state-hover,.cmb2-element .ui-widget-header .ui-state-focus,.cmb2-element .ui-widget-header .ui-state-hover{border:1px solid #999;background:#dadada url(../images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.cmb2-element .ui-state-hover a,.cmb2-element .ui-state-hover a:hover{color:#212121;text-decoration:none}.cmb2-element .ui-state-active,.cmb2-element .ui-widget-content .ui-state-active,.cmb2-element .ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(../images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121}.cmb2-element .ui-state-active a,.cmb2-element .ui-state-active a:link,.cmb2-element .ui-state-active a:visited{color:#212121;text-decoration:none}.cmb2-element .ui-widget :active{outline:0}.cmb2-element .ui-state-highlight,.cmb2-element .ui-widget-content .ui-state-highlight,.cmb2-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}.cmb2-element .ui-state-highlight a,.cmb2-element .ui-widget-content .ui-state-highlight a,.cmb2-element .ui-widget-header .ui-state-highlight a{color:#363636}.cmb2-element .ui-state-error,.cmb2-element .ui-widget-content .ui-state-error,.cmb2-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}.cmb2-element .ui-state-error a,.cmb2-element .ui-state-error-text,.cmb2-element .ui-widget-content .ui-state-error a,.cmb2-element .ui-widget-content .ui-state-error-text,.cmb2-element .ui-widget-header .ui-state-error a,.cmb2-element .ui-widget-header .ui-state-error-text{color:#cd0a0a}.cmb2-element .ui-priority-primary,.cmb2-element .ui-widget-content .ui-priority-primary,.cmb2-element .ui-widget-header .ui-priority-primary{font-weight:700}.cmb2-element .ui-priority-secondary,.cmb2-element .ui-widget-content .ui-priority-secondary,.cmb2-element .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.cmb2-element .ui-state-disabled,.cmb2-element .ui-widget-content .ui-state-disabled,.cmb2-element .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.cmb2-element .ui-icon{width:16px;height:16px;background-image:url(../images/ui-icons_222222_256x240.png)}.cmb2-element .ui-widget-content .ui-icon,.cmb2-element .ui-widget-header .ui-icon{background-image:url(../images/ui-icons_222222_256x240.png)}.cmb2-element .ui-state-default .ui-icon{background-image:url(../images/ui-icons_888888_256x240.png)}.cmb2-element .ui-state-active .ui-icon,.cmb2-element .ui-state-focus .ui-icon,.cmb2-element .ui-state-hover .ui-icon{background-image:url(../images/ui-icons_454545_256x240.png)}.cmb2-element .ui-state-highlight .ui-icon{background-image:url(../images/ui-icons_2e83ff_256x240.png)}.cmb2-element .ui-state-error .ui-icon,.cmb2-element .ui-state-error-text .ui-icon{background-image:url(../images/ui-icons_cd0a0a_256x240.png)}.cmb2-element .ui-icon-carat-1-n{background-position:0 0}.cmb2-element .ui-icon-carat-1-ne{background-position:-16px 0}.cmb2-element .ui-icon-carat-1-e{background-position:-32px 0}.cmb2-element .ui-icon-carat-1-se{background-position:-48px 0}.cmb2-element .ui-icon-carat-1-s{background-position:-64px 0}.cmb2-element .ui-icon-carat-1-sw{background-position:-80px 0}.cmb2-element .ui-icon-carat-1-w{background-position:-96px 0}.cmb2-element .ui-icon-carat-1-nw{background-position:-112px 0}.cmb2-element .ui-icon-carat-2-n-s{background-position:-128px 0}.cmb2-element .ui-icon-carat-2-e-w{background-position:-144px 0}.cmb2-element .ui-icon-triangle-1-n{background-position:0 -16px}.cmb2-element .ui-icon-triangle-1-ne{background-position:-16px -16px}.cmb2-element .ui-icon-triangle-1-e{background-position:-32px -16px}.cmb2-element .ui-icon-triangle-1-se{background-position:-48px -16px}.cmb2-element .ui-icon-triangle-1-s{background-position:-64px -16px}.cmb2-element .ui-icon-triangle-1-sw{background-position:-80px -16px}.cmb2-element .ui-icon-triangle-1-w{background-position:-96px -16px}.cmb2-element .ui-icon-triangle-1-nw{background-position:-112px -16px}.cmb2-element .ui-icon-triangle-2-n-s{background-position:-128px -16px}.cmb2-element .ui-icon-triangle-2-e-w{background-position:-144px -16px}.cmb2-element .ui-icon-arrow-1-n{background-position:0 -32px}.cmb2-element .ui-icon-arrow-1-ne{background-position:-16px -32px}.cmb2-element .ui-icon-arrow-1-e{background-position:-32px -32px}.cmb2-element .ui-icon-arrow-1-se{background-position:-48px -32px}.cmb2-element .ui-icon-arrow-1-s{background-position:-64px -32px}.cmb2-element .ui-icon-arrow-1-sw{background-position:-80px -32px}.cmb2-element .ui-icon-arrow-1-w{background-position:-96px -32px}.cmb2-element .ui-icon-arrow-1-nw{background-position:-112px -32px}.cmb2-element .ui-icon-arrow-2-n-s{background-position:-128px -32px}.cmb2-element .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.cmb2-element .ui-icon-arrow-2-e-w{background-position:-160px -32px}.cmb2-element .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.cmb2-element .ui-icon-arrowstop-1-n{background-position:-192px -32px}.cmb2-element .ui-icon-arrowstop-1-e{background-position:-208px -32px}.cmb2-element .ui-icon-arrowstop-1-s{background-position:-224px -32px}.cmb2-element .ui-icon-arrowstop-1-w{background-position:-240px -32px}.cmb2-element .ui-icon-arrowthick-1-n{background-position:0 -48px}.cmb2-element .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.cmb2-element .ui-icon-arrowthick-1-e{background-position:-32px -48px}.cmb2-element .ui-icon-arrowthick-1-se{background-position:-48px -48px}.cmb2-element .ui-icon-arrowthick-1-s{background-position:-64px -48px}.cmb2-element .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.cmb2-element .ui-icon-arrowthick-1-w{background-position:-96px -48px}.cmb2-element .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.cmb2-element .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.cmb2-element .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.cmb2-element .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.cmb2-element .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.cmb2-element .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.cmb2-element .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.cmb2-element .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.cmb2-element .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.cmb2-element .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.cmb2-element .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.cmb2-element .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.cmb2-element .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.cmb2-element .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.cmb2-element .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.cmb2-element .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.cmb2-element .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.cmb2-element .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.cmb2-element .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.cmb2-element .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.cmb2-element .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.cmb2-element .ui-icon-arrow-4{background-position:0 -80px}.cmb2-element .ui-icon-arrow-4-diag{background-position:-16px -80px}.cmb2-element .ui-icon-extlink{background-position:-32px -80px}.cmb2-element .ui-icon-newwin{background-position:-48px -80px}.cmb2-element .ui-icon-refresh{background-position:-64px -80px}.cmb2-element .ui-icon-shuffle{background-position:-80px -80px}.cmb2-element .ui-icon-transfer-e-w{background-position:-96px -80px}.cmb2-element .ui-icon-transferthick-e-w{background-position:-112px -80px}.cmb2-element .ui-icon-folder-collapsed{background-position:0 -96px}.cmb2-element .ui-icon-folder-open{background-position:-16px -96px}.cmb2-element .ui-icon-document{background-position:-32px -96px}.cmb2-element .ui-icon-document-b{background-position:-48px -96px}.cmb2-element .ui-icon-note{background-position:-64px -96px}.cmb2-element .ui-icon-mail-closed{background-position:-80px -96px}.cmb2-element .ui-icon-mail-open{background-position:-96px -96px}.cmb2-element .ui-icon-suitcase{background-position:-112px -96px}.cmb2-element .ui-icon-comment{background-position:-128px -96px}.cmb2-element .ui-icon-person{background-position:-144px -96px}.cmb2-element .ui-icon-print{background-position:-160px -96px}.cmb2-element .ui-icon-trash{background-position:-176px -96px}.cmb2-element .ui-icon-locked{background-position:-192px -96px}.cmb2-element .ui-icon-unlocked{background-position:-208px -96px}.cmb2-element .ui-icon-bookmark{background-position:-224px -96px}.cmb2-element .ui-icon-tag{background-position:-240px -96px}.cmb2-element .ui-icon-home{background-position:0 -112px}.cmb2-element .ui-icon-flag{background-position:-16px -112px}.cmb2-element .ui-icon-calendar{background-position:-32px -112px}.cmb2-element .ui-icon-cart{background-position:-48px -112px}.cmb2-element .ui-icon-pencil{background-position:-64px -112px}.cmb2-element .ui-icon-clock{background-position:-80px -112px}.cmb2-element .ui-icon-disk{background-position:-96px -112px}.cmb2-element .ui-icon-calculator{background-position:-112px -112px}.cmb2-element .ui-icon-zoomin{background-position:-128px -112px}.cmb2-element .ui-icon-zoomout{background-position:-144px -112px}.cmb2-element .ui-icon-search{background-position:-160px -112px}.cmb2-element .ui-icon-wrench{background-position:-176px -112px}.cmb2-element .ui-icon-gear{background-position:-192px -112px}.cmb2-element .ui-icon-heart{background-position:-208px -112px}.cmb2-element .ui-icon-star{background-position:-224px -112px}.cmb2-element .ui-icon-link{background-position:-240px -112px}.cmb2-element .ui-icon-cancel{background-position:0 -128px}.cmb2-element .ui-icon-plus{background-position:-16px -128px}.cmb2-element .ui-icon-plusthick{background-position:-32px -128px}.cmb2-element .ui-icon-minus{background-position:-48px -128px}.cmb2-element .ui-icon-minusthick{background-position:-64px -128px}.cmb2-element .ui-icon-close{background-position:-80px -128px}.cmb2-element .ui-icon-closethick{background-position:-96px -128px}.cmb2-element .ui-icon-key{background-position:-112px -128px}.cmb2-element .ui-icon-lightbulb{background-position:-128px -128px}.cmb2-element .ui-icon-scissors{background-position:-144px -128px}.cmb2-element .ui-icon-clipboard{background-position:-160px -128px}.cmb2-element .ui-icon-copy{background-position:-176px -128px}.cmb2-element .ui-icon-contact{background-position:-192px -128px}.cmb2-element .ui-icon-image{background-position:-208px -128px}.cmb2-element .ui-icon-video{background-position:-224px -128px}.cmb2-element .ui-icon-script{background-position:-240px -128px}.cmb2-element .ui-icon-alert{background-position:0 -144px}.cmb2-element .ui-icon-info{background-position:-16px -144px}.cmb2-element .ui-icon-notice{background-position:-32px -144px}.cmb2-element .ui-icon-help{background-position:-48px -144px}.cmb2-element .ui-icon-check{background-position:-64px -144px}.cmb2-element .ui-icon-bullet{background-position:-80px -144px}.cmb2-element .ui-icon-radio-off{background-position:-96px -144px}.cmb2-element .ui-icon-radio-on{background-position:-112px -144px}.cmb2-element .ui-icon-pin-w{background-position:-128px -144px}.cmb2-element .ui-icon-pin-s{background-position:-144px -144px}.cmb2-element .ui-icon-play{background-position:0 -160px}.cmb2-element .ui-icon-pause{background-position:-16px -160px}.cmb2-element .ui-icon-seek-next{background-position:-32px -160px}.cmb2-element .ui-icon-seek-prev{background-position:-48px -160px}.cmb2-element .ui-icon-seek-end{background-position:-64px -160px}.cmb2-element .ui-icon-seek-first,.cmb2-element .ui-icon-seek-start{background-position:-80px -160px}.cmb2-element .ui-icon-stop{background-position:-96px -160px}.cmb2-element .ui-icon-eject{background-position:-112px -160px}.cmb2-element .ui-icon-volume-off{background-position:-128px -160px}.cmb2-element .ui-icon-volume-on{background-position:-144px -160px}.cmb2-element .ui-icon-power{background-position:0 -176px}.cmb2-element .ui-icon-signal-diag{background-position:-16px -176px}.cmb2-element .ui-icon-signal{background-position:-32px -176px}.cmb2-element .ui-icon-battery-0{background-position:-48px -176px}.cmb2-element .ui-icon-battery-1{background-position:-64px -176px}.cmb2-element .ui-icon-battery-2{background-position:-80px -176px}.cmb2-element .ui-icon-battery-3{background-position:-96px -176px}.cmb2-element .ui-icon-circle-plus{background-position:0 -192px}.cmb2-element .ui-icon-circle-minus{background-position:-16px -192px}.cmb2-element .ui-icon-circle-close{background-position:-32px -192px}.cmb2-element .ui-icon-circle-triangle-e{background-position:-48px -192px}.cmb2-element .ui-icon-circle-triangle-s{background-position:-64px -192px}.cmb2-element .ui-icon-circle-triangle-w{background-position:-80px -192px}.cmb2-element .ui-icon-circle-triangle-n{background-position:-96px -192px}.cmb2-element .ui-icon-circle-arrow-e{background-position:-112px -192px}.cmb2-element .ui-icon-circle-arrow-s{background-position:-128px -192px}.cmb2-element .ui-icon-circle-arrow-w{background-position:-144px -192px}.cmb2-element .ui-icon-circle-arrow-n{background-position:-160px -192px}.cmb2-element .ui-icon-circle-zoomin{background-position:-176px -192px}.cmb2-element .ui-icon-circle-zoomout{background-position:-192px -192px}.cmb2-element .ui-icon-circle-check{background-position:-208px -192px}.cmb2-element .ui-icon-circlesmall-plus{background-position:0 -208px}.cmb2-element .ui-icon-circlesmall-minus{background-position:-16px -208px}.cmb2-element .ui-icon-circlesmall-close{background-position:-32px -208px}.cmb2-element .ui-icon-squaresmall-plus{background-position:-48px -208px}.cmb2-element .ui-icon-squaresmall-minus{background-position:-64px -208px}.cmb2-element .ui-icon-squaresmall-close{background-position:-80px -208px}.cmb2-element .ui-icon-grip-dotted-vertical{background-position:0 -224px}.cmb2-element .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.cmb2-element .ui-icon-grip-solid-vertical{background-position:-32px -224px}.cmb2-element .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.cmb2-element .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.cmb2-element .ui-icon-grip-diagonal-se{background-position:-80px -224px}.cmb2-element .ui-corner-all,.cmb2-element .ui-corner-left,.cmb2-element .ui-corner-tl,.cmb2-element .ui-corner-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.cmb2-element .ui-corner-all,.cmb2-element .ui-corner-right,.cmb2-element .ui-corner-top,.cmb2-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}.cmb2-element .ui-corner-all,.cmb2-element .ui-corner-bl,.cmb2-element .ui-corner-bottom,.cmb2-element .ui-corner-left{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.cmb2-element .ui-corner-all,.cmb2-element .ui-corner-bottom,.cmb2-element .ui-corner-br,.cmb2-element .ui-corner-right{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.cmb2-element .ui-widget-overlay{background:#aaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.cmb2-element .ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.cmb2-element .ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.cmb2-element .ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.cmb2-element .ui-datepicker .ui-datepicker-next,.cmb2-element .ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.cmb2-element .ui-datepicker .ui-datepicker-next-hover,.cmb2-element .ui-datepicker .ui-datepicker-prev-hover{top:1px}.cmb2-element .ui-datepicker .ui-datepicker-prev{left:2px}.cmb2-element .ui-datepicker .ui-datepicker-next{right:2px}.cmb2-element .ui-datepicker .ui-datepicker-prev-hover{left:1px}.cmb2-element .ui-datepicker .ui-datepicker-next-hover{right:1px}.cmb2-element .ui-datepicker .ui-datepicker-next span,.cmb2-element .ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.cmb2-element .ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.cmb2-element .ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.cmb2-element .ui-datepicker select.ui-datepicker-month-year{width:100%}.cmb2-element .ui-datepicker select.ui-datepicker-month,.cmb2-element .ui-datepicker select.ui-datepicker-year{width:49%}.cmb2-element .ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.cmb2-element .ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.cmb2-element .ui-datepicker td{border:0;padding:1px}.cmb2-element .ui-datepicker td a,.cmb2-element .ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none}.cmb2-element .ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.cmb2-element .ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.cmb2-element .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.cmb2-element .ui-datepicker.ui-datepicker-multi{width:auto}.cmb2-element .ui-datepicker-multi .ui-datepicker-group{float:left}.cmb2-element .ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.cmb2-element .ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.cmb2-element .ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.cmb2-element .ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.cmb2-element .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.cmb2-element .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.cmb2-element .ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.cmb2-element .ui-datepicker-row-break{clear:both;width:100%;font-size:0}.cmb2-element .ui-datepicker-rtl{direction:rtl}.cmb2-element .ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.cmb2-element .ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.cmb2-element .ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.cmb2-element .ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.cmb2-element .ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.cmb2-element .ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.cmb2-element .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.cmb2-element .ui-datepicker-rtl .ui-datepicker-group{float:right}.cmb2-element .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.cmb2-element .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.cmb2-element .ui-datepicker-cover{display:none;display:block;position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}@media (max-width:450px){.cmb-th{font-size:1.2em;padding-bottom:1em;text-align:left}.cmb-th label{display:block;margin-top:0;padding-bottom:5px}.cmb-th label:after{border-bottom:1px solid #e9e9e9;content:'';clear:both;display:block;padding-top:.4em}.cmb-td,.cmb-th,.cmb-th+.cmb-td{display:block;float:none;width:100%}.cmb-repeat-group-wrap .cmb-repeatable-group:not(:last-of-type),.cmb-repeat-group-wrap .cmb-row:not(:last-of-type),.postbox-container .cmb-repeatable-group:not(:last-of-type),.postbox-container .cmb-row:not(:last-of-type){border-bottom:0}}
cmb2/css/index.php ADDED
File without changes
cmb2/css/sass/cmb2.scss ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * CMB Styling
3
+ */
4
+
5
+ @import "partials/variables";
6
+ @import "partials/mixins";
7
+
8
+ @import "partials/main_wrap";
9
+ @import "partials/timepicker";
10
+ @import "partials/post_metaboxes";
11
+ @import "partials/misc";
12
+ @import "partials/sidebar_placements";
13
+ @import "partials/collapsible_ui";
14
+ @import "partials/jquery_ui";
cmb2/css/sass/index.php ADDED
File without changes
cmb2/css/sass/partials/_collapsible_ui.scss ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .cmb2-metabox {
2
+ .cmb-repeat-group-wrap {
3
+ max-width: 1000px
4
+ }
5
+ .cmbhandle {
6
+ color: #aaa;
7
+ float: right;
8
+ width: 27px;
9
+ height: 30px;
10
+ cursor: pointer;
11
+ right: -1em;
12
+ position: relative;
13
+ &:before {
14
+ content: '\f142';
15
+ right: 12px;
16
+ font: normal 20px/1 'dashicons';
17
+ speak: none;
18
+ display: inline-block;
19
+ padding: 8px 10px;
20
+ top: 0;
21
+ position: relative;
22
+ -webkit-font-smoothing: antialiased;
23
+ -moz-osx-font-smoothing: grayscale;
24
+ text-decoration: none !important;
25
+ }
26
+ }
27
+
28
+ .postbox.closed {
29
+ .cmbhandle {
30
+ &:before {
31
+ content: '\f140';
32
+ }
33
+ }
34
+ }
35
+
36
+ button.dashicons-before.dashicons-no-alt.cmb-remove-group-row {
37
+ -webkit-appearance: none !important;
38
+ background: none !important;
39
+ border: none !important;
40
+ position: absolute;
41
+ left: 0;
42
+ top: .5em;
43
+ line-height: 1em;
44
+ cursor: pointer;
45
+ &:not([disabled]) {
46
+ color: $dark-red;
47
+ &:hover {
48
+ color: $red;
49
+ }
50
+ }
51
+ }
52
+ }
cmb2/css/sass/partials/_jquery_ui.scss ADDED
@@ -0,0 +1,289 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*
2
+ * jQuery UI CSS Framework 1.8.16
3
+ *
4
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5
+ * Dual licensed under the MIT or GPL Version 2 licenses.
6
+ * http://jquery.org/license
7
+ *
8
+ * http://docs.jquery.com/UI/Theming/API
9
+ */
10
+ .cmb2-element {
11
+ .ui-helper-hidden { display: none; }
12
+ .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
13
+ .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
14
+ .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
15
+ .ui-helper-clearfix { display: inline-block; }
16
+ * html .ui-helper-clearfix { height:1%; }
17
+ .ui-helper-clearfix { display:block; }
18
+ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
19
+ .ui-state-disabled { cursor: default !important; }
20
+ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
21
+ .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
22
+ .ui-widget {
23
+ font-family: Verdana,Arial,sans-serif; font-size: 1.1em;
24
+ .ui-widget { font-size: 1em; }
25
+ input, select, textarea, button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
26
+ }
27
+ .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(../images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
28
+ .ui-widget-content a { color: #222222; }
29
+ .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; }
30
+ .ui-widget-header a { color: #222222; }
31
+ .ui-state-default, .ui-widget-content .ui-state-default, .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; }
32
+ .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
33
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .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; }
34
+ .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
35
+ .ui-state-active, .ui-widget-content .ui-state-active, .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; }
36
+ .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
37
+ .ui-widget :active { outline: none; }
38
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .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; }
39
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
40
+ .ui-state-error, .ui-widget-content .ui-state-error, .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; }
41
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
42
+ .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
43
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
44
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
45
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
46
+ .ui-icon { width: 16px; height: 16px; background-image: url(../images/ui-icons_222222_256x240.png); }
47
+ .ui-widget-content .ui-icon {background-image: url(../images/ui-icons_222222_256x240.png); }
48
+ .ui-widget-header .ui-icon {background-image: url(../images/ui-icons_222222_256x240.png); }
49
+ .ui-state-default .ui-icon { background-image: url(../images/ui-icons_888888_256x240.png); }
50
+ .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-icons_454545_256x240.png); }
51
+ .ui-state-active .ui-icon {background-image: url(../images/ui-icons_454545_256x240.png); }
52
+ .ui-state-highlight .ui-icon {background-image: url(../images/ui-icons_2e83ff_256x240.png); }
53
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-icons_cd0a0a_256x240.png); }
54
+ .ui-icon-carat-1-n { background-position: 0 0; }
55
+ .ui-icon-carat-1-ne { background-position: -16px 0; }
56
+ .ui-icon-carat-1-e { background-position: -32px 0; }
57
+ .ui-icon-carat-1-se { background-position: -48px 0; }
58
+ .ui-icon-carat-1-s { background-position: -64px 0; }
59
+ .ui-icon-carat-1-sw { background-position: -80px 0; }
60
+ .ui-icon-carat-1-w { background-position: -96px 0; }
61
+ .ui-icon-carat-1-nw { background-position: -112px 0; }
62
+ .ui-icon-carat-2-n-s { background-position: -128px 0; }
63
+ .ui-icon-carat-2-e-w { background-position: -144px 0; }
64
+ .ui-icon-triangle-1-n { background-position: 0 -16px; }
65
+ .ui-icon-triangle-1-ne { background-position: -16px -16px; }
66
+ .ui-icon-triangle-1-e { background-position: -32px -16px; }
67
+ .ui-icon-triangle-1-se { background-position: -48px -16px; }
68
+ .ui-icon-triangle-1-s { background-position: -64px -16px; }
69
+ .ui-icon-triangle-1-sw { background-position: -80px -16px; }
70
+ .ui-icon-triangle-1-w { background-position: -96px -16px; }
71
+ .ui-icon-triangle-1-nw { background-position: -112px -16px; }
72
+ .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
73
+ .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
74
+ .ui-icon-arrow-1-n { background-position: 0 -32px; }
75
+ .ui-icon-arrow-1-ne { background-position: -16px -32px; }
76
+ .ui-icon-arrow-1-e { background-position: -32px -32px; }
77
+ .ui-icon-arrow-1-se { background-position: -48px -32px; }
78
+ .ui-icon-arrow-1-s { background-position: -64px -32px; }
79
+ .ui-icon-arrow-1-sw { background-position: -80px -32px; }
80
+ .ui-icon-arrow-1-w { background-position: -96px -32px; }
81
+ .ui-icon-arrow-1-nw { background-position: -112px -32px; }
82
+ .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
83
+ .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
84
+ .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
85
+ .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
86
+ .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
87
+ .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
88
+ .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
89
+ .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
90
+ .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
91
+ .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
92
+ .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
93
+ .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
94
+ .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
95
+ .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
96
+ .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
97
+ .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
98
+ .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
99
+ .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
100
+ .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
101
+ .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
102
+ .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
103
+ .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
104
+ .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
105
+ .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
106
+ .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
107
+ .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
108
+ .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
109
+ .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
110
+ .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
111
+ .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
112
+ .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
113
+ .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
114
+ .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
115
+ .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
116
+ .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
117
+ .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
118
+ .ui-icon-arrow-4 { background-position: 0 -80px; }
119
+ .ui-icon-arrow-4-diag { background-position: -16px -80px; }
120
+ .ui-icon-extlink { background-position: -32px -80px; }
121
+ .ui-icon-newwin { background-position: -48px -80px; }
122
+ .ui-icon-refresh { background-position: -64px -80px; }
123
+ .ui-icon-shuffle { background-position: -80px -80px; }
124
+ .ui-icon-transfer-e-w { background-position: -96px -80px; }
125
+ .ui-icon-transferthick-e-w { background-position: -112px -80px; }
126
+ .ui-icon-folder-collapsed { background-position: 0 -96px; }
127
+ .ui-icon-folder-open { background-position: -16px -96px; }
128
+ .ui-icon-document { background-position: -32px -96px; }
129
+ .ui-icon-document-b { background-position: -48px -96px; }
130
+ .ui-icon-note { background-position: -64px -96px; }
131
+ .ui-icon-mail-closed { background-position: -80px -96px; }
132
+ .ui-icon-mail-open { background-position: -96px -96px; }
133
+ .ui-icon-suitcase { background-position: -112px -96px; }
134
+ .ui-icon-comment { background-position: -128px -96px; }
135
+ .ui-icon-person { background-position: -144px -96px; }
136
+ .ui-icon-print { background-position: -160px -96px; }
137
+ .ui-icon-trash { background-position: -176px -96px; }
138
+ .ui-icon-locked { background-position: -192px -96px; }
139
+ .ui-icon-unlocked { background-position: -208px -96px; }
140
+ .ui-icon-bookmark { background-position: -224px -96px; }
141
+ .ui-icon-tag { background-position: -240px -96px; }
142
+ .ui-icon-home { background-position: 0 -112px; }
143
+ .ui-icon-flag { background-position: -16px -112px; }
144
+ .ui-icon-calendar { background-position: -32px -112px; }
145
+ .ui-icon-cart { background-position: -48px -112px; }
146
+ .ui-icon-pencil { background-position: -64px -112px; }
147
+ .ui-icon-clock { background-position: -80px -112px; }
148
+ .ui-icon-disk { background-position: -96px -112px; }
149
+ .ui-icon-calculator { background-position: -112px -112px; }
150
+ .ui-icon-zoomin { background-position: -128px -112px; }
151
+ .ui-icon-zoomout { background-position: -144px -112px; }
152
+ .ui-icon-search { background-position: -160px -112px; }
153
+ .ui-icon-wrench { background-position: -176px -112px; }
154
+ .ui-icon-gear { background-position: -192px -112px; }
155
+ .ui-icon-heart { background-position: -208px -112px; }
156
+ .ui-icon-star { background-position: -224px -112px; }
157
+ .ui-icon-link { background-position: -240px -112px; }
158
+ .ui-icon-cancel { background-position: 0 -128px; }
159
+ .ui-icon-plus { background-position: -16px -128px; }
160
+ .ui-icon-plusthick { background-position: -32px -128px; }
161
+ .ui-icon-minus { background-position: -48px -128px; }
162
+ .ui-icon-minusthick { background-position: -64px -128px; }
163
+ .ui-icon-close { background-position: -80px -128px; }
164
+ .ui-icon-closethick { background-position: -96px -128px; }
165
+ .ui-icon-key { background-position: -112px -128px; }
166
+ .ui-icon-lightbulb { background-position: -128px -128px; }
167
+ .ui-icon-scissors { background-position: -144px -128px; }
168
+ .ui-icon-clipboard { background-position: -160px -128px; }
169
+ .ui-icon-copy { background-position: -176px -128px; }
170
+ .ui-icon-contact { background-position: -192px -128px; }
171
+ .ui-icon-image { background-position: -208px -128px; }
172
+ .ui-icon-video { background-position: -224px -128px; }
173
+ .ui-icon-script { background-position: -240px -128px; }
174
+ .ui-icon-alert { background-position: 0 -144px; }
175
+ .ui-icon-info { background-position: -16px -144px; }
176
+ .ui-icon-notice { background-position: -32px -144px; }
177
+ .ui-icon-help { background-position: -48px -144px; }
178
+ .ui-icon-check { background-position: -64px -144px; }
179
+ .ui-icon-bullet { background-position: -80px -144px; }
180
+ .ui-icon-radio-off { background-position: -96px -144px; }
181
+ .ui-icon-radio-on { background-position: -112px -144px; }
182
+ .ui-icon-pin-w { background-position: -128px -144px; }
183
+ .ui-icon-pin-s { background-position: -144px -144px; }
184
+ .ui-icon-play { background-position: 0 -160px; }
185
+ .ui-icon-pause { background-position: -16px -160px; }
186
+ .ui-icon-seek-next { background-position: -32px -160px; }
187
+ .ui-icon-seek-prev { background-position: -48px -160px; }
188
+ .ui-icon-seek-end { background-position: -64px -160px; }
189
+ .ui-icon-seek-start { background-position: -80px -160px; }
190
+ .ui-icon-seek-first { background-position: -80px -160px; }
191
+ .ui-icon-stop { background-position: -96px -160px; }
192
+ .ui-icon-eject { background-position: -112px -160px; }
193
+ .ui-icon-volume-off { background-position: -128px -160px; }
194
+ .ui-icon-volume-on { background-position: -144px -160px; }
195
+ .ui-icon-power { background-position: 0 -176px; }
196
+ .ui-icon-signal-diag { background-position: -16px -176px; }
197
+ .ui-icon-signal { background-position: -32px -176px; }
198
+ .ui-icon-battery-0 { background-position: -48px -176px; }
199
+ .ui-icon-battery-1 { background-position: -64px -176px; }
200
+ .ui-icon-battery-2 { background-position: -80px -176px; }
201
+ .ui-icon-battery-3 { background-position: -96px -176px; }
202
+ .ui-icon-circle-plus { background-position: 0 -192px; }
203
+ .ui-icon-circle-minus { background-position: -16px -192px; }
204
+ .ui-icon-circle-close { background-position: -32px -192px; }
205
+ .ui-icon-circle-triangle-e { background-position: -48px -192px; }
206
+ .ui-icon-circle-triangle-s { background-position: -64px -192px; }
207
+ .ui-icon-circle-triangle-w { background-position: -80px -192px; }
208
+ .ui-icon-circle-triangle-n { background-position: -96px -192px; }
209
+ .ui-icon-circle-arrow-e { background-position: -112px -192px; }
210
+ .ui-icon-circle-arrow-s { background-position: -128px -192px; }
211
+ .ui-icon-circle-arrow-w { background-position: -144px -192px; }
212
+ .ui-icon-circle-arrow-n { background-position: -160px -192px; }
213
+ .ui-icon-circle-zoomin { background-position: -176px -192px; }
214
+ .ui-icon-circle-zoomout { background-position: -192px -192px; }
215
+ .ui-icon-circle-check { background-position: -208px -192px; }
216
+ .ui-icon-circlesmall-plus { background-position: 0 -208px; }
217
+ .ui-icon-circlesmall-minus { background-position: -16px -208px; }
218
+ .ui-icon-circlesmall-close { background-position: -32px -208px; }
219
+ .ui-icon-squaresmall-plus { background-position: -48px -208px; }
220
+ .ui-icon-squaresmall-minus { background-position: -64px -208px; }
221
+ .ui-icon-squaresmall-close { background-position: -80px -208px; }
222
+ .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
223
+ .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
224
+ .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
225
+ .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
226
+ .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
227
+ .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
228
+ .ui-corner-all, .ui-corner-top, .ui-corner-left, .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; }
229
+ .ui-corner-all, .ui-corner-top, .ui-corner-right, .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; }
230
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .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; }
231
+ .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .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; }
232
+ .ui-widget-overlay { background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
233
+ .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; }
234
+ .ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
235
+ .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
236
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
237
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
238
+ .ui-datepicker .ui-datepicker-prev { left:2px; }
239
+ .ui-datepicker .ui-datepicker-next { right:2px; }
240
+ .ui-datepicker .ui-datepicker-prev-hover { left:1px; }
241
+ .ui-datepicker .ui-datepicker-next-hover { right:1px; }
242
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
243
+ .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
244
+ .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
245
+ .ui-datepicker select.ui-datepicker-month-year {width: 100%;}
246
+ .ui-datepicker select.ui-datepicker-month,
247
+ .ui-datepicker select.ui-datepicker-year { width: 49%;}
248
+ .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
249
+ .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
250
+ .ui-datepicker td { border: 0; padding: 1px; }
251
+ .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
252
+ .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; }
253
+ .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
254
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
255
+ .ui-datepicker.ui-datepicker-multi { width:auto; }
256
+ .ui-datepicker-multi .ui-datepicker-group { float:left; }
257
+ .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
258
+ .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
259
+ .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
260
+ .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
261
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
262
+ .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
263
+ .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
264
+ .ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
265
+ .ui-datepicker-rtl {
266
+ direction: rtl;
267
+ .ui-datepicker-prev { right: 2px; left: auto; }
268
+ .ui-datepicker-next { left: 2px; right: auto; }
269
+ .ui-datepicker-prev:hover { right: 1px; left: auto; }
270
+ .ui-datepicker-next:hover { left: 1px; right: auto; }
271
+ .ui-datepicker-buttonpane { clear:right; }
272
+ .ui-datepicker-buttonpane button { float: left; }
273
+ .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
274
+ .ui-datepicker-group { float:right; }
275
+ .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
276
+ .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
277
+ }
278
+ .ui-datepicker-cover {
279
+ display: none; /*sorry for IE5*/
280
+ display/**/: block; /*sorry for IE5*/
281
+ position: absolute; /*must have*/
282
+ z-index: -1; /*must have*/
283
+ filter: mask(); /*must have*/
284
+ top: -4px; /*must have*/
285
+ left: -4px; /*must have*/
286
+ width: 200px; /*must have*/
287
+ height: 200px; /*must have*/
288
+ }
289
+ }
cmb2/css/sass/partials/_main_wrap.scss ADDED
@@ -0,0 +1,438 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------
2
+ Main Wrap
3
+ --------------------------------------------------------------*/
4
+
5
+ .cmb2-wrap {
6
+ margin: 0;
7
+
8
+ input,
9
+ textarea {
10
+ font-size: $font-size;
11
+ max-width: 100%;
12
+ padding: 5px;
13
+
14
+ }
15
+
16
+ input[type=text] {
17
+
18
+ &.cmb2-oembed {
19
+ width: 100%;
20
+ }
21
+ }
22
+
23
+ textarea {
24
+ width: 500px;
25
+
26
+ &.cmb2-textarea-code {
27
+ font-family: $font-mono;
28
+ line-height: 16px;
29
+ }
30
+ }
31
+
32
+ input {
33
+
34
+ &.cmb2-text-small,
35
+ &.cmb2-timepicker {
36
+ width: 100px;
37
+ // margin-right: 15px
38
+ }
39
+
40
+ &.cmb2-text-money {
41
+ width: 90px;
42
+ // margin-right: 15px
43
+ }
44
+
45
+ &.cmb2-text-medium {
46
+ width: 230px;
47
+ // margin-right: 15px
48
+ }
49
+
50
+ &.cmb2-upload-file {
51
+ width: 65%;
52
+ }
53
+
54
+ &.ed_button {
55
+ padding: 2px 4px;
56
+ }
57
+
58
+ &:not([type="hidden"]) {
59
+ + input,
60
+ + .button,
61
+ + select {
62
+ margin-left: 20px;
63
+ }
64
+ }
65
+ }
66
+
67
+ ul {
68
+ margin: 0;
69
+ }
70
+
71
+ li {
72
+ font-size: $font-size;
73
+ line-height: 16px;
74
+ margin: 1px 0 5px 0;
75
+ }
76
+
77
+ // .cmb-field-list .cmb-field-list {
78
+ // padding-top:5px;
79
+ // margin: 0;
80
+ // }
81
+
82
+ select {
83
+ font-size: $font-size;
84
+ margin-top: 3px;
85
+ }
86
+
87
+ input:focus,
88
+ textarea:focus {
89
+ background: $light-yellow;
90
+ }
91
+
92
+ input[type="radio"] {
93
+ margin: 0 5px 0 0;
94
+ padding: 0
95
+ }
96
+
97
+ input[type="checkbox"] {
98
+ margin: 0 5px 0 0;
99
+ padding: 0;
100
+ }
101
+
102
+ button,
103
+ .button {
104
+ white-space: nowrap;
105
+ }
106
+
107
+ .mceLayout {
108
+ border: 1px solid $light-gray !important;
109
+ }
110
+
111
+ .mceIframeContainer {
112
+ background: #fff;
113
+ }
114
+
115
+ .meta_mce {
116
+ width: 97%;
117
+
118
+ textarea {
119
+ width: 100%;
120
+ }
121
+ }
122
+
123
+ // /**
124
+ // * Color picker
125
+ // */
126
+ .wp-color-result,
127
+ .wp-picker-input-wrap {
128
+ vertical-align: middle;
129
+ }
130
+
131
+ .wp-color-result,
132
+ .wp-picker-container {
133
+ margin: 0 10px 0 0;
134
+ }
135
+
136
+ .cmb-row {
137
+ margin: 0;
138
+
139
+ &:after {
140
+ content: '';
141
+ clear: both;
142
+ display: block;
143
+ width: 100%;
144
+ }
145
+
146
+ &.cmb-repeat-row {
147
+ padding: 1.8em 0 0;
148
+
149
+ &:first-of-type {
150
+ padding: 0;
151
+ }
152
+ }
153
+
154
+ &.cmb-repeat .cmb2-metabox-description {
155
+ padding-top: 0;
156
+ padding-bottom: 1.8em;
157
+ }
158
+ }
159
+ }
160
+
161
+ .cmb2-metabox {
162
+ clear: both;
163
+ margin: 0;
164
+
165
+ > .cmb-row:first-of-type >,
166
+ .cmb-field-list > .cmb-row:first-of-type > {
167
+ .cmb-td,
168
+ .cmb-th {
169
+ border: 0;
170
+ }
171
+ }
172
+
173
+ > .cmb-row {
174
+ .cmb-repeat-table .cmb-row > .cmb-td {
175
+ padding-right: 20px;
176
+ box-sizing: border-box;
177
+ float: left;
178
+ }
179
+ }
180
+ }
181
+
182
+ .cmb-add-row {
183
+ margin: 1.8em 0 0;
184
+ }
185
+
186
+ .cmb-nested .cmb-td,
187
+ .cmb-repeatable-group .cmb-th,
188
+ .cmb-repeatable-group:first-of-type {
189
+ border: 0;
190
+ }
191
+
192
+ .cmb-row:last-of-type,
193
+ .cmb2-wrap .cmb-row:last-of-type,
194
+ .cmb-repeatable-group:last-of-type {
195
+ border-bottom: 0;
196
+ }
197
+
198
+ .cmb-repeatable-grouping {
199
+ border: 1px solid $light-gray;
200
+ padding: 0 1em;
201
+ max-width: 1000px;
202
+ &.cmb-row {
203
+ margin: 0 0 0.8em;
204
+ }
205
+ + .cmb-repeatable-grouping {
206
+ }
207
+ }
208
+
209
+ .cmb-th {
210
+ color: $dark-gray;
211
+ float: left;
212
+ font-weight: 600;
213
+ line-height: 1.3;
214
+ padding: 20px 10px 20px 0;
215
+ vertical-align: top;
216
+ width: 200px;
217
+
218
+ @media (max-width: $mobile-break) {
219
+ @include fullth;
220
+ }
221
+ }
222
+
223
+ .cmb-td {
224
+ line-height: 1.3;
225
+ max-width: 100%;
226
+ padding: 15px 10px;
227
+ vertical-align: middle;
228
+ }
229
+
230
+ .cmb-type-title {
231
+
232
+ .cmb-td {
233
+ padding: 0;
234
+ }
235
+ }
236
+
237
+ .cmb-th label {
238
+ display: block;
239
+ padding: 5px 0;
240
+ }
241
+
242
+ .cmb-th + .cmb-td {
243
+ float: left;
244
+ }
245
+
246
+ .cmb-td .cmb-td {
247
+ padding-bottom: 1em;
248
+ }
249
+
250
+ .cmb-remove-row {
251
+ text-align: right;
252
+ }
253
+
254
+ .empty-row.hidden {
255
+ display: none;
256
+ }
257
+
258
+ .cmb-repeatable-group {
259
+
260
+ .cmb-th {
261
+ padding: 5px;
262
+ }
263
+
264
+ .cmb-group-title {
265
+ background-color: $light-gray;
266
+ padding: 8px 12px 8px 2.2em;
267
+ margin: 0 -1em;
268
+ min-height: 1.5em;
269
+ font-size: 14px;
270
+ line-height: 1.4;
271
+
272
+ h4 {
273
+ border: 0;
274
+ margin: 0;
275
+ font-size: 1.2em;
276
+ font-weight: 500;
277
+ padding: 0.5em 0.75em;
278
+ }
279
+
280
+ .cmb-th {
281
+ display: block;
282
+ width: 100%;
283
+ }
284
+ }
285
+
286
+ .cmb-group-description .cmb-th {
287
+ @include fullth;
288
+ }
289
+
290
+ .cmb-shift-rows {
291
+ font-size: 1em;
292
+ margin-right: 1em;
293
+ text-decoration: none;
294
+
295
+ .dashicons {
296
+ font-size: 1.5em;
297
+ height: 1.5em;
298
+ line-height: 1.2em;
299
+ width: 1em;
300
+
301
+ &.dashicons-arrow-down-alt2 {
302
+ line-height: 1.3em;
303
+
304
+ }
305
+ }
306
+ }
307
+
308
+ .cmb2-upload-button {
309
+ float: right;
310
+ }
311
+
312
+ }
313
+
314
+ p.cmb2-metabox-description {
315
+ color: $gray;
316
+ font-style: italic;
317
+ margin: 0;
318
+ padding-top: .5em;
319
+ }
320
+
321
+ span.cmb2-metabox-description {
322
+ color: $gray;
323
+ font-style: italic;
324
+ }
325
+
326
+ .cmb2-metabox-title {
327
+ margin: 0 0 5px 0;
328
+ padding: 5px 0 0 0;
329
+ font-size: 14px;
330
+ }
331
+
332
+ .cmb-inline ul {
333
+ padding: 4px 0 0 0;
334
+ }
335
+
336
+ .cmb-inline li {
337
+ display: inline-block;
338
+ padding-right: 18px;
339
+ }
340
+
341
+ .cmb-type-textarea-code pre {
342
+ margin: 0;
343
+ }
344
+
345
+ .cmb2-media-status {
346
+
347
+ .img-status {
348
+ clear: none;
349
+ display: inline-block;
350
+ float: left;
351
+ margin-right: 10px;
352
+ width: auto;
353
+
354
+ img {
355
+ max-width: 350px;
356
+ }
357
+ }
358
+
359
+ .img-status img,
360
+ .embed-status {
361
+ background: $white;
362
+ border: 1px solid $light-gray;
363
+ border-radius: 2px;
364
+ -moz-border-radius: 2px;
365
+ margin: 15px 0 0 0;
366
+ padding: 5px;
367
+ }
368
+
369
+ .embed-status {
370
+ float: left;
371
+ max-width: 800px;
372
+ }
373
+
374
+ .img-status, .embed-status {
375
+ position: relative;
376
+
377
+ .cmb2-remove-file-button {
378
+ background: url(../images/ico-delete.png);
379
+ height: 16px;
380
+ left: -5px;
381
+ position: absolute;
382
+ text-indent: -9999px;
383
+ top: -5px;
384
+ width: 16px;
385
+ }
386
+
387
+ }
388
+
389
+ .img-status {
390
+
391
+ .cmb2-remove-file-button {
392
+ top: 10px;
393
+ }
394
+ }
395
+
396
+ .img-status img, .file-status > span {
397
+ cursor: pointer;
398
+ }
399
+
400
+ }
401
+
402
+ .cmb-type-file-list .cmb2-media-status .img-status {
403
+ clear: none;
404
+ float: left;
405
+ margin-right: 10px;
406
+ width: auto;
407
+ }
408
+
409
+ .cmb-attach-list li {
410
+ clear: both;
411
+ display: inline-block;
412
+ margin-bottom: 25px;
413
+ width: 100%;
414
+
415
+ img {
416
+ cursor: move;
417
+ float: left;
418
+ margin-right: 10px;
419
+ }
420
+ }
421
+
422
+ .cmb2-remove-wrapper {
423
+ margin: 0;
424
+ }
425
+
426
+ .child-cmb2 .cmb-th {
427
+ text-align: left;
428
+ }
429
+
430
+ @media (max-width: $mobile-break) {
431
+ .cmb-th,
432
+ .cmb-td,
433
+ .cmb-th + .cmb-td {
434
+ display: block;
435
+ float: none;
436
+ width: 100%;
437
+ }
438
+ }
cmb2/css/sass/partials/_misc.scss ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------
2
+ Misc.
3
+ --------------------------------------------------------------*/
4
+
5
+ #poststuff .cmb-repeatable-group h2 {
6
+ margin: 0;
7
+ }
8
+
9
+ .edit-tags-php,
10
+ .profile-php,
11
+ .user-edit-php {
12
+
13
+ .cmb2-metabox-title {
14
+ font-size: 1.4em;
15
+ }
16
+ }
17
+
18
+ .postbox .cmb-spinner {
19
+ float: left;
20
+ }
cmb2/css/sass/partials/_mixins.scss ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //--------------------------------------------------------------
2
+ // Mixins
3
+ //--------------------------------------------------------------
4
+
5
+ @mixin fullth() {
6
+ font-size: 1.2em;
7
+ @include _fullth;
8
+ }
9
+
10
+ @mixin fullth_side() {
11
+
12
+ @include _fullth;
13
+
14
+ label {
15
+ font-size: $font-size;
16
+ line-height: 1.4em;
17
+ }
18
+ }
19
+
20
+ @mixin _fullth() {
21
+ display: block;
22
+ float: none;
23
+ padding-bottom: 1em;
24
+ text-align: left;
25
+ width: 100%;
26
+
27
+ label {
28
+ display: block;
29
+ margin-top: 0em;
30
+ padding-bottom: 5px;
31
+
32
+ &:after {
33
+ border-bottom: 1px solid $light-gray;
34
+ content: '';
35
+ clear: both;
36
+ display: block;
37
+ padding-top: .4em;
38
+ }
39
+ }
40
+ }
cmb2/css/sass/partials/_post_metaboxes.scss ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------
2
+ Post Metaboxes
3
+ --------------------------------------------------------------*/
4
+ #poststuff .cmb-group-title {
5
+ margin-left: -1em;
6
+ margin-right: -1em;
7
+ padding-left: 2.2em;
8
+ // cursor: move;
9
+ min-height: 1.5em;
10
+ }
11
+
12
+ .postbox-container, .cmb-repeat-group-wrap {
13
+
14
+ .cmb2-wrap {
15
+ margin: 0;
16
+
17
+ > .cmb-field-list > .cmb-row {
18
+ padding: 1.8em 0;
19
+ }
20
+
21
+ input[type=text] {
22
+
23
+ &.cmb2-oembed {
24
+ width: 100%;
25
+ }
26
+ }
27
+ }
28
+
29
+ .cmb-row {
30
+ padding: 0 0 1.8em;
31
+ margin: 0 0 0.8em;
32
+
33
+ .cmbhandle {
34
+ right: -1em;
35
+ position: relative;
36
+ }
37
+ }
38
+
39
+ .cmb-repeatable-grouping {
40
+ padding: 0 1em;
41
+ max-width: 100%;
42
+ min-width: 1px !important;
43
+ }
44
+
45
+ .cmb-repeatable-group > .cmb-row {
46
+ padding-bottom: 0;
47
+ }
48
+
49
+ .cmb-th {
50
+ width: 18%;
51
+ padding: 0 2% 0 0;
52
+ // text-align: right;
53
+ }
54
+
55
+ .cmb-td {
56
+ margin-bottom: 0;
57
+ padding: 0;
58
+ line-height: 1.3;
59
+ }
60
+
61
+ .cmb-repeat-row .cmb-td {
62
+ padding-bottom: 1.8em;
63
+ }
64
+
65
+ .cmb-th + .cmb-td {
66
+ width: 80%;
67
+ float: right;
68
+ }
69
+
70
+ .cmb-row:not(:last-of-type),
71
+ .cmb-repeatable-group:not(:last-of-type) {
72
+ border-bottom: 1px solid $light-gray;
73
+
74
+ @media (max-width: $mobile-break) {
75
+ border-bottom: 0;
76
+ }
77
+ }
78
+
79
+ .cmb-repeat-group-field,
80
+ .cmb-remove-field-row {
81
+ padding-top: 1.8em;
82
+ }
83
+
84
+ .cmb2-metabox > .cmb-row {
85
+ &.table-layout, .cmb-row.table-layout {
86
+ .cmb-repeat-table .cmb-tbody {
87
+ display: table;
88
+ width: 100%;
89
+
90
+ input.regular-text {
91
+ width: 100%;
92
+ }
93
+
94
+ .cmb-row:not(.hidden):not(.empty-row) {
95
+ display: table-row;
96
+ }
97
+
98
+ .cmb-td {
99
+ display: table-cell;
100
+ float: none;
101
+ width: 100%;
102
+ }
103
+
104
+ .cmb-row:not(:first-of-type) .cmb-td {
105
+ padding-top: 1.8em;
106
+ }
107
+
108
+ .cmb-td.cmb-remove-row {
109
+ padding-right: 0;
110
+ }
111
+ }
112
+ }
113
+ }
114
+ }
cmb2/css/sass/partials/_sidebar_placements.scss ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------
2
+ Sidebar Placement Adjustments
3
+ --------------------------------------------------------------*/
4
+
5
+ .inner-sidebar,
6
+ #side-sortables {
7
+
8
+ .cmb2-wrap {
9
+
10
+ > .cmb-field-list > .cmb-row {
11
+ padding: 1.4em 0;
12
+ }
13
+
14
+ input {
15
+
16
+ &[type=text]:not( .wp-color-picker ) {
17
+ width: 100%;
18
+ }
19
+
20
+ + input:not( .wp-picker-clear ), + select {
21
+ margin-left: 0;
22
+ margin-top: 1em;
23
+ display: block;
24
+ }
25
+ }
26
+
27
+ label {
28
+ display: block;
29
+ font-weight: 700;
30
+ padding: 0 0 5px;
31
+ }
32
+
33
+ }
34
+
35
+ .cmb-repeatable-group {
36
+ border-bottom: 1px solid $light-gray;
37
+ }
38
+
39
+ .cmb-repeat-group-wrap > .cmb-td > .cmb-repeatable-group {
40
+ border-bottom: 0;
41
+ margin-bottom: -1.4em;
42
+ }
43
+
44
+ .cmb-th,
45
+ .cmb-td,
46
+ .cmb-th + .cmb-td {
47
+ width: 100%;
48
+ display: block;
49
+ float: none;
50
+ }
51
+
52
+ .closed .inside {
53
+ display: none;
54
+ }
55
+
56
+ .cmb-td .cmb-td {
57
+ padding-bottom: 1em;
58
+ }
59
+
60
+ .cmb-th {
61
+ @include fullth_side;
62
+ padding-left: 0;
63
+ padding-right: 0;
64
+ }
65
+
66
+ .cmb-group-description {
67
+ .cmb-th {
68
+ padding-top: 0;
69
+ }
70
+ .cmb2-metabox-description {
71
+ padding: 0;
72
+ }
73
+ }
74
+
75
+ .cmb-group-title {
76
+ // padding-bottom: 0;
77
+ .cmb-th {
78
+ padding: 0;
79
+ }
80
+ }
81
+
82
+ .cmb-repeatable-grouping {
83
+ + .cmb-repeatable-grouping {
84
+ margin-top: 1em;
85
+ }
86
+ }
87
+ .cmb2-media-status {
88
+
89
+ .img-status,
90
+ .embed-status {
91
+
92
+ img {
93
+ max-width: 90%;
94
+ // width: auto;
95
+ height: auto;
96
+ }
97
+ }
98
+ }
99
+
100
+ .cmb2-list label {
101
+ display: inline;
102
+ font-weight: normal;
103
+ }
104
+
105
+ .cmb2-metabox-description {
106
+ display: block;
107
+ padding: 7px 0 0;
108
+ }
109
+
110
+ .cmb-type-checkbox {
111
+
112
+ .cmb-td label,
113
+ .cmb2-metabox-description {
114
+ font-weight: normal;
115
+ display: inline;
116
+ }
117
+ }
118
+
119
+ .cmb-row .cmb2-metabox-description {
120
+ padding-bottom: 1.8em;
121
+ }
122
+
123
+ .cmb2-metabox-title {
124
+ font-size: 1.2em;
125
+ font-style: italic;
126
+ }
127
+
128
+ .cmb-remove-row {
129
+ clear: both;
130
+ padding-top: 12px;
131
+ padding-bottom: 0;
132
+ }
133
+
134
+ .cmb-type-colorpicker .cmb-repeat-row {
135
+ .cmb-td {
136
+ width: auto;
137
+ clear: none;
138
+ float: left;
139
+ padding-top: 0;
140
+ &.cmb-remove-row {
141
+ float: right;
142
+ margin: 0;
143
+ }
144
+ }
145
+ }
146
+
147
+ .cmb2-upload-button {
148
+ clear: both;
149
+ margin-top: 12px;
150
+ }
151
+
152
+ }
153
+
cmb2/css/sass/partials/_timepicker.scss ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /*--------------------------------------------------------------
2
+ Timepicker
3
+ --------------------------------------------------------------*/
4
+
5
+ div {
6
+
7
+ &.time-picker {
8
+ background: #fff;
9
+ border: 1px solid $gray;
10
+ height: 191px;
11
+ margin: 0;
12
+ position: absolute;
13
+ overflow: auto;
14
+ width: 6em; /* needed for IE */
15
+ z-index: 99;
16
+
17
+ ul {
18
+ list-style-type: none;
19
+ margin: 0;
20
+ padding: 0;
21
+ }
22
+
23
+ li {
24
+ cursor: pointer;
25
+ margin-bottom: 0;
26
+ font-family: $font-sans;
27
+ font-size: 14px;
28
+ padding: 4px 3px;
29
+
30
+ &.selected {
31
+ background: $blue;
32
+ color: #fff;
33
+ }
34
+ }
35
+ }
36
+
37
+ &.time-picker-12hours {
38
+ width: 8em; /* needed for IE */
39
+ }
40
+ }
cmb2/css/sass/partials/_variables.scss ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ //--------------------------------------------------------------
2
+ // Variables
3
+ //--------------------------------------------------------------
4
+
5
+ // Mobile break-point
6
+ $mobile-break : 450px;
7
+
8
+ // Fonts
9
+ $font-sans : sans-serif;
10
+ $font-serif : Georgia, Times, "Times New Roman", serif;
11
+ $font-mono : "Courier 10 Pitch", Courier, monospace;
12
+ $font-size : 14px;
13
+
14
+ // Colors
15
+ $dark-gray : #222222;
16
+ $gray : #aaaaaa;
17
+ $light-gray : #e9e9e9;
18
+ $blue : #0063ce;
19
+ $light-yellow : #fffff8;
20
+ $white : #ffffff;
21
+ $red : #f00;
22
+ $dark-red : #a00;
cmb2/css/sass/partials/index.php ADDED
File without changes
cmb2/images/ico-delete.png ADDED
Binary file
cmb2/images/index.php ADDED
File without changes
cmb2/images/ui-bg_flat_0_aaaaaa_40x100.png ADDED
Binary file
cmb2/images/ui-bg_flat_75_ffffff_40x100.png ADDED
Binary file
cmb2/images/ui-bg_glass_55_fbf9ee_1x400.png ADDED
Binary file
cmb2/images/ui-bg_glass_65_ffffff_1x400.png ADDED
Binary file
cmb2/images/ui-bg_glass_75_dadada_1x400.png ADDED
Binary file
cmb2/images/ui-bg_glass_75_e6e6e6_1x400.png ADDED
Binary file
cmb2/images/ui-bg_glass_95_fef1ec_1x400.png ADDED
Binary file
cmb2/images/ui-bg_highlight-soft_75_cccccc_1x100.png ADDED
Binary file
cmb2/images/ui-icons_222222_256x240.png ADDED
Binary file
cmb2/images/ui-icons_2e83ff_256x240.png ADDED
Binary file
cmb2/images/ui-icons_454545_256x240.png ADDED
Binary file
cmb2/images/ui-icons_888888_256x240.png ADDED
Binary file
cmb2/images/ui-icons_cd0a0a_256x240.png ADDED
Binary file
cmb2/includes/CMB2.php ADDED
@@ -0,0 +1,859 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Create meta boxes
4
+ *
5
+ * @property-read string $cmb_id
6
+ * @property-read array $meta_box
7
+ * @property-read array $updated
8
+ */
9
+ class CMB2 {
10
+
11
+ /**
12
+ * Current field's ID
13
+ * @var string
14
+ * @since 2.0.0
15
+ */
16
+ protected $cmb_id = '';
17
+
18
+ /**
19
+ * Metabox Config array
20
+ * @var array
21
+ * @since 0.9.0
22
+ */
23
+ protected $meta_box;
24
+
25
+ /**
26
+ * Object ID for metabox meta retrieving/saving
27
+ * @var int
28
+ * @since 1.0.0
29
+ */
30
+ protected $object_id = 0;
31
+
32
+ /**
33
+ * Type of object being saved. (e.g., post, user, or comment)
34
+ * @var string
35
+ * @since 1.0.0
36
+ */
37
+ protected $object_type = 'post';
38
+
39
+ /**
40
+ * Type of object registered for metabox. (e.g., post, user, or comment)
41
+ * @var string
42
+ * @since 1.0.0
43
+ */
44
+ protected $mb_object_type = null;
45
+
46
+ /**
47
+ * List of fields that are changed/updated on save
48
+ * @var array
49
+ * @since 1.1.0
50
+ */
51
+ protected $updated = array();
52
+
53
+ /**
54
+ * Metabox Defaults
55
+ * @var array
56
+ * @since 1.0.1
57
+ */
58
+ protected $mb_defaults = array(
59
+ 'id' => '',
60
+ 'title' => '',
61
+ 'type' => '',
62
+ 'object_types' => array(), // Post type
63
+ 'context' => 'normal',
64
+ 'priority' => 'high',
65
+ 'show_names' => true, // Show field names on the left
66
+ 'show_on' => array(), // Specific post IDs or page templates to display this metabox
67
+ 'cmb_styles' => true, // Include cmb bundled stylesheet
68
+ 'fields' => array(),
69
+ 'hookup' => true,
70
+ 'closed' => false, // Default to metabox being closed?
71
+ 'new_user_section' => 'add-new-user', // or 'add-existing-user'
72
+ );
73
+
74
+ /**
75
+ * An array of hidden fields to output at the end of the form
76
+ * @var array
77
+ * @since 2.0.0
78
+ */
79
+ protected $hidden_fields = array();
80
+
81
+ /**
82
+ * Array of key => value data for saving. Likely $_POST data.
83
+ * @var array
84
+ * @since 2.0.0
85
+ */
86
+ public $data_to_save = array();
87
+
88
+ /**
89
+ * Array of key => value data for saving. Likely $_POST data.
90
+ * @var string
91
+ * @since 2.0.0
92
+ */
93
+ protected $generated_nonce = '';
94
+
95
+ /**
96
+ * Get started
97
+ */
98
+ function __construct( $meta_box, $object_id = 0 ) {
99
+
100
+ if ( empty( $meta_box['id'] ) ) {
101
+ wp_die( __( 'Metabox configuration is required to have an ID parameter', 'cmb2' ) );
102
+ }
103
+
104
+ $this->meta_box = wp_parse_args( $meta_box, $this->mb_defaults );
105
+ $this->object_id( $object_id );
106
+ $this->mb_object_type();
107
+ $this->cmb_id = $meta_box['id'];
108
+
109
+ CMB2_Boxes::add( $this );
110
+
111
+ /**
112
+ * Hook during initiation of CMB2 object
113
+ *
114
+ * The dynamic portion of the hook name, $this->cmb_id, is this meta_box id.
115
+ *
116
+ * @param array $cmb This CMB2 object
117
+ */
118
+ do_action( "cmb2_init_{$this->cmb_id}", $this );
119
+ }
120
+
121
+ /**
122
+ * Loops through and displays fields
123
+ * @since 1.0.0
124
+ * @param int $object_id Object ID
125
+ * @param string $object_type Type of object being saved. (e.g., post, user, or comment)
126
+ */
127
+ public function show_form( $object_id = 0, $object_type = '' ) {
128
+ $object_type = $this->object_type( $object_type );
129
+ $object_id = $this->object_id( $object_id );
130
+
131
+ $this->nonce_field();
132
+
133
+ echo "\n<!-- Begin CMB Fields -->\n";
134
+
135
+ /**
136
+ * Hook before form table begins
137
+ *
138
+ * @param array $cmb_id The current box ID
139
+ * @param int $object_id The ID of the current object
140
+ * @param string $object_type The type of object you are working with.
141
+ * Usually `post` (this applies to all post-types).
142
+ * Could also be `comment`, `user` or `options-page`.
143
+ * @param array $cmb This CMB2 object
144
+ */
145
+ do_action( 'cmb2_before_form', $this->cmb_id, $object_id, $object_type, $this );
146
+
147
+ /**
148
+ * Hook before form table begins
149
+ *
150
+ * The first dynamic portion of the hook name, $object_type, is the type of object
151
+ * you are working with. Usually `post` (this applies to all post-types).
152
+ * Could also be `comment`, `user` or `options-page`.
153
+ *
154
+ * The second dynamic portion of the hook name, $this->cmb_id, is the meta_box id.
155
+ *
156
+ * @param array $cmb_id The current box ID
157
+ * @param int $object_id The ID of the current object
158
+ * @param array $cmb This CMB2 object
159
+ */
160
+ do_action( "cmb2_before_{$object_type}_form_{$this->cmb_id}", $object_id, $this );
161
+
162
+ echo '<div class="cmb2-wrap form-table"><div id="cmb2-metabox-', sanitize_html_class( $this->cmb_id ), '" class="cmb2-metabox cmb-field-list">';
163
+
164
+ foreach ( $this->prop( 'fields' ) as $field_args ) {
165
+
166
+ $field_args['context'] = $this->prop( 'context' );
167
+
168
+ if ( 'group' == $field_args['type'] ) {
169
+
170
+ if ( ! isset( $field_args['show_names'] ) ) {
171
+ $field_args['show_names'] = $this->prop( 'show_names' );
172
+ }
173
+ $this->render_group( $field_args );
174
+
175
+ } elseif ( 'hidden' == $field_args['type'] ) {
176
+
177
+ // Save rendering for after the metabox
178
+ $this->add_hidden_field( array(
179
+ 'field_args' => $field_args,
180
+ 'object_type' => $this->object_type(),
181
+ 'object_id' => $this->object_id(),
182
+ ) );
183
+
184
+ } else {
185
+
186
+ $field_args['show_names'] = $this->prop( 'show_names' );
187
+
188
+ // Render default fields
189
+ $field = new CMB2_Field( array(
190
+ 'field_args' => $field_args,
191
+ 'object_type' => $this->object_type(),
192
+ 'object_id' => $this->object_id(),
193
+ ) );
194
+ $field->render_field();
195
+ }
196
+ }
197
+
198
+ echo '</div></div>';
199
+
200
+ $this->render_hidden_fields();
201
+
202
+ /**
203
+ * Hook after form form has been rendered
204
+ *
205
+ * @param array $cmb_id The current box ID
206
+ * @param int $object_id The ID of the current object
207
+ * @param string $object_type The type of object you are working with.
208
+ * Usually `post` (this applies to all post-types).
209
+ * Could also be `comment`, `user` or `options-page`.
210
+ * @param array $cmb This CMB2 object
211
+ */
212
+ do_action( 'cmb2_after_form', $this->cmb_id, $object_id, $object_type, $this );
213
+
214
+ /**
215
+ * Hook after form form has been rendered
216
+ *
217
+ * The dynamic portion of the hook name, $this->cmb_id, is the meta_box id.
218
+ *
219
+ * The first dynamic portion of the hook name, $object_type, is the type of object
220
+ * you are working with. Usually `post` (this applies to all post-types).
221
+ * Could also be `comment`, `user` or `options-page`.
222
+ *
223
+ * @param int $object_id The ID of the current object
224
+ * @param array $cmb This CMB2 object
225
+ */
226
+ do_action( "cmb2_after_{$object_type}_form_{$this->cmb_id}", $object_id, $this );
227
+
228
+ echo "\n<!-- End CMB Fields -->\n";
229
+
230
+ }
231
+
232
+ /**
233
+ * Render a repeatable group
234
+ */
235
+ public function render_group( $args ) {
236
+
237
+ // If field is requesting to be conditionally shown
238
+ if ( isset( $args['show_on_cb'] ) && is_callable( $args['show_on_cb'] ) && ! call_user_func( $args['show_on_cb'], $this ) ) {
239
+ return;
240
+ }
241
+
242
+ if ( ! isset( $args['id'], $args['fields'] ) || ! is_array( $args['fields'] ) ) {
243
+ return;
244
+ }
245
+
246
+ $args['count'] = 0;
247
+ $field_group = new CMB2_Field( array(
248
+ 'field_args' => $args,
249
+ 'object_type' => $this->object_type(),
250
+ 'object_id' => $this->object_id(),
251
+ ) );
252
+ $desc = $field_group->args( 'description' );
253
+ $label = $field_group->args( 'name' );
254
+ $sortable = $field_group->options( 'sortable' ) ? ' sortable' : '';
255
+ $group_val = (array) $field_group->value();
256
+ $nrows = count( $group_val );
257
+ $remove_disabled = $nrows <= 1 ? 'disabled="disabled" ' : '';
258
+
259
+ echo '<div class="cmb-row cmb-repeat-group-wrap"><div class="cmb-td"><div id="', $field_group->id(), '_repeat" class="cmb-nested cmb-field-list cmb-repeatable-group', $sortable, '" style="width:100%;">';
260
+ if ( $desc || $label ) {
261
+ $class = $desc ? ' cmb-group-description' : '';
262
+ echo '<div class="cmb-row', $class, '"><div class="cmb-th">';
263
+ if ( $label ) {
264
+ echo '<h2 class="cmb-group-name">', $label, '</h2>';
265
+ }
266
+ if ( $desc ) {
267
+ echo '<p class="cmb2-metabox-description">', $desc, '</p>';
268
+ }
269
+ echo '</div></div>';
270
+ }
271
+
272
+ if ( ! empty( $group_val ) ) {
273
+
274
+ foreach ( $group_val as $iterator => $field_id ) {
275
+ $this->render_group_row( $field_group, $remove_disabled );
276
+ }
277
+ } else {
278
+ $this->render_group_row( $field_group, $remove_disabled );
279
+ }
280
+
281
+ echo '<div class="cmb-row"><div class="cmb-td"><p class="cmb-add-row"><button data-selector="', $field_group->id(), '_repeat" data-grouptitle="', $field_group->options( 'group_title' ), '" class="cmb-add-group-row button">', $field_group->options( 'add_button' ), '</button></p></div></div>';
282
+
283
+ echo '</div></div></div>';
284
+
285
+ }
286
+
287
+ public function render_group_row( $field_group, $remove_disabled ) {
288
+
289
+ echo '
290
+ <div class="postbox cmb-row cmb-repeatable-grouping" data-iterator="', $field_group->count(), '">
291
+
292
+ <button ', $remove_disabled, 'data-selector="', $field_group->id(), '_repeat" class="dashicons-before dashicons-no-alt cmb-remove-group-row"></button>
293
+ <div class="cmbhandle" title="' , __( 'Click to toggle', 'cmb2' ), '"><br></div>
294
+ <h3 class="cmb-group-title cmbhandle-title"><span>', $field_group->replace_hash( $field_group->options( 'group_title' ) ), '</span></h3>
295
+
296
+ <div class="inside cmb-td cmb-nested cmb-field-list">';
297
+ // Loop and render repeatable group fields
298
+ foreach ( array_values( $field_group->args( 'fields' ) ) as $field_args ) {
299
+ if ( 'hidden' == $field_args['type'] ) {
300
+
301
+ // Save rendering for after the metabox
302
+ $this->add_hidden_field( array(
303
+ 'field_args' => $field_args,
304
+ 'group_field' => $field_group,
305
+ ) );
306
+
307
+ } else {
308
+
309
+ $field_args['show_names'] = $field_group->args( 'show_names' );
310
+ $field_args['context'] = $field_group->args( 'context' );
311
+ $field = new CMB2_Field( array(
312
+ 'field_args' => $field_args,
313
+ 'group_field' => $field_group,
314
+ ) );
315
+ $field->render_field();
316
+ }
317
+ }
318
+ echo '
319
+ <div class="cmb-row cmb-remove-field-row">
320
+ <div class="cmb-remove-row">
321
+ <button ', $remove_disabled, 'data-selector="', $field_group->id(), '_repeat" class="button cmb-remove-group-row alignright">', $field_group->options( 'remove_button' ), '</button>
322
+ </div>
323
+ </div>
324
+
325
+ </div>
326
+ </div>
327
+ ';
328
+
329
+ $field_group->args['count']++;
330
+ }
331
+
332
+ /**
333
+ * Add a hidden field to the list of hidden fields to be rendered later
334
+ * @since 2.0.0
335
+ * @param array $args Array of arguments to be passed to CMB2_Field
336
+ */
337
+ public function add_hidden_field( $args ) {
338
+ $this->hidden_fields[] = new CMB2_Types( new CMB2_Field( $args ) );
339
+ }
340
+
341
+ /**
342
+ * Loop through and output hidden fields
343
+ * @since 2.0.0
344
+ */
345
+ public function render_hidden_fields() {
346
+ if ( ! empty( $this->hidden_fields ) ) {
347
+ foreach ( $this->hidden_fields as $hidden ) {
348
+ $hidden->render();
349
+ }
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Loops through and saves field data
355
+ * @since 1.0.0
356
+ * @param int $object_id Object ID
357
+ * @param string $object_type Type of object being saved. (e.g., post, user, or comment)
358
+ * @param array $data_to_save Array of key => value data for saving. Likely $_POST data.
359
+ */
360
+ public function save_fields( $object_id = 0, $object_type = '', $data_to_save ) {
361
+
362
+ $this->data_to_save = $data_to_save;
363
+ $object_id = $this->object_id( $object_id );
364
+ $object_type = $this->object_type( $object_type );
365
+
366
+ $this->process_fields();
367
+
368
+ // If options page, save the updated options
369
+ if ( 'options-page' == $object_type ) {
370
+ cmb2_options( $object_id )->set();
371
+ }
372
+
373
+ /**
374
+ * Fires after all fields have been saved.
375
+ *
376
+ * The dynamic portion of the hook name, $object_type, refers to the metabox/form's object type
377
+ * Usually `post` (this applies to all post-types).
378
+ * Could also be `comment`, `user` or `options-page`.
379
+ *
380
+ * @param int $object_id The ID of the current object
381
+ * @param array $cmb_id The current box ID
382
+ * @param string $updated All fields that were updated.
383
+ * Will only include fields that had values change.
384
+ * @param array $cmb This CMB2 object
385
+ */
386
+ do_action( "cmb2_save_{$object_type}_fields", $object_id, $this->cmb_id, $this->updated, $this );
387
+
388
+ }
389
+
390
+ /**
391
+ * Process and save form fields
392
+ * @since 2.0.0
393
+ */
394
+ public function process_fields() {
395
+ $this->prop( 'show_on', array() );
396
+
397
+ // save field ids of those that are updated
398
+ $this->updated = array();
399
+
400
+ foreach ( $this->prop( 'fields' ) as $field_args ) {
401
+ $this->process_field( $field_args );
402
+ }
403
+ }
404
+
405
+ /**
406
+ * Process and save a field
407
+ * @since 2.0.0
408
+ * @param array $field_args Array of field arguments
409
+ */
410
+ public function process_field( $field_args ) {
411
+
412
+ switch ( $field_args['type'] ) {
413
+
414
+ case 'group':
415
+ $this->save_group( $field_args );
416
+ break;
417
+
418
+ case 'title':
419
+ // Don't process title fields
420
+ break;
421
+
422
+ default:
423
+
424
+ // Save default fields
425
+ $field = new CMB2_Field( array(
426
+ 'field_args' => $field_args,
427
+ 'object_type' => $this->object_type(),
428
+ 'object_id' => $this->object_id(),
429
+ ) );
430
+
431
+ if ( $field->save_field( $this->data_to_save ) ) {
432
+ $this->updated[] = $field->id();
433
+ }
434
+
435
+ break;
436
+ }
437
+
438
+ }
439
+
440
+ /**
441
+ * Save a repeatable group
442
+ */
443
+ public function save_group( $args ) {
444
+
445
+ if ( ! isset( $args['id'], $args['fields'], $this->data_to_save[ $args['id'] ] ) || ! is_array( $args['fields'] ) ) {
446
+ return;
447
+ }
448
+
449
+ $field_group = new CMB2_Field( array(
450
+ 'field_args' => $args,
451
+ 'object_type' => $this->object_type(),
452
+ 'object_id' => $this->object_id(),
453
+ ) );
454
+ $base_id = $field_group->id();
455
+ $old = $field_group->get_data();
456
+ $group_vals = $this->data_to_save[ $base_id ];
457
+ $saved = array();
458
+ $field_group->index = 0;
459
+
460
+ foreach ( array_values( $field_group->fields() ) as $field_args ) {
461
+ $field = new CMB2_Field( array(
462
+ 'field_args' => $field_args,
463
+ 'group_field' => $field_group,
464
+ ) );
465
+ $sub_id = $field->id( true );
466
+
467
+ foreach ( (array) $group_vals as $field_group->index => $post_vals ) {
468
+
469
+ // Get value
470
+ $new_val = isset( $group_vals[ $field_group->index ][ $sub_id ] )
471
+ ? $group_vals[ $field_group->index ][ $sub_id ]
472
+ : false;
473
+
474
+ // Sanitize
475
+ $new_val = $field->sanitization_cb( $new_val );
476
+
477
+ if ( 'file' == $field->type() && is_array( $new_val ) ) {
478
+ // Add image ID to the array stack
479
+ $saved[ $field_group->index ][ $new_val['field_id'] ] = $new_val['attach_id'];
480
+ // Reset var to url string
481
+ $new_val = $new_val['url'];
482
+ }
483
+
484
+ // Get old value
485
+ $old_val = is_array( $old ) && isset( $old[ $field_group->index ][ $sub_id ] )
486
+ ? $old[ $field_group->index ][ $sub_id ]
487
+ : false;
488
+
489
+ $is_updated = ( ! empty( $new_val ) && $new_val != $old_val );
490
+ $is_removed = ( empty( $new_val ) && ! empty( $old_val ) );
491
+ // Compare values and add to `$updated` array
492
+ if ( $is_updated || $is_removed ) {
493
+ $this->updated[] = $base_id . '::' . $field_group->index . '::' . $sub_id;
494
+ }
495
+
496
+ // Add to `$saved` array
497
+ $saved[ $field_group->index ][ $sub_id ] = $new_val;
498
+
499
+ }
500
+ $saved[ $field_group->index ] = array_filter( $saved[ $field_group->index ] );
501
+ }
502
+ $saved = array_filter( $saved );
503
+
504
+ $field_group->update_data( $saved, true );
505
+ }
506
+
507
+ /**
508
+ * Get object id from global space if no id is provided
509
+ * @since 1.0.0
510
+ * @param integer $object_id Object ID
511
+ * @return integer $object_id Object ID
512
+ */
513
+ public function object_id( $object_id = 0 ) {
514
+
515
+ if ( $object_id ) {
516
+ $this->object_id = $object_id;
517
+ return $this->object_id;
518
+ }
519
+
520
+ if ( $this->object_id ) {
521
+ return $this->object_id;
522
+ }
523
+
524
+ // Try to get our object ID from the global space
525
+ switch ( $this->object_type() ) {
526
+ case 'user':
527
+ $object_id = isset( $_REQUEST['user_id'] ) ? $_REQUEST['user_id'] : $object_id;
528
+ $object_id = ! $object_id && isset( $GLOBALS['user_ID'] ) ? $GLOBALS['user_ID'] : $object_id;
529
+ break;
530
+
531
+ default:
532
+ $object_id = isset( $GLOBALS['post']->ID ) ? $GLOBALS['post']->ID : $object_id;
533
+ $object_id = isset( $_REQUEST['post'] ) ? $_REQUEST['post'] : $object_id;
534
+ break;
535
+ }
536
+
537
+ // reset to id or 0
538
+ $this->object_id = $object_id ? $object_id : 0;
539
+
540
+ return $this->object_id;
541
+ }
542
+
543
+ /**
544
+ * Sets the $object_type based on metabox settings
545
+ * @since 1.0.0
546
+ * @return string Object type
547
+ */
548
+ public function mb_object_type() {
549
+
550
+ if ( null !== $this->mb_object_type ) {
551
+ return $this->mb_object_type;
552
+ }
553
+
554
+ if ( $this->is_options_page_mb() ) {
555
+ $this->mb_object_type = 'options-page';
556
+ return $this->mb_object_type;
557
+ }
558
+
559
+ if ( ! $this->prop( 'object_types' ) ) {
560
+ $this->mb_object_type = 'post';
561
+ return $this->mb_object_type;
562
+ }
563
+
564
+ $type = false;
565
+ // check if 'object_types' is a string
566
+ if ( is_string( $this->prop( 'object_types' ) ) ) {
567
+ $type = $this->prop( 'object_types' );
568
+ }
569
+ // if it's an array of one, extract it
570
+ elseif ( is_array( $this->prop( 'object_types' ) ) && 1 === count( $this->prop( 'object_types' ) ) ) {
571
+ $cpts = $this->prop( 'object_types' );
572
+ $type = is_string( end( $cpts ) )
573
+ ? end( $cpts )
574
+ : false;
575
+ }
576
+
577
+ if ( ! $type ) {
578
+ $this->mb_object_type = 'post';
579
+ return $this->mb_object_type;
580
+ }
581
+
582
+ // Get our object type
583
+ switch ( $type ) {
584
+
585
+ case 'user':
586
+ case 'comment':
587
+ $this->mb_object_type = $type;
588
+ break;
589
+
590
+ default:
591
+ $this->mb_object_type = 'post';
592
+ break;
593
+ }
594
+
595
+ return $this->mb_object_type;
596
+ }
597
+
598
+ /**
599
+ * Determines if metabox is for an options page
600
+ * @since 1.0.1
601
+ * @return boolean True/False
602
+ */
603
+ public function is_options_page_mb() {
604
+ return ( isset( $this->meta_box['show_on']['key'] ) && 'options-page' === $this->meta_box['show_on']['key'] || array_key_exists( 'options-page', $this->meta_box['show_on'] ) );
605
+ }
606
+
607
+ /**
608
+ * Returns the object type
609
+ * @since 1.0.0
610
+ * @return string Object type
611
+ */
612
+ public function object_type( $object_type = '' ) {
613
+ if ( $object_type ) {
614
+ $this->object_type = $object_type;
615
+ return $this->object_type;
616
+ }
617
+
618
+ if ( $this->object_type ) {
619
+ return $this->object_type;
620
+ }
621
+
622
+ global $pagenow;
623
+
624
+ if ( in_array( $pagenow, array( 'user-edit.php', 'profile.php', 'user-new.php' ), true ) ) {
625
+ $this->object_type = 'user';
626
+
627
+ } elseif ( in_array( $pagenow, array( 'edit-comments.php', 'comment.php' ), true ) ) {
628
+ $this->object_type = 'comment';
629
+
630
+ } else {
631
+ $this->object_type = 'post';
632
+ }
633
+
634
+ return $this->object_type;
635
+ }
636
+
637
+ /**
638
+ * Get metabox property and optionally set a fallback
639
+ * @since 2.0.0
640
+ * @param string $property Metabox config property to retrieve
641
+ * @param mixed $fallback Fallback value to set if no value found
642
+ * @return mixed Metabox config property value or false
643
+ */
644
+ public function prop( $property, $fallback = null ) {
645
+ if ( array_key_exists( $property, $this->meta_box ) ) {
646
+ return $this->meta_box[ $property ];
647
+ } elseif ( $fallback ) {
648
+ return $this->meta_box[ $property ] = $fallback;
649
+ }
650
+ }
651
+
652
+ /**
653
+ * Add a field to the metabox
654
+ * @since 2.0.0
655
+ * @param array $field Metabox field config array
656
+ * @param int $position (optional) Position of metabox. 1 for first, etc
657
+ * @return mixed Field id or false
658
+ */
659
+ public function add_field( array $field, $position = 0 ) {
660
+ if ( ! is_array( $field ) || ! array_key_exists( 'id', $field ) ) {
661
+ return false;
662
+ }
663
+
664
+ $this->_add_field_to_array(
665
+ $field,
666
+ $this->meta_box['fields'],
667
+ $position
668
+ );
669
+
670
+ return $field['id'];
671
+ }
672
+
673
+ /**
674
+ * Add a field to the metabox
675
+ * @since 2.0.0
676
+ * @param string $parent_field_id The field id of the group field to add the field
677
+ * @param array $field Metabox field config array
678
+ * @param int $position (optional) Position of metabox. 1 for first, etc
679
+ * @return mixed Array of parent/field ids or false
680
+ */
681
+ public function add_group_field( $parent_field_id, array $field, $position = 0 ) {
682
+ if ( ! array_key_exists( $parent_field_id, $this->meta_box['fields'] ) ) {
683
+ return false;
684
+ }
685
+
686
+ $parent_field = $this->meta_box['fields'][ $parent_field_id ];
687
+
688
+ if ( 'group' !== $parent_field['type'] ) {
689
+ return false;
690
+ }
691
+
692
+ if ( ! isset( $parent_field['fields'] ) ) {
693
+ $this->meta_box['fields'][ $parent_field_id ]['fields'] = array();
694
+ }
695
+
696
+ $this->_add_field_to_array(
697
+ $field,
698
+ $this->meta_box['fields'][ $parent_field_id ]['fields'],
699
+ $position
700
+ );
701
+
702
+ return array( $parent_field_id, $field['id'] );
703
+ }
704
+
705
+ /**
706
+ * Add a field array to a fields array in desired position
707
+ * @since 2.0.2
708
+ * @param array $field Metabox field config array
709
+ * @param array &$fields Array (passed by reference) to append the field (array) to
710
+ * @param integer $position Optionally specify a position in the array to be inserted
711
+ */
712
+ protected function _add_field_to_array( $field, &$fields, $position = 0 ) {
713
+ if ( $position ) {
714
+ cmb2_utils()->array_insert( $fields, array( $field['id'] => $field ), $position );
715
+ } else {
716
+ $fields[ $field['id'] ] = $field;
717
+ }
718
+ }
719
+
720
+ /**
721
+ * Remove a field from the metabox
722
+ * @since 2.0.0
723
+ * @param string $field_id The field id of the field to remove
724
+ * @param string $parent_field_id (optional) The field id of the group field to remove field from
725
+ * @return bool True if field was removed
726
+ */
727
+ public function remove_field( $field_id, $parent_field_id = '' ) {
728
+ $ids = $this->get_field_ids( $field_id, $parent_field_id );
729
+
730
+ if ( ! $ids ) {
731
+ return false;
732
+ }
733
+
734
+ list( $field_id, $sub_field_id ) = $ids;
735
+
736
+ if ( ! $sub_field_id ) {
737
+ unset( $this->meta_box['fields'][ $field_id ] );
738
+ return true;
739
+ }
740
+
741
+ unset( $this->meta_box['fields'][ $field_id ]['fields'][ $sub_field_id ] );
742
+ return true;
743
+ }
744
+
745
+ /**
746
+ * Update or add a property to a field
747
+ * @since 2.0.0
748
+ * @param string $field_id Field id
749
+ * @param string $property Field property to set/update
750
+ * @param mixed $value Value to set the field property
751
+ * @param string $parent_field_id (optional) The field id of the group field to remove field from
752
+ * @return mixed Field id. Strict compare to false, as success can return a falsey value (like 0)
753
+ */
754
+ public function update_field_property( $field_id, $property, $value, $parent_field_id = '' ) {
755
+ $ids = $this->get_field_ids( $field_id, $parent_field_id );
756
+
757
+ if ( ! $ids ) {
758
+ return false;
759
+ }
760
+
761
+ list( $field_id, $sub_field_id ) = $ids;
762
+
763
+ if ( ! $sub_field_id ) {
764
+ $this->meta_box['fields'][ $field_id ][ $property ] = $value;
765
+ return $field_id;
766
+ }
767
+
768
+ $this->meta_box['fields'][ $field_id ]['fields'][ $sub_field_id ][ $property ] = $value;
769
+ return $field_id;
770
+ }
771
+
772
+ /**
773
+ * Check if field ids match a field and return the index/field id
774
+ * @since 2.0.2
775
+ * @param string $field_id Field id
776
+ * @param string $parent_field_id (optional) Parent field id
777
+ * @return mixed Array of field/parent ids, or false
778
+ */
779
+ public function get_field_ids( $field_id, $parent_field_id = '' ) {
780
+ $sub_field_id = $parent_field_id ? $field_id : '';
781
+ $field_id = $parent_field_id ? $parent_field_id : $field_id;
782
+ $fields =& $this->meta_box['fields'];
783
+
784
+ if ( ! array_key_exists( $field_id, $fields ) ) {
785
+ $field_id = $this->search_old_school_array( $field_id, $fields );
786
+ }
787
+
788
+ if ( false === $field_id ) {
789
+ return false;
790
+ }
791
+
792
+ if ( ! $sub_field_id ) {
793
+ return array( $field_id, $sub_field_id );
794
+ }
795
+
796
+ if ( 'group' !== $fields[ $field_id ]['type'] ) {
797
+ return false;
798
+ }
799
+
800
+ if ( ! array_key_exists( $sub_field_id, $fields[ $field_id ]['fields'] ) ) {
801
+ $sub_field_id = $this->search_old_school_array( $sub_field_id, $fields[ $field_id ]['fields'] );
802
+ }
803
+
804
+ return false === $sub_field_id ? false : array( $field_id, $sub_field_id );
805
+ }
806
+
807
+ /**
808
+ * When using the old array filter, it is unlikely field array indexes will be the field id
809
+ * @since 2.0.2
810
+ * @param string $field_id The field id
811
+ * @param array $fields Array of fields to search
812
+ * @return mixed Field index or false
813
+ */
814
+ public function search_old_school_array( $field_id, $fields ) {
815
+ $ids = wp_list_pluck( $fields, 'id' );
816
+ $index = array_search( $field_id, $ids );
817
+ return false !== $index ? $index : false;
818
+ }
819
+
820
+ /**
821
+ * Generate a unique nonce field for each registered meta_box
822
+ * @since 2.0.0
823
+ * @return string unique nonce hidden input
824
+ */
825
+ public function nonce_field() {
826
+ wp_nonce_field( $this->nonce(), $this->nonce(), false, true );
827
+ }
828
+
829
+ /**
830
+ * Generate a unique nonce for each registered meta_box
831
+ * @since 2.0.0
832
+ * @return string unique nonce string
833
+ */
834
+ public function nonce() {
835
+ if ( $this->generated_nonce ) {
836
+ return $this->generated_nonce;
837
+ }
838
+ $this->generated_nonce = sanitize_html_class( 'nonce_' . basename( __FILE__ ) . $this->cmb_id );
839
+ return $this->generated_nonce;
840
+ }
841
+
842
+ /**
843
+ * Magic getter for our object.
844
+ * @param string $field
845
+ * @throws Exception Throws an exception if the field is invalid.
846
+ * @return mixed
847
+ */
848
+ public function __get( $field ) {
849
+ switch ( $field ) {
850
+ case 'cmb_id':
851
+ case 'meta_box':
852
+ case 'updated':
853
+ return $this->{$field};
854
+ default:
855
+ throw new Exception( 'Invalid ' . __CLASS__ . ' property: ' . $field );
856
+ }
857
+ }
858
+
859
+ }
cmb2/includes/CMB2_Ajax.php ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * CMB ajax methods
5
+ * (i.e. a lot of work to get oEmbeds to work with non-post objects)
6
+ *
7
+ * @since 0.9.5
8
+ */
9
+ class CMB2_Ajax {
10
+
11
+
12
+ // Whether to hijack the oembed cache system
13
+ protected $hijack = false;
14
+ protected $object_id = 0;
15
+ protected $embed_args = array();
16
+ protected $object_type = 'post';
17
+ protected $ajax_update = false;
18
+
19
+
20
+ /**
21
+ * Handles our oEmbed ajax request
22
+ * @since 0.9.5
23
+ * @return object oEmbed embed code | fallback | error message
24
+ */
25
+ public function oembed_handler() {
26
+
27
+ // Verify our nonce
28
+ if ( ! ( isset( $_REQUEST['cmb2_ajax_nonce'], $_REQUEST['oembed_url'] ) && wp_verify_nonce( $_REQUEST['cmb2_ajax_nonce'], 'ajax_nonce' ) ) ) {
29
+ die();
30
+ }
31
+
32
+ // Sanitize our search string
33
+ $oembed_string = sanitize_text_field( $_REQUEST['oembed_url'] );
34
+
35
+ // Send back error if empty
36
+ if ( empty( $oembed_string ) ) {
37
+ wp_send_json_error( '<p class="ui-state-error-text">' . __( 'Please Try Again', 'cmb2' ) . '</p>' );
38
+ }
39
+
40
+ // Set width of embed
41
+ $embed_width = isset( $_REQUEST['oembed_width'] ) && intval( $_REQUEST['oembed_width'] ) < 640 ? intval( $_REQUEST['oembed_width'] ) : '640';
42
+
43
+ // Set url
44
+ $oembed_url = esc_url( $oembed_string );
45
+
46
+ // Set args
47
+ $embed_args = array( 'width' => $embed_width );
48
+
49
+ $this->ajax_update = true;
50
+
51
+ // Get embed code (or fallback link)
52
+ $html = $this->get_oembed( array(
53
+ 'url' => $oembed_url,
54
+ 'object_id' => $_REQUEST['object_id'],
55
+ 'object_type' => isset( $_REQUEST['object_type'] ) ? $_REQUEST['object_type'] : 'post',
56
+ 'oembed_args' => $embed_args,
57
+ 'field_id' => $_REQUEST['field_id'],
58
+ ) );
59
+
60
+ wp_send_json_success( $html );
61
+ }
62
+
63
+
64
+ /**
65
+ * Retrieves oEmbed from url/object ID
66
+ * @since 0.9.5
67
+ * @param array $args Arguments for method
68
+ * @return string html markup with embed or fallback
69
+ */
70
+ public function get_oembed( $args ) {
71
+
72
+ global $wp_embed;
73
+
74
+ $oembed_url = esc_url( $args['url'] );
75
+
76
+ // Sanitize object_id
77
+ $this->object_id = is_numeric( $args['object_id'] ) ? absint( $args['object_id'] ) : sanitize_text_field( $args['object_id'] );
78
+
79
+ $args = wp_parse_args( $args, array(
80
+ 'object_type' => 'post',
81
+ 'oembed_args' => $this->embed_args,
82
+ 'field_id' => false,
83
+ 'cache_key' => false,
84
+ ) );
85
+
86
+ $this->embed_args =& $args;
87
+
88
+
89
+ /**
90
+ * Set the post_ID so oEmbed won't fail
91
+ * wp-includes/class-wp-embed.php, WP_Embed::shortcode()
92
+ */
93
+ $wp_embed->post_ID = $this->object_id;
94
+
95
+ // Special scenario if NOT a post object
96
+ if ( isset( $args['object_type'] ) && 'post' != $args['object_type'] ) {
97
+
98
+ if ( 'options-page' == $args['object_type'] ) {
99
+
100
+ // Bogus id to pass some numeric checks. Issue with a VERY large WP install?
101
+ $wp_embed->post_ID = 1987645321;
102
+
103
+ // Use our own cache key to correspond to this field (vs one cache key per url)
104
+ $args['cache_key'] = $args['field_id'] . '_cache';
105
+ }
106
+
107
+ // Ok, we need to hijack the oembed cache system
108
+ $this->hijack = true;
109
+ $this->object_type = $args['object_type'];
110
+
111
+ // Gets ombed cache from our object's meta (vs postmeta)
112
+ add_filter( 'get_post_metadata', array( $this, 'hijack_oembed_cache_get' ), 10, 3 );
113
+
114
+ // Sets ombed cache in our object's meta (vs postmeta)
115
+ add_filter( 'update_post_metadata', array( $this, 'hijack_oembed_cache_set' ), 10, 4 );
116
+
117
+ }
118
+
119
+ $embed_args = '';
120
+
121
+ foreach ( $args['oembed_args'] as $key => $val ) {
122
+ $embed_args .= " $key=\"$val\"";
123
+ }
124
+
125
+ // Ping WordPress for an embed
126
+ $check_embed = $wp_embed->run_shortcode( '[embed' . $embed_args . ']' . $oembed_url . '[/embed]' );
127
+
128
+ // Fallback that WordPress creates when no oEmbed was found
129
+ $fallback = $wp_embed->maybe_make_link( $oembed_url );
130
+
131
+ // Send back our embed
132
+ if ( $check_embed && $check_embed != $fallback ) {
133
+ return '<div class="embed-status">' . $check_embed . '<p class="cmb2-remove-wrapper"><a href="#" class="cmb2-remove-file-button" rel="' . $args['field_id'] . '">' . __( 'Remove Embed', 'cmb2' ) . '</a></p></div>';
134
+ }
135
+
136
+ // Otherwise, send back error info that no oEmbeds were found
137
+ return '<p class="ui-state-error-text">' . sprintf( __( 'No oEmbed Results Found for %s. View more info at', 'cmb2' ), $fallback ) . ' <a href="http://codex.wordpress.org/Embeds" target="_blank">codex.wordpress.org/Embeds</a>.</p>';
138
+
139
+ }
140
+
141
+
142
+ /**
143
+ * Hijacks retrieving of cached oEmbed.
144
+ * Returns cached data from relevant object metadata (vs postmeta)
145
+ *
146
+ * @since 0.9.5
147
+ * @param boolean $check Whether to retrieve postmeta or override
148
+ * @param int $object_id Object ID
149
+ * @param string $meta_key Object metakey
150
+ * @return mixed Object's oEmbed cached data
151
+ */
152
+ public function hijack_oembed_cache_get( $check, $object_id, $meta_key ) {
153
+
154
+ if ( ! $this->hijack || ( $this->object_id != $object_id && 1987645321 !== $object_id ) ) {
155
+ return $check;
156
+ }
157
+
158
+ if ( $this->ajax_update ) {
159
+ return false;
160
+ }
161
+
162
+ // Get cached data
163
+ return ( 'options-page' === $this->object_type )
164
+ ? cmb2_options( $this->object_id )->get( $this->embed_args['cache_key'] )
165
+ : get_metadata( $this->object_type, $this->object_id, $meta_key, true );
166
+
167
+ }
168
+
169
+
170
+ /**
171
+ * Hijacks saving of cached oEmbed.
172
+ * Saves cached data to relevant object metadata (vs postmeta)
173
+ *
174
+ * @since 0.9.5
175
+ * @param boolean $check Whether to continue setting postmeta
176
+ * @param int $object_id Object ID to get postmeta from
177
+ * @param string $meta_key Postmeta's key
178
+ * @param mixed $meta_value Value of the postmeta to be saved
179
+ * @return boolean Whether to continue setting
180
+ */
181
+ public function hijack_oembed_cache_set( $check, $object_id, $meta_key, $meta_value ) {
182
+
183
+ if ( ! $this->hijack || ( $this->object_id != $object_id && 1987645321 !== $object_id ) ) {
184
+ return $check;
185
+ }
186
+
187
+ $this->oembed_cache_set( $meta_key, $meta_value );
188
+
189
+ // Anything other than `null` to cancel saving to postmeta
190
+ return true;
191
+ }
192
+
193
+
194
+ /**
195
+ * Saves the cached oEmbed value to relevant object metadata (vs postmeta)
196
+ *
197
+ * @since 1.3.0
198
+ * @param string $meta_key Postmeta's key
199
+ * @param mixed $meta_value Value of the postmeta to be saved
200
+ */
201
+ public function oembed_cache_set( $meta_key, $meta_value ) {
202
+
203
+ // Cache the result to our metadata
204
+ return ( 'options-page' !== $this->object_type )
205
+ ? update_metadata( $this->object_type, $this->object_id, $meta_key, $meta_value )
206
+ : cmb2_options( $this->object_id )->update( $this->embed_args['cache_key'], $meta_value, true );
207
+ }
208
+
209
+ }
cmb2/includes/CMB2_Boxes.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Stores each CMB2 instance
4
+ */
5
+ class CMB2_Boxes {
6
+
7
+ /**
8
+ * Array of all metabox objects
9
+ * @var array
10
+ * @since 2.0.0
11
+ */
12
+ protected static $meta_boxes = array();
13
+
14
+ public static function add( $meta_box ) {
15
+ self::$meta_boxes[ $meta_box->cmb_id ] = $meta_box;
16
+ }
17
+
18
+ public static function remove( $meta_box_id ) {
19
+ if ( array_key_exists( $meta_box_id, self::$meta_boxes ) ) {
20
+ unset( self::$meta_boxes[ $meta_box_id ] );
21
+ }
22
+ }
23
+
24
+ public static function get( $cmb_id ) {
25
+ if ( empty( self::$meta_boxes ) || empty( self::$meta_boxes[ $cmb_id ] ) ) {
26
+ return false;
27
+ }
28
+
29
+ return self::$meta_boxes[ $cmb_id ];
30
+ }
31
+
32
+ public static function get_all() {
33
+ return self::$meta_boxes;
34
+ }
35
+
36
+ }
cmb2/includes/CMB2_Field.php ADDED
@@ -0,0 +1,892 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * CMB field class
5
+ *
6
+ * @since 1.1.0
7
+ *
8
+ * @method string _id()
9
+ * @method string type()
10
+ * @method mixed fields()
11
+ * @method mixed count()
12
+ */
13
+ class CMB2_Field {
14
+
15
+ /**
16
+ * Metabox object id
17
+ * @var mixed
18
+ * @since 1.1.0
19
+ */
20
+ public $object_id = null;
21
+
22
+ /**
23
+ * Metabox object type
24
+ * @var string
25
+ * @since 1.1.0
26
+ */
27
+ public $object_type = '';
28
+
29
+ /**
30
+ * Field arguments
31
+ * @var mixed
32
+ * @since 1.1.0
33
+ */
34
+ public $args = array();
35
+
36
+ /**
37
+ * Field group object or false (if no group)
38
+ * @var mixed
39
+ * @since 1.1.0
40
+ */
41
+ public $group = false;
42
+
43
+ /**
44
+ * Field meta value
45
+ * @var mixed
46
+ * @since 1.1.0
47
+ */
48
+ public $value = null;
49
+
50
+ /**
51
+ * Field meta value
52
+ * @var mixed
53
+ * @since 1.1.0
54
+ */
55
+ public $escaped_value = null;
56
+
57
+ /**
58
+ * Grouped Field's current numeric index during the save process
59
+ * @var mixed
60
+ * @since 2.0.0
61
+ */
62
+ public $index = 0;
63
+
64
+ /**
65
+ * Array of field options
66
+ * @var array
67
+ * @since 2.0.0
68
+ */
69
+ protected $field_options = array();
70
+
71
+ /**
72
+ * Array of field param callback results
73
+ * @var array
74
+ * @since 2.0.0
75
+ */
76
+ protected $callback_results = array();
77
+
78
+ /**
79
+ * Constructs our field object
80
+ * @since 1.1.0
81
+ * @param array $args Field arguments
82
+ */
83
+ public function __construct( $args ) {
84
+
85
+ if ( ! empty( $args['group_field'] ) ) {
86
+ $this->group = $args['group_field'];
87
+ $this->object_id = $this->group->object_id;
88
+ $this->object_type = $this->group->object_type;
89
+ } else {
90
+ $this->object_id = $args['object_id'];
91
+ $this->object_type = isset( $args['object_type'] ) ? $args['object_type'] : 'post';
92
+ }
93
+
94
+ $this->args = $this->_set_field_defaults( $args['field_args'] );
95
+
96
+ /**
97
+ * Filter whether to override getting of meta value.
98
+ * Returning a non 'cmb2_field_no_override_val' value
99
+ * will effectively short-circuit the value retrieval.
100
+ *
101
+ * @since 2.0.0
102
+ *
103
+ * @param null|array|string $value The value get_metadata() should
104
+ * return - a single metadata value,
105
+ * or an array of values.
106
+ * @param int $object_id Object ID.
107
+ * @param array $field_args All field arguments
108
+ * @param string $object_type Object Type
109
+ * @param CMB2_Field object $field_obj This field object
110
+ */
111
+ $this->value = apply_filters( 'cmb2_override_meta_value', 'cmb2_field_no_override_val', $this->object_id, $this->args(), $this->object_type, $this );
112
+
113
+ /**
114
+ * Filter whether to override getting of meta value.
115
+ *
116
+ * The dynamic portion of the hook, $field_id, refers to the current
117
+ * field id paramater. Returning a non 'cmb2_field_no_override_val' value
118
+ * will effectively short-circuit the value retrieval.
119
+ *
120
+ * @since 2.0.0
121
+ *
122
+ * @param null|array|string $value The value get_metadata() should
123
+ * return - a single metadata value,
124
+ * or an array of values.
125
+ * @param int $object_id Object ID.
126
+ * @param array $field_args All field arguments
127
+ * @param string $object_type Object Type
128
+ * @param CMB2_Field object $field_obj This field object
129
+ */
130
+ $this->value = apply_filters( "cmb2_override_{$this->id( true )}_meta_value", $this->value, $this->object_id, $this->args(), $this->object_type, $this );
131
+
132
+ // If no override, get our meta
133
+ $this->value = 'cmb2_field_no_override_val' === $this->value
134
+ ? $this->get_data()
135
+ : $this->value;
136
+ }
137
+
138
+ /**
139
+ * Non-existent methods fallback to checking for field arguments of the same name
140
+ * @since 1.1.0
141
+ * @param string $name Method name
142
+ * @param array $arguments Array of passed-in arguments
143
+ * @return mixed Value of field argument
144
+ */
145
+ public function __call( $name, $arguments ) {
146
+ $key = isset( $arguments[0] ) ? $arguments[0] : false;
147
+ return $this->args( $name, $key );
148
+ }
149
+
150
+ /**
151
+ * Retrieves the field id
152
+ * @since 1.1.0
153
+ * @param boolean $raw Whether to retrieve pre-modidifed id
154
+ * @return string Field id
155
+ */
156
+ public function id( $raw = false ) {
157
+ $id = $raw ? '_id' : 'id';
158
+ return $this->args( $id );
159
+ }
160
+
161
+ /**
162
+ * Get a field argument
163
+ * @since 1.1.0
164
+ * @param string $key Argument to check
165
+ * @param string $key Sub argument to check
166
+ * @return mixed Argument value or false if non-existent
167
+ */
168
+ public function args( $key = '', $_key = '' ) {
169
+ $vars = $this->_data( 'args', $key );
170
+ if ( $_key ) {
171
+ return isset( $vars[ $_key ] ) ? $vars[ $_key ] : false;
172
+ }
173
+ return $vars;
174
+ }
175
+
176
+ /**
177
+ * Get Field's value
178
+ * @since 1.1.0
179
+ * @param string $key If value is an array, is used to get array key->value
180
+ * @return mixed Field value or false if non-existent
181
+ */
182
+ public function value( $key = '' ) {
183
+ return $this->_data( 'value', $key );
184
+ }
185
+
186
+ /**
187
+ * Retrieve a portion of a field property
188
+ * @since 1.1.0
189
+ * @param string $var Field property to check
190
+ * @param string $key Field property array key to check
191
+ * @return mixed Queried property value or false
192
+ */
193
+ public function _data( $var, $key = '' ) {
194
+ $vars = $this->$var;
195
+ if ( $key ) {
196
+ return isset( $vars[ $key ] ) ? $vars[ $key ] : false;
197
+ }
198
+ return $vars;
199
+ }
200
+
201
+ /**
202
+ * Retrieves metadata/option data
203
+ * @since 1.0.1
204
+ * @param string $field_id Meta key/Option array key
205
+ * @return mixed Meta/Option value
206
+ */
207
+ public function get_data( $field_id = '', $args = array() ) {
208
+ if ( $field_id ) {
209
+ $args['field_id'] = $field_id;
210
+ } else if ( $this->group ) {
211
+ $args['field_id'] = $this->group->id();
212
+ }
213
+
214
+ $a = $this->data_args( $args );
215
+
216
+ $data = 'options-page' === $a['type']
217
+ ? cmb2_options( $a['id'] )->get( $a['field_id'] )
218
+ : get_metadata( $a['type'], $a['id'], $a['field_id'], ( $a['single'] || $a['repeat'] ) );
219
+
220
+ if ( $this->group && $data ) {
221
+ $data = isset( $data[ $this->group->args( 'count' ) ][ $this->args( '_id' ) ] )
222
+ ? $data[ $this->group->args( 'count' ) ][ $this->args( '_id' ) ]
223
+ : false;
224
+ }
225
+ return $data;
226
+ }
227
+
228
+ /**
229
+ * Updates metadata/option data
230
+ * @since 1.0.1
231
+ * @param mixed $new_value Value to update data with
232
+ * @param bool $single Whether data is an array (add_metadata)
233
+ */
234
+ public function update_data( $new_value, $single = true ) {
235
+ $a = $this->data_args( array( 'single' => $single ) );
236
+
237
+ $a[ 'value' ] = $a['repeat'] ? array_values( $new_value ) : $new_value;
238
+
239
+ /**
240
+ * Filter whether to override saving of meta value.
241
+ * Returning a non-null value will effectively short-circuit the function.
242
+ *
243
+ * @since 2.0.0
244
+ *
245
+ * @param null|bool $check Whether to allow updating metadata for the given type.
246
+ * @param array $args Array of data about current field including:
247
+ * 'type' : Current object type
248
+ * 'id' : Current object ID
249
+ * 'field_id' : Current Field ID
250
+ * 'repeat' : Whether current field is repeatable
251
+ * 'single' : Whether to save as a
252
+ * single meta value
253
+ * @param array $field_args All field arguments
254
+ * @param CMB2_Field object $field_obj This field object
255
+ */
256
+ $override = apply_filters( 'cmb2_override_meta_save', null, $a, $this->args(), $this );
257
+
258
+ /**
259
+ * Filter whether to override saving of meta value.
260
+ *
261
+ * The dynamic portion of the hook, $a['field_id'], refers to the current
262
+ * field id paramater. Returning a non-null value
263
+ * will effectively short-circuit the function.
264
+ *
265
+ * @since 2.0.0
266
+ *
267
+ * @param null|bool $check Whether to allow updating metadata for the given type.
268
+ * @param array $args Array of data about current field including:
269
+ * 'type' : Current object type
270
+ * 'id' : Current object ID
271
+ * 'field_id' : Current Field ID
272
+ * 'repeat' : Whether current field is repeatable
273
+ * 'single' : Whether to save as a
274
+ * single meta value
275
+ * @param array $field_args All field arguments
276
+ * @param CMB2_Field object $field_obj This field object
277
+ */
278
+ $override = apply_filters( "cmb2_override_{$a['field_id']}_meta_save", $override, $a, $this->args(), $this );
279
+
280
+ // If override, return that
281
+ if ( null !== $override ) {
282
+ return $override;
283
+ }
284
+ // Options page handling
285
+ if ( 'options-page' === $a['type'] ) {
286
+ return cmb2_options( $a['id'] )->update( $a['field_id'], $a[ 'value' ], false, $a['single'] );
287
+ }
288
+ // Add metadata if not single
289
+ if ( ! $a['single'] ) {
290
+ return add_metadata( $a['type'], $a['id'], $a['field_id'], $a[ 'value' ], false );
291
+ }
292
+ // Delete meta if we have an empty array
293
+ if ( is_array( $a[ 'value' ] ) && empty( $a[ 'value' ] ) ) {
294
+ return delete_metadata( $a['type'], $a['id'], $a['field_id'], $this->value );
295
+ }
296
+
297
+ // Update metadata
298
+ return update_metadata( $a['type'], $a['id'], $a['field_id'], $a[ 'value' ] );
299
+ }
300
+
301
+ /**
302
+ * Removes/updates metadata/option data
303
+ * @since 1.0.1
304
+ * @param string $old Old value
305
+ */
306
+ public function remove_data( $old = '' ) {
307
+ $a = $this->data_args( array( 'old' => $old ) );
308
+
309
+ /**
310
+ * Filter whether to override removing of meta value.
311
+ * Returning a non-null value will effectively short-circuit the function.
312
+ *
313
+ * @since 2.0.0
314
+ *
315
+ * @param null|bool $delete Whether to allow metadata deletion of the given type.
316
+ * @param array $args Array of data about current field including:
317
+ * 'type' : Current object type
318
+ * 'id' : Current object ID
319
+ * 'field_id' : Current Field ID
320
+ * 'repeat' : Whether current field is repeatable
321
+ * 'single' : Whether to save as a
322
+ * single meta value
323
+ * @param array $field_args All field arguments
324
+ * @param CMB2_Field object $field_obj This field object
325
+ */
326
+ $override = apply_filters( 'cmb2_override_meta_remove', null, $a, $this->args(), $this );
327
+
328
+ /**
329
+ * Filter whether to override removing of meta value.
330
+ *
331
+ * The dynamic portion of the hook, $a['field_id'], refers to the current
332
+ * field id paramater. Returning a non-null value
333
+ * will effectively short-circuit the function.
334
+ *
335
+ * @since 2.0.0
336
+ *
337
+ * @param null|bool $delete Whether to allow metadata deletion of the given type.
338
+ * @param array $args Array of data about current field including:
339
+ * 'type' : Current object type
340
+ * 'id' : Current object ID
341
+ * 'field_id' : Current Field ID
342
+ * 'repeat' : Whether current field is repeatable
343
+ * 'single' : Whether to save as a
344
+ * single meta value
345
+ * @param array $field_args All field arguments
346
+ * @param CMB2_Field object $field_obj This field object
347
+ */
348
+ $override = apply_filters( "cmb2_override_{$a['field_id']}_meta_remove", $override, $a, $this->args(), $this );
349
+
350
+ // If no override, remove as usual
351
+ if ( null !== $override ) {
352
+ return $override;
353
+ }
354
+ // Option page handling
355
+ elseif ( 'options-page' === $a['type'] ) {
356
+ return cmb2_options( $a['id'] )->remove( $a['field_id'] );
357
+ }
358
+
359
+ // Remove metadata
360
+ return delete_metadata( $a['type'], $a['id'], $a['field_id'], $old );
361
+ }
362
+
363
+ /**
364
+ * data variables for get/set data methods
365
+ * @since 1.1.0
366
+ * @param array $args Override arguments
367
+ * @return array Updated arguments
368
+ */
369
+ public function data_args( $args = array() ) {
370
+ $args = wp_parse_args( $args, array(
371
+ 'type' => $this->object_type,
372
+ 'id' => $this->object_id,
373
+ 'field_id' => $this->id( true ),
374
+ 'repeat' => $this->args( 'repeatable' ),
375
+ 'single' => ! $this->args( 'multiple' ),
376
+ ) );
377
+ return $args;
378
+ }
379
+
380
+ /**
381
+ * Checks if field has a registered sanitization callback
382
+ * @since 1.0.1
383
+ * @param mixed $meta_value Meta value
384
+ * @return mixed Possibly sanitized meta value
385
+ */
386
+ public function sanitization_cb( $meta_value ) {
387
+
388
+ if ( $this->args( 'repeatable' ) && is_array( $meta_value ) ) {
389
+ // Remove empties
390
+ $meta_value = array_filter( $meta_value );
391
+ }
392
+
393
+ // Check if the field has a registered validation callback
394
+ $cb = $this->maybe_callback( 'sanitization_cb' );
395
+ if ( false === $cb ) {
396
+ // If requesting NO validation, return meta value
397
+ return $meta_value;
398
+ } elseif ( $cb ) {
399
+ // Ok, callback is good, let's run it.
400
+ return call_user_func( $cb, $meta_value, $this->args(), $this );
401
+ }
402
+
403
+ $clean = new CMB2_Sanitize( $this, $meta_value );
404
+ // Validation via 'CMB2_Sanitize' (with fallback filter)
405
+ return $clean->{$this->type()}( $meta_value );
406
+ }
407
+
408
+ /**
409
+ * Process $_POST data to save this field's value
410
+ * @since 2.0.0
411
+ * @param array $data_to_save $_POST data to check
412
+ * @return bool Result of save
413
+ */
414
+ public function save_field( $data_to_save ) {
415
+
416
+ $meta_value = isset( $data_to_save[ $this->id( true ) ] )
417
+ ? $data_to_save[ $this->id( true ) ]
418
+ : null;
419
+
420
+ $new_value = $this->sanitization_cb( $meta_value );
421
+ $old = $this->get_data();
422
+ // $name = $this->id();
423
+ // if ( $this->args( 'multiple' ) && ! $this->args( 'repeatable' ) && ! $this->group ) {
424
+ // $this->remove_data();
425
+ // if ( ! empty( $new_value ) ) {
426
+ // foreach ( $new_value as $add_new ) {
427
+ // $this->updated[] = $name;
428
+ // $this->update_data( $add_new, $name, false );
429
+ // }
430
+ // }
431
+ // } else
432
+ if ( ! cmb2_utils()->isempty( $new_value ) && $new_value !== $old ) {
433
+ return $this->update_data( $new_value );
434
+ } elseif ( cmb2_utils()->isempty( $new_value ) ) {
435
+ return $this->remove_data();
436
+ }
437
+ }
438
+
439
+ /**
440
+ * Checks if field has a callback value
441
+ * @since 1.0.1
442
+ * @param string $cb Callback string
443
+ * @return mixed NULL, false for NO validation, or $cb string if it exists.
444
+ */
445
+ public function maybe_callback( $cb ) {
446
+ $field_args = $this->args();
447
+ if ( ! isset( $field_args[ $cb ] ) ) {
448
+ return;
449
+ }
450
+
451
+ // Check if metabox is requesting NO validation
452
+ $cb = false !== $field_args[ $cb ] && 'false' !== $field_args[ $cb ] ? $field_args[ $cb ] : false;
453
+
454
+ // If requestion NO validation, return false
455
+ if ( ! $cb ) {
456
+ return false;
457
+ }
458
+
459
+ if ( is_callable( $cb ) ) {
460
+ return $cb;
461
+ }
462
+ }
463
+
464
+ /**
465
+ * Determine if current type is excempt from escaping
466
+ * @since 1.1.0
467
+ * @return bool True if exempt
468
+ */
469
+ public function escaping_exception() {
470
+ // These types cannot be escaped
471
+ return in_array( $this->type(), array(
472
+ 'file_list',
473
+ 'multicheck',
474
+ 'text_datetime_timestamp_timezone',
475
+ ) );
476
+ }
477
+
478
+ /**
479
+ * Determine if current type cannot be repeatable
480
+ * @since 1.1.0
481
+ * @param string $type Field type to check
482
+ * @return bool True if type cannot be repeatable
483
+ */
484
+ public function repeatable_exception( $type ) {
485
+ // These types cannot be escaped
486
+ return in_array( $type, array(
487
+ 'file', // Use file_list
488
+ 'radio',
489
+ 'title',
490
+ 'group',
491
+ // @todo Ajax load wp_editor: http://wordpress.stackexchange.com/questions/51776/how-to-load-wp-editor-through-ajax-jquery
492
+ 'wysiwyg',
493
+ 'checkbox',
494
+ 'radio_inline',
495
+ 'taxonomy_radio',
496
+ 'taxonomy_select',
497
+ 'taxonomy_multicheck',
498
+ ) );
499
+ }
500
+
501
+ /**
502
+ * Escape the value before output. Defaults to 'esc_attr()'
503
+ * @since 1.0.1
504
+ * @param mixed $meta_value Meta value
505
+ * @param callable $func Escaping function (if not esc_attr())
506
+ * @return mixed Final value
507
+ */
508
+ public function escaped_value( $func = 'esc_attr', $meta_value = '' ) {
509
+
510
+ if ( ! is_null( $this->escaped_value ) ) {
511
+ return $this->escaped_value;
512
+ }
513
+
514
+ $meta_value = $meta_value ? $meta_value : $this->value();
515
+
516
+ // Check if the field has a registered escaping callback
517
+ if ( $cb = $this->maybe_callback( 'escape_cb' ) ) {
518
+ // Ok, callback is good, let's run it.
519
+ return call_user_func( $cb, $meta_value, $this->args(), $this );
520
+ }
521
+
522
+ // Or custom escaping filter can be used
523
+ $esc = apply_filters( "cmb2_types_esc_{$this->type()}", null, $meta_value, $this->args(), $this );
524
+ if ( null !== $esc ) {
525
+ return $esc;
526
+ }
527
+
528
+ if ( false === $cb || $this->escaping_exception() ) {
529
+ // If requesting NO escaping, return meta value
530
+ return $this->val_or_default( $meta_value );
531
+ }
532
+
533
+ // escaping function passed in?
534
+ $func = $func ? $func : 'esc_attr';
535
+ $meta_value = $this->val_or_default( $meta_value );
536
+
537
+ if ( is_array( $meta_value ) ) {
538
+ foreach ( $meta_value as $key => $value ) {
539
+ $meta_value[ $key ] = call_user_func( $func, $value );
540
+ }
541
+ } else {
542
+ $meta_value = call_user_func( $func, $meta_value );
543
+ }
544
+
545
+ $this->escaped_value = $meta_value;
546
+ return $this->escaped_value;
547
+ }
548
+
549
+ /**
550
+ * Return non-empty value or field default if value IS empty
551
+ * @since 2.0.0
552
+ * @param mixed $meta_value Field value
553
+ * @return mixed Field value, or default value
554
+ */
555
+ public function val_or_default( $meta_value ) {
556
+ return ! cmb2_utils()->isempty( $meta_value ) ? $meta_value : $this->args( 'default' );
557
+ }
558
+
559
+ /**
560
+ * Offset a time value based on timezone
561
+ * @since 1.0.0
562
+ * @return string Offset time string
563
+ */
564
+ public function field_timezone_offset() {
565
+ return cmb2_utils()->timezone_offset( $this->field_timezone() );
566
+ }
567
+
568
+ /**
569
+ * Return timezone string
570
+ * @since 1.0.0
571
+ * @return string Timezone string
572
+ */
573
+ public function field_timezone() {
574
+
575
+ // Is timezone arg set?
576
+ if ( $this->args( 'timezone' ) ) {
577
+ return $this->args( 'timezone' );
578
+ }
579
+ // Is there another meta key with a timezone stored as its value we should use?
580
+ else if ( $this->args( 'timezone_meta_key' ) ) {
581
+ return $this->get_data( $this->args( 'timezone_meta_key' ) );
582
+ }
583
+
584
+ return '';
585
+ }
586
+
587
+ /**
588
+ * Format the timestamp field value based on the field date/time format arg
589
+ * @since 2.0.0
590
+ * @param int $meta_value Timestamp
591
+ * @param string $format Either date_format or time_format
592
+ * @return string Formatted date
593
+ */
594
+ public function format_timestamp( $meta_value, $format = 'date_format' ) {
595
+ return date( stripslashes( $this->args( $format ) ), $meta_value );
596
+ }
597
+
598
+ /**
599
+ * Return a formatted timestamp for a field
600
+ * @since 2.0.0
601
+ * @param string $format Either date_format or time_format
602
+ * @return string Formatted date
603
+ */
604
+ public function get_timestamp_format( $format = 'date_format', $meta_value = 0 ) {
605
+ $meta_value = $meta_value ? $meta_value : $this->escaped_value();
606
+ $meta_value = cmb2_utils()->make_valid_time_stamp( $meta_value );
607
+
608
+ if ( empty( $meta_value ) ) {
609
+ return '';
610
+ }
611
+
612
+ return is_array( $meta_value )
613
+ ? array_map( array( $this, 'format_timestamp' ), $meta_value, $format )
614
+ : $this->format_timestamp( $meta_value, $format );
615
+ }
616
+
617
+ /**
618
+ * Render a field row
619
+ * @since 1.0.0
620
+ */
621
+ public function render_field() {
622
+
623
+ // If field is requesting to not be shown on the front-end
624
+ if ( ! is_admin() && ! $this->args( 'on_front' ) ) {
625
+ return;
626
+ }
627
+
628
+ // If field is requesting to be conditionally shown
629
+ if ( is_callable( $this->args( 'show_on_cb' ) ) && ! call_user_func( $this->args( 'show_on_cb' ), $this ) ) {
630
+ return;
631
+ }
632
+
633
+ $this->peform_param_callback( 'before_row' );
634
+
635
+ printf( "<div class=\"cmb-row %s\">\n", $this->row_classes() );
636
+
637
+ if ( 'title' == $this->type() || ! $this->args( 'show_names' ) ) {
638
+ echo "\t<div class=\"cmb-td\">\n";
639
+
640
+ if ( ! $this->args( 'show_names' ) ) {
641
+ $style = 'title' == $this->type() ? '' : ' style="display:none;"';
642
+ printf( "\n<label%s for=\"%s\">%s</label>\n", $style, $this->id(), $this->args( 'name' ) );
643
+ }
644
+ } else {
645
+
646
+ if ( $this->args( 'name' ) ) {
647
+ printf( '<div class="cmb-th"><label for="%1$s">%2$s</label></div>', $this->id(), $this->args( 'name' ) );
648
+ }
649
+
650
+ echo "\n\t<div class=\"cmb-td\">\n";
651
+ }
652
+
653
+ $this->peform_param_callback( 'before' );
654
+
655
+ $this_type = new CMB2_Types( $this );
656
+ $this_type->render();
657
+
658
+ $this->peform_param_callback( 'after' );
659
+
660
+ echo "\n\t</div>\n</div>";
661
+
662
+ $this->peform_param_callback( 'after_row' );
663
+ }
664
+
665
+ /**
666
+ * Defines the classes for the current CMB field row
667
+ *
668
+ * @since 2.0.0
669
+ * @return string Space concatenated list of classes
670
+ */
671
+ public function row_classes() {
672
+
673
+ $classes = array();
674
+
675
+ /**
676
+ * By default, 'text_url' and 'text' fields get table-like styling
677
+ *
678
+ * @since 2.0.0
679
+ *
680
+ * @param array $field_types The types of fields which should get the 'table-layout' class
681
+ */
682
+ $repeat_table_rows_types = apply_filters( 'cmb2_repeat_table_row_types', array(
683
+ 'text_url', 'text',
684
+ ) );
685
+
686
+ $conditional_classes = array(
687
+ 'cmb-type-' . str_replace( '_', '-', sanitize_html_class( $this->type() ) ) => true,
688
+ 'cmb2-id-' . str_replace( '_', '-', sanitize_html_class( $this->id() ) ) => true,
689
+ 'cmb-repeat' => $this->args( 'repeatable' ),
690
+ 'cmb-repeat-group-field' => $this->group,
691
+ 'cmb-inline' => $this->args( 'inline' ),
692
+ 'table-layout' => in_array( $this->type(), $repeat_table_rows_types ),
693
+ );
694
+
695
+ foreach ( $conditional_classes as $class => $condition ) {
696
+ if ( $condition ) {
697
+ $classes[] = $class;
698
+ }
699
+ }
700
+
701
+ if ( $added_classes = $this->get_param_callback_result( 'row_classes', false ) ) {
702
+ $added_classes = is_array( $added_classes ) ? implode( ' ', $added_classes ) : (string) $added_classes;
703
+ }
704
+
705
+ if ( $added_classes ) {
706
+ $classes[] = esc_attr( $added_classes );
707
+ }
708
+
709
+ /**
710
+ * Globally filter row classes
711
+ *
712
+ * @since 2.0.0
713
+ *
714
+ * @param string $classes Space-separated list of row classes
715
+ * @param CMB2_Field object $field This field object
716
+ */
717
+ return apply_filters( 'cmb2_row_classes', implode( ' ', $classes ), $this );
718
+ }
719
+
720
+ /**
721
+ * Displays the results of the param callbacks.
722
+ *
723
+ * @since 2.0.0
724
+ * @param string $param Field parameter
725
+ */
726
+ public function peform_param_callback( $param ) {
727
+ echo $this->get_param_callback_result( $param );
728
+ }
729
+
730
+ /**
731
+ * Store results of the param callbacks for continual access
732
+ * @since 2.0.0
733
+ * @param string $param Field parameter
734
+ * @param bool $echo Whether field should be 'echoed'
735
+ * @return mixed Results of param/param callback
736
+ */
737
+ public function get_param_callback_result( $param, $echo = true ) {
738
+
739
+ // If we've already retrieved this param's value,
740
+ if ( array_key_exists( $param, $this->callback_results ) ) {
741
+ // send it back
742
+ return $this->callback_results[ $param ];
743
+ }
744
+
745
+ if ( $cb = $this->maybe_callback( $param ) ) {
746
+ if ( $echo ) {
747
+ // Ok, callback is good, let's run it and store the result
748
+ ob_start();
749
+ echo call_user_func( $cb, $this->args(), $this );
750
+ // grab the result from the output buffer and store it
751
+ $this->callback_results[ $param ] = ob_get_contents();
752
+ ob_end_clean();
753
+ } else {
754
+ $this->callback_results[ $param ] = call_user_func( $cb, $this->args(), $this );
755
+ }
756
+
757
+ return $this->callback_results[ $param ];
758
+ }
759
+
760
+ // Otherwise just get whatever is there
761
+ $this->callback_results[ $param ] = $this->args( $param );
762
+
763
+ return $this->callback_results[ $param ];
764
+ }
765
+
766
+ /**
767
+ * Replaces a hash key - {#} - with the repeatable count
768
+ * @since 1.2.0
769
+ * @param string $value Value to update
770
+ * @return string Updated value
771
+ */
772
+ public function replace_hash( $value ) {
773
+ // Replace hash with 1 based count
774
+ return str_ireplace( '{#}', ( $this->count() + 1 ), $value );
775
+ }
776
+
777
+ /**
778
+ * Retrieve options args. Calls options_cb if it exists.
779
+ * @since 2.0.0
780
+ * @param string $key Specific option to retrieve
781
+ * @return array Array of options
782
+ */
783
+ public function options( $key = '' ) {
784
+ if ( ! empty( $this->field_options ) ) {
785
+ if ( $key ) {
786
+ return array_key_exists( $key, $this->field_options ) ? $this->field_options[ $key ] : false;
787
+ }
788
+
789
+ return $this->field_options;
790
+ }
791
+
792
+ $this->field_options = (array) $this->args['options'];
793
+
794
+ if ( is_callable( $this->args['options_cb'] ) ) {
795
+ $options = call_user_func( $this->args['options_cb'], $this );
796
+
797
+ if ( $options && is_array( $options ) ) {
798
+ $this->field_options += $options;
799
+ }
800
+ }
801
+
802
+ if ( $key ) {
803
+ return array_key_exists( $key, $this->field_options ) ? $this->field_options[ $key ] : false;
804
+ }
805
+
806
+ return $this->field_options;
807
+ }
808
+
809
+ /**
810
+ * Fills in empty field parameters with defaults
811
+ * @since 1.1.0
812
+ * @param array $args Metabox field config array
813
+ */
814
+ public function _set_field_defaults( $args ) {
815
+
816
+ // Set up blank or default values for empty ones
817
+ $args = wp_parse_args( $args, array(
818
+ 'type' => '',
819
+ 'name' => '',
820
+ 'desc' => '',
821
+ 'before' => '',
822
+ 'after' => '',
823
+ 'options_cb' => '',
824
+ 'options' => array(),
825
+ 'attributes' => array(),
826
+ 'protocols' => null,
827
+ 'default' => null,
828
+ 'select_all_button' => true,
829
+ 'multiple' => false,
830
+ 'repeatable' => false,
831
+ 'inline' => false,
832
+ 'on_front' => true,
833
+ 'show_names' => true,
834
+ 'date_format' => 'm\/d\/Y',
835
+ 'time_format' => 'h:i A',
836
+ 'description' => isset( $args['desc'] ) ? $args['desc'] : '',
837
+ 'preview_size' => 'file' == $args['type'] ? array( 350, 350 ) : array( 50, 50 ),
838
+ ) );
839
+
840
+ // Allow a filter override of the default value
841
+ $args['default'] = apply_filters( 'cmb2_default_filter', $args['default'], $this );
842
+ // $args['multiple'] = isset( $args['multiple'] ) ? $args['multiple'] : ( 'multicheck' == $args['type'] ? true : false );
843
+ $args['repeatable'] = $args['repeatable'] && ! $this->repeatable_exception( $args['type'] );
844
+ $args['inline'] = $args['inline'] || false !== stripos( $args['type'], '_inline' );
845
+
846
+ // options param can be passed a callback as well
847
+ if ( is_callable( $args['options'] ) ) {
848
+ $args['options_cb'] = $args['options'];
849
+ $args['options'] = array();
850
+ }
851
+
852
+ $args['options'] = 'group' == $args['type'] ? wp_parse_args( $args['options'], array(
853
+ 'add_button' => __( 'Add Group', 'cmb2' ),
854
+ 'remove_button' => __( 'Remove Group', 'cmb2' ),
855
+ ) ) : $args['options'];
856
+
857
+ $args['_id'] = $args['id'];
858
+ $args['_name'] = $args['id'];
859
+
860
+ if ( $this->group ) {
861
+
862
+ $args['id'] = $this->group->args( 'id' ) . '_' . $this->group->args( 'count' ) . '_' . $args['id'];
863
+ $args['_name'] = $this->group->args( 'id' ) . '[' . $this->group->args( 'count' ) . '][' . $args['_name'] . ']';
864
+ }
865
+
866
+ if ( 'wysiwyg' == $args['type'] ) {
867
+ $args['id'] = strtolower( str_ireplace( '-', '_', $args['id'] ) );
868
+ $args['options']['textarea_name'] = $args['_name'];
869
+ }
870
+
871
+ $option_types = apply_filters( 'cmb2_all_or_nothing_types', array( 'taxonomy_select', 'taxonomy_radio', 'taxonomy_radio_inline' ), $this );
872
+
873
+ if ( in_array( $args['type'], $option_types, true ) ) {
874
+
875
+ $args['show_option_none'] = isset( $args['show_option_none'] ) ? $args['show_option_none'] : __( 'None', 'cmb2' );
876
+ $args['show_option_all'] = isset( $args['show_option_all'] ) ? $args['show_option_all'] : __( 'All', 'cmb2' ); // @todo: implementation
877
+
878
+ }
879
+
880
+ return $args;
881
+ }
882
+
883
+ /**
884
+ * Updates attributes array values unless they exist from the field config array
885
+ * @since 1.1.0
886
+ * @param array $attrs Array of attributes to update
887
+ */
888
+ public function maybe_set_attributes( $attrs = array() ) {
889
+ return wp_parse_args( $this->args['attributes'], $attrs );
890
+ }
891
+
892
+ }
cmb2/includes/CMB2_Options.php ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Retrieves an instance of CMB2_Option based on the option key
5
+ */
6
+ class CMB2_Options {
7
+ /**
8
+ * Array of all CMB2_Option instances
9
+ * @var array
10
+ * @since 1.0.0
11
+ */
12
+ protected static $option_sets = array();
13
+
14
+ public static function get( $option_key ) {
15
+
16
+ if ( empty( self::$option_sets ) || empty( self::$option_sets[ $option_key ] ) ) {
17
+ self::$option_sets[ $option_key ] = new CMB2_Option( $option_key );
18
+ }
19
+
20
+ return self::$option_sets[ $option_key ];
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Handles getting/setting of values to an option array
26
+ * for a specific option key
27
+ */
28
+ class CMB2_Option {
29
+
30
+ /**
31
+ * Options array
32
+ * @var array
33
+ */
34
+ protected $options = array();
35
+
36
+ /**
37
+ * Current option key
38
+ * @var string
39
+ */
40
+ protected $key = '';
41
+
42
+ /**
43
+ * Initiate option object
44
+ * @since 2.0.0
45
+ */
46
+ public function __construct( $option_key ) {
47
+ $this->key = $option_key;
48
+ }
49
+
50
+ /**
51
+ * Delete the option from the db
52
+ * @since 2.0.0
53
+ * @return bool Delete success or failure
54
+ */
55
+ public function delete_option() {
56
+ $this->options = delete_option( $this->key );
57
+ return $this->options;
58
+ }
59
+
60
+ /**
61
+ * Removes an option from an option array
62
+ * @since 1.0.1
63
+ * @param string $field_id Option array field key
64
+ * @return array Modified options
65
+ */
66
+ public function remove( $field_id, $resave = false ) {
67
+
68
+ $this->get_options();
69
+
70
+ if ( isset( $this->options[ $field_id ] ) ) {
71
+ unset( $this->options[ $field_id ] );
72
+ }
73
+
74
+ if ( $resave ) {
75
+ $this->set();
76
+ }
77
+
78
+ return $this->options;
79
+ }
80
+
81
+ /**
82
+ * Retrieves an option from an option array
83
+ * @since 1.0.1
84
+ * @param string $field_id Option array field key
85
+ * @param mixed $default Fallback value for the option
86
+ * @return array Requested field or default
87
+ */
88
+ function get( $field_id, $default = false ) {
89
+ $opts = $this->get_options();
90
+
91
+ if ( 'all' == $field_id ) {
92
+ return $opts;
93
+ } elseif ( array_key_exists( $field_id, $opts ) ) {
94
+ return false !== $opts[ $field_id ] ? $opts[ $field_id ] : $default;
95
+ }
96
+
97
+ return $default;
98
+ }
99
+
100
+ /**
101
+ * Updates Option data
102
+ * @since 1.0.1
103
+ * @param string $field_id Option array field key
104
+ * @param mixed $value Value to update data with
105
+ * @param bool $resave Whether to re-save the data
106
+ * @param bool $single Whether data should not be an array
107
+ * @return boolean Return status of update
108
+ */
109
+ function update( $field_id, $value = '', $resave = false, $single = true ) {
110
+ $this->get_options();
111
+
112
+ if ( true !== $field_id ) {
113
+
114
+ if ( ! $single ) {
115
+ // If multiple, add to array
116
+ $this->options[ $field_id ][] = $value;
117
+ } else {
118
+ $this->options[ $field_id ] = $value;
119
+ }
120
+
121
+ }
122
+
123
+ if ( $resave || true === $field_id ) {
124
+ return $this->set();
125
+ }
126
+
127
+ return true;
128
+ }
129
+
130
+ /**
131
+ * Saves the option array
132
+ * Needs to be run after finished using remove/update_option
133
+ * @uses apply_filters() Calls 'cmb2_override_option_save_{$this->key}' hook
134
+ * to allow overwriting the option value to be stored.
135
+ *
136
+ * @since 1.0.1
137
+ * @param array $options Optional options to override
138
+ * @return bool Success/Failure
139
+ */
140
+ function set( $options = array() ) {
141
+ $this->options = ! empty( $options ) ? $options : $this->options;
142
+
143
+ $test_save = apply_filters( "cmb2_override_option_save_{$this->key}", 'cmb2_no_override_option_save', $this->options, $this );
144
+
145
+ if ( 'cmb2_no_override_option_save' !== $test_save ) {
146
+ return $test_save;
147
+ }
148
+
149
+ // If no override, update the option
150
+ return update_option( $this->key, $this->options );
151
+ }
152
+
153
+ /**
154
+ * Retrieve option value based on name of option.
155
+ * @uses apply_filters() Calls 'cmb2_override_option_get_{$this->key}' hook to allow
156
+ * overwriting the option value to be retrieved.
157
+ *
158
+ * @since 1.0.1
159
+ * @param mixed $default Optional. Default value to return if the option does not exist.
160
+ * @return mixed Value set for the option.
161
+ */
162
+ function get_options( $default = null ) {
163
+ if ( empty( $this->options ) ) {
164
+
165
+ $test_get = apply_filters( "cmb2_override_option_get_{$this->key}", 'cmb2_no_override_option_get', $default, $this );
166
+
167
+ if ( 'cmb2_no_override_option_get' !== $test_get ) {
168
+ $this->options = $test_get;
169
+ } else {
170
+ // If no override, get the option
171
+ $this->options = get_option( $this->key, $default );
172
+ }
173
+ }
174
+
175
+ return (array) $this->options;
176
+ }
177
+
178
+ }
cmb2/includes/CMB2_Sanitize.php ADDED
@@ -0,0 +1,376 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * CMB field validation
5
+ * @since 0.0.4
6
+ * @method string _id()
7
+ */
8
+ class CMB2_Sanitize {
9
+
10
+ /**
11
+ * A CMB field object
12
+ * @var CMB2_Field object
13
+ */
14
+ public $field;
15
+
16
+ /**
17
+ * Field's $_POST value
18
+ * @var mixed
19
+ */
20
+ public $value;
21
+
22
+ /**
23
+ * Setup our class vars
24
+ * @since 1.1.0
25
+ * @param CMB2_Field $field A CMB field object
26
+ * @param mixed $value Field value
27
+ */
28
+ public function __construct( CMB2_Field $field, $value ) {
29
+ $this->field = $field;
30
+ $this->value = stripslashes_deep( $value ); // get rid of those evil magic quotes
31
+ }
32
+
33
+ /**
34
+ * Catchall method if field's 'sanitization_cb' is NOT defined, or field type does not have a corresponding validation method
35
+ * @since 1.0.0
36
+ * @param string $name Non-existent method name
37
+ * @param array $arguments All arguments passed to the method
38
+ */
39
+ public function __call( $name, $arguments ) {
40
+ list( $value ) = $arguments;
41
+ return $this->default_sanitization( $value );
42
+ }
43
+
44
+ /**
45
+ * Default fallback sanitization method. Applies filters.
46
+ * @since 1.0.2
47
+ * @param mixed $value Meta value
48
+ */
49
+ public function default_sanitization( $value ) {
50
+
51
+ /**
52
+ * Filter the value before it is saved.
53
+ *
54
+ * The dynamic portion of the hook name, $this->field->type(), refers to the field type.
55
+ *
56
+ * Passing a non-null value to the filter will short-circuit saving
57
+ * the field value, saving the passed value instead.
58
+ *
59
+ * @param bool|mixed $override_value Sanitization/Validation override value to return.
60
+ * Default false to skip it.
61
+ * @param mixed $value The value to be saved to this field.
62
+ * @param int $object_id The ID of the object where the value will be saved
63
+ * @param array $field_args The current field's arguments
64
+ * @param object $sanitizer This `CMB2_Sanitize` object
65
+ */
66
+ $override_value = apply_filters( "cmb2_sanitize_{$this->field->type()}", null, $value, $this->field->object_id, $this->field->args(), $this );
67
+ /**
68
+ * DEPRECATED. See documentation above.
69
+ */
70
+ $override_value = apply_filters( "cmb2_validate_{$this->field->type()}", $override_value, $value, $this->field->object_id, $this->field->args(), $this );
71
+
72
+ if ( null !== $override_value ) {
73
+ return $override_value;
74
+ }
75
+
76
+ switch ( $this->field->type() ) {
77
+ case 'wysiwyg':
78
+ // $value = wp_kses( $value );
79
+ // break;
80
+ case 'textarea_small':
81
+ return $this->textarea( $value );
82
+ case 'taxonomy_select':
83
+ case 'taxonomy_radio':
84
+ case 'taxonomy_multicheck':
85
+ if ( $this->field->args( 'taxonomy' ) ) {
86
+ return wp_set_object_terms( $this->field->object_id, $value, $this->field->args( 'taxonomy' ) );
87
+ }
88
+ case 'multicheck':
89
+ case 'file_list':
90
+ case 'oembed':
91
+ // no filtering
92
+ return $value;
93
+ default:
94
+ // Handle repeatable fields array
95
+ // We'll fallback to 'sanitize_text_field'
96
+ return is_array( $value ) ? array_map( 'sanitize_text_field', $value ) : call_user_func( 'sanitize_text_field', $value );
97
+ }
98
+ }
99
+
100
+ /**
101
+ * Simple checkbox validation
102
+ * @since 1.0.1
103
+ * @param mixed $value 'on' or false
104
+ * @return string|false 'on' or false
105
+ */
106
+ public function checkbox( $value ) {
107
+ return $value === 'on' ? 'on' : false;
108
+ }
109
+
110
+ /**
111
+ * Validate url in a meta value
112
+ * @since 1.0.1
113
+ * @param string $value Meta value
114
+ * @return string Empty string or escaped url
115
+ */
116
+ public function text_url( $value ) {
117
+ $protocols = $this->field->args( 'protocols' );
118
+ // for repeatable
119
+ if ( is_array( $value ) ) {
120
+ foreach ( $value as $key => $val ) {
121
+ $value[ $key ] = $val ? esc_url_raw( $val, $protocols ) : $this->field->args( 'default' );
122
+ }
123
+ } else {
124
+ $value = $value ? esc_url_raw( $value, $protocols ) : $this->field->args( 'default' );
125
+ }
126
+
127
+ return $value;
128
+ }
129
+
130
+ public function colorpicker( $value ) {
131
+ // for repeatable
132
+ if ( is_array( $value ) ) {
133
+ $check = $value;
134
+ $value = array();
135
+ foreach ( $check as $key => $val ) {
136
+ if ( $val && '#' != $val ) {
137
+ $value[ $key ] = esc_attr( $val );
138
+ }
139
+ }
140
+ } else {
141
+ $value = ! $value || '#' == $value ? '' : esc_attr( $value );
142
+ }
143
+ return $value;
144
+ }
145
+
146
+ /**
147
+ * Validate email in a meta value
148
+ * @since 1.0.1
149
+ * @param string $value Meta value
150
+ * @return string Empty string or sanitized email
151
+ */
152
+ public function text_email( $value ) {
153
+ // for repeatable
154
+ if ( is_array( $value ) ) {
155
+ foreach ( $value as $key => $val ) {
156
+ $val = trim( $val );
157
+ $value[ $key ] = is_email( $val ) ? $val : '';
158
+ }
159
+ } else {
160
+ $value = trim( $value );
161
+ $value = is_email( $value ) ? $value : '';
162
+ }
163
+
164
+ return $value;
165
+ }
166
+
167
+ /**
168
+ * Validate money in a meta value
169
+ * @since 1.0.1
170
+ * @param string $value Meta value
171
+ * @return string Empty string or sanitized money value
172
+ */
173
+ public function text_money( $value ) {
174
+
175
+ global $wp_locale;
176
+
177
+ $search = array( $wp_locale->number_format['thousands_sep'], $wp_locale->number_format['decimal_point'] );
178
+ $replace = array( '', '.' );
179
+
180
+ // for repeatable
181
+ if ( is_array( $value ) ) {
182
+ foreach ( $value as $key => $val ) {
183
+ $value[ $key ] = number_format_i18n( (float) str_ireplace( $search, $replace, $val ), 2 );
184
+ }
185
+ } else {
186
+ $value = number_format_i18n( (float) str_ireplace( $search, $replace, $value ), 2 );
187
+ }
188
+
189
+ return $value;
190
+ }
191
+
192
+ /**
193
+ * Converts text date to timestamp
194
+ * @since 1.0.2
195
+ * @param string $value Meta value
196
+ * @return string Timestring
197
+ */
198
+ public function text_date_timestamp( $value ) {
199
+ return is_array( $value ) ? array_map( 'strtotime', $value ) : strtotime( $value );
200
+ }
201
+
202
+ /**
203
+ * Datetime to timestamp
204
+ * @since 1.0.1
205
+ * @param string $value Meta value
206
+ * @return string Timestring
207
+ */
208
+ public function text_datetime_timestamp( $value, $repeat = false ) {
209
+
210
+ $test = is_array( $value ) ? array_filter( $value ) : '';
211
+ if ( empty( $test ) ) {
212
+ return '';
213
+ }
214
+
215
+ if ( $repeat_value = $this->_check_repeat( $value, __FUNCTION__, $repeat ) ) {
216
+ return $repeat_value;
217
+ }
218
+
219
+ $value = strtotime( $value['date'] . ' ' . $value['time'] );
220
+
221
+ if ( $tz_offset = $this->field->field_timezone_offset() ) {
222
+ $value += $tz_offset;
223
+ }
224
+
225
+ return $value;
226
+ }
227
+
228
+ /**
229
+ * Datetime to imestamp with timezone
230
+ * @since 1.0.1
231
+ * @param string $value Meta value
232
+ * @return string Timestring
233
+ */
234
+ public function text_datetime_timestamp_timezone( $value, $repeat = false ) {
235
+
236
+ $test = is_array( $value ) ? array_filter( $value ) : '';
237
+ if ( empty( $test ) ) {
238
+ return '';
239
+ }
240
+
241
+ if ( $repeat_value = $this->_check_repeat( $value, __FUNCTION__, $repeat ) ) {
242
+ return $repeat_value;
243
+ }
244
+
245
+ $tzstring = null;
246
+
247
+ if ( is_array( $value ) && array_key_exists( 'timezone', $value ) ) {
248
+ $tzstring = $value['timezone'];
249
+ }
250
+
251
+ if ( empty( $tzstring ) ) {
252
+ $tzstring = cmb2_utils()->timezone_string();
253
+ }
254
+
255
+ $offset = cmb2_utils()->timezone_offset( $tzstring );
256
+
257
+ if ( 'UTC' === substr( $tzstring, 0, 3 ) ) {
258
+ $tzstring = timezone_name_from_abbr( '', $offset, 0 );
259
+ }
260
+
261
+ $value = new DateTime( $value['date'] . ' ' . $value['time'], new DateTimeZone( $tzstring ) );
262
+ $value = serialize( $value );
263
+
264
+ return $value;
265
+ }
266
+
267
+ /**
268
+ * Sanitize textareas and wysiwyg fields
269
+ * @since 1.0.1
270
+ * @param string $value Meta value
271
+ * @return string Sanitized data
272
+ */
273
+ public function textarea( $value ) {
274
+ return is_array( $value ) ? array_map( 'wp_kses_post', $value ) : wp_kses_post( $value );
275
+ }
276
+
277
+ /**
278
+ * Sanitize code textareas
279
+ * @since 1.0.2
280
+ * @param string $value Meta value
281
+ * @return string Sanitized data
282
+ */
283
+ public function textarea_code( $value, $repeat = false ) {
284
+ if ( $repeat_value = $this->_check_repeat( $value, __FUNCTION__, $repeat ) ) {
285
+ return $repeat_value;
286
+ }
287
+
288
+ return htmlspecialchars_decode( stripslashes( $value ) );
289
+ }
290
+
291
+ /**
292
+ * Peforms saving of `file` attachement's ID
293
+ * @since 1.1.0
294
+ * @param string $value File url
295
+ */
296
+ public function _save_file_id( $value ) {
297
+ $group = $this->field->group;
298
+ $args = $this->field->args();
299
+ $args['id'] = $args['_id'] . '_id';
300
+
301
+ unset( $args['_id'], $args['_name'] );
302
+ // And get new field object
303
+ $field = new CMB2_Field( array(
304
+ 'field_args' => $args,
305
+ 'group_field' => $group,
306
+ 'object_id' => $this->field->object_id,
307
+ 'object_type' => $this->field->object_type,
308
+ ) );
309
+ $id_key = $field->_id();
310
+ $id_val_old = $field->escaped_value( 'absint' );
311
+
312
+ if ( $group ) {
313
+ // Check group $_POST data
314
+ $i = $group->index;
315
+ $base_id = $group->_id();
316
+ $id_val = isset( $_POST[ $base_id ][ $i ][ $id_key ] ) ? absint( $_POST[ $base_id ][ $i ][ $id_key ] ) : 0;
317
+
318
+ } else {
319
+ // Check standard $_POST data
320
+ $id_val = isset( $_POST[ $field->id() ] ) ? $_POST[ $field->id() ] : null;
321
+
322
+ }
323
+
324
+ // If there is no ID saved yet, try to get it from the url
325
+ if ( $value && ! $id_val ) {
326
+ $id_val = cmb2_utils()->image_id_from_url( $value );
327
+ }
328
+
329
+ if ( $group ) {
330
+ return array(
331
+ 'attach_id' => $id_val,
332
+ 'field_id' => $id_key,
333
+ );
334
+ }
335
+
336
+ if ( $id_val && $id_val != $id_val_old ) {
337
+ return $field->update_data( $id_val );
338
+ } elseif ( empty( $id_val ) && $id_val_old ) {
339
+ return $field->remove_data( $id_val_old );
340
+ }
341
+ }
342
+
343
+ /**
344
+ * Handles saving of attachment post ID and sanitizing file url
345
+ * @since 1.1.0
346
+ * @param string $value File url
347
+ * @return string Sanitized url
348
+ */
349
+ public function file( $value ) {
350
+ $id_value = $this->_save_file_id( $value );
351
+ $clean = $this->text_url( $value );
352
+
353
+ // Return an array with url/id if saving a group field
354
+ return $this->field->group ? array_merge( array( 'url' => $clean), $id_value ) : $clean;
355
+ }
356
+
357
+ /**
358
+ * If repeating, loop through and re-apply sanitization method
359
+ * @since 1.1.0
360
+ * @param mixed $value Meta value
361
+ * @param string $method Class method
362
+ * @param bool $repeat Whether repeating or not
363
+ * @return mixed Sanitized value
364
+ */
365
+ public function _check_repeat( $value, $method, $repeat ) {
366
+ if ( $repeat || ! $this->field->args( 'repeatable' ) ) {
367
+ return;
368
+ }
369
+ $new_value = array();
370
+ foreach ( $value as $iterator => $val ) {
371
+ $new_value[] = $this->$method( $val, true );
372
+ }
373
+ return $new_value;
374
+ }
375
+
376
+ }
cmb2/includes/CMB2_Show_Filters.php ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Show On Filters
5
+ * Use the 'cmb2_show_on' filter to further refine the conditions under which a metabox is displayed.
6
+ * Below you can limit it by ID and page template
7
+ *
8
+ * All methods in this class are automatically filtered
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ class CMB2_Show_Filters {
13
+
14
+ /**
15
+ * Get Show_on key. backwards compatible w/ 'key' indexes
16
+ *
17
+ * @since 2.0.0
18
+ *
19
+ * @param array $meta_box_args Metabox config array
20
+ *
21
+ * @return mixed show_on key or false
22
+ */
23
+ private static function get_show_on_key( $meta_box_args ) {
24
+ $show_on = isset( $meta_box_args['show_on'] ) ? (array) $meta_box_args['show_on'] : false;
25
+ if ( $show_on && is_array( $show_on ) ) {
26
+
27
+ if ( array_key_exists( 'key', $show_on ) ) {
28
+ return $show_on['key'];
29
+ }
30
+
31
+ $keys = array_keys( $show_on );
32
+ return $keys[0];
33
+ }
34
+
35
+ return false;
36
+ }
37
+
38
+ /**
39
+ * Get Show_on value. backwards compatible w/ 'value' indexes
40
+ *
41
+ * @since 2.0.0
42
+ *
43
+ * @param array $meta_box_args Metabox config array
44
+ *
45
+ * @return mixed show_on value or false
46
+ */
47
+ private static function get_show_on_value( $meta_box_args ) {
48
+ $show_on = isset( $meta_box_args['show_on'] ) ? (array) $meta_box_args['show_on'] : false;
49
+
50
+ if ( $show_on && is_array( $show_on ) ) {
51
+
52
+ if ( array_key_exists( 'value', $show_on ) ) {
53
+ return $show_on['value'];
54
+ }
55
+
56
+ $keys = array_keys( $show_on );
57
+
58
+ return $show_on[ $keys[0] ];
59
+ }
60
+
61
+ return array();
62
+ }
63
+
64
+ /**
65
+ * Add metaboxes for an specific ID
66
+ * @since 1.0.0
67
+ * @param bool $display To display or not
68
+ * @param array $meta_box_args Metabox config array
69
+ * @return bool Whether to display this metabox on the current page.
70
+ */
71
+ public static function check_id( $display, $meta_box_args, $cmb ) {
72
+
73
+ $key = self::get_show_on_key( $meta_box_args );
74
+ if ( ! $key || 'id' !== $key ) {
75
+ return $display;
76
+ }
77
+
78
+ $object_id = is_admin() ? $cmb->object_id() : @get_the_id();
79
+
80
+ if ( ! $object_id ) {
81
+ return false;
82
+ }
83
+
84
+ // If current page id is in the included array, display the metabox
85
+ return in_array( $object_id, (array) self::get_show_on_value( $meta_box_args ) );
86
+ }
87
+
88
+ /**
89
+ * Add metaboxes for an specific Page Template
90
+ * @since 1.0.0
91
+ * @param bool $display To display or not
92
+ * @param array $meta_box_args Metabox config array
93
+ * @return bool Whether to display this metabox on the current page.
94
+ */
95
+ public static function check_page_template( $display, $meta_box_args, $cmb ) {
96
+
97
+ $key = self::get_show_on_key( $meta_box_args );
98
+ if ( ! $key || 'page-template' !== $key ) {
99
+ return $display;
100
+ }
101
+
102
+ $object_id = $cmb->object_id();
103
+
104
+ if ( ! $object_id || 'post' !== $cmb->object_type() ) {
105
+ return false;
106
+ }
107
+
108
+ // Get current template
109
+ $current_template = get_post_meta( $object_id, '_wp_page_template', true );
110
+
111
+ // See if there's a match
112
+ if ( $current_template && in_array( $current_template, (array) self::get_show_on_value( $meta_box_args ) ) ) {
113
+ return true;
114
+ }
115
+
116
+ return false;
117
+ }
118
+
119
+ /**
120
+ * Only show options-page metaboxes on their options page (but only enforce on the admin side)
121
+ * @since 1.0.0
122
+ * @param bool $display To display or not
123
+ * @param array $meta_box_args Metabox config array
124
+ * @return bool Whether to display this metabox on the current page.
125
+ */
126
+ public static function check_admin_page( $display, $meta_box_args ) {
127
+
128
+ $key = self::get_show_on_key( $meta_box_args );
129
+ // check if this is a 'options-page' metabox
130
+ if ( ! $key || 'options-page' !== $key ) {
131
+ return $display;
132
+ }
133
+
134
+ // Enforce 'show_on' filter in the admin
135
+ if ( is_admin() ) {
136
+
137
+ // If there is no 'page' query var, our filter isn't applicable
138
+ if ( ! isset( $_GET['page'] ) ) {
139
+ return $display;
140
+ }
141
+
142
+ $show_on = self::get_show_on_value( $meta_box_args );
143
+
144
+ if ( empty( $show_on ) ) {
145
+ return false;
146
+ }
147
+
148
+ if ( is_array( $show_on ) ) {
149
+ foreach ( $show_on as $page ) {
150
+ if ( $_GET['page'] == $page ) {
151
+ return true;
152
+ }
153
+ }
154
+ } else {
155
+ if ( $_GET['page'] == $show_on ) {
156
+ return true;
157
+ }
158
+ }
159
+
160
+ return false;
161
+
162
+ }
163
+
164
+ // Allow options-page metaboxes to be displayed anywhere on the front-end
165
+ return true;
166
+ }
167
+
168
+ }
cmb2/includes/CMB2_Types.php ADDED
@@ -0,0 +1,962 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * CMB field types
5
+ *
6
+ * @todo test taxonomy methods with non-post objects
7
+ * @todo test all methods with non-post objects
8
+ * @todo Date/Time fields should store date format as data attribute for JS
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ class CMB2_Types {
13
+
14
+ /**
15
+ * An iterator value for repeatable fields
16
+ * @var integer
17
+ * @since 1.0.0
18
+ */
19
+ public $iterator = 0;
20
+
21
+ /**
22
+ * Current CMB2_Field field object
23
+ * @var CMB2_Field object
24
+ * @since 1.0.0
25
+ */
26
+ public $field;
27
+
28
+ public function __construct( CMB2_Field $field ) {
29
+ $this->field = $field;
30
+ }
31
+
32
+ /**
33
+ * Default fallback. Allows rendering fields via "cmb2_render_$name" hook
34
+ * @since 1.0.0
35
+ * @param string $name Non-existent method name
36
+ * @param array $arguments All arguments passed to the method
37
+ */
38
+ public function __call( $name, $arguments ) {
39
+ /**
40
+ * Pass non-existent field types through an action
41
+ *
42
+ * The dynamic portion of the hook name, $name, refers to the field type.
43
+ *
44
+ * @param array $field The passed in `CMB2_Field` object
45
+ * @param mixed $escaped_value The value of this field escaped.
46
+ * It defaults to `sanitize_text_field`.
47
+ * If you need the unescaped value, you can access it
48
+ * via `$field->value()`
49
+ * @param int $object_id The ID of the current object
50
+ * @param string $object_type The type of object you are working with.
51
+ * Most commonly, `post` (this applies to all post-types),
52
+ * but could also be `comment`, `user` or `options-page`.
53
+ * @param object $field_type_object This `CMB2_Types` object
54
+ */
55
+ do_action( "cmb2_render_$name", $this->field, $this->field->escaped_value(), $this->field->object_id, $this->field->object_type, $this );
56
+ }
57
+
58
+ /**
59
+ * Render a field (and handle repeatable)
60
+ * @since 1.1.0
61
+ */
62
+ public function render() {
63
+ if ( $this->field->args( 'repeatable' ) ) {
64
+ $this->render_repeatable_field();
65
+ } else {
66
+ $this->_render();
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Render a field type
72
+ * @since 1.1.0
73
+ */
74
+ protected function _render() {
75
+ $this->field->peform_param_callback( 'before_field' );
76
+ echo $this->{$this->field->type()}();
77
+ $this->field->peform_param_callback( 'after_field' );
78
+ }
79
+
80
+ /**
81
+ * Checks if we can get a post object, and if so, uses `get_the_terms` which utilizes caching
82
+ * @since 1.0.2
83
+ * @return mixed Array of terms on success
84
+ */
85
+ public function get_object_terms() {
86
+ $object_id = $this->field->object_id;
87
+ $taxonomy = $this->field->args( 'taxonomy' );
88
+
89
+ if ( ! $post = get_post( $object_id ) ) {
90
+
91
+ $cache_key = "cmb-cache-{$taxonomy}-{$object_id}";
92
+
93
+ // Check cache
94
+ $cached = get_transient( $cache_key );
95
+ if ( $cached ) {
96
+ return $cached;
97
+ }
98
+
99
+ $cached = wp_get_object_terms( $object_id, $taxonomy );
100
+ // Do our own (minimal) caching. Long enough for a page-load.
101
+ set_transient( $cache_key, $cached, 60 );
102
+ return $cached;
103
+ }
104
+
105
+ // WP caches internally so it's better to use
106
+ return get_the_terms( $post, $taxonomy );
107
+
108
+ }
109
+
110
+ /**
111
+ * Retrieve text parameter from field's options array (if it has one), or use fallback text
112
+ * @since 2.0.0
113
+ * @param string $option_key Key in field's options array
114
+ * @param string $fallback Fallback text
115
+ * @return string Text
116
+ */
117
+ public function _text( $option_key, $fallback ) {
118
+ $has_string_param = $this->field->options( $option_key );
119
+ return $has_string_param ? $has_string_param : $fallback;
120
+ }
121
+
122
+ /**
123
+ * Determine a file's extension
124
+ * @since 1.0.0
125
+ * @param string $file File url
126
+ * @return string|false File extension or false
127
+ */
128
+ public function get_file_ext( $file ) {
129
+ $parsed = @parse_url( $file, PHP_URL_PATH );
130
+ return $parsed ? strtolower( pathinfo( $parsed, PATHINFO_EXTENSION ) ) : false;
131
+ }
132
+
133
+ /**
134
+ * Get the file name from a url
135
+ * @since 2.0.0
136
+ * @param string $value File url or path
137
+ * @return string File name
138
+ */
139
+ public function get_file_name_from_path( $value ) {
140
+ $parts = explode( '/', $value );
141
+ return is_array( $parts ) ? end( $parts ) : $value;
142
+ }
143
+
144
+ /**
145
+ * Determines if a file has a valid image extension
146
+ * @since 1.0.0
147
+ * @param string $file File url
148
+ * @return bool Whether file has a valid image extension
149
+ */
150
+ public function is_valid_img_ext( $file ) {
151
+ $file_ext = $this->get_file_ext( $file );
152
+
153
+ $is_valid_types = (array) apply_filters( 'cmb2_valid_img_types', array( 'jpg', 'jpeg', 'png', 'gif', 'ico', 'icon' ) );
154
+
155
+ return ( $file_ext && in_array( $file_ext, $is_valid_types ) );
156
+ }
157
+
158
+ /**
159
+ * Handles parsing and filtering attributes while preserving any passed in via field config.
160
+ * @since 1.1.0
161
+ * @param array $args Override arguments
162
+ * @param string $element Element for filter
163
+ * @param array $defaults Default arguments
164
+ * @return array Parsed and filtered arguments
165
+ */
166
+ public function parse_args( $args, $element, $defaults ) {
167
+ return wp_parse_args( apply_filters( "cmb2_{$element}_attributes", $this->field->maybe_set_attributes( $args ), $defaults, $this->field, $this ), $defaults );
168
+ }
169
+
170
+ /**
171
+ * Combines attributes into a string for a form element
172
+ * @since 1.1.0
173
+ * @param array $attrs Attributes to concatenate
174
+ * @param array $attr_exclude Attributes that should NOT be concatenated
175
+ * @return string String of attributes for form element
176
+ */
177
+ public function concat_attrs( $attrs, $attr_exclude = array() ) {
178
+ $attributes = '';
179
+ foreach ( $attrs as $attr => $val ) {
180
+ $excluded = in_array( $attr, (array) $attr_exclude, true );
181
+ $empty = false === $val && 'value' !== $attr;
182
+ if ( ! $excluded && ! $empty ) {
183
+ // if data attribute, use single quote wraps, else double
184
+ $quotes = false !== stripos( $attr, 'data-' ) ? "'" : '"';
185
+ $attributes .= sprintf( ' %1$s=%3$s%2$s%3$s', $attr, $val, $quotes );
186
+ }
187
+ }
188
+ return $attributes;
189
+ }
190
+
191
+ /**
192
+ * Generates html for concatenated items
193
+ * @since 1.1.0
194
+ * @param array $args Optional arguments
195
+ * @return string Concatenated html items
196
+ */
197
+ public function concat_items( $args = array() ) {
198
+
199
+ $method = isset( $args['method'] ) ? $args['method'] : 'select_option';
200
+ unset( $args['method'] );
201
+
202
+ $value = $this->field->escaped_value()
203
+ ? $this->field->escaped_value()
204
+ : $this->field->args( 'default' );
205
+
206
+ $concatenated_items = ''; $i = 1;
207
+ foreach ( (array) $this->field->options() as $opt_value => $opt_label ) {
208
+
209
+ // Clone args & modify for just this item
210
+ $a = $args;
211
+
212
+ $a['value'] = $opt_value;
213
+ $a['label'] = $opt_label;
214
+
215
+ // Check if this option is the value of the input
216
+ if ( $value == $opt_value ) {
217
+ $a['checked'] = 'checked';
218
+ }
219
+
220
+ $concatenated_items .= $this->$method( $a, $i++ );
221
+ }
222
+
223
+ return $concatenated_items;
224
+ }
225
+
226
+ /**
227
+ * Generates html for an option element
228
+ * @since 1.1.0
229
+ * @param array $args Arguments array containing value, label, and checked boolean
230
+ * @return string Generated option element html
231
+ */
232
+ public function select_option( $args = array() ) {
233
+ return sprintf( "\t" . '<option value="%s" %s>%s</option>', $args['value'], selected( isset( $args['checked'] ) && $args['checked'], true, false ), $args['label'] ) . "\n";
234
+ }
235
+
236
+ /**
237
+ * Generates html for list item with input
238
+ * @since 1.1.0
239
+ * @param array $args Override arguments
240
+ * @param int $i Iterator value
241
+ * @return string Gnerated list item html
242
+ */
243
+ public function list_input( $args = array(), $i ) {
244
+ $a = $this->parse_args( $args, 'list_input', array(
245
+ 'type' => 'radio',
246
+ 'class' => 'cmb2-option',
247
+ 'name' => $this->_name(),
248
+ 'id' => $this->_id( $i ),
249
+ 'value' => $this->field->escaped_value(),
250
+ 'label' => '',
251
+ ) );
252
+
253
+ return sprintf( "\t" . '<li><input%s/> <label for="%s">%s</label></li>' . "\n", $this->concat_attrs( $a, array( 'label' ) ), $a['id'], $a['label'] );
254
+ }
255
+
256
+ /**
257
+ * Generates html for list item with checkbox input
258
+ * @since 1.1.0
259
+ * @param array $args Override arguments
260
+ * @param int $i Iterator value
261
+ * @return string Gnerated list item html
262
+ */
263
+ public function list_input_checkbox( $args, $i ) {
264
+ $saved_value = $this->field->escaped_value();
265
+ if ( is_array( $saved_value ) && in_array( $args['value'], $saved_value ) ) {
266
+ $args['checked'] = 'checked';
267
+ }
268
+ $args['type'] = 'checkbox';
269
+ return $this->list_input( $args, $i );
270
+ }
271
+
272
+ /**
273
+ * Generates repeatable field table markup
274
+ * @since 1.0.0
275
+ */
276
+ public function render_repeatable_field() {
277
+ $table_id = $this->field->id() . '_repeat';
278
+
279
+ $this->_desc( true, true, true );
280
+ ?>
281
+
282
+ <div id="<?php echo $table_id; ?>" class="cmb-repeat-table cmb-nested">
283
+ <div class="cmb-tbody cmb-field-list">
284
+ <?php $this->repeatable_rows(); ?>
285
+ </div>
286
+ </div>
287
+ <p class="cmb-add-row">
288
+ <button data-selector="<?php echo $table_id; ?>" class="cmb-add-row-button button"><?php echo esc_html( $this->_text( 'add_row_text', __( 'Add Row', 'cmb2' ) ) ); ?></button>
289
+ </p>
290
+
291
+ <?php
292
+ // reset iterator
293
+ $this->iterator = 0;
294
+ }
295
+
296
+ /**
297
+ * Generates repeatable field rows
298
+ * @since 1.1.0
299
+ */
300
+ public function repeatable_rows() {
301
+ $meta_value = array_filter( (array) $this->field->escaped_value() );
302
+ // check for default content
303
+ $default = $this->field->args( 'default' );
304
+
305
+ // check for saved data
306
+ if ( ! empty( $meta_value ) ) {
307
+ $meta_value = is_array( $meta_value ) ? array_filter( $meta_value ) : $meta_value;
308
+ $meta_value = ! empty( $meta_value ) ? $meta_value : $default;
309
+ } else {
310
+ $meta_value = $default;
311
+ }
312
+
313
+ // Loop value array and add a row
314
+ if ( ! empty( $meta_value ) ) {
315
+ $count = count( $meta_value );
316
+ foreach ( (array) $meta_value as $val ) {
317
+ $this->field->escaped_value = $val;
318
+ $this->repeat_row( $count < 2 );
319
+ $this->iterator++;
320
+ }
321
+ } else {
322
+ // Otherwise add one row
323
+ $this->repeat_row( true );
324
+ }
325
+
326
+ // Then add an empty row
327
+ $this->field->escaped_value = '';
328
+ $this->iterator = $this->iterator ? $this->iterator : 1;
329
+ $this->repeat_row( false, 'empty-row hidden' );
330
+ }
331
+
332
+ /**
333
+ * Generates a repeatable row's markup
334
+ * @since 1.1.0
335
+ * @param bool $disable_remover Whether remove button should be disabled
336
+ * @param string $class Repeatable table row's class
337
+ */
338
+ protected function repeat_row( $disable_remover = false, $class = 'cmb-repeat-row' ) {
339
+ $disabled = $disable_remover ? ' button-disabled' : '';
340
+ ?>
341
+
342
+ <div class="cmb-row <?php echo $class; ?>">
343
+ <div class="cmb-td">
344
+ <?php $this->_render(); ?>
345
+ </div>
346
+ <div class="cmb-td cmb-remove-row">
347
+ <button class="button cmb-remove-row-button<?php echo $disabled; ?>"><?php echo esc_html( $this->_text( 'remove_row_text', __( 'Remove', 'cmb2' ) ) ); ?></button>
348
+ </div>
349
+ </div>
350
+
351
+ <?php
352
+ }
353
+
354
+ /**
355
+ * Generates description markup
356
+ * @since 1.0.0
357
+ * @param boolean $paragraph Paragraph tag or span
358
+ * @param boolean $echo Whether to echo description or only return it
359
+ * @return string Field's description markup
360
+ */
361
+ public function _desc( $paragraph = false, $echo = false, $repeat_group = false ) {
362
+ // Prevent description from printing multiple times for repeatable fields
363
+ if ( ! $repeat_group && ( $this->field->args( 'repeatable' ) || $this->iterator > 0 ) ) {
364
+ return '';
365
+ }
366
+
367
+ $desc = $this->field->args( 'description' );
368
+
369
+ if ( ! $desc ) {
370
+ return;
371
+ }
372
+
373
+ $tag = $paragraph ? 'p' : 'span';
374
+ $desc = sprintf( "\n" . '<%1$s class="cmb2-metabox-description">%2$s</%1$s>' . "\n", $tag, $desc );
375
+
376
+ if ( $echo ) {
377
+ echo $desc;
378
+ }
379
+ return $desc;
380
+ }
381
+
382
+ /**
383
+ * Generate field name attribute
384
+ * @since 1.1.0
385
+ * @param string $suffix For multi-part fields
386
+ * @return string Name attribute
387
+ */
388
+ public function _name( $suffix = '' ) {
389
+ return $this->field->args( '_name' ) . ( $this->field->args( 'repeatable' ) ? '[' . $this->iterator . ']' : '' ) . $suffix;
390
+ }
391
+
392
+ /**
393
+ * Generate field id attribute
394
+ * @since 1.1.0
395
+ * @param string $suffix For multi-part fields
396
+ * @return string Id attribute
397
+ */
398
+ public function _id( $suffix = '' ) {
399
+ return $this->field->id() . $suffix . ( $this->field->args( 'repeatable' ) ? '_' . $this->iterator . '" data-iterator="' . $this->iterator : '' );
400
+ }
401
+
402
+ /**
403
+ * Handles outputting an 'input' element
404
+ * @since 1.1.0
405
+ * @param array $args Override arguments
406
+ * @return string Form input element
407
+ */
408
+ public function input( $args = array() ) {
409
+ $a = $this->parse_args( $args, 'input', array(
410
+ 'type' => 'text',
411
+ 'class' => 'regular-text',
412
+ 'name' => $this->_name(),
413
+ 'id' => $this->_id(),
414
+ 'value' => $this->field->escaped_value(),
415
+ 'desc' => $this->_desc( true ),
416
+ ) );
417
+
418
+ return sprintf( '<input%s/>%s', $this->concat_attrs( $a, array( 'desc' ) ), $a['desc'] );
419
+ }
420
+
421
+ /**
422
+ * Handles outputting an 'textarea' element
423
+ * @since 1.1.0
424
+ * @param array $args Override arguments
425
+ * @return string Form textarea element
426
+ */
427
+ public function textarea( $args = array() ) {
428
+ $a = $this->parse_args( $args, 'textarea', array(
429
+ 'class' => 'cmb2_textarea',
430
+ 'name' => $this->_name(),
431
+ 'id' => $this->_id(),
432
+ 'cols' => 60,
433
+ 'rows' => 10,
434
+ 'value' => $this->field->escaped_value( 'esc_textarea' ),
435
+ 'desc' => $this->_desc( true ),
436
+ ) );
437
+ return sprintf( '<textarea%s>%s</textarea>%s', $this->concat_attrs( $a, array( 'desc', 'value' ) ), $a['value'], $a['desc'] );
438
+ }
439
+
440
+ /**
441
+ * Begin Field Types
442
+ */
443
+
444
+ public function text() {
445
+ return $this->input();
446
+ }
447
+
448
+ public function hidden() {
449
+ return $this->input( array( 'type' => 'hidden', 'desc' => '', 'class' => false ) );
450
+ }
451
+
452
+ public function text_small() {
453
+ return $this->input( array( 'class' => 'cmb2-text-small', 'desc' => $this->_desc() ) );
454
+ }
455
+
456
+ public function text_medium() {
457
+ return $this->input( array( 'class' => 'cmb2-text-medium', 'desc' => $this->_desc() ) );
458
+ }
459
+
460
+ public function text_email() {
461
+ return $this->input( array( 'class' => 'cmb2-text-email cmb2-text-medium', 'type' => 'email' ) );
462
+ }
463
+
464
+ public function text_url() {
465
+ return $this->input( array( 'class' => 'cmb2-text-url cmb2-text-medium regular-text', 'value' => $this->field->escaped_value( 'esc_url' ) ) );
466
+ }
467
+
468
+ public function text_date() {
469
+ $formatted_value = $this->field->get_timestamp_format();
470
+
471
+ return $this->input( array( 'class' => 'cmb2-text-small cmb2-datepicker', 'desc' => $this->_desc(), 'value' => $formatted_value ) );
472
+ }
473
+
474
+ public function text_time() {
475
+ $formatted_value = $this->field->get_timestamp_format( 'time_format' );
476
+
477
+ return $this->input( array( 'class' => 'cmb2-timepicker text-time', 'desc' => $this->_desc(), 'value' => $formatted_value ) );
478
+ }
479
+
480
+ public function text_money() {
481
+ return ( ! $this->field->get_param_callback_result( 'before_field' ) ? '$ ' : ' ' ) . $this->input( array( 'class' => 'cmb2-text-money', 'desc' => $this->_desc() ) );
482
+ }
483
+
484
+ public function textarea_small() {
485
+ return $this->textarea( array( 'class' => 'cmb2-textarea-small', 'rows' => 4 ) );
486
+ }
487
+
488
+ public function textarea_code() {
489
+ return sprintf( '<pre>%s', $this->textarea( array( 'class' => 'cmb2-textarea-code', 'desc' => '</pre>' . $this->_desc( true ) ) ) );
490
+ }
491
+
492
+ public function wysiwyg( $args = array() ) {
493
+ $a = $this->parse_args( $args, 'input', array(
494
+ 'id' => $this->_id(),
495
+ 'value' => $this->field->escaped_value( 'stripslashes' ),
496
+ 'desc' => $this->_desc( true ),
497
+ 'options' => $this->field->options(),
498
+ ) );
499
+
500
+ wp_editor( $a['value'], $a['id'], $a['options'] );
501
+ echo $a['desc'];
502
+ }
503
+
504
+ public function text_date_timestamp() {
505
+ $formatted_value = $this->field->get_timestamp_format();
506
+
507
+ return $this->input( array( 'class' => 'cmb2-text-small cmb2-datepicker', 'value' => $formatted_value ) );
508
+ }
509
+
510
+ public function text_datetime_timestamp( $meta_value = null ) {
511
+ $desc = '';
512
+ if ( ! $meta_value ) {
513
+ $meta_value = $this->field->escaped_value();
514
+ // This will be used if there is a select_timezone set for this field
515
+ $tz_offset = $this->field->field_timezone_offset();
516
+ if ( ! empty( $tz_offset ) ) {
517
+ $meta_value -= $tz_offset;
518
+ }
519
+ $desc = $this->_desc();
520
+ }
521
+
522
+ $inputs = array(
523
+ $this->input( array(
524
+ 'class' => 'cmb2-text-small cmb2-datepicker',
525
+ 'name' => $this->_name( '[date]' ),
526
+ 'id' => $this->_id( '_date' ),
527
+ 'value' => ! empty( $meta_value ) && ! is_array( $meta_value ) ? $this->field->get_timestamp_format( 'date_format', $meta_value ) : '',
528
+ 'desc' => '',
529
+ ) ),
530
+ $this->input( array(
531
+ 'class' => 'cmb2-timepicker text-time',
532
+ 'name' => $this->_name( '[time]' ),
533
+ 'id' => $this->_id( '_time' ),
534
+ 'value' => ! empty( $meta_value ) && ! is_array( $meta_value ) ? $this->field->get_timestamp_format( 'time_format', $meta_value ) : '',
535
+ 'desc' => $desc,
536
+ ) ),
537
+ );
538
+
539
+ return implode( "\n", $inputs );
540
+ }
541
+
542
+ public function text_datetime_timestamp_timezone() {
543
+ $meta_value = $this->field->escaped_value();
544
+ if ( is_array( $meta_value ) ) {
545
+ $meta_value = '';
546
+ }
547
+ $datetime = unserialize( $meta_value );
548
+ $meta_value = $tzstring = '';
549
+
550
+ if ( $datetime && $datetime instanceof DateTime ) {
551
+ $tz = $datetime->getTimezone();
552
+ $tzstring = $tz->getName();
553
+ $meta_value = $datetime->getTimestamp() + $tz->getOffset( new DateTime( 'NOW' ) );
554
+ }
555
+
556
+ $inputs = array(
557
+ $this->text_datetime_timestamp( $meta_value ),
558
+ $this->select( array(
559
+ 'class' => 'cmb2_select cmb2-select-timezone',
560
+ 'name' => $this->_name( '[timezone]' ),
561
+ 'id' => $this->_id( '_timezone' ),
562
+ 'options' => wp_timezone_choice( $tzstring ),
563
+ 'desc' => $this->_desc(),
564
+ ) ),
565
+ );
566
+
567
+ return implode( "\n", $inputs );
568
+ }
569
+
570
+ public function select_timezone() {
571
+ $this->field->args['default'] = $this->field->args( 'default' )
572
+ ? $this->field->args( 'default' )
573
+ : cmb2_utils()->timezone_string();
574
+
575
+ return $this->select( array(
576
+ 'class' => 'cmb2_select cmb2-select-timezone',
577
+ 'options' => wp_timezone_choice( $this->field->escaped_value() ),
578
+ 'desc' => $this->_desc(),
579
+ ) );
580
+ }
581
+
582
+ public function colorpicker() {
583
+ $meta_value = $this->field->escaped_value();
584
+ $hex_color = '(([a-fA-F0-9]){3}){1,2}$';
585
+ if ( preg_match( '/^' . $hex_color . '/i', $meta_value ) ) {
586
+ // Value is just 123abc, so prepend #
587
+ $meta_value = '#' . $meta_value;
588
+ } elseif ( ! preg_match( '/^#' . $hex_color . '/i', $meta_value ) ) {
589
+ // Value doesn't match #123abc, so sanitize to just #
590
+ $meta_value = '#';
591
+ }
592
+
593
+ return $this->input( array( 'class' => 'cmb2-colorpicker cmb2-text-small', 'value' => $meta_value ) );
594
+ }
595
+
596
+ public function title( $args = array() ) {
597
+ $a = $this->parse_args( $args, 'title', array(
598
+ 'tag' => $this->field->object_type == 'post' ? 'h5' : 'h3',
599
+ 'class' => 'cmb2-metabox-title',
600
+ 'name' => $this->field->args( 'name' ),
601
+ 'desc' => $this->_desc( true ),
602
+ ) );
603
+
604
+ return sprintf( '<%1$s class="%2$s">%3$s</%1$s>%4$s', $a['tag'], $a['class'], $a['name'], $a['desc'] );
605
+ }
606
+
607
+ public function select( $args = array() ) {
608
+ $a = $this->parse_args( $args, 'select', array(
609
+ 'class' => 'cmb2_select',
610
+ 'name' => $this->_name(),
611
+ 'id' => $this->_id(),
612
+ 'desc' => $this->_desc( true ),
613
+ 'options' => $this->concat_items(),
614
+ ) );
615
+
616
+ $attrs = $this->concat_attrs( $a, array( 'desc', 'options' ) );
617
+ return sprintf( '<select%s>%s</select>%s', $attrs, $a['options'], $a['desc'] );
618
+ }
619
+
620
+ public function taxonomy_select() {
621
+
622
+ $names = $this->get_object_terms();
623
+ $saved_term = is_wp_error( $names ) || empty( $names ) ? $this->field->args( 'default' ) : $names[key( $names )]->slug;
624
+ $terms = get_terms( $this->field->args( 'taxonomy' ), 'hide_empty=0' );
625
+ $options = '';
626
+
627
+ $option_none = $this->field->args( 'show_option_none' );
628
+ if ( ! empty( $option_none ) ) {
629
+ $option_none_value = apply_filters( 'cmb2_taxonomy_select_default_value', '' );
630
+ $option_none_value = apply_filters( "cmb2_taxonomy_select_{$this->_id()}_default_value", $option_none_value );
631
+
632
+ $options .= $this->select_option( array(
633
+ 'label' => $option_none,
634
+ 'value' => $option_none_value,
635
+ 'checked' => $saved_term == $option_none_value,
636
+ ) );
637
+ }
638
+
639
+ foreach ( $terms as $term ) {
640
+ $options .= $this->select_option( array(
641
+ 'label' => $term->name,
642
+ 'value' => $term->slug,
643
+ 'checked' => $saved_term == $term->slug,
644
+ ) );
645
+ }
646
+
647
+ return $this->select( array( 'options' => $options ) );
648
+ }
649
+
650
+ public function radio( $args = array(), $type = 'radio' ) {
651
+ $a = $this->parse_args( $args, $type, array(
652
+ 'class' => 'cmb2-radio-list cmb2-list',
653
+ 'options' => $this->concat_items( array( 'label' => 'test', 'method' => 'list_input' ) ),
654
+ 'desc' => $this->_desc( true ),
655
+ ) );
656
+
657
+ return sprintf( '<ul class="%s">%s</ul>%s', $a['class'], $a['options'], $a['desc'] );
658
+ }
659
+
660
+ public function radio_inline() {
661
+ return $this->radio( array(), 'radio_inline' );
662
+ }
663
+
664
+ public function multicheck( $type = 'checkbox' ) {
665
+
666
+ $classes = false === $this->field->args( 'select_all_button' )
667
+ ? 'cmb2-checkbox-list no-select-all cmb2-list'
668
+ : 'cmb2-checkbox-list cmb2-list';
669
+
670
+ return $this->radio( array( 'class' => $classes, 'options' => $this->concat_items( array( 'name' => $this->_name() . '[]', 'method' => 'list_input_checkbox' ) ) ), $type );
671
+ }
672
+
673
+ public function multicheck_inline() {
674
+ $this->multicheck( 'multicheck_inline' );
675
+ }
676
+
677
+ public function checkbox() {
678
+ $meta_value = $this->field->escaped_value();
679
+ $args = array( 'type' => 'checkbox', 'class' => 'cmb2-option cmb2-list', 'value' => 'on', 'desc' => '' );
680
+ if ( ! empty( $meta_value ) ) {
681
+ $args['checked'] = 'checked';
682
+ }
683
+ return sprintf( '%s <label for="%s">%s</label>', $this->input( $args ), $this->_id(), $this->_desc() );
684
+ }
685
+
686
+ public function taxonomy_radio() {
687
+ $names = $this->get_object_terms();
688
+ $saved_term = is_wp_error( $names ) || empty( $names ) ? $this->field->args( 'default' ) : $names[key( $names )]->slug;
689
+ $terms = get_terms( $this->field->args( 'taxonomy' ), 'hide_empty=0' );
690
+ $options = ''; $i = 1;
691
+
692
+ if ( ! $terms ) {
693
+ $options .= sprintf( '<li><label>%s</label></li>', esc_html( $this->_text( 'no_terms_text', __( 'No terms', 'cmb2' ) ) ) );
694
+ } else {
695
+ $option_none = $this->field->args( 'show_option_none' );
696
+ if ( ! empty( $option_none ) ) {
697
+ $option_none_value = apply_filters( "cmb2_taxonomy_radio_{$this->_id()}_default_value", apply_filters( 'cmb2_taxonomy_radio_default_value', '' ) );
698
+ $args = array(
699
+ 'value' => $option_none_value,
700
+ 'label' => $option_none,
701
+ );
702
+ if ( $saved_term == $option_none_value ) {
703
+ $args['checked'] = 'checked';
704
+ }
705
+ $options .= $this->list_input( $args, $i );
706
+ $i++;
707
+ }
708
+
709
+ foreach ( $terms as $term ) {
710
+ $args = array(
711
+ 'value' => $term->slug,
712
+ 'label' => $term->name,
713
+ );
714
+
715
+ if ( $saved_term == $term->slug ) {
716
+ $args['checked'] = 'checked';
717
+ }
718
+ $options .= $this->list_input( $args, $i );
719
+ $i++;
720
+ }
721
+ }
722
+
723
+ return $this->radio( array( 'options' => $options ), 'taxonomy_radio' );
724
+ }
725
+
726
+ public function taxonomy_radio_inline() {
727
+ $this->taxonomy_radio();
728
+ }
729
+
730
+ public function taxonomy_multicheck() {
731
+
732
+ $names = $this->get_object_terms();
733
+ $saved_terms = is_wp_error( $names ) || empty( $names )
734
+ ? $this->field->args( 'default' )
735
+ : wp_list_pluck( $names, 'slug' );
736
+ $terms = get_terms( $this->field->args( 'taxonomy' ), 'hide_empty=0' );
737
+ $name = $this->_name() . '[]';
738
+ $options = ''; $i = 1;
739
+
740
+ if ( ! $terms ) {
741
+ $options .= sprintf( '<li><label>%s</label></li>', esc_html( $this->_text( 'no_terms_text', __( 'No terms', 'cmb2' ) ) ) );
742
+ } else {
743
+
744
+ foreach ( $terms as $term ) {
745
+ $args = array(
746
+ 'value' => $term->slug,
747
+ 'label' => $term->name,
748
+ 'type' => 'checkbox',
749
+ 'name' => $name,
750
+ );
751
+
752
+ if ( is_array( $saved_terms ) && in_array( $term->slug, $saved_terms ) ) {
753
+ $args['checked'] = 'checked';
754
+ }
755
+ $options .= $this->list_input( $args, $i );
756
+ $i++;
757
+ }
758
+ }
759
+
760
+ $classes = false === $this->field->args( 'select_all_button' )
761
+ ? 'cmb2-checkbox-list no-select-all cmb2-list'
762
+ : 'cmb2-checkbox-list cmb2-list';
763
+
764
+ return $this->radio( array( 'class' => $classes, 'options' => $options ), 'taxonomy_multicheck' );
765
+ }
766
+
767
+ public function taxonomy_multicheck_inline() {
768
+ $this->taxonomy_multicheck();
769
+ }
770
+
771
+ public function oembed() {
772
+ $meta_value = trim( $this->field->escaped_value() );
773
+ $oembed = ! empty( $meta_value )
774
+ ? cmb2_get_oembed( array(
775
+ 'url' => $this->field->escaped_value(),
776
+ 'object_id' => $this->field->object_id,
777
+ 'object_type' => $this->field->object_type,
778
+ 'oembed_args' => array( 'width' => '640' ),
779
+ 'field_id' => $this->_id(),
780
+ ) )
781
+ : '';
782
+
783
+ echo $this->input( array(
784
+ 'class' => 'cmb2-oembed regular-text',
785
+ 'data-objectid' => $this->field->object_id,
786
+ 'data-objecttype' => $this->field->object_type,
787
+ ) ),
788
+ '<p class="cmb-spinner spinner" style="display:none;"></p>',
789
+ '<div id="', $this->_id( '-status' ), '" class="cmb2-media-status ui-helper-clearfix embed_wrap">', $oembed, '</div>';
790
+ }
791
+
792
+ public function file_list() {
793
+ $meta_value = $this->field->escaped_value();
794
+ $name = $this->_name();
795
+ $img_size = $this->field->args( 'preview_size' );
796
+
797
+ echo $this->input( array(
798
+ 'type' => 'hidden',
799
+ 'class' => 'cmb2-upload-file cmb2-upload-list',
800
+ 'size' => 45, 'desc' => '', 'value' => '',
801
+ 'data-previewsize' => is_array( $img_size ) ? sprintf( '[%s]', implode( ',', $img_size ) ) : 50,
802
+ ) ),
803
+ $this->input( array(
804
+ 'type' => 'button',
805
+ 'class' => 'cmb2-upload-button button cmb2-upload-list',
806
+ 'value' => esc_html( $this->_text( 'add_upload_files_text', __( 'Add or Upload Files', 'cmb2' ) ) ),
807
+ 'name' => '', 'id' => '',
808
+ ) );
809
+
810
+ echo '<ul id="', $this->_id( '-status' ), '" class="cmb2-media-status cmb-attach-list">';
811
+
812
+ if ( $meta_value && is_array( $meta_value ) ) {
813
+
814
+ foreach ( $meta_value as $id => $fullurl ) {
815
+ $id_input = $this->input( array(
816
+ 'type' => 'hidden',
817
+ 'value' => $fullurl,
818
+ 'name' => $name . '[' . $id . ']',
819
+ 'id' => 'filelist-' . $id,
820
+ 'data-id' => $id,
821
+ 'desc' => '',
822
+ 'class' => false,
823
+ ) );
824
+
825
+ if ( $this->is_valid_img_ext( $fullurl ) ) {
826
+
827
+ $this->img_status_output( array(
828
+ 'image' => wp_get_attachment_image( $id, $img_size ),
829
+ 'tag' => 'li',
830
+ 'id_input' => $id_input,
831
+ ) );
832
+
833
+ } else {
834
+
835
+ $this->file_status_output( array(
836
+ 'value' => $fullurl,
837
+ 'tag' => 'li',
838
+ 'id_input' => $id_input,
839
+ ) );
840
+
841
+ }
842
+ }
843
+ }
844
+
845
+ echo '</ul>';
846
+ }
847
+
848
+ public function file() {
849
+ $meta_value = $this->field->escaped_value();
850
+ $options = (array) $this->field->options();
851
+ $img_size = $this->field->args( 'preview_size' );
852
+
853
+ // if options array and 'url' => false, then hide the url field
854
+ $input_type = array_key_exists( 'url', $options ) && false === $options['url'] ? 'hidden' : 'text';
855
+
856
+ echo $this->input( array(
857
+ 'type' => $input_type,
858
+ 'class' => 'cmb2-upload-file regular-text',
859
+ 'size' => 45,
860
+ 'desc' => '',
861
+ 'data-previewsize' => is_array( $img_size ) ? '[' . implode( ',', $img_size ) . ']' : 350,
862
+ ) );
863
+
864
+ printf( '<input class="cmb2-upload-button button" type="button" value="%s" />', esc_attr( $this->_text( 'add_upload_file_text', __( 'Add or Upload File', 'cmb2' ) ) ) );
865
+
866
+ $this->_desc( true, true );
867
+
868
+ $cached_id = $this->_id();
869
+ // Reset field args for attachment ID
870
+ $args = $this->field->args();
871
+ $args['id'] = $cached_id . '_id';
872
+ unset( $args['_id'], $args['_name'] );
873
+
874
+ // And get new field object
875
+ $this->field = new CMB2_Field( array(
876
+ 'field_args' => $args,
877
+ 'group_field' => $this->field->group,
878
+ 'object_type' => $this->field->object_type,
879
+ 'object_id' => $this->field->object_id,
880
+ ) );
881
+
882
+ // Get ID value
883
+ $_id_value = $this->field->escaped_value( 'absint' );
884
+
885
+ // If there is no ID saved yet, try to get it from the url
886
+ if ( $meta_value && ! $_id_value ) {
887
+ $_id_value = cmb2_utils()->image_id_from_url( esc_url_raw( $meta_value ) );
888
+ }
889
+
890
+ echo $this->input( array(
891
+ 'type' => 'hidden',
892
+ 'class' => 'cmb2-upload-file-id',
893
+ 'value' => $_id_value,
894
+ 'desc' => '',
895
+ ) ),
896
+ '<div id="', $this->_id( '-status' ), '" class="cmb2-media-status">';
897
+ if ( ! empty( $meta_value ) ) {
898
+
899
+ if ( $this->is_valid_img_ext( $meta_value ) ) {
900
+
901
+ if ( $_id_value ) {
902
+ $image = wp_get_attachment_image( $_id_value, $img_size, null, array( 'class' => 'cmb-file-field-image' ) );
903
+ } else {
904
+ $size = is_array( $img_size ) ? $img_size[0] : 350;
905
+ $image = '<img style="max-width: ' . absint( $size ) . 'px; width: 100%; height: auto;" src="' . $meta_value . '" alt="" />';
906
+ }
907
+
908
+ $this->img_status_output( array(
909
+ 'image' => $image,
910
+ 'tag' => 'div',
911
+ 'cached_id' => $cached_id,
912
+ ) );
913
+
914
+ } else {
915
+
916
+ $this->file_status_output( array(
917
+ 'value' => $meta_value,
918
+ 'tag' => 'div',
919
+ 'cached_id' => $cached_id,
920
+ ) );
921
+
922
+ }
923
+ }
924
+ echo '</div>';
925
+ }
926
+
927
+ /**
928
+ * file/file_list image wrap
929
+ * @since 2.0.2
930
+ * @param array $args Array of arguments for output
931
+ * @return string Image wrap output
932
+ */
933
+ public function img_status_output( $args ) {
934
+ printf( '<%1$s class="img-status">%2$s<p class="cmb2-remove-wrapper"><a href="#" class="cmb2-remove-file-button"%3$s>%4$s</a></p>%5$s</%1$s>',
935
+ $args['tag'],
936
+ $args['image'],
937
+ isset( $args['cached_id'] ) ? ' rel="' . $args['cached_id'] . '"' : '',
938
+ esc_html( $this->_text( 'remove_image_text', __( 'Remove Image', 'cmb2' ) ) ),
939
+ isset( $args['id_input'] ) ? $args['id_input'] : ''
940
+ );
941
+ }
942
+
943
+ /**
944
+ * file/file_list file wrap
945
+ * @since 2.0.2
946
+ * @param array $args Array of arguments for output
947
+ * @return string File wrap output
948
+ */
949
+ public function file_status_output( $args ) {
950
+ printf( '<%1$s class="file-status"><span>%2$s <strong>%3$s</strong></span>&nbsp;&nbsp; (<a href="%4$s" target="_blank" rel="external">%5$s</a> / <a href="#" class="cmb2-remove-file-button"%6$s>%7$s</a>)%8$s</%1$s>',
951
+ $args['tag'],
952
+ esc_html( $this->_text( 'file_text', __( 'File:', 'cmb2' ) ) ),
953
+ $this->get_file_name_from_path( $args['value'] ),
954
+ $args['value'],
955
+ esc_html( $this->_text( 'file-download-text', __( 'Download', 'cmb2' ) ) ),
956
+ isset( $args['cached_id'] ) ? ' rel="' . $args['cached_id'] . '"' : '',
957
+ esc_html( $this->_text( 'remove_text', __( 'Remove', 'cmb2' ) ) ),
958
+ isset( $args['id_input'] ) ? $args['id_input'] : ''
959
+ );
960
+ }
961
+
962
+ }
cmb2/includes/CMB2_Utils.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * CMB field class
5
+ * @since 1.1.0
6
+ */
7
+ class CMB2_Utils {
8
+
9
+ /**
10
+ * The url which is used to load local resources.
11
+ * @var string
12
+ * @since 2.0.0
13
+ */
14
+ protected $url = '';
15
+
16
+ /**
17
+ * Utility method that attempts to get an attachment's ID by it's url
18
+ * @since 1.0.0
19
+ * @param string $img_url Attachment url
20
+ * @return mixed Attachment ID or false
21
+ */
22
+ public function image_id_from_url( $img_url ) {
23
+ global $wpdb;
24
+
25
+ $img_url = esc_url_raw( $img_url );
26
+ // Get just the file name
27
+ if ( false !== strpos( $img_url, '/' ) ) {
28
+ $explode = explode( '/', $img_url );
29
+ $img_url = end( $explode );
30
+ }
31
+
32
+ // And search for a fuzzy match of the file name
33
+ $attachment = $wpdb->get_col( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE guid LIKE '%%%s%%' LIMIT 1;", $img_url ) );
34
+
35
+ // If we found an attachement ID, return it
36
+ if ( ! empty( $attachment ) && is_array( $attachment ) ) {
37
+ return $attachment[0];
38
+ }
39
+
40
+ // No luck
41
+ return false;
42
+ }
43
+
44
+ /**
45
+ * Utility method that returns time string offset by timezone
46
+ * @since 1.0.0
47
+ * @param string $tzstring Time string
48
+ * @return string Offset time string
49
+ */
50
+ public function timezone_offset( $tzstring ) {
51
+ if ( ! empty( $tzstring ) && is_string( $tzstring ) ) {
52
+ if ( 'UTC' === substr( $tzstring, 0, 3 ) ) {
53
+ $tzstring = str_replace( array( ':15', ':30', ':45' ), array( '.25', '.5', '.75' ), $tzstring );
54
+ return intval( floatval( substr( $tzstring, 3 ) ) * HOUR_IN_SECONDS );
55
+ }
56
+
57
+ $date_time_zone_selected = new DateTimeZone( $tzstring );
58
+ $tz_offset = timezone_offset_get( $date_time_zone_selected, date_create() );
59
+
60
+ return $tz_offset;
61
+ }
62
+
63
+ return 0;
64
+ }
65
+
66
+ /**
67
+ * Utility method that returns a timezone string representing the default timezone for the site.
68
+ *
69
+ * Roughly copied from WordPress, as get_option('timezone_string') will return
70
+ * an empty string if no value has been set on the options page.
71
+ * A timezone string is required by the wp_timezone_choice() used by the
72
+ * select_timezone field.
73
+ *
74
+ * @since 1.0.0
75
+ * @return string Timezone string
76
+ */
77
+ public function timezone_string() {
78
+ $current_offset = get_option( 'gmt_offset' );
79
+ $tzstring = get_option( 'timezone_string' );
80
+
81
+ if ( empty( $tzstring ) ) { // Create a UTC+- zone if no timezone string exists
82
+ if ( 0 == $current_offset ) {
83
+ $tzstring = 'UTC+0';
84
+ } elseif ( $current_offset < 0 ) {
85
+ $tzstring = 'UTC' . $current_offset;
86
+ } else {
87
+ $tzstring = 'UTC+' . $current_offset;
88
+ }
89
+ }
90
+
91
+ return $tzstring;
92
+ }
93
+
94
+ /**
95
+ * Returns a timestamp, first checking if value already is a timestamp.
96
+ * @since 2.0.0
97
+ * @param string|int $string Possible timestamp string
98
+ * @return int Time stamp
99
+ */
100
+ public function make_valid_time_stamp( $string ) {
101
+ if ( ! $string ) {
102
+ return 0;
103
+ }
104
+
105
+ return $this->is_valid_time_stamp( $string )
106
+ ? (int) $string :
107
+ strtotime( $string );
108
+ }
109
+
110
+ /**
111
+ * Determine if a value is a valid timestamp
112
+ * @since 2.0.0
113
+ * @param mixed $timestamp Value to check
114
+ * @return boolean Whether value is a valid timestamp
115
+ */
116
+ public function is_valid_time_stamp( $timestamp ) {
117
+ return (string) (int) $timestamp === (string) $timestamp
118
+ && $timestamp <= PHP_INT_MAX
119
+ && $timestamp >= ~PHP_INT_MAX;
120
+ }
121
+
122
+ /**
123
+ * Checks if a value is 'empty'. Still accepts 0.
124
+ * @since 2.0.0
125
+ * @param mixed $value Value to check
126
+ * @return bool True or false
127
+ */
128
+ public function isempty( $value ) {
129
+ return is_null( $value ) || '' === $value || false === $value;
130
+ }
131
+
132
+ /**
133
+ * Insert a single array item inside another array at a set position
134
+ * @since 2.0.2
135
+ * @param array &$array Array to modify. Is passed by reference, and no return is needed.
136
+ * @param array $new New array to insert
137
+ * @param int $position Position in the main array to insert the new array
138
+ */
139
+ public function array_insert( &$array, $new, $position ) {
140
+ $before = array_slice( $array, 0, $position - 1 );
141
+ $after = array_diff_key( $array, $before );
142
+ $array = array_merge( $before, $new, $after );
143
+ }
144
+
145
+ /**
146
+ * Defines the url which is used to load local resources.
147
+ * This may need to be filtered for local Window installations.
148
+ * If resources do not load, please check the wiki for details.
149
+ * @since 1.0.1
150
+ * @return string URL to CMB resources
151
+ */
152
+ public function url( $path = '' ) {
153
+ if ( $this->url ) {
154
+ return $this->url . $path;
155
+ }
156
+
157
+ if ( 'WIN' === strtoupper( substr( PHP_OS, 0, 3 ) ) ) {
158
+ // Windows
159
+ $content_dir = str_replace( '/', DIRECTORY_SEPARATOR, WP_CONTENT_DIR );
160
+ $content_url = str_replace( $content_dir, WP_CONTENT_URL, cmb2_dir() );
161
+ $cmb2_url = str_replace( DIRECTORY_SEPARATOR, '/', $content_url );
162
+
163
+ } else {
164
+ $cmb2_url = str_replace(
165
+ array( WP_CONTENT_DIR, WP_PLUGIN_DIR ),
166
+ array( WP_CONTENT_URL, WP_PLUGIN_URL ),
167
+ cmb2_dir()
168
+ );
169
+ }
170
+
171
+ /**
172
+ * Filter the CMB location url
173
+ *
174
+ * @param string $cmb2_url Currently registered url
175
+ */
176
+ $this->url = trailingslashit( apply_filters( 'cmb2_meta_box_url', set_url_scheme( $cmb2_url ), CMB2_VERSION ) );
177
+
178
+ return $this->url . $path;
179
+ }
180
+
181
+ }
cmb2/includes/CMB2_hookup.php ADDED
@@ -0,0 +1,395 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class CMB2_hookup {
4
+
5
+ /**
6
+ * Metabox Form ID
7
+ * @var string
8
+ * @since 0.9.4
9
+ */
10
+ protected $form_id = 'post';
11
+
12
+ /**
13
+ * Array of all hooks done (to be run once)
14
+ * @var array
15
+ * @since 2.0.0
16
+ */
17
+ protected static $hooks_completed = array();
18
+
19
+ /**
20
+ * Only allow JS registration once
21
+ * @var bool
22
+ * @since 2.0.0
23
+ */
24
+ protected static $registration_done = false;
25
+
26
+ /**
27
+ * Metabox Form ID
28
+ * @var CMB2 object
29
+ * @since 2.0.2
30
+ */
31
+ protected $cmb;
32
+
33
+ public function __construct( CMB2 $cmb ) {
34
+ $this->cmb = $cmb;
35
+
36
+ $this->hooks();
37
+ if ( is_admin() ) {
38
+ $this->admin_hooks();
39
+ }
40
+ }
41
+
42
+ public function hooks() {
43
+ // Handle oembed Ajax
44
+ $this->once( 'wp_ajax_cmb2_oembed_handler', array( cmb2_ajax(), 'oembed_handler' ) );
45
+ $this->once( 'wp_ajax_nopriv_cmb2_oembed_handler', array( cmb2_ajax(), 'oembed_handler' ) );
46
+
47
+ foreach ( get_class_methods( 'CMB2_Show_Filters' ) as $filter ) {
48
+ add_filter( 'cmb2_show_on', array( 'CMB2_Show_Filters', $filter ), 10, 3 );
49
+ }
50
+
51
+ }
52
+
53
+ public function admin_hooks() {
54
+
55
+ $field_types = (array) wp_list_pluck( $this->cmb->prop( 'fields', array() ), 'type' );
56
+ $has_upload = in_array( 'file', $field_types ) || in_array( 'file_list', $field_types );
57
+
58
+ global $pagenow;
59
+
60
+ // register our scripts and styles for cmb
61
+ $this->once( 'admin_enqueue_scripts', array( __CLASS__, 'register_scripts' ), 8 );
62
+
63
+ $type = $this->cmb->mb_object_type();
64
+ if ( 'post' == $type ) {
65
+ add_action( 'add_meta_boxes', array( $this, 'add_metaboxes' ) );
66
+ add_action( 'add_attachment', array( $this, 'save_post' ) );
67
+ add_action( 'edit_attachment', array( $this, 'save_post' ) );
68
+ add_action( 'save_post', array( $this, 'save_post' ), 10, 2 );
69
+
70
+ $this->once( 'admin_enqueue_scripts', array( $this, 'do_scripts' ) );
71
+
72
+ if ( $has_upload && in_array( $pagenow, array( 'page.php', 'page-new.php', 'post.php', 'post-new.php' ) ) ) {
73
+ $this->once( 'admin_head', array( $this, 'add_post_enctype' ) );
74
+ }
75
+
76
+ } elseif ( 'user' == $type ) {
77
+
78
+ $priority = $this->cmb->prop( 'priority' );
79
+
80
+ if ( ! is_numeric( $priority ) ) {
81
+ switch ( $priority ) {
82
+
83
+ case 'high':
84
+ $priority = 5;
85
+ break;
86
+
87
+ case 'low':
88
+ $priority = 20;
89
+ break;
90
+
91
+ default:
92
+ $priority = 10;
93
+ break;
94
+ }
95
+ }
96
+
97
+ add_action( 'show_user_profile', array( $this, 'user_metabox' ), $priority );
98
+ add_action( 'edit_user_profile', array( $this, 'user_metabox' ), $priority );
99
+ add_action( 'user_new_form', array( $this, 'user_new_metabox' ), $priority );
100
+
101
+ add_action( 'personal_options_update', array( $this, 'save_user' ) );
102
+ add_action( 'edit_user_profile_update', array( $this, 'save_user' ) );
103
+ add_action( 'user_register', array( $this, 'save_user' ) );
104
+ if ( $has_upload && in_array( $pagenow, array( 'profile.php', 'user-edit.php', 'user-add.php' ) ) ) {
105
+ $this->form_id = 'your-profile';
106
+ $this->once( 'admin_head', array( $this, 'add_post_enctype' ) );
107
+ }
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Registers scripts and styles for CMB
113
+ * @since 1.0.0
114
+ */
115
+ public static function register_scripts() {
116
+ if ( self::$registration_done ) {
117
+ return;
118
+ }
119
+
120
+ // Only use minified files if SCRIPT_DEBUG is off
121
+ $min = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
122
+
123
+ if ( ! is_admin() ) {
124
+ // we need to register colorpicker on the front-end
125
+ wp_register_script( 'iris', admin_url( 'js/iris.min.js' ), array( 'jquery-ui-draggable', 'jquery-ui-slider', 'jquery-touch-punch' ), CMB2_VERSION );
126
+ wp_register_script( 'wp-color-picker', admin_url( 'js/color-picker.min.js' ), array( 'iris' ), CMB2_VERSION );
127
+ wp_localize_script( 'wp-color-picker', 'wpColorPickerL10n', array(
128
+ 'clear' => __( 'Clear', 'cmb2' ),
129
+ 'defaultString' => __( 'Default', 'cmb2' ),
130
+ 'pick' => __( 'Select Color', 'cmb2' ),
131
+ 'current' => __( 'Current Color', 'cmb2' ),
132
+ ) );
133
+ }
134
+
135
+ wp_register_script( 'cmb-timepicker', cmb2_utils()->url( 'js/jquery.timePicker.min.js' ) );
136
+
137
+ // scripts required for cmb
138
+ $scripts = array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'cmb-timepicker', 'wp-color-picker' );
139
+ // styles required for cmb
140
+ $styles = array( 'wp-color-picker' );
141
+
142
+ wp_register_script( 'cmb2-scripts', cmb2_utils()->url( "js/cmb2{$min}.js" ), $scripts, CMB2_VERSION );
143
+
144
+ wp_localize_script( 'cmb2-scripts', 'cmb2_l10', apply_filters( 'cmb2_localized_data', array(
145
+ 'ajax_nonce' => wp_create_nonce( 'ajax_nonce' ),
146
+ 'ajaxurl' => admin_url( '/admin-ajax.php' ),
147
+ 'script_debug' => defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG,
148
+ 'up_arrow_class' => 'dashicons dashicons-arrow-up-alt2',
149
+ 'down_arrow_class' => 'dashicons dashicons-arrow-down-alt2',
150
+ 'defaults' => array(
151
+ 'color_picker' => false,
152
+ 'date_picker' => array(
153
+ 'changeMonth' => true,
154
+ 'changeYear' => true,
155
+ 'dateFormat' => __( 'mm/dd/yy', 'cmb2' ),
156
+ 'dayNames' => explode( ',', __( 'Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday', 'cmb2' ) ),
157
+ 'dayNamesMin' => explode( ',', __( 'Su, Mo, Tu, We, Th, Fr, Sa', 'cmb2' ) ),
158
+ 'dayNamesShort' => explode( ',', __( 'Sun, Mon, Tue, Wed, Thu, Fri, Sat', 'cmb2' ) ),
159
+ 'monthNames' => explode( ',', __( 'January, February, March, April, May, June, July, August, September, October, November, December', 'cmb2' ) ),
160
+ 'monthNamesShort' => explode( ',', __( 'Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec', 'cmb2' ) ),
161
+ 'nextText' => __( 'Next', 'cmb2' ),
162
+ 'prevText' => __( 'Prev', 'cmb2' ),
163
+ 'currentText' => __( 'Today', 'cmb2' ),
164
+ 'closeText' => __( 'Done', 'cmb2' ),
165
+ 'clearText' => __( 'Clear', 'cmb2' ),
166
+ ),
167
+ 'time_picker' => array(
168
+ 'startTime' => '00:00',
169
+ 'endTime' => '23:59',
170
+ 'show24Hours' => false,
171
+ 'separator' => ':',
172
+ 'step' => 30,
173
+ ),
174
+ ),
175
+ 'strings' => array(
176
+ 'upload_file' => __( 'Use this file', 'cmb2' ),
177
+ 'remove_image' => __( 'Remove Image', 'cmb2' ),
178
+ 'remove_file' => __( 'Remove', 'cmb2' ),
179
+ 'file' => __( 'File:', 'cmb2' ),
180
+ 'download' => __( 'Download', 'cmb2' ),
181
+ 'check_toggle' => __( 'Select / Deselect All', 'cmb2' ),
182
+ ),
183
+ ) ) );
184
+
185
+ wp_register_style( 'cmb2-styles', cmb2_utils()->url( "css/cmb2{$min}.css" ), $styles );
186
+
187
+ self::$registration_done = true;
188
+ }
189
+
190
+ /**
191
+ * Enqueues scripts and styles for CMB
192
+ * @since 1.0.0
193
+ */
194
+ public function do_scripts( $hook ) {
195
+ // only enqueue our scripts/styles on the proper pages
196
+ if ( in_array( $hook, array( 'post.php', 'post-new.php', 'page-new.php', 'page.php' ), true ) ) {
197
+ if ( $this->cmb->prop( 'cmb_styles' ) ) {
198
+ self::enqueue_cmb_css();
199
+ }
200
+ self::enqueue_cmb_js();
201
+ }
202
+ }
203
+
204
+ /**
205
+ * Add encoding attribute
206
+ */
207
+ public function add_post_enctype() {
208
+ echo '
209
+ <script type="text/javascript">
210
+ jQuery(document).ready(function(){
211
+ $form = jQuery("#' . $this->form_id . '");
212
+ if ( $form.length ) {
213
+ $form.attr( {
214
+ "enctype" : "multipart/form-data",
215
+ "encoding" : "multipart/form-data"
216
+ } );
217
+ }
218
+ });
219
+ </script>';
220
+ }
221
+
222
+ /**
223
+ * Add metaboxes (to 'post' object type)
224
+ */
225
+ public function add_metaboxes() {
226
+
227
+ if ( ! $this->show_on() ) {
228
+ return;
229
+ }
230
+
231
+ foreach ( $this->cmb->prop( 'object_types' ) as $page ) {
232
+
233
+ if ( $this->cmb->prop( 'closed' ) ) {
234
+ add_filter( "postbox_classes_{$page}_{$this->cmb->cmb_id}", array( $this, 'close_metabox_class' ) );
235
+ }
236
+
237
+ add_meta_box( $this->cmb->cmb_id, $this->cmb->prop( 'title' ), array( $this, 'post_metabox' ), $page, $this->cmb->prop( 'context' ), $this->cmb->prop( 'priority' ) );
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Add 'closed' class to metabox
243
+ * @since 2.0.0
244
+ * @param array $classes Array of classes
245
+ * @return array Modified array of classes
246
+ */
247
+ public function close_metabox_class( $classes ) {
248
+ $classes[] = 'closed';
249
+ return $classes;
250
+ }
251
+
252
+ /**
253
+ * Display metaboxes for a post object
254
+ * @since 1.0.0
255
+ */
256
+ public function post_metabox() {
257
+ $this->cmb->show_form( get_the_ID(), 'post' );
258
+ }
259
+
260
+ /**
261
+ * Display metaboxes for new user page
262
+ * @since 1.0.0
263
+ */
264
+ public function user_new_metabox( $section ) {
265
+ if ( $section == $this->cmb->prop( 'new_user_section' ) ) {
266
+ $object_id = $this->cmb->object_id();
267
+ $this->cmb->object_id( isset( $_REQUEST['user_id'] ) ? $_REQUEST['user_id'] : $object_id );
268
+ $this->user_metabox();
269
+ }
270
+ }
271
+
272
+ /**
273
+ * Display metaboxes for a user object
274
+ * @since 1.0.0
275
+ */
276
+ public function user_metabox() {
277
+
278
+ if ( 'user' != $this->cmb->mb_object_type() ) {
279
+ return;
280
+ }
281
+
282
+ if ( ! $this->show_on() ) {
283
+ return;
284
+ }
285
+
286
+ if ( $this->cmb->prop( 'cmb_styles' ) ) {
287
+ self::enqueue_cmb_css();
288
+ }
289
+ self::enqueue_cmb_js();
290
+
291
+ $this->cmb->show_form( 0, 'user' );
292
+ }
293
+
294
+ /**
295
+ * Save data from metabox
296
+ */
297
+ public function save_post( $post_id, $post = false ) {
298
+
299
+ $post_type = $post ? $post->post_type : get_post_type( $post_id );
300
+
301
+ $do_not_pass_go = (
302
+ // check nonce
303
+ ! isset( $_POST[ $this->cmb->nonce() ] )
304
+ || ! wp_verify_nonce( $_POST[ $this->cmb->nonce() ], $this->cmb->nonce() )
305
+ // check if autosave
306
+ || defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE
307
+ // check user editing permissions
308
+ || ( 'page' == $post_type && ! current_user_can( 'edit_page', $post_id ) )
309
+ || ! current_user_can( 'edit_post', $post_id )
310
+ // get the metabox post_types & compare it to this post_type
311
+ || ! in_array( $post_type, $this->cmb->prop( 'object_types' ) )
312
+ );
313
+
314
+ if ( $do_not_pass_go ) {
315
+ // do not collect $200
316
+ return;
317
+ }
318
+
319
+ // take a trip to reading railroad – if you pass go collect $200
320
+ $this->cmb->save_fields( $post_id, 'post', $_POST );
321
+ }
322
+
323
+ /**
324
+ * Save data from metabox
325
+ */
326
+ public function save_user( $user_id ) {
327
+ // check permissions
328
+ if (
329
+ // check nonce
330
+ ! isset( $_POST[ $this->cmb->nonce() ] )
331
+ || ! wp_verify_nonce( $_POST[ $this->cmb->nonce() ], $this->cmb->nonce() )
332
+ ) {
333
+ // @todo more hardening?
334
+ return;
335
+ }
336
+
337
+ $this->cmb->save_fields( $user_id, 'user', $_POST );
338
+ }
339
+
340
+ /**
341
+ * Determines if metabox should be shown in current context
342
+ * @since 2.0.0
343
+ * @return bool
344
+ */
345
+ public function show_on() {
346
+ return (bool) apply_filters( 'cmb2_show_on', true, $this->cmb->meta_box, $this->cmb );
347
+ }
348
+
349
+ /**
350
+ * Ensures WordPress hook only gets fired once
351
+ * @since 2.0.0
352
+ * @param string $action The name of the filter to hook the $hook callback to.
353
+ * @param callback $hook The callback to be run when the filter is applied.
354
+ * @param integer $priority Order the functions are executed
355
+ * @param int $accepted_args The number of arguments the function accepts.
356
+ */
357
+ public function once( $action, $hook, $priority = 10, $accepted_args = 1 ) {
358
+ $key = md5( serialize( func_get_args() ) );
359
+
360
+ if ( in_array( $key, self::$hooks_completed ) ) {
361
+ return;
362
+ }
363
+
364
+ self::$hooks_completed[] = $key;
365
+ add_filter( $action, $hook, $priority, $accepted_args );
366
+ }
367
+
368
+ /**
369
+ * Includes CMB styles
370
+ * @since 2.0.0
371
+ */
372
+ public static function enqueue_cmb_css() {
373
+ if ( ! apply_filters( 'cmb2_enqueue_css', true ) ) {
374
+ return false;
375
+ }
376
+
377
+ self::register_scripts();
378
+ return wp_enqueue_style( 'cmb2-styles' );
379
+ }
380
+
381
+ /**
382
+ * Includes CMB JS
383
+ * @since 2.0.0
384
+ */
385
+ public static function enqueue_cmb_js() {
386
+ if ( ! apply_filters( 'cmb2_enqueue_js', true ) ) {
387
+ return false;
388
+ }
389
+
390
+ self::register_scripts();
391
+ wp_enqueue_media();
392
+ return wp_enqueue_script( 'cmb2-scripts' );
393
+ }
394
+
395
+ }
cmb2/includes/helper-functions.php ADDED
@@ -0,0 +1,283 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Autoloads files with CMB2 classes when needed
5
+ * @since 1.0.0
6
+ * @param string $class_name Name of the class being requested
7
+ */
8
+ function cmb2_autoload_classes( $class_name ) {
9
+ if ( class_exists( $class_name, false ) || false === strpos( $class_name, 'CMB2' ) ) {
10
+ return;
11
+ }
12
+
13
+ $file = cmb2_dir( "includes/{$class_name}.php" );
14
+ if ( file_exists( $file ) ) {
15
+ include_once( $file );
16
+ }
17
+ }
18
+ spl_autoload_register( 'cmb2_autoload_classes' );
19
+
20
+ /**
21
+ * Get instance of the CMB2_Utils class
22
+ * @since 2.0.0
23
+ * @return CMB2_Utils object CMB utilities class
24
+ */
25
+ function cmb2_utils() {
26
+ static $cmb2_utils;
27
+ $cmb2_utils = $cmb2_utils ? $cmb2_utils : new CMB2_Utils();
28
+ return $cmb2_utils;
29
+ }
30
+
31
+ /**
32
+ * Get instance of the CMB2_Ajax class
33
+ * @since 2.0.0
34
+ * @return CMB2_Ajax object CMB utilities class
35
+ */
36
+ function cmb2_ajax() {
37
+ static $cmb2_ajax;
38
+ $cmb2_ajax = $cmb2_ajax ? $cmb2_ajax : new CMB2_Ajax();
39
+ return $cmb2_ajax;
40
+ }
41
+
42
+ /**
43
+ * Get instance of the CMB2_Option class for the passed metabox ID
44
+ * @since 2.0.0
45
+ * @return CMB2_Option object Options class for setting/getting options for metabox
46
+ */
47
+ function cmb2_options( $key ) {
48
+ return CMB2_Options::get( $key );
49
+ }
50
+
51
+ /**
52
+ * Get a cmb oEmbed. Handles oEmbed getting for non-post objects
53
+ * @since 2.0.0
54
+ * @param array $args Arguments. Accepts:
55
+ *
56
+ * 'url' - URL to retrieve the oEmbed from,
57
+ * 'object_id' - $post_id,
58
+ * 'object_type' - 'post',
59
+ * 'oembed_args' - $embed_args, // array containing 'width', etc
60
+ * 'field_id' - false,
61
+ * 'cache_key' - false,
62
+ *
63
+ * @return string oEmbed string
64
+ */
65
+ function cmb2_get_oembed( $args = array() ) {
66
+ return cmb2_ajax()->get_oembed( $args );
67
+ }
68
+
69
+ /**
70
+ * A helper function to get an option from a CMB options array
71
+ * @since 1.0.1
72
+ * @param string $option_key Option key
73
+ * @param string $field_id Option array field key
74
+ * @return array Options array or specific field
75
+ */
76
+ function cmb2_get_option( $option_key, $field_id = '' ) {
77
+ return cmb2_options( $option_key )->get( $field_id );
78
+ }
79
+
80
+ /**
81
+ * A helper function to update an option in a CMB options array
82
+ * @since 2.0.0
83
+ * @param string $option_key Option key
84
+ * @param string $field_id Option array field key
85
+ * @param mixed $value Value to update data with
86
+ * @param boolean $single Whether data should not be an array
87
+ * @return boolean Success/Failure
88
+ */
89
+ function cmb2_update_option( $option_key, $field_id, $value, $single = true ) {
90
+ if ( cmb2_options( $option_key )->update( $field_id, $value, false, $single ) ) {
91
+ return cmb2_options( $option_key )->set();
92
+ }
93
+
94
+ return false;
95
+ }
96
+
97
+ /**
98
+ * Get a CMB field object.
99
+ * @since 1.1.0
100
+ * @param array $meta_box Metabox ID or Metabox config array
101
+ * @param array $field_id Field ID or all field arguments
102
+ * @param int $object_id Object ID
103
+ * @param string $object_type Type of object being saved. (e.g., post, user, comment, or options-page)
104
+ * @return CMB2_Field|null CMB2_Field object unless metabox config cannot be found
105
+ */
106
+ function cmb2_get_field( $meta_box, $field_id, $object_id = 0, $object_type = 'post' ) {
107
+
108
+ $object_id = $object_id ? $object_id : get_the_ID();
109
+ $cmb = ( $meta_box instanceof CMB2 ) ? $meta_box : cmb2_get_metabox( $meta_box, $object_id );
110
+
111
+ if ( ! $cmb ) {
112
+ return;
113
+ }
114
+
115
+ $object_type = $object_type ? $object_type : $cmb->mb_object_type();
116
+ $cmb->object_type( $object_type );
117
+
118
+ if ( is_array( $field_id ) && isset( $field_id['id'] ) ) {
119
+ return new CMB2_Field( array(
120
+ 'field_args' => $field_id,
121
+ 'object_id' => $object_id,
122
+ 'object_type' => $object_type,
123
+ ) );
124
+ }
125
+
126
+ $fields = (array) $cmb->prop( 'fields' );
127
+ foreach ( $fields as $field ) {
128
+ if ( $field['id'] == $field_id || $field['name'] == $field_id ) {
129
+ // Send back field object
130
+ return new CMB2_Field( array(
131
+ 'field_args' => $field,
132
+ 'object_id' => $object_id,
133
+ 'object_type' => $object_type,
134
+ ) );
135
+
136
+ }
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Get a field's value.
142
+ * @since 1.1.0
143
+ * @param array $meta_box Metabox ID or Metabox config array
144
+ * @param array $field_id Field ID or all field arguments
145
+ * @param int $object_id Object ID
146
+ * @param string $object_type Type of object being saved. (e.g., post, user, comment, or options-page)
147
+ * @return mixed Maybe escaped value
148
+ */
149
+ function cmb2_get_field_value( $meta_box, $field_id, $object_id = 0, $object_type = 'post' ) {
150
+ $field = cmb2_get_field( $meta_box, $field_id, $object_id, $object_type );
151
+ return $field->escaped_value();
152
+ }
153
+
154
+ /**
155
+ * Because OOP can be scary
156
+ * @since 2.0.2
157
+ * @param array $meta_box_config Metabox Config array
158
+ * @return CMB2 object Instantiated CMB2 object
159
+ */
160
+ function new_cmb2_box( array $meta_box_config ) {
161
+ return cmb2_get_metabox( $meta_box_config );
162
+ }
163
+
164
+ /**
165
+ * Retrieve a CMB instance by the metabox ID
166
+ * @since 2.0.0
167
+ * @param mixed $meta_box Metabox ID or Metabox config array
168
+ * @return CMB2 object
169
+ */
170
+ function cmb2_get_metabox( $meta_box, $object_id = 0 ) {
171
+
172
+ if ( $meta_box instanceof CMB2 ) {
173
+ return $meta_box;
174
+ }
175
+
176
+ if ( is_string( $meta_box ) ) {
177
+ $cmb = CMB2_Boxes::get( $meta_box );
178
+ } else {
179
+ // See if we already have an instance of this metabox
180
+ $cmb = CMB2_Boxes::get( $meta_box['id'] );
181
+ // If not, we'll initate a new metabox
182
+ $cmb = $cmb ? $cmb : new CMB2( $meta_box, $object_id );
183
+ }
184
+
185
+ if ( $cmb && $object_id ) {
186
+ $cmb->object_id( $object_id );
187
+ }
188
+ return $cmb;
189
+ }
190
+
191
+ /**
192
+ * Retrieve a metabox form
193
+ * @since 2.0.0
194
+ * @param mixed $meta_box Metabox config array or Metabox ID
195
+ * @param int $object_id Object ID
196
+ * @param array $args Optional arguments array
197
+ * @return string CMB html form markup
198
+ */
199
+ function cmb2_get_metabox_form( $meta_box, $object_id = 0, $args = array() ) {
200
+
201
+ $object_id = $object_id ? $object_id : get_the_ID();
202
+ $cmb = cmb2_get_metabox( $meta_box, $object_id );
203
+
204
+ ob_start();
205
+ // Get cmb form
206
+ cmb2_print_metabox_form( $cmb, $object_id, $args );
207
+ $form = ob_get_contents();
208
+ ob_end_clean();
209
+
210
+ return apply_filters( 'cmb2_get_metabox_form', $form, $object_id, $cmb );
211
+ }
212
+
213
+ /**
214
+ * Display a metabox form & save it on submission
215
+ * @since 1.0.0
216
+ * @param mixed $meta_box Metabox config array or Metabox ID
217
+ * @param int $object_id Object ID
218
+ * @param array $args Optional arguments array
219
+ */
220
+ function cmb2_print_metabox_form( $meta_box, $object_id = 0, $args = array() ) {
221
+
222
+ $object_id = $object_id ? $object_id : get_the_ID();
223
+ $cmb = cmb2_get_metabox( $meta_box, $object_id );
224
+
225
+ // if passing a metabox ID, and that ID was not found
226
+ if ( ! $cmb ) {
227
+ return;
228
+ }
229
+
230
+ // Set object type to what is declared in the metabox (rather than trying to guess from context)
231
+ $cmb->object_type( $cmb->mb_object_type() );
232
+
233
+ // Save the metabox if it's been submitted
234
+ // check permissions
235
+ // @todo more hardening?
236
+ if (
237
+ // check nonce
238
+ isset( $_POST['submit-cmb'], $_POST['object_id'], $_POST[ $cmb->nonce() ] )
239
+ && wp_verify_nonce( $_POST[ $cmb->nonce() ], $cmb->nonce() )
240
+ && $object_id && $_POST['object_id'] == $object_id
241
+ ) {
242
+ $cmb->save_fields( $object_id, $cmb->object_type(), $_POST );
243
+ }
244
+
245
+ // Enqueue JS/CSS
246
+ if ( $cmb->prop( 'cmb_styles' ) ) {
247
+ CMB2_hookup::enqueue_cmb_css();
248
+ }
249
+ CMB2_hookup::enqueue_cmb_js();
250
+
251
+ $args = wp_parse_args( $args, array(
252
+ 'form_format' => '<form class="cmb-form" method="post" id="%1$s" enctype="multipart/form-data" encoding="multipart/form-data"><input type="hidden" name="object_id" value="%2$s">%3$s<input type="submit" name="submit-cmb" value="%4$s" class="button-primary"></form>',
253
+ 'save_button' => __( 'Save', 'cmb2' ),
254
+ ) );
255
+
256
+ $form_format = apply_filters( 'cmb2_get_metabox_form_format', $args['form_format'], $object_id, $cmb );
257
+
258
+ $format_parts = explode( '%3$s', $form_format );
259
+
260
+ // Show cmb form
261
+ printf( $format_parts[0], $cmb->cmb_id, $object_id );
262
+ $cmb->show_form();
263
+
264
+ if ( isset( $format_parts[1] ) && $format_parts[1] ) {
265
+ printf( str_ireplace( '%4$s', '%1$s', $format_parts[1] ), $args['save_button'] );
266
+ }
267
+
268
+ }
269
+
270
+ /**
271
+ * Display a metabox form (or optionally return it) & save it on submission
272
+ * @since 1.0.0
273
+ * @param mixed $meta_box Metabox config array or Metabox ID
274
+ * @param int $object_id Object ID
275
+ * @param array $args Optional arguments array
276
+ */
277
+ function cmb2_metabox_form( $meta_box, $object_id = 0, $args = array() ) {
278
+ if ( ! isset( $args['echo'] ) || $args['echo'] ) {
279
+ cmb2_print_metabox_form( $meta_box, $object_id, $args );
280
+ } else {
281
+ return cmb2_get_metabox_form( $meta_box, $object_id, $args );
282
+ }
283
+ }
cmb2/includes/index.php ADDED
File without changes
cmb2/index.php ADDED
File without changes
cmb2/init.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if ( ! class_exists( 'cmb2_bootstrap_202', false ) ) {
3
+
4
+ /**
5
+ * Check for newest version of CMB
6
+ */
7
+ class cmb2_bootstrap_202 {
8
+
9
+ /**
10
+ * Current version number
11
+ * @var string
12
+ * @since 1.0.0
13
+ */
14
+ const VERSION = '2.0.2';
15
+
16
+ /**
17
+ * Current version hook priority
18
+ * Will decrement with each release
19
+ *
20
+ * @var int
21
+ * @since 2.0.0
22
+ */
23
+ const PRIORITY = 9997;
24
+
25
+ public static $single = null;
26
+
27
+ public static function go() {
28
+ if ( null === self::$single ) {
29
+ self::$single = new self();
30
+ }
31
+ return self::$single;
32
+ }
33
+
34
+ private function __construct() {
35
+ /**
36
+ * A constant you can use to check if CMB2 is loaded
37
+ * for your plugins/themes with CMB2 dependency
38
+ */
39
+ if ( ! defined( 'CMB2_LOADED' ) ) {
40
+ define( 'CMB2_LOADED', true );
41
+ }
42
+ add_action( 'init', array( $this, 'include_cmb' ), self::PRIORITY );
43
+ }
44
+
45
+ public function include_cmb() {
46
+ if ( ! class_exists( 'CMB2', false ) ) {
47
+ if ( ! defined( 'CMB2_VERSION' ) ) {
48
+ define( 'CMB2_VERSION', self::VERSION );
49
+ }
50
+ $this->l10ni18n();
51
+ require_once 'bootstrap.php';
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Load CMB text domain
57
+ * @since 2.0.0
58
+ */
59
+ public function l10ni18n() {
60
+ $loaded = load_plugin_textdomain( 'cmb2', false, '/languages/' );
61
+ if ( ! $loaded ) {
62
+ $loaded = load_muplugin_textdomain( 'cmb2', '/languages/' );
63
+ }
64
+ if ( ! $loaded ) {
65
+ $loaded = load_theme_textdomain( 'cmb2', '/languages/' );
66
+ }
67
+
68
+ if ( ! $loaded ) {
69
+ $locale = apply_filters( 'plugin_locale', get_locale(), 'cmb2' );
70
+ $mofile = dirname( __FILE__ ) . '/languages/cmb2-' . $locale . '.mo';
71
+ load_textdomain( 'cmb2', $mofile );
72
+ }
73
+ }
74
+
75
+ }
76
+ cmb2_bootstrap_202::go();
77
+
78
+ } // class exists check
cmb2/js/cmb2.js ADDED
@@ -0,0 +1,891 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Controls the behaviours of custom metabox fields.
3
+ *
4
+ * @author WebDevStudios
5
+ * @see https://github.com/WebDevStudios/CMB2
6
+ */
7
+
8
+ /**
9
+ * Custom jQuery for Custom Metaboxes and Fields
10
+ */
11
+ window.CMB2 = (function(window, document, $, undefined){
12
+ 'use strict';
13
+
14
+ // localization strings
15
+ var l10n = window.cmb2_l10;
16
+ var setTimeout = window.setTimeout;
17
+
18
+ // CMB functionality object
19
+ var cmb = {
20
+ formfield : '',
21
+ idNumber : false,
22
+ file_frames : {},
23
+ repeatEls : 'input:not([type="button"]),select,textarea,.cmb2-media-status',
24
+ styleBreakPoint : 450,
25
+ mediaHandlers : {},
26
+ defaults : {
27
+ time_picker : l10n.defaults.time_picker,
28
+ date_picker : l10n.defaults.date_picker,
29
+ color_picker : l10n.defaults.color_picker || {},
30
+ },
31
+ };
32
+
33
+ // Because it's a more efficient way of getting an element by id.
34
+ var $id = function( selector ) {
35
+ return $( document.getElementById( selector ) );
36
+ };
37
+
38
+ cmb.metabox = function() {
39
+ if ( cmb.$metabox ) {
40
+ return cmb.$metabox;
41
+ }
42
+ cmb.$metabox = $('.cmb2-wrap > .cmb2-metabox');
43
+ return cmb.$metabox;
44
+ };
45
+
46
+ cmb.init = function() {
47
+
48
+ cmb.log( 'CMB2 localized data', l10n );
49
+ var $metabox = cmb.metabox();
50
+ var $repeatGroup = $metabox.find('.cmb-repeatable-group');
51
+
52
+ /**
53
+ * Initialize time/date/color pickers
54
+ */
55
+ cmb.initPickers( $metabox.find('input[type="text"].cmb2-timepicker'), $metabox.find('input[type="text"].cmb2-datepicker'), $metabox.find('input[type="text"].cmb2-colorpicker') );
56
+
57
+ // Wrap date picker in class to narrow the scope of jQuery UI CSS and prevent conflicts
58
+ $id( 'ui-datepicker-div' ).wrap('<div class="cmb2-element" />');
59
+
60
+ // Insert toggle button into DOM wherever there is multicheck. credit: Genesis Framework
61
+ $( '<p><span class="button cmb-multicheck-toggle">' + l10n.strings.check_toggle + '</span></p>' ).insertBefore( '.cmb2-checkbox-list:not(.no-select-all)' );
62
+
63
+ // Make File List drag/drop sortable:
64
+ cmb.makeListSortable();
65
+
66
+ $metabox
67
+ .on( 'change', '.cmb2_upload_file', function() {
68
+ cmb.formfield = $(this).attr('id');
69
+ $id( cmb.formfield + '_id' ).val('');
70
+ })
71
+ // Media/file management
72
+ .on( 'click', '.cmb-multicheck-toggle', cmb.toggleCheckBoxes )
73
+ .on( 'click', '.cmb2-upload-button', cmb.handleMedia )
74
+ .on( 'click', '.cmb-attach-list li, .cmb2-media-status .img-status img, .cmb2-media-status .file-status > span', cmb.handleFileClick )
75
+ .on( 'click', '.cmb2-remove-file-button', cmb.handleRemoveMedia )
76
+ // Repeatable content
77
+ .on( 'click', '.cmb-add-group-row', cmb.addGroupRow )
78
+ .on( 'click', '.cmb-add-row-button', cmb.addAjaxRow )
79
+ .on( 'click', '.cmb-remove-group-row', cmb.removeGroupRow )
80
+ .on( 'click', '.cmb-remove-row-button', cmb.removeAjaxRow )
81
+ // Ajax oEmbed display
82
+ .on( 'keyup paste focusout', '.cmb2-oembed', cmb.maybeOembed )
83
+ // Reset titles when removing a row
84
+ .on( 'cmb2_remove_row', '.cmb-repeatable-group', cmb.resetTitlesAndIterator )
85
+ .on( 'click', '.cmbhandle, .cmbhandle + .cmbhandle-title', cmb.toggleHandle );
86
+
87
+ if ( $repeatGroup.length ) {
88
+ $repeatGroup
89
+ .filter('.sortable').each( function() {
90
+ // Add sorting arrows
91
+ $(this).find( '.button.cmb-remove-group-row' ).before( '<a class="button cmb-shift-rows move-up alignleft" href="#"><span class="'+ l10n.up_arrow_class +'"></span></a> <a class="button cmb-shift-rows move-down alignleft" href="#"><span class="'+ l10n.down_arrow_class +'"></span></a>' );
92
+ })
93
+ .on( 'click', '.cmb-shift-rows', cmb.shiftRows )
94
+ .on( 'cmb2_add_row', cmb.emptyValue );
95
+ }
96
+
97
+ // on pageload
98
+ setTimeout( cmb.resizeoEmbeds, 500);
99
+ // and on window resize
100
+ $(window).on( 'resize', cmb.resizeoEmbeds );
101
+
102
+ };
103
+
104
+ cmb.resetTitlesAndIterator = function() {
105
+ // Loop repeatable group tables
106
+ $( '.cmb-repeatable-group' ).each( function() {
107
+ var $table = $(this);
108
+ // Loop repeatable group table rows
109
+ $table.find( '.cmb-repeatable-grouping' ).each( function( rowindex ) {
110
+ var $row = $(this);
111
+ // Reset rows iterator
112
+ $row.data( 'iterator', rowindex );
113
+ // Reset rows title
114
+ $row.find( '.cmb-group-title h4' ).text( $table.find( '.cmb-add-group-row' ).data( 'grouptitle' ).replace( '{#}', ( rowindex + 1 ) ) );
115
+ });
116
+ });
117
+ };
118
+
119
+ cmb.toggleHandle = function( evt ) {
120
+ evt.preventDefault();
121
+ $(document).trigger( 'postbox-toggled', $(this).parent('.postbox').toggleClass('closed') );
122
+ };
123
+
124
+ cmb.toggleCheckBoxes = function( evt ) {
125
+ evt.preventDefault();
126
+ var $self = $(this);
127
+ var $multicheck = $self.closest( '.cmb-td' ).find( 'input[type=checkbox]' );
128
+
129
+ // If the button has already been clicked once...
130
+ if ( $self.data( 'checked' ) ) {
131
+ // clear the checkboxes and remove the flag
132
+ $multicheck.prop( 'checked', false );
133
+ $self.data( 'checked', false );
134
+ }
135
+ // Otherwise mark the checkboxes and add a flag
136
+ else {
137
+ $multicheck.prop( 'checked', true );
138
+ $self.data( 'checked', true );
139
+ }
140
+ };
141
+
142
+ cmb.handleMedia = function( evt ) {
143
+ evt.preventDefault();
144
+
145
+ var $el = $( this );
146
+ cmb.attach_id = ! $el.hasClass( 'cmb2-upload-list' ) ? $el.closest( '.cmb-td' ).find( '.cmb2-upload-file-id' ).val() : false;
147
+ // Clean up default 0 value
148
+ cmb.attach_id = '0' !== cmb.attach_id ? cmb.attach_id : false;
149
+
150
+ cmb._handleMedia( $el.prev('input.cmb2-upload-file').attr('id'), $el.hasClass( 'cmb2-upload-list' ) );
151
+ };
152
+
153
+ cmb.handleFileClick = function( evt ) {
154
+ evt.preventDefault();
155
+
156
+ var $el = $( this );
157
+ var $td = $el.closest( '.cmb-td' );
158
+ var isList = $td.find( '.cmb2-upload-button' ).hasClass( 'cmb2-upload-list' );
159
+ cmb.attach_id = isList ? $el.find( 'input[type="hidden"]' ).data( 'id' ) : $td.find( '.cmb2-upload-file-id' ).val();
160
+
161
+ if ( cmb.attach_id ) {
162
+ cmb._handleMedia( $td.find( 'input.cmb2-upload-file' ).attr('id'), isList, cmb.attach_id );
163
+ }
164
+ };
165
+
166
+ cmb._handleMedia = function( formfield, isList ) {
167
+ if ( ! wp ) {
168
+ return;
169
+ }
170
+
171
+ var $metabox = cmb.metabox();
172
+ cmb.formfield = formfield;
173
+ var $formfield = $id( cmb.formfield );
174
+ var previewSize = $formfield.data( 'previewsize' );
175
+ var formName = $formfield.attr('name');
176
+ var uploadStatus = true;
177
+ var attachment = true;
178
+
179
+ // If this field's media frame already exists, reopen it.
180
+ if ( cmb.formfield in cmb.file_frames ) {
181
+ cmb.file_frames[ cmb.formfield ].open();
182
+ return;
183
+ }
184
+
185
+ // Create the media frame.
186
+ cmb.file_frames[ cmb.formfield ] = wp.media({
187
+ title: $metabox.find('label[for=' + cmb.formfield + ']').text(),
188
+ button: {
189
+ text: l10n.strings.upload_file
190
+ },
191
+ multiple: isList ? true : false
192
+ });
193
+
194
+ cmb.mediaHandlers.list = function( selection, returnIt ) {
195
+ // Get all of our selected files
196
+ attachment = selection.toJSON();
197
+
198
+ $formfield.val(attachment.url);
199
+ $id( cmb.formfield +'_id' ).val(attachment.id);
200
+
201
+ // Setup our fileGroup array
202
+ var fileGroup = [];
203
+
204
+ // Loop through each attachment
205
+ $( attachment ).each( function() {
206
+ if ( this.type && this.type === 'image' ) {
207
+ var width = previewSize[0] ? previewSize[0] : 50;
208
+ var height = previewSize[1] ? previewSize[1] : 50;
209
+
210
+ // image preview
211
+ uploadStatus = '<li class="img-status">'+
212
+ '<img width="'+ width +'" height="'+ height +'" src="' + this.url + '" class="attachment-'+ width +'px'+ height +'px" alt="'+ this.filename +'">'+
213
+ '<p><a href="#" class="cmb2-remove-file-button" rel="'+ cmb.formfield +'['+ this.id +']">'+ l10n.strings.remove_image +'</a></p>'+
214
+ '<input type="hidden" id="filelist-'+ this.id +'" data-id="'+ this.id +'" name="'+ formName +'['+ this.id +']" value="' + this.url + '">'+
215
+ '</li>';
216
+
217
+ } else {
218
+ // Standard generic output if it's not an image.
219
+ uploadStatus = '<li class="file-status"><span>'+ l10n.strings.file +' <strong>'+ this.filename +'</strong></span>&nbsp;&nbsp; (<a href="' + this.url + '" target="_blank" rel="external">'+ l10n.strings.download +'</a> / <a href="#" class="cmb2-remove-file-button" rel="'+ cmb.formfield +'['+ this.id +']">'+ l10n.strings.remove_file +'</a>)'+
220
+ '<input type="hidden" id="filelist-'+ this.id +'" data-id="'+ this.id +'" name="'+ formName +'['+ this.id +']" value="' + this.url + '">'+
221
+ '</li>';
222
+
223
+ }
224
+
225
+ // Add our file to our fileGroup array
226
+ fileGroup.push( uploadStatus );
227
+ });
228
+
229
+ if ( ! returnIt ) {
230
+ // Append each item from our fileGroup array to .cmb2-media-status
231
+ $( fileGroup ).each( function() {
232
+ $formfield.siblings('.cmb2-media-status').slideDown().append(this);
233
+ });
234
+ } else {
235
+ return fileGroup;
236
+ }
237
+
238
+ };
239
+ cmb.mediaHandlers.single = function( selection ) {
240
+ // Only get one file from the uploader
241
+ attachment = selection.first().toJSON();
242
+
243
+ $formfield.val(attachment.url);
244
+ $id( cmb.formfield +'_id' ).val(attachment.id);
245
+
246
+ if ( attachment.type && attachment.type === 'image' ) {
247
+ // image preview
248
+ var width = previewSize[0] ? previewSize[0] : 350;
249
+ uploadStatus = '<div class="img-status"><img width="'+ width +'px" style="max-width: '+ width +'px; width: 100%; height: auto;" src="' + attachment.url + '" alt="'+ attachment.filename +'" title="'+ attachment.filename +'" /><p><a href="#" class="cmb2-remove-file-button" rel="' + cmb.formfield + '">'+ l10n.strings.remove_image +'</a></p></div>';
250
+ } else {
251
+ // Standard generic output if it's not an image.
252
+ uploadStatus = '<div class="file-status"><span>'+ l10n.strings.file +' <strong>'+ attachment.filename +'</strong></span>&nbsp;&nbsp; (<a href="'+ attachment.url +'" target="_blank" rel="external">'+ l10n.strings.download +'</a> / <a href="#" class="cmb2-remove-file-button" rel="'+ cmb.formfield +'">'+ l10n.strings.remove_file +'</a>)</div>';
253
+ }
254
+
255
+ // add/display our output
256
+ $formfield.siblings('.cmb2-media-status').slideDown().html(uploadStatus);
257
+ };
258
+
259
+ cmb.mediaHandlers.selectFile = function() {
260
+ var selection = cmb.file_frames[ cmb.formfield ].state().get('selection');
261
+ var type = isList ? 'list' : 'single';
262
+
263
+ if ( cmb.attach_id && isList ) {
264
+ $( '[data-id="'+ cmb.attach_id +'"]' ).parents( 'li' ).replaceWith( cmb.mediaHandlers.list( selection, true ) );
265
+ return;
266
+ }
267
+
268
+ cmb.mediaHandlers[type]( selection );
269
+ };
270
+
271
+ cmb.mediaHandlers.openModal = function() {
272
+ var selection = cmb.file_frames[ cmb.formfield ].state().get('selection');
273
+
274
+ if ( ! cmb.attach_id ) {
275
+ return selection.reset();
276
+ }
277
+
278
+ var attach = wp.media.attachment( cmb.attach_id );
279
+ attach.fetch();
280
+ selection.set( attach ? [ attach ] : [] );
281
+ };
282
+
283
+ // When a file is selected, run a callback.
284
+ cmb.file_frames[ cmb.formfield ]
285
+ .on( 'select', cmb.mediaHandlers.selectFile )
286
+ .on( 'open', cmb.mediaHandlers.openModal );
287
+
288
+ // Finally, open the modal
289
+ cmb.file_frames[ cmb.formfield ].open();
290
+ };
291
+
292
+ cmb.handleRemoveMedia = function( evt ) {
293
+ evt.preventDefault();
294
+ var $self = $(this);
295
+ if ( $self.is( '.cmb-attach-list .cmb2-remove-file-button' ) ){
296
+ $self.parents('li').remove();
297
+ return false;
298
+ }
299
+
300
+ cmb.formfield = $self.attr('rel');
301
+
302
+ cmb.metabox().find( 'input#' + cmb.formfield ).val('');
303
+ cmb.metabox().find( 'input#' + cmb.formfield + '_id' ).val('');
304
+ $self.parents('.cmb2-media-status').html('');
305
+
306
+ return false;
307
+ };
308
+
309
+ $.fn.cleanRow = function( prevNum, group ) {
310
+ var $self = $(this);
311
+ var $inputs = $self.find( 'input:not([type="button"]), select, textarea, label' );
312
+ var $other = $self.find('[id]').not( 'input:not([type="button"]), select, textarea, label' );
313
+ if ( group ) {
314
+ // Remove extra ajaxed rows
315
+ $self.find('.cmb-repeat-table .cmb-repeat-row:not(:first-child)').remove();
316
+
317
+ // Update all elements w/ an ID
318
+ if ( $other.length ) {
319
+ $other.each( function() {
320
+ var $_this = $( this );
321
+ var oldID = $_this.attr( 'id' );
322
+ var newID = oldID.replace( '_'+ prevNum, '_'+ cmb.idNumber );
323
+ var $buttons = $self.find('[data-selector="'+ oldID +'"]');
324
+ $_this.attr( 'id', newID );
325
+
326
+ // Replace data-selector vars
327
+ if ( $buttons.length ) {
328
+ $buttons.attr( 'data-selector', newID ).data( 'selector', newID );
329
+ }
330
+ });
331
+ }
332
+ }
333
+ cmb.neweditor_id = [];
334
+
335
+ $inputs.filter(':checked').prop( 'checked', false );
336
+ $inputs.filter(':selected').prop( 'selected', false );
337
+
338
+ if ( $self.find('h3.cmb-group-title').length ) {
339
+ $self.find( 'h3.cmb-group-title' ).text( $self.data( 'title' ).replace( '{#}', ( cmb.idNumber + 1 ) ) );
340
+ }
341
+
342
+ $inputs.each( function(){
343
+ var $newInput = $(this);
344
+ var isEditor = $newInput.hasClass( 'wp-editor-area' );
345
+ var oldFor = $newInput.attr( 'for' );
346
+ // var $next = $newInput.next();
347
+ var attrs = {};
348
+ var newID, oldID;
349
+ if ( oldFor ) {
350
+ attrs = { 'for' : oldFor.replace( '_'+ prevNum, '_'+ cmb.idNumber ) };
351
+ } else {
352
+ var oldName = $newInput.attr( 'name' );
353
+ // Replace 'name' attribute key
354
+ var newName = oldName ? oldName.replace( '['+ prevNum +']', '['+ cmb.idNumber +']' ) : '';
355
+ oldID = $newInput.attr( 'id' );
356
+ newID = oldID ? oldID.replace( '_'+ prevNum, '_'+ cmb.idNumber ) : '';
357
+ attrs = {
358
+ id: newID,
359
+ name: newName,
360
+ // value: '',
361
+ 'data-iterator': cmb.idNumber,
362
+ };
363
+ }
364
+
365
+ $newInput
366
+ .removeClass( 'hasDatepicker' )
367
+ .attr( attrs ).val('');
368
+
369
+ // wysiwyg field
370
+ if ( isEditor ) {
371
+ // Get new wysiwyg ID
372
+ newID = newID ? oldID.replace( 'zx'+ prevNum, 'zx'+ cmb.idNumber ) : '';
373
+ // Empty the contents
374
+ $newInput.html('');
375
+ // Get wysiwyg field
376
+ var $wysiwyg = $newInput.parents( '.cmb-type-wysiwyg' );
377
+ // Remove extra mce divs
378
+ $wysiwyg.find('.mce-tinymce:not(:first-child)').remove();
379
+ // Replace id instances
380
+ var html = $wysiwyg.html().replace( new RegExp( oldID, 'g' ), newID );
381
+ // Update field html
382
+ $wysiwyg.html( html );
383
+ // Save ids for later to re-init tinymce
384
+ cmb.neweditor_id.push( { 'id': newID, 'old': oldID } );
385
+ }
386
+ });
387
+
388
+ return this;
389
+ };
390
+
391
+ $.fn.newRowHousekeeping = function() {
392
+ var $row = $(this);
393
+ var $colorPicker = $row.find( '.wp-picker-container' );
394
+ var $list = $row.find( '.cmb2-media-status' );
395
+
396
+ if ( $colorPicker.length ) {
397
+ // Need to clean-up colorpicker before appending
398
+ $colorPicker.each( function() {
399
+ var $td = $(this).parent();
400
+ $td.html( $td.find( 'input[type="text"].cmb2-colorpicker' ).attr('style', '') );
401
+ });
402
+ }
403
+
404
+ // Need to clean-up colorpicker before appending
405
+ if ( $list.length ) {
406
+ $list.empty();
407
+ }
408
+
409
+ return this;
410
+ };
411
+
412
+ cmb.afterRowInsert = function( $row, group ) {
413
+
414
+ var $focus = $row.find('input:not([type="button"]), textarea, select').first();
415
+ if ( $focus.length ) {
416
+ if ( group ) {
417
+ $('html, body').animate({
418
+ scrollTop: Math.round( $focus.offset().top - 150 )
419
+ }, 1000);
420
+ }
421
+ $focus.focus();
422
+ }
423
+
424
+ var _prop;
425
+
426
+ // Need to re-init wp_editor instances
427
+ if ( cmb.neweditor_id.length ) {
428
+ var i;
429
+ for ( i = cmb.neweditor_id.length - 1; i >= 0; i-- ) {
430
+ var id = cmb.neweditor_id[i].id;
431
+ var old = cmb.neweditor_id[i].old;
432
+
433
+ if ( typeof( tinyMCEPreInit.mceInit[ id ] ) === 'undefined' ) {
434
+ var newSettings = jQuery.extend( {}, tinyMCEPreInit.mceInit[ old ] );
435
+
436
+ for ( _prop in newSettings ) {
437
+ if ( 'string' === typeof( newSettings[_prop] ) ) {
438
+ newSettings[_prop] = newSettings[_prop].replace( new RegExp( old, 'g' ), id );
439
+ }
440
+ }
441
+ tinyMCEPreInit.mceInit[ id ] = newSettings;
442
+ }
443
+ if ( typeof( tinyMCEPreInit.qtInit[ id ] ) === 'undefined' ) {
444
+ var newQTS = jQuery.extend( {}, tinyMCEPreInit.qtInit[ old ] );
445
+ for ( _prop in newQTS ) {
446
+ if ( 'string' === typeof( newQTS[_prop] ) ) {
447
+ newQTS[_prop] = newQTS[_prop].replace( new RegExp( old, 'g' ), id );
448
+ }
449
+ }
450
+ tinyMCEPreInit.qtInit[ id ] = newQTS;
451
+ }
452
+ tinyMCE.init({
453
+ id : tinyMCEPreInit.mceInit[ id ],
454
+ });
455
+
456
+ }
457
+ }
458
+
459
+ // Init pickers from new row
460
+ cmb.initPickers( $row.find('input[type="text"].cmb2-timepicker'), $row.find('input[type="text"].cmb2-datepicker'), $row.find('input[type="text"].cmb2-colorpicker') );
461
+ };
462
+
463
+ cmb.updateNameAttr = function () {
464
+
465
+ var $this = $(this);
466
+ var name = $this.attr( 'name' ); // get current name
467
+
468
+ // No name? bail
469
+ if ( typeof name === 'undefined' ) {
470
+ return false;
471
+ }
472
+
473
+ var prevNum = parseInt( $this.parents( '.cmb-repeatable-grouping' ).data( 'iterator' ) );
474
+ var newNum = prevNum - 1; // Subtract 1 to get new iterator number
475
+
476
+ // Update field name attributes so data is not orphaned when a row is removed and post is saved
477
+ var $newName = name.replace( '[' + prevNum + ']', '[' + newNum + ']' );
478
+
479
+ // New name with replaced iterator
480
+ $this.attr( 'name', $newName );
481
+
482
+ };
483
+
484
+ cmb.emptyValue = function( evt, row ) {
485
+ $('input:not([type="button"]), textarea', row).val('');
486
+ };
487
+
488
+ cmb.addGroupRow = function( evt ) {
489
+ evt.preventDefault();
490
+
491
+ var $self = $(this);
492
+
493
+ // before anything significant happens
494
+ $self.trigger( 'cmb2_add_group_row_start', $self );
495
+
496
+ var $table = $id( $self.data('selector') );
497
+ var $oldRow = $table.find('.cmb-repeatable-grouping').last();
498
+ var prevNum = parseInt( $oldRow.data('iterator') );
499
+ cmb.idNumber = prevNum + 1;
500
+ var $row = $oldRow.clone();
501
+
502
+ $row.data( 'title', $self.data( 'grouptitle' ) ).newRowHousekeeping().cleanRow( prevNum, true ).find( '.cmb-add-row-button' ).prop( 'disabled', false );
503
+
504
+ var $newRow = $( '<div class="postbox cmb-row cmb-repeatable-grouping" data-iterator="'+ cmb.idNumber +'">'+ $row.html() +'</div>' );
505
+ $oldRow.after( $newRow );
506
+
507
+ cmb.afterRowInsert( $newRow, true );
508
+
509
+ if ( $table.find('.cmb-repeatable-grouping').length <= 1 ) {
510
+ $table.find('.cmb-remove-group-row').prop( 'disabled', true );
511
+ } else {
512
+ $table.find('.cmb-remove-group-row').prop( 'disabled', false );
513
+ }
514
+
515
+ $table.trigger( 'cmb2_add_row', $newRow );
516
+ };
517
+
518
+ cmb.addAjaxRow = function( evt ) {
519
+ evt.preventDefault();
520
+
521
+ var $self = $(this);
522
+ var $table = $id( $self.data('selector') );
523
+ var $emptyrow = $table.find('.empty-row');
524
+ var prevNum = parseInt( $emptyrow.find('[data-iterator]').data('iterator') );
525
+ cmb.idNumber = prevNum + 1;
526
+ var $row = $emptyrow.clone();
527
+
528
+ $row.newRowHousekeeping().cleanRow( prevNum );
529
+
530
+ $emptyrow.removeClass('empty-row hidden').addClass('cmb-repeat-row');
531
+ $emptyrow.after( $row );
532
+
533
+ cmb.afterRowInsert( $row );
534
+
535
+ $table.trigger( 'cmb2_add_row', $row );
536
+
537
+ $table.find( '.cmb-remove-row-button' ).removeClass( 'button-disabled' );
538
+
539
+ };
540
+
541
+ cmb.removeGroupRow = function( evt ) {
542
+ evt.preventDefault();
543
+
544
+ var $self = $(this);
545
+ var $table = $id( $self.data('selector') );
546
+ var $parent = $self.parents('.cmb-repeatable-grouping');
547
+ var number = $table.find('.cmb-repeatable-grouping').length;
548
+
549
+ if ( number > 1 ) {
550
+
551
+ $table.trigger( 'cmb2_remove_group_row_start', $self );
552
+
553
+ // when a group is removed loop through all next groups and update fields names
554
+ $parent.nextAll( '.cmb-repeatable-grouping' ).find( cmb.repeatEls ).each( cmb.updateNameAttr );
555
+
556
+ $parent.remove();
557
+
558
+ if ( number <= 2 ) {
559
+ $table.find('.cmb-remove-group-row').prop( 'disabled', true );
560
+ } else {
561
+ $table.find('.cmb-remove-group-row').prop( 'disabled', false );
562
+ }
563
+
564
+ $table.trigger( 'cmb2_remove_row' );
565
+ }
566
+
567
+ };
568
+
569
+ cmb.removeAjaxRow = function( evt ) {
570
+ evt.preventDefault();
571
+
572
+ var $self = $(this);
573
+
574
+ // Check if disabled
575
+ if ( $self.hasClass( 'button-disabled' ) ) {
576
+ return;
577
+ }
578
+
579
+ var $parent = $self.parents('.cmb-row');
580
+ var $table = $self.parents('.cmb-repeat-table');
581
+ var number = $table.find('.cmb-row').length;
582
+
583
+ if ( number > 2 ) {
584
+ if ( $parent.hasClass('empty-row') ) {
585
+ $parent.prev().addClass( 'empty-row' ).removeClass('cmb-repeat-row');
586
+ }
587
+ $self.parents('.cmb-repeat-table .cmb-row').remove();
588
+ if ( number === 3 ) {
589
+ $table.find( '.cmb-remove-row-button' ).addClass( 'button-disabled' );
590
+ }
591
+ $table.trigger( 'cmb2_remove_row' );
592
+ } else {
593
+ $self.addClass( 'button-disabled' );
594
+ }
595
+ };
596
+
597
+ cmb.shiftRows = function( evt ) {
598
+
599
+ evt.preventDefault();
600
+
601
+ var $self = $(this);
602
+ // before anything signif happens
603
+ $self.trigger( 'cmb2_shift_rows_enter', $self );
604
+
605
+ var $parent = $self.parents( '.cmb-repeatable-grouping' );
606
+ var $goto = $self.hasClass( 'move-up' ) ? $parent.prev( '.cmb-repeatable-grouping' ) : $parent.next( '.cmb-repeatable-grouping' );
607
+
608
+ if ( ! $goto.length ) {
609
+ return;
610
+ }
611
+
612
+ // we're gonna shift
613
+ $self.trigger( 'cmb2_shift_rows_start', $self );
614
+
615
+ var inputVals = [];
616
+ // Loop this items fields
617
+ $parent.find( cmb.repeatEls ).each( function() {
618
+ var $element = $(this);
619
+ var val;
620
+ if ( $element.hasClass('cmb2-media-status') ) {
621
+ // special case for image previews
622
+ val = $element.html();
623
+ } else if ( 'checkbox' === $element.attr('type') || 'radio' === $element.attr('type') ) {
624
+ val = $element.is(':checked');
625
+ } else if ( 'select' === $element.prop('tagName') ) {
626
+ val = $element.is(':selected');
627
+ } else {
628
+ val = $element.val();
629
+ }
630
+ // Get all the current values per element
631
+ inputVals.push( { val: val, $: $element } );
632
+ });
633
+ // And swap them all
634
+ $goto.find( cmb.repeatEls ).each( function( index ) {
635
+ var $element = $(this);
636
+ var val;
637
+
638
+ if ( $element.hasClass('cmb2-media-status') ) {
639
+ // special case for image previews
640
+ val = $element.html();
641
+ $element.html( inputVals[ index ].val );
642
+ inputVals[ index ].$.html( val );
643
+
644
+ }
645
+ // handle checkbox swapping
646
+ else if ( 'checkbox' === $element.attr('type') || 'radio' === $element.attr( 'type' ) ) {
647
+ inputVals[ index ].$.prop( 'checked', $element.is(':checked') );
648
+ $element.prop( 'checked', inputVals[ index ].val );
649
+ }
650
+ // handle select swapping
651
+ else if ( 'select' === $element.prop('tagName') ) {
652
+ inputVals[ index ].$.prop( 'selected', $element.is(':selected') );
653
+ $element.prop( 'selected', inputVals[ index ].val );
654
+ }
655
+ // handle normal input swapping
656
+ else {
657
+ inputVals[ index ].$.val( $element.val() );
658
+ $element.val( inputVals[ index ].val );
659
+ }
660
+ });
661
+
662
+ // shift done
663
+ $self.trigger( 'cmb2_shift_rows_complete', $self );
664
+ };
665
+
666
+ cmb.initPickers = function( $timePickers, $datePickers, $colorPickers ) {
667
+ // Initialize timepicker
668
+ cmb.initTimePickers( $timePickers );
669
+
670
+ // Initialize jQuery UI datepicker
671
+ cmb.initDatePickers( $datePickers );
672
+
673
+ // Initialize color picker
674
+ cmb.initColorPickers( $colorPickers );
675
+ };
676
+
677
+ cmb.initTimePickers = function( $selector ) {
678
+ if ( ! $selector.length ) {
679
+ return;
680
+ }
681
+
682
+ $selector.timePicker( cmb.defaults.time_picker );
683
+ };
684
+
685
+ cmb.initDatePickers = function( $selector ) {
686
+ if ( ! $selector.length ) {
687
+ return;
688
+ }
689
+
690
+ $selector.datepicker( "destroy" );
691
+ $selector.datepicker( cmb.defaults.date_picker );
692
+ };
693
+
694
+ cmb.initColorPickers = function( $selector ) {
695
+ if ( ! $selector.length ) {
696
+ return;
697
+ }
698
+ if (typeof jQuery.wp === 'object' && typeof jQuery.wp.wpColorPicker === 'function') {
699
+
700
+ $selector.wpColorPicker( cmb.defaults.color_picker );
701
+
702
+ } else {
703
+ $selector.each( function(i) {
704
+ $(this).after('<div id="picker-' + i + '" style="z-index: 1000; background: #EEE; border: 1px solid #CCC; position: absolute; display: block;"></div>');
705
+ $id( 'picker-' + i ).hide().farbtastic($(this));
706
+ })
707
+ .focus( function() {
708
+ $(this).next().show();
709
+ })
710
+ .blur( function() {
711
+ $(this).next().hide();
712
+ });
713
+ }
714
+ };
715
+
716
+ cmb.makeListSortable = function() {
717
+ var $filelist = cmb.metabox().find( '.cmb2-media-status.cmb-attach-list' );
718
+ if ( $filelist.length ) {
719
+ $filelist.sortable({ cursor: "move" }).disableSelection();
720
+ }
721
+ };
722
+
723
+ cmb.maybeOembed = function( evt ) {
724
+ var $self = $(this);
725
+ var type = evt.type;
726
+
727
+ var m = {
728
+ focusout : function() {
729
+ setTimeout( function() {
730
+ // if it's been 2 seconds, hide our spinner
731
+ cmb.spinner( '.postbox .cmb2-metabox', true );
732
+ }, 2000);
733
+ },
734
+ keyup : function() {
735
+ var betw = function( min, max ) {
736
+ return ( evt.which <= max && evt.which >= min );
737
+ };
738
+ // Only Ajax on normal keystrokes
739
+ if ( betw( 48, 90 ) || betw( 96, 111 ) || betw( 8, 9 ) || evt.which === 187 || evt.which === 190 ) {
740
+ // fire our ajax function
741
+ cmb.doAjax( $self, evt);
742
+ }
743
+ },
744
+ paste : function() {
745
+ // paste event is fired before the value is filled, so wait a bit
746
+ setTimeout( function() { cmb.doAjax( $self ); }, 100);
747
+ }
748
+ };
749
+ m[type]();
750
+
751
+ };
752
+
753
+ /**
754
+ * Resize oEmbed videos to fit in their respective metaboxes
755
+ */
756
+ cmb.resizeoEmbeds = function() {
757
+ cmb.metabox().each( function() {
758
+ var $self = $(this);
759
+ var $tableWrap = $self.parents('.inside');
760
+ var isSide = $self.parents('.inner-sidebar').length || $self.parents( '#side-sortables' ).length;
761
+ var isSmall = isSide;
762
+ var isSmallest = false;
763
+ if ( ! $tableWrap.length ) {
764
+ return true; // continue
765
+ }
766
+
767
+ // Calculate new width
768
+ var tableW = $tableWrap.width();
769
+
770
+ if ( cmb.styleBreakPoint > tableW ) {
771
+ isSmall = true;
772
+ isSmallest = ( cmb.styleBreakPoint - 62 ) > tableW;
773
+ }
774
+
775
+ tableW = isSmall ? tableW : Math.round(($tableWrap.width() * 0.82)*0.97);
776
+ var newWidth = tableW - 30;
777
+ if ( isSmall && ! isSide && ! isSmallest ) {
778
+ newWidth = newWidth - 75;
779
+ }
780
+ if ( newWidth > 639 ) {
781
+ return true; // continue
782
+ }
783
+
784
+ var $embeds = $self.find('.cmb-type-oembed .embed-status');
785
+ var $children = $embeds.children().not('.cmb2-remove-wrapper');
786
+ if ( ! $children.length ) {
787
+ return true; // continue
788
+ }
789
+
790
+ $children.each( function() {
791
+ var $self = $(this);
792
+ var iwidth = $self.width();
793
+ var iheight = $self.height();
794
+ var _newWidth = newWidth;
795
+ if ( $self.parents( '.cmb-repeat-row' ).length && ! isSmall ) {
796
+ // Make room for our repeatable "remove" button column
797
+ _newWidth = newWidth - 91;
798
+ _newWidth = 785 > tableW ? _newWidth - 15 : _newWidth;
799
+ }
800
+ // Calc new height
801
+ var newHeight = Math.round((_newWidth * iheight)/iwidth);
802
+ $self.width(_newWidth).height(newHeight);
803
+ });
804
+
805
+ });
806
+ };
807
+
808
+ /**
809
+ * Safely log things if query var is set
810
+ * @since 1.0.0
811
+ */
812
+ cmb.log = function() {
813
+ if ( l10n.script_debug && console && typeof console.log === 'function' ) {
814
+ console.log.apply(console, arguments);
815
+ }
816
+ };
817
+
818
+ cmb.spinner = function( $context, hide ) {
819
+ if ( hide ) {
820
+ $('.cmb-spinner', $context ).hide();
821
+ }
822
+ else {
823
+ $('.cmb-spinner', $context ).show();
824
+ }
825
+ };
826
+
827
+ // function for running our ajax
828
+ cmb.doAjax = function($obj) {
829
+ // get typed value
830
+ var oembed_url = $obj.val();
831
+ // only proceed if the field contains more than 6 characters
832
+ if ( oembed_url.length < 6 ) {
833
+ return;
834
+ }
835
+
836
+ // only proceed if the user has pasted, pressed a number, letter, or whitelisted characters
837
+
838
+ // get field id
839
+ var field_id = $obj.attr('id');
840
+ // get our inputs $context for pinpointing
841
+ var $context = $obj.parents('.cmb-repeat-table .cmb-row .cmb-td');
842
+ $context = $context.length ? $context : $obj.parents('.cmb2-metabox .cmb-row .cmb-td');
843
+
844
+ var embed_container = $('.embed-status', $context);
845
+ var oembed_width = $obj.width();
846
+ var child_el = $(':first-child', embed_container);
847
+
848
+ // http://www.youtube.com/watch?v=dGG7aru2S6U
849
+ cmb.log( 'oembed_url', oembed_url, field_id );
850
+ oembed_width = ( embed_container.length && child_el.length ) ? child_el.width() : $obj.width();
851
+
852
+ // show our spinner
853
+ cmb.spinner( $context );
854
+ // clear out previous results
855
+ $('.embed_wrap', $context).html('');
856
+ // and run our ajax function
857
+ setTimeout( function() {
858
+ // if they haven't typed in 500 ms
859
+ if ( $('.cmb2-oembed:focus').val() !== oembed_url ) {
860
+ return;
861
+ }
862
+ $.ajax({
863
+ type : 'post',
864
+ dataType : 'json',
865
+ url : l10n.ajaxurl,
866
+ data : {
867
+ 'action': 'cmb2_oembed_handler',
868
+ 'oembed_url': oembed_url,
869
+ 'oembed_width': oembed_width > 300 ? oembed_width : 300,
870
+ 'field_id': field_id,
871
+ 'object_id': $obj.data('objectid'),
872
+ 'object_type': $obj.data('objecttype'),
873
+ 'cmb2_ajax_nonce': l10n.ajax_nonce
874
+ },
875
+ success: function(response) {
876
+ cmb.log( response );
877
+ // hide our spinner
878
+ cmb.spinner( $context, true );
879
+ // and populate our results from ajax response
880
+ $('.embed_wrap', $context).html(response.data);
881
+ }
882
+ });
883
+
884
+ }, 500);
885
+ };
886
+
887
+ $(document).ready(cmb.init);
888
+
889
+ return cmb;
890
+
891
+ })(window, document, jQuery);
cmb2/js/cmb2.min.js ADDED
@@ -0,0 +1 @@
 
1
+ window.CMB2=function(window,document,$){"use strict";var l10n=window.cmb2_l10,setTimeout=window.setTimeout,cmb={formfield:"",idNumber:!1,file_frames:{},repeatEls:'input:not([type="button"]),select,textarea,.cmb2-media-status',styleBreakPoint:450,mediaHandlers:{},defaults:{time_picker:l10n.defaults.time_picker,date_picker:l10n.defaults.date_picker,color_picker:l10n.defaults.color_picker||{}}},$id=function(selector){return $(document.getElementById(selector))};return cmb.metabox=function(){return cmb.$metabox?cmb.$metabox:(cmb.$metabox=$(".cmb2-wrap > .cmb2-metabox"),cmb.$metabox)},cmb.init=function(){cmb.log("CMB2 localized data",l10n);var $metabox=cmb.metabox(),$repeatGroup=$metabox.find(".cmb-repeatable-group");cmb.initPickers($metabox.find('input[type="text"].cmb2-timepicker'),$metabox.find('input[type="text"].cmb2-datepicker'),$metabox.find('input[type="text"].cmb2-colorpicker')),$id("ui-datepicker-div").wrap('<div class="cmb2-element" />'),$('<p><span class="button cmb-multicheck-toggle">'+l10n.strings.check_toggle+"</span></p>").insertBefore(".cmb2-checkbox-list:not(.no-select-all)"),cmb.makeListSortable(),$metabox.on("change",".cmb2_upload_file",function(){cmb.formfield=$(this).attr("id"),$id(cmb.formfield+"_id").val("")}).on("click",".cmb-multicheck-toggle",cmb.toggleCheckBoxes).on("click",".cmb2-upload-button",cmb.handleMedia).on("click",".cmb-attach-list li, .cmb2-media-status .img-status img, .cmb2-media-status .file-status > span",cmb.handleFileClick).on("click",".cmb2-remove-file-button",cmb.handleRemoveMedia).on("click",".cmb-add-group-row",cmb.addGroupRow).on("click",".cmb-add-row-button",cmb.addAjaxRow).on("click",".cmb-remove-group-row",cmb.removeGroupRow).on("click",".cmb-remove-row-button",cmb.removeAjaxRow).on("keyup paste focusout",".cmb2-oembed",cmb.maybeOembed).on("cmb2_remove_row",".cmb-repeatable-group",cmb.resetTitlesAndIterator).on("click",".cmbhandle, .cmbhandle + .cmbhandle-title",cmb.toggleHandle),$repeatGroup.length&&$repeatGroup.filter(".sortable").each(function(){$(this).find(".button.cmb-remove-group-row").before('<a class="button cmb-shift-rows move-up alignleft" href="#"><span class="'+l10n.up_arrow_class+'"></span></a> <a class="button cmb-shift-rows move-down alignleft" href="#"><span class="'+l10n.down_arrow_class+'"></span></a>')}).on("click",".cmb-shift-rows",cmb.shiftRows).on("cmb2_add_row",cmb.emptyValue),setTimeout(cmb.resizeoEmbeds,500),$(window).on("resize",cmb.resizeoEmbeds)},cmb.resetTitlesAndIterator=function(){$(".cmb-repeatable-group").each(function(){var $table=$(this);$table.find(".cmb-repeatable-grouping").each(function(rowindex){var $row=$(this);$row.data("iterator",rowindex),$row.find(".cmb-group-title h4").text($table.find(".cmb-add-group-row").data("grouptitle").replace("{#}",rowindex+1))})})},cmb.toggleHandle=function(evt){evt.preventDefault(),$(document).trigger("postbox-toggled",$(this).parent(".postbox").toggleClass("closed"))},cmb.toggleCheckBoxes=function(evt){evt.preventDefault();var $self=$(this),$multicheck=$self.closest(".cmb-td").find("input[type=checkbox]");$self.data("checked")?($multicheck.prop("checked",!1),$self.data("checked",!1)):($multicheck.prop("checked",!0),$self.data("checked",!0))},cmb.handleMedia=function(evt){evt.preventDefault();var $el=$(this);cmb.attach_id=$el.hasClass("cmb2-upload-list")?!1:$el.closest(".cmb-td").find(".cmb2-upload-file-id").val(),cmb.attach_id="0"!==cmb.attach_id?cmb.attach_id:!1,cmb._handleMedia($el.prev("input.cmb2-upload-file").attr("id"),$el.hasClass("cmb2-upload-list"))},cmb.handleFileClick=function(evt){evt.preventDefault();var $el=$(this),$td=$el.closest(".cmb-td"),isList=$td.find(".cmb2-upload-button").hasClass("cmb2-upload-list");cmb.attach_id=isList?$el.find('input[type="hidden"]').data("id"):$td.find(".cmb2-upload-file-id").val(),cmb.attach_id&&cmb._handleMedia($td.find("input.cmb2-upload-file").attr("id"),isList,cmb.attach_id)},cmb._handleMedia=function(formfield,isList){if(wp){var $metabox=cmb.metabox();cmb.formfield=formfield;var $formfield=$id(cmb.formfield),previewSize=$formfield.data("previewsize"),formName=$formfield.attr("name"),uploadStatus=!0,attachment=!0;if(cmb.formfield in cmb.file_frames)return void cmb.file_frames[cmb.formfield].open();cmb.file_frames[cmb.formfield]=wp.media({title:$metabox.find("label[for="+cmb.formfield+"]").text(),button:{text:l10n.strings.upload_file},multiple:isList?!0:!1}),cmb.mediaHandlers.list=function(selection,returnIt){attachment=selection.toJSON(),$formfield.val(attachment.url),$id(cmb.formfield+"_id").val(attachment.id);var fileGroup=[];return $(attachment).each(function(){if(this.type&&"image"===this.type){var width=previewSize[0]?previewSize[0]:50,height=previewSize[1]?previewSize[1]:50;uploadStatus='<li class="img-status"><img width="'+width+'" height="'+height+'" src="'+this.url+'" class="attachment-'+width+"px"+height+'px" alt="'+this.filename+'"><p><a href="#" class="cmb2-remove-file-button" rel="'+cmb.formfield+"["+this.id+']">'+l10n.strings.remove_image+'</a></p><input type="hidden" id="filelist-'+this.id+'" data-id="'+this.id+'" name="'+formName+"["+this.id+']" value="'+this.url+'"></li>'}else uploadStatus='<li class="file-status"><span>'+l10n.strings.file+" <strong>"+this.filename+'</strong></span>&nbsp;&nbsp; (<a href="'+this.url+'" target="_blank" rel="external">'+l10n.strings.download+'</a> / <a href="#" class="cmb2-remove-file-button" rel="'+cmb.formfield+"["+this.id+']">'+l10n.strings.remove_file+'</a>)<input type="hidden" id="filelist-'+this.id+'" data-id="'+this.id+'" name="'+formName+"["+this.id+']" value="'+this.url+'"></li>';fileGroup.push(uploadStatus)}),returnIt?fileGroup:void $(fileGroup).each(function(){$formfield.siblings(".cmb2-media-status").slideDown().append(this)})},cmb.mediaHandlers.single=function(selection){if(attachment=selection.first().toJSON(),$formfield.val(attachment.url),$id(cmb.formfield+"_id").val(attachment.id),attachment.type&&"image"===attachment.type){var width=previewSize[0]?previewSize[0]:350;uploadStatus='<div class="img-status"><img width="'+width+'px" style="max-width: '+width+'px; width: 100%; height: auto;" src="'+attachment.url+'" alt="'+attachment.filename+'" title="'+attachment.filename+'" /><p><a href="#" class="cmb2-remove-file-button" rel="'+cmb.formfield+'">'+l10n.strings.remove_image+"</a></p></div>"}else uploadStatus='<div class="file-status"><span>'+l10n.strings.file+" <strong>"+attachment.filename+'</strong></span>&nbsp;&nbsp; (<a href="'+attachment.url+'" target="_blank" rel="external">'+l10n.strings.download+'</a> / <a href="#" class="cmb2-remove-file-button" rel="'+cmb.formfield+'">'+l10n.strings.remove_file+"</a>)</div>";$formfield.siblings(".cmb2-media-status").slideDown().html(uploadStatus)},cmb.mediaHandlers.selectFile=function(){var selection=cmb.file_frames[cmb.formfield].state().get("selection"),type=isList?"list":"single";return cmb.attach_id&&isList?void $('[data-id="'+cmb.attach_id+'"]').parents("li").replaceWith(cmb.mediaHandlers.list(selection,!0)):void cmb.mediaHandlers[type](selection)},cmb.mediaHandlers.openModal=function(){var selection=cmb.file_frames[cmb.formfield].state().get("selection");if(!cmb.attach_id)return selection.reset();var attach=wp.media.attachment(cmb.attach_id);attach.fetch(),selection.set(attach?[attach]:[])},cmb.file_frames[cmb.formfield].on("select",cmb.mediaHandlers.selectFile).on("open",cmb.mediaHandlers.openModal),cmb.file_frames[cmb.formfield].open()}},cmb.handleRemoveMedia=function(evt){evt.preventDefault();var $self=$(this);return $self.is(".cmb-attach-list .cmb2-remove-file-button")?($self.parents("li").remove(),!1):(cmb.formfield=$self.attr("rel"),cmb.metabox().find("input#"+cmb.formfield).val(""),cmb.metabox().find("input#"+cmb.formfield+"_id").val(""),$self.parents(".cmb2-media-status").html(""),!1)},$.fn.cleanRow=function(prevNum,group){var $self=$(this),$inputs=$self.find('input:not([type="button"]), select, textarea, label'),$other=$self.find("[id]").not('input:not([type="button"]), select, textarea, label');return group&&($self.find(".cmb-repeat-table .cmb-repeat-row:not(:first-child)").remove(),$other.length&&$other.each(function(){var $_this=$(this),oldID=$_this.attr("id"),newID=oldID.replace("_"+prevNum,"_"+cmb.idNumber),$buttons=$self.find('[data-selector="'+oldID+'"]');$_this.attr("id",newID),$buttons.length&&$buttons.attr("data-selector",newID).data("selector",newID)})),cmb.neweditor_id=[],$inputs.filter(":checked").prop("checked",!1),$inputs.filter(":selected").prop("selected",!1),$self.find("h3.cmb-group-title").length&&$self.find("h3.cmb-group-title").text($self.data("title").replace("{#}",cmb.idNumber+1)),$inputs.each(function(){var newID,oldID,$newInput=$(this),isEditor=$newInput.hasClass("wp-editor-area"),oldFor=$newInput.attr("for"),attrs={};if(oldFor)attrs={"for":oldFor.replace("_"+prevNum,"_"+cmb.idNumber)};else{var oldName=$newInput.attr("name"),newName=oldName?oldName.replace("["+prevNum+"]","["+cmb.idNumber+"]"):"";oldID=$newInput.attr("id"),newID=oldID?oldID.replace("_"+prevNum,"_"+cmb.idNumber):"",attrs={id:newID,name:newName,"data-iterator":cmb.idNumber}}if($newInput.removeClass("hasDatepicker").attr(attrs).val(""),isEditor){newID=newID?oldID.replace("zx"+prevNum,"zx"+cmb.idNumber):"",$newInput.html("");var $wysiwyg=$newInput.parents(".cmb-type-wysiwyg");$wysiwyg.find(".mce-tinymce:not(:first-child)").remove();var html=$wysiwyg.html().replace(new RegExp(oldID,"g"),newID);$wysiwyg.html(html),cmb.neweditor_id.push({id:newID,old:oldID})}}),this},$.fn.newRowHousekeeping=function(){var $row=$(this),$colorPicker=$row.find(".wp-picker-container"),$list=$row.find(".cmb2-media-status");return $colorPicker.length&&$colorPicker.each(function(){var $td=$(this).parent();$td.html($td.find('input[type="text"].cmb2-colorpicker').attr("style",""))}),$list.length&&$list.empty(),this},cmb.afterRowInsert=function($row,group){var $focus=$row.find('input:not([type="button"]), textarea, select').first();$focus.length&&(group&&$("html, body").animate({scrollTop:Math.round($focus.offset().top-150)},1e3),$focus.focus());var _prop;if(cmb.neweditor_id.length){var i;for(i=cmb.neweditor_id.length-1;i>=0;i--){var id=cmb.neweditor_id[i].id,old=cmb.neweditor_id[i].old;if("undefined"==typeof tinyMCEPreInit.mceInit[id]){var newSettings=jQuery.extend({},tinyMCEPreInit.mceInit[old]);for(_prop in newSettings)"string"==typeof newSettings[_prop]&&(newSettings[_prop]=newSettings[_prop].replace(new RegExp(old,"g"),id));tinyMCEPreInit.mceInit[id]=newSettings}if("undefined"==typeof tinyMCEPreInit.qtInit[id]){var newQTS=jQuery.extend({},tinyMCEPreInit.qtInit[old]);for(_prop in newQTS)"string"==typeof newQTS[_prop]&&(newQTS[_prop]=newQTS[_prop].replace(new RegExp(old,"g"),id));tinyMCEPreInit.qtInit[id]=newQTS}tinyMCE.init({id:tinyMCEPreInit.mceInit[id]})}}cmb.initPickers($row.find('input[type="text"].cmb2-timepicker'),$row.find('input[type="text"].cmb2-datepicker'),$row.find('input[type="text"].cmb2-colorpicker'))},cmb.updateNameAttr=function(){var $this=$(this),name=$this.attr("name");if("undefined"==typeof name)return!1;var prevNum=parseInt($this.parents(".cmb-repeatable-grouping").data("iterator")),newNum=prevNum-1,$newName=name.replace("["+prevNum+"]","["+newNum+"]");$this.attr("name",$newName)},cmb.emptyValue=function(evt,row){$('input:not([type="button"]), textarea',row).val("")},cmb.addGroupRow=function(evt){evt.preventDefault();var $self=$(this);$self.trigger("cmb2_add_group_row_start",$self);var $table=$id($self.data("selector")),$oldRow=$table.find(".cmb-repeatable-grouping").last(),prevNum=parseInt($oldRow.data("iterator"));cmb.idNumber=prevNum+1;var $row=$oldRow.clone();$row.data("title",$self.data("grouptitle")).newRowHousekeeping().cleanRow(prevNum,!0).find(".cmb-add-row-button").prop("disabled",!1);var $newRow=$('<div class="postbox cmb-row cmb-repeatable-grouping" data-iterator="'+cmb.idNumber+'">'+$row.html()+"</div>");$oldRow.after($newRow),cmb.afterRowInsert($newRow,!0),$table.find(".cmb-repeatable-grouping").length<=1?$table.find(".cmb-remove-group-row").prop("disabled",!0):$table.find(".cmb-remove-group-row").prop("disabled",!1),$table.trigger("cmb2_add_row",$newRow)},cmb.addAjaxRow=function(evt){evt.preventDefault();var $self=$(this),$table=$id($self.data("selector")),$emptyrow=$table.find(".empty-row"),prevNum=parseInt($emptyrow.find("[data-iterator]").data("iterator"));cmb.idNumber=prevNum+1;var $row=$emptyrow.clone();$row.newRowHousekeeping().cleanRow(prevNum),$emptyrow.removeClass("empty-row hidden").addClass("cmb-repeat-row"),$emptyrow.after($row),cmb.afterRowInsert($row),$table.trigger("cmb2_add_row",$row),$table.find(".cmb-remove-row-button").removeClass("button-disabled")},cmb.removeGroupRow=function(evt){evt.preventDefault();var $self=$(this),$table=$id($self.data("selector")),$parent=$self.parents(".cmb-repeatable-grouping"),number=$table.find(".cmb-repeatable-grouping").length;number>1&&($table.trigger("cmb2_remove_group_row_start",$self),$parent.nextAll(".cmb-repeatable-grouping").find(cmb.repeatEls).each(cmb.updateNameAttr),$parent.remove(),2>=number?$table.find(".cmb-remove-group-row").prop("disabled",!0):$table.find(".cmb-remove-group-row").prop("disabled",!1),$table.trigger("cmb2_remove_row"))},cmb.removeAjaxRow=function(evt){evt.preventDefault();var $self=$(this);if(!$self.hasClass("button-disabled")){var $parent=$self.parents(".cmb-row"),$table=$self.parents(".cmb-repeat-table"),number=$table.find(".cmb-row").length;number>2?($parent.hasClass("empty-row")&&$parent.prev().addClass("empty-row").removeClass("cmb-repeat-row"),$self.parents(".cmb-repeat-table .cmb-row").remove(),3===number&&$table.find(".cmb-remove-row-button").addClass("button-disabled"),$table.trigger("cmb2_remove_row")):$self.addClass("button-disabled")}},cmb.shiftRows=function(evt){evt.preventDefault();var $self=$(this);$self.trigger("cmb2_shift_rows_enter",$self);var $parent=$self.parents(".cmb-repeatable-grouping"),$goto=$self.hasClass("move-up")?$parent.prev(".cmb-repeatable-grouping"):$parent.next(".cmb-repeatable-grouping");if($goto.length){$self.trigger("cmb2_shift_rows_start",$self);var inputVals=[];$parent.find(cmb.repeatEls).each(function(){var val,$element=$(this);val=$element.hasClass("cmb2-media-status")?$element.html():"checkbox"===$element.attr("type")||"radio"===$element.attr("type")?$element.is(":checked"):"select"===$element.prop("tagName")?$element.is(":selected"):$element.val(),inputVals.push({val:val,$:$element})}),$goto.find(cmb.repeatEls).each(function(index){var val,$element=$(this);$element.hasClass("cmb2-media-status")?(val=$element.html(),$element.html(inputVals[index].val),inputVals[index].$.html(val)):"checkbox"===$element.attr("type")||"radio"===$element.attr("type")?(inputVals[index].$.prop("checked",$element.is(":checked")),$element.prop("checked",inputVals[index].val)):"select"===$element.prop("tagName")?(inputVals[index].$.prop("selected",$element.is(":selected")),$element.prop("selected",inputVals[index].val)):(inputVals[index].$.val($element.val()),$element.val(inputVals[index].val))}),$self.trigger("cmb2_shift_rows_complete",$self)}},cmb.initPickers=function($timePickers,$datePickers,$colorPickers){cmb.initTimePickers($timePickers),cmb.initDatePickers($datePickers),cmb.initColorPickers($colorPickers)},cmb.initTimePickers=function($selector){$selector.length&&$selector.timePicker(cmb.defaults.time_picker)},cmb.initDatePickers=function($selector){$selector.length&&($selector.datepicker("destroy"),$selector.datepicker(cmb.defaults.date_picker))},cmb.initColorPickers=function($selector){$selector.length&&("object"==typeof jQuery.wp&&"function"==typeof jQuery.wp.wpColorPicker?$selector.wpColorPicker(cmb.defaults.color_picker):$selector.each(function(i){$(this).after('<div id="picker-'+i+'" style="z-index: 1000; background: #EEE; border: 1px solid #CCC; position: absolute; display: block;"></div>'),$id("picker-"+i).hide().farbtastic($(this))}).focus(function(){$(this).next().show()}).blur(function(){$(this).next().hide()}))},cmb.makeListSortable=function(){var $filelist=cmb.metabox().find(".cmb2-media-status.cmb-attach-list");$filelist.length&&$filelist.sortable({cursor:"move"}).disableSelection()},cmb.maybeOembed=function(evt){var $self=$(this),type=evt.type,m={focusout:function(){setTimeout(function(){cmb.spinner(".postbox .cmb2-metabox",!0)},2e3)},keyup:function(){var betw=function(min,max){return evt.which<=max&&evt.which>=min};(betw(48,90)||betw(96,111)||betw(8,9)||187===evt.which||190===evt.which)&&cmb.doAjax($self,evt)},paste:function(){setTimeout(function(){cmb.doAjax($self)},100)}};m[type]()},cmb.resizeoEmbeds=function(){cmb.metabox().each(function(){var $self=$(this),$tableWrap=$self.parents(".inside"),isSide=$self.parents(".inner-sidebar").length||$self.parents("#side-sortables").length,isSmall=isSide,isSmallest=!1;if(!$tableWrap.length)return!0;var tableW=$tableWrap.width();cmb.styleBreakPoint>tableW&&(isSmall=!0,isSmallest=cmb.styleBreakPoint-62>tableW),tableW=isSmall?tableW:Math.round(.82*$tableWrap.width()*.97);var newWidth=tableW-30;if(!isSmall||isSide||isSmallest||(newWidth-=75),newWidth>639)return!0;var $embeds=$self.find(".cmb-type-oembed .embed-status"),$children=$embeds.children().not(".cmb2-remove-wrapper");return $children.length?void $children.each(function(){var $self=$(this),iwidth=$self.width(),iheight=$self.height(),_newWidth=newWidth;$self.parents(".cmb-repeat-row").length&&!isSmall&&(_newWidth=newWidth-91,_newWidth=785>tableW?_newWidth-15:_newWidth);var newHeight=Math.round(_newWidth*iheight/iwidth);$self.width(_newWidth).height(newHeight)}):!0})},cmb.log=function(){l10n.script_debug&&console&&"function"==typeof console.log&&console.log.apply(console,arguments)},cmb.spinner=function($context,hide){hide?$(".cmb-spinner",$context).hide():$(".cmb-spinner",$context).show()},cmb.doAjax=function($obj){var oembed_url=$obj.val();if(!(oembed_url.length<6)){var field_id=$obj.attr("id"),$context=$obj.parents(".cmb-repeat-table .cmb-row .cmb-td");$context=$context.length?$context:$obj.parents(".cmb2-metabox .cmb-row .cmb-td");var embed_container=$(".embed-status",$context),oembed_width=$obj.width(),child_el=$(":first-child",embed_container);cmb.log("oembed_url",oembed_url,field_id),oembed_width=embed_container.length&&child_el.length?child_el.width():$obj.width(),cmb.spinner($context),$(".embed_wrap",$context).html(""),setTimeout(function(){$(".cmb2-oembed:focus").val()===oembed_url&&$.ajax({type:"post",dataType:"json",url:l10n.ajaxurl,data:{action:"cmb2_oembed_handler",oembed_url:oembed_url,oembed_width:oembed_width>300?oembed_width:300,field_id:field_id,object_id:$obj.data("objectid"),object_type:$obj.data("objecttype"),cmb2_ajax_nonce:l10n.ajax_nonce},success:function(response){cmb.log(response),cmb.spinner($context,!0),$(".embed_wrap",$context).html(response.data)}})},500)}},$(document).ready(cmb.init),cmb}(window,document,jQuery);
cmb2/js/index.php ADDED
File without changes
cmb2/js/jquery.timePicker.min.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
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)
css/admin_de_style.css ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .de_first {clear:left;}
2
+ .de_input input[type=text] {border:2px #dddddd solid !important; box-shadow: 0 0 0 !important;}
3
+ .de_input textarea {border:2px #dddddd solid !important; box-shadow: 0 0 0 !important;}
4
+ .de_input select {width:100% !important;}
5
+
6
+ .de_text {padding:0 !important; margin:0 !important; border:none !important;}
7
+ .de_text .cmb-th {font-size:14px; text-transform:uppercase; width:100% !important; color:#333 !important;}
8
+ .de_text .cmb-td {width:100% !important;}
9
+ .de_text .cmb-td input {width:100% !important;}
10
+
11
+ .de_text_side {padding:0 !important; margin:0 !important;border:none !important;}
12
+ .de_text_side .cmb-th {font-size:14px; width:100% !important; color:#333 !important; padding-bottom:5px !important;}
13
+ .de_text_side .cmb-th label {padding-bottom:0 !important}
14
+ .de_text_side .cmb-th label::after {display:none !important;}
15
+ .de_text_side .cmb-td {width:100% !important;}
16
+ .de_text_side .cmb-td input, .de_text_side .cmb-td select {width:100% !important;}
17
+ .de_text_side p {padding-bottom:0 !important; font-style:normal !important; font-size:12px !important; color:#808080 !important;}
18
+
19
+ .de_color {padding:0 !important; margin:0 !important; border:none !important;}
20
+ .de_color .cmb-th {font-size:14px; text-transform:uppercase; width:100% !important; color:#333 !important;}
21
+ .de_color .cmb-td {width:100% !important;}
22
+
23
+ .de_color_side {padding:0 !important; margin:0 !important; border:none !important;}
24
+ .de_color_side .cmb-th {font-size:14px; width:100% !important; color:#333 !important; padding-bottom:5px !important;}
25
+ .de_color_side .cmb-td {width:100% !important;}
26
+ .de_color_side .cmb-th label {padding-bottom:0 !important}
27
+ .de_color_side .cmb-th label::after {display:none !important;}
28
+ .de_color_side .cmb-td {width:100% !important;}
29
+
30
+ .de_textarea {padding:0 !important; margin:0 !important; border:none !important;}
31
+ .de_textarea .cmb-th {font-size:14px; text-transform:uppercase; width:100% !important; color:#333 !important;}
32
+ .de_textarea .cmb-td {width:100% !important;}
33
+ .de_textarea .cmb-td textarea {width:100% !important;}
34
+
35
+ .de_info {padding:0 !important; margin:0 !important; border:none !important;}
36
+ .de_info .cmb-td h5 {font-size:14px; text-transform:uppercase; width:100% !important; color:#333 !important;}
37
+ .de_info .cmb-td {width:100% !important;}
38
+ .de_info .cmb-td input {width:100% !important;}
39
+ .de_info .cmb-td p {font-size:12px; color:grey !important; font-style:normal !important;}
40
+
41
+ .de_info_side .cmb-td a {font-size:15px !important; text-decoration:none !important;}
42
+ .de_info_side .cmb-td a span {position:relative; top:3px;}
43
+ .de_info_side .cmb-td p {padding:0 !important; color: #bbb; font-size:14px !important;}
44
+
45
+ .de_upload {padding:0 !important; margin:0 !important; border:none !important; padding-top:14px !important;}
46
+ .de_upload .cmb-th {font-size:14px; text-transform:uppercase; width:100% !important; color:#333 !important;}
47
+ .de_upload .cmb-td {width:100% !important;}
48
+ .de_upload .cmb-td input[type=text] {width:80% !important; color:#ccc !important; border:2px whitesmoke solid !important; box-shadow: 0 0 0 !important;}
49
+ .de_upload .cmb-td .button {margin-left:0 !important; width:19% !important; position:relative; top:4px;}
50
+
51
+ .de_heading {padding:0 !important; margin:0 !important; padding-top:14px !important; border:none !important;}
52
+ .de_heading_side {padding:0 !important; margin:0 !important; padding-top:0px !important; border:none !important;}
53
+ .de_heading .cmb-td h5 {font-style:normal !important; color:#0074A2; padding-left:4px; font-size:18px !important; font-weight:400 !important; border-bottom:6px whitesmoke double !important; padding-bottom:5px !important;}
54
+ .de_heading_side .cmb-td h5 {font-style:normal !important; color:#0074A2; padding-left:4px; font-size:18px !important; font-weight:400 !important; border-bottom:6px whitesmoke double !important; padding-bottom:5px !important;}
55
+
56
+ .de_checkbox {padding:0 !important; margin:0 !important; border:none !important;}
57
+ .de_checkbox .cmb-th {font-size:14px; text-transform:uppercase; width:100% !important; color:#333 !important;}
58
+ .de_checkbox .cmb-td {width:100% !important;}
59
+ .de_checkbox .cmb-td label span {font-size:12px; color:grey; font-style:normal !important;}
60
+
61
+ .de_checkbox_side {padding:0 !important; margin:0 !important; border:none !important;}
62
+ .de_checkbox_side .cmb-th {font-size:14px; width:100% !important; color:#333 !important;}
63
+ .de_checkbox_side .cmb-td {width:100% !important;}
64
+ .de_checkbox_side .cmb-th {padding-bottom:0 !important}
65
+ .de_checkbox_side .cmb-th label::after {display:none !important;}
66
+ .de_checkbox_side .cmb-td label span {font-size:12px; color:grey; font-style:normal !important;}
67
+
68
+ .de_thirty {margin-left:1.5% !important; margin-right:1.5% !important; width:27% !important; float:left !important; margin-bottom:14px !important; margin-top:14px !important;}
69
+
70
+ .de_fifty {margin-left:1.5% !important; margin-right:1.5% !important; width:47% !important; float:left !important; margin-bottom:14px !important; margin-top:14px !important;}
71
+
72
+ .de_twentyfive {margin-left:1.5% !important; margin-right:1.5% !important; width:22% !important; float:left !important; margin-bottom:14px !important; margin-top:14px !important;}
73
+
74
+ .de_seventyfive {margin-left:1.5% !important; margin-right:1.5% !important; width:72% !important; float:left !important; margin-bottom:14px !important; margin-top:14px !important;}
75
+
76
+ .de_seventy {margin-left:1.5% !important; margin-right:1.5% !important; width:67% !important; float:left !important; margin-bottom:14px !important; margin-top:14px !important;}
77
+
78
+ .de_hundred {clear:both; margin-left:1.5% !important; margin-right:1.5% !important; width:97% !important; margin-bottom:14px !important; margin-top:14px !important;}
79
+
80
+ .de_hundred_side {clear:both; margin-left:1.5% !important; margin-right:1.5% !important; width:97% !important; margin-bottom:20px !important; margin-top:24px !important;}
81
+
82
+ @media only screen and (max-width: 1100px) {
83
+ .de_thirty, .de_fifty, .de_twentyfive, .de_seventy, .de_seventyfive, .de_hundred {
84
+ clear:both; margin-left:1.5% !important; margin-right:1.5% !important; width:97% !important; margin-bottom:14px !important; margin-top:14px !important;
85
+ }
86
+ }
87
+
88
+ .de_nomtop {margin-top:0 !important;}
css/admin_de_style.min.css ADDED
@@ -0,0 +1 @@
 
1
+ .de_first{clear:left}.de_input input[type=text],.de_input textarea{border:2px solid #ddd!important;box-shadow:0 0 0!important}.de_input select{width:100%!important}.de_text{padding:0!important;margin:0!important;border:none!important}.de_text .cmb-th{font-size:14px;text-transform:uppercase;width:100%!important;color:#333!important}.de_text .cmb-td,.de_text .cmb-td input{width:100%!important}.de_text_side{padding:0!important;margin:0!important;border:none!important}.de_text_side .cmb-th{font-size:14px;width:100%!important;color:#333!important;padding-bottom:5px!important}.de_text_side .cmb-th label{padding-bottom:0!important}.de_text_side .cmb-th label::after{display:none!important}.de_text_side .cmb-td,.de_text_side .cmb-td input,.de_text_side .cmb-td select{width:100%!important}.de_text_side p{padding-bottom:0!important;font-style:normal!important;font-size:12px!important;color:grey!important}.de_color{padding:0!important;margin:0!important;border:none!important}.de_color .cmb-th{font-size:14px;text-transform:uppercase;width:100%!important;color:#333!important}.de_color .cmb-td{width:100%!important}.de_color_side{padding:0!important;margin:0!important;border:none!important}.de_color_side .cmb-th{font-size:14px;width:100%!important;color:#333!important;padding-bottom:5px!important}.de_color_side .cmb-th label{padding-bottom:0!important}.de_color_side .cmb-th label::after{display:none!important}.de_color_side .cmb-td{width:100%!important}.de_textarea{padding:0!important;margin:0!important;border:none!important}.de_textarea .cmb-th{font-size:14px;text-transform:uppercase;width:100%!important;color:#333!important}.de_textarea .cmb-td,.de_textarea .cmb-td textarea{width:100%!important}.de_info{padding:0!important;margin:0!important;border:none!important}.de_info .cmb-td h5{font-size:14px;text-transform:uppercase;width:100%!important;color:#333!important}.de_info .cmb-td,.de_info .cmb-td input{width:100%!important}.de_info .cmb-td p{font-size:12px;color:grey!important;font-style:normal!important}.de_info_side .cmb-td a{font-size:15px!important;text-decoration:none!important}.de_info_side .cmb-td a span{position:relative;top:3px}.de_info_side .cmb-td p{padding:0!important;color:#bbb;font-size:14px!important}.de_upload{padding:14px 0 0!important;margin:0!important;border:none!important}.de_upload .cmb-th{font-size:14px;text-transform:uppercase;width:100%!important;color:#333!important}.de_upload .cmb-td{width:100%!important}.de_upload .cmb-td input[type=text]{width:80%!important;color:#ccc!important;border:2px solid #f5f5f5!important;box-shadow:0 0 0!important}.de_upload .cmb-td .button{margin-left:0!important;width:19%!important;position:relative;top:4px}.de_heading{padding:14px 0 0!important;margin:0!important;border:none!important}.de_heading_side{padding:0!important;margin:0!important;border:none!important}.de_heading .cmb-td h5,.de_heading_side .cmb-td h5{font-style:normal!important;color:#0074A2;padding-left:4px;font-size:18px!important;font-weight:400!important;border-bottom:6px #f5f5f5 double!important;padding-bottom:5px!important}.de_checkbox{padding:0!important;margin:0!important;border:none!important}.de_checkbox .cmb-th{font-size:14px;text-transform:uppercase;width:100%!important;color:#333!important}.de_checkbox .cmb-td{width:100%!important}.de_checkbox .cmb-td label span{font-size:12px;color:grey;font-style:normal!important}.de_checkbox_side{padding:0!important;margin:0!important;border:none!important}.de_checkbox_side .cmb-th{font-size:14px;width:100%!important;color:#333!important}.de_checkbox_side .cmb-td{width:100%!important}.de_checkbox_side .cmb-th{padding-bottom:0!important}.de_checkbox_side .cmb-th label::after{display:none!important}.de_checkbox_side .cmb-td label span{font-size:12px;color:grey;font-style:normal!important}.de_thirty{margin:14px 1.5%!important;width:27%!important;float:left!important}.de_fifty{margin:14px 1.5%!important;width:47%!important;float:left!important}.de_twentyfive{margin:14px 1.5%!important;width:22%!important;float:left!important}.de_seventyfive{margin:14px 1.5%!important;width:72%!important;float:left!important}.de_seventy{margin:14px 1.5%!important;width:67%!important;float:left!important}.de_hundred{clear:both;margin:14px 1.5%!important;width:97%!important}.de_hundred_side{clear:both;margin:24px 1.5% 20px!important;width:97%!important}@media only screen and (max-width:1100px){.de_fifty,.de_hundred,.de_seventy,.de_seventyfive,.de_thirty,.de_twentyfive{clear:both;margin:14px 1.5%!important;width:97%!important}}.de_nomtop{margin-top:0!important}
css/tmm_custom_style.css CHANGED
@@ -91,4 +91,7 @@
91
  }
92
  .tmm_4_columns .tmm_names {font-size:22px;}
93
  .tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img {width:24px; height:24px; margin:10px 5px;}
94
- }
 
 
 
91
  }
92
  .tmm_4_columns .tmm_names {font-size:22px;}
93
  .tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img {width:24px; height:24px; margin:10px 5px;}
94
+ }
95
+
96
+ /* Force original fonts */
97
+ .tmm_container .tmm_ori_f .tmm_fname, .tmm_container .tmm_ori_f .tmm_job, .tmm_container .tmm_ori_f .tmm_desc, .tmm_container .tmm_ori_f .tmm_lname {font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif !important; font-weight:300 !important;}
css/tmm_custom_style.min.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.tmm_wrap{width:100%;margin-bottom:30px;text-align:center}.clearer{clear:both}.tmm_member{margin-top:100px;height:auto;float:left;text-align:center;border-bottom:1px solid #f5f5f5;-webkit-box-shadow:1px 0 5px 0 rgba(0,0,0,0.05);-moz-box-shadow:1px 0 5px 0 rgba(0,0,0,0.05);box-shadow:1px 0 5px 0 rgba(0,0,0,0.05);border-top:5px solid #d3d3d3;border-bottom:8px solid #f5f5f5}.tmm_three_entries{clear:both}.tmm_2_columns .tmm_member{width:48%;margin-right:1%;margin-left:1%}.tmm_3_columns .tmm_member{width:31%;margin-right:1%;margin-left:1%}.tmm_4_columns .tmm_member{width:23%;margin-right:1%;margin-left:1%}.tmm_member > img{width:150px;height:150px;border:none;-webkit-box-shadow:2px 0 15px 0 rgba(0,0,0,0.15);-moz-box-shadow:2px 0 15px 0 rgba(0,0,0,0.15);box-shadow:2px 0 15px 0 rgba(0,0,0,0.15);border-radius:60px!important;margin-top:-80px;border:10px solid #f5f5f5}.tmm_4_columns .tmm_member > img{width:100px;height:100px;margin-top:-70px;border-radius:40px!important;border:6px solid #f5f5f5}.tmm_member .tmm_textblock .tmm_scblock{padding-top:10px}.tmm_member .tmm_textblock{padding:10px 20px}.tmm_member .tmm_textblock .tmm_sociallink{clear:both;margin-bottom:20px;border:none}.tmm_member .tmm_textblock .tmm_sociallink img{display:inline-block;border:none;width:24px;height:24px;box-shadow:0 0 0 0;margin:10px 5px}.tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img{width:21px;height:21px;margin:6px 3px}.tmm_member .tmm_textblock .tmm_sociallink img:hover{opacity:.8}.tmm_names{font-size:22px;margin-bottom:8px;margin-top:10px;font-weight:300;line-height:24px}.tmm_4_columns .tmm_names{font-size:19px}.tmm_fname{display:inline}.tmm_lname{display:inline}.tmm_job{font-size:14px;color:#a2a5a4;text-transform:uppercase}.tmm_desc{padding:10px;margin-top:19px;margin-bottom:10px;font-size:14px}.tmm_4_columns .tmm_desc{padding:8px;margin-top:14px;margin-bottom:8px;font-size:13px;line-height:23px}@media only screen and (min-width: 40em) and (max-width: 64.063em){.tmm_4_columns .tmm_member{width:40%;margin-left:5%;margin-right:5%}.tmm_names{font-size:17px;margin-bottom:8px;margin-top:10px;font-weight:300;line-height:24px}.tmm_job{font-size:13px;color:#a2a5a4;text-transform:uppercase}.tmm_desc{padding:10px;margin-top:19px;margin-bottom:10px;font-size:14px;line-height:23px}.tmm_4_columns .tmm_desc{font-size:15px;line-height:23px}.tmm_3_columns .tmm_member > img{width:100px;height:100px;border-radius:40px!important;border:9px solid #f5f5f5}.tmm_4_columns .tmm_member > img{width:150px;height:150px;border-radius:60px!important;border:9px solid #f5f5f5}.tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img{width:24px;height:24px;margin:10px 5px}}@media only screen and (max-width: 40em){.tmm_member{width:96%;margin:0 2%;margin-top:120px}.tmm_2_columns .tmm_member,.tmm_3_columns .tmm_member,.tmm_4_columns .tmm_member{width:96%;margin:0 2%;margin-top:120px}.tmm_4_columns .tmm_desc{font-size:15px}.tmm_4_columns .tmm_member > img{width:150px;height:150px;border-radius:60px!important;border:9px solid #f5f5f5}.tmm_4_columns .tmm_names{font-size:22px}.tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img{width:24px;height:24px;margin:10px 5px}}
1
+ @charset "UTF-8";.tmm_wrap{width:100%;margin-bottom:30px;text-align:center}.clearer{clear:both}.tmm_member{margin-top:100px;height:auto;float:left;text-align:center;-webkit-box-shadow:1px 0 5px 0 rgba(0,0,0,.05);-moz-box-shadow:1px 0 5px 0 rgba(0,0,0,.05);box-shadow:1px 0 5px 0 rgba(0,0,0,.05);border-top:5px solid #d3d3d3;border-bottom:8px solid #f5f5f5}.tmm_three_entries{clear:both}.tmm_2_columns .tmm_member{width:48%;margin-right:1%;margin-left:1%}.tmm_3_columns .tmm_member{width:31%;margin-right:1%;margin-left:1%}.tmm_4_columns .tmm_member{width:23%;margin-right:1%;margin-left:1%}.tmm_member>img{width:150px;height:150px;-webkit-box-shadow:2px 0 15px 0 rgba(0,0,0,.15);-moz-box-shadow:2px 0 15px 0 rgba(0,0,0,.15);box-shadow:2px 0 15px 0 rgba(0,0,0,.15);border-radius:60px!important;margin-top:-80px;border:10px solid #f5f5f5}.tmm_4_columns .tmm_member>img{width:100px;height:100px;margin-top:-70px;border-radius:40px!important;border:6px solid #f5f5f5}.tmm_member .tmm_textblock .tmm_scblock{padding-top:10px}.tmm_member .tmm_textblock{padding:10px 20px}.tmm_member .tmm_textblock .tmm_sociallink{clear:both;margin-bottom:20px;border:none}.tmm_member .tmm_textblock .tmm_sociallink img{display:inline-block;border:none;width:24px;height:24px;box-shadow:0 0;margin:10px 5px}.tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img{width:21px;height:21px;margin:6px 3px}.tmm_member .tmm_textblock .tmm_sociallink img:hover{opacity:.8}.tmm_names{font-size:22px;margin-bottom:8px;margin-top:10px;font-weight:300;line-height:24px}.tmm_4_columns .tmm_names{font-size:19px}.tmm_fname,.tmm_lname{display:inline}.tmm_job{font-size:14px;color:#a2a5a4;text-transform:uppercase}.tmm_desc{padding:10px;margin-top:19px;margin-bottom:10px;font-size:14px}.tmm_4_columns .tmm_desc{padding:8px;margin-top:14px;margin-bottom:8px;font-size:13px;line-height:23px}@media only screen and (min-width:40em) and (max-width:64.063em){.tmm_4_columns .tmm_member{width:40%;margin-left:5%;margin-right:5%}.tmm_names{font-size:17px;margin-bottom:8px;margin-top:10px;font-weight:300;line-height:24px}.tmm_job{font-size:13px;color:#a2a5a4;text-transform:uppercase}.tmm_desc{padding:10px;margin-top:19px;margin-bottom:10px;font-size:14px;line-height:23px}.tmm_4_columns .tmm_desc{font-size:15px;line-height:23px}.tmm_3_columns .tmm_member>img{width:100px;height:100px;border-radius:40px!important;border:9px solid #f5f5f5}.tmm_4_columns .tmm_member>img{width:150px;height:150px;border-radius:60px!important;border:9px solid #f5f5f5}.tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img{width:24px;height:24px;margin:10px 5px}}@media only screen and (max-width:40em){.tmm_2_columns .tmm_member,.tmm_3_columns .tmm_member,.tmm_4_columns .tmm_member,.tmm_member{width:96%;margin:120px 2% 0}.tmm_4_columns .tmm_desc{font-size:15px}.tmm_4_columns .tmm_member>img{width:150px;height:150px;border-radius:60px!important;border:9px solid #f5f5f5}.tmm_4_columns .tmm_names{font-size:22px}.tmm_4_columns .tmm_member .tmm_textblock .tmm_sociallink img{width:24px;height:24px;margin:10px 5px}}.tmm_container .tmm_ori_f .tmm_desc,.tmm_container .tmm_ori_f .tmm_fname,.tmm_container .tmm_ori_f .tmm_job,.tmm_container .tmm_ori_f .tmm_lname{font-family:'Helvetica Neue',Helvetica,Arial,sans-serif!important;font-weight:300!important}
drkfr/Gruntfile.js DELETED
@@ -1,39 +0,0 @@
1
- /*global module:false*/
2
- module.exports = function(grunt) {
3
-
4
- // Project configuration.
5
- grunt.initConfig({
6
- // Metadata.
7
- pkg: grunt.file.readJSON('package.json'),
8
- banner: '/**\n' +
9
- ' * <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>\n' +
10
- '<%= pkg.homepage ? " * " + pkg.homepage + "\\n" : "" %>' +
11
- ' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author %>;' + ' License: <%= pkg.license %>\n' +
12
- ' */',
13
- cssmin: {
14
- combine: {
15
- options: {
16
- banner: '<%= banner %>'
17
- },
18
- files: {
19
- 'css/dist/DKTBS.min.css': [
20
- 'css/src/layout.css',
21
- 'css/src/generic.css',
22
- 'css/src/repeatable.css',
23
- 'css/src/sortable.css',
24
- 'css/src/group.css',
25
- 'css/src/file.css',
26
- 'css/src/misc-fields.css'
27
- ]
28
- }
29
- }
30
- }
31
- });
32
-
33
- // These plugins provide necessary tasks.
34
- grunt.loadNpmTasks('grunt-contrib-cssmin');
35
-
36
- // Default task.
37
- grunt.registerTask('default', [ 'cssmin' ] );
38
-
39
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/class.drkfr-meta-box.php DELETED
@@ -1,379 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Create meta boxes
5
- */
6
- class drkfr_Meta_Box {
7
-
8
- protected $_meta_box;
9
- private $fields = array();
10
-
11
- function __construct( $meta_box ) {
12
-
13
- $this->_meta_box = $meta_box;
14
-
15
- if ( empty( $this->_meta_box['id'] ) )
16
- $this->_meta_box['id'] = sanitize_title( $this->_meta_box['title'] );
17
-
18
- add_action( 'dbx_post_advanced', array( &$this, 'init_fields_for_post' ) );
19
- add_action( 'drkfr_init_fields', array( &$this, 'init_fields' ) );
20
-
21
- global $pagenow;
22
-
23
- add_action( 'admin_menu', array( &$this, 'add' ) );
24
- add_action( 'save_post', array( &$this, 'save_for_post' ) );
25
- add_action( 'edit_attachment', array( &$this, 'save_for_post' ) );
26
- add_action( 'drkfr_save_fields', array( &$this, 'save' ) );
27
-
28
- add_action( 'admin_enqueue_scripts', array( &$this, 'enqueue_scripts' ) );
29
- add_action( 'admin_enqueue_scripts', array( &$this, 'enqueue_styles' ) );
30
-
31
- }
32
-
33
- public function init_fields( $post_id = 0 ) {
34
-
35
- foreach ( $this->_meta_box['fields'] as $key => $field ) {
36
-
37
- $values = array();
38
-
39
- $args = $field;
40
- unset( $args['id'] );
41
- unset( $args['type'] );
42
- unset( $args['name'] );
43
-
44
- $class = _drkfr_field_class_for_type( $field['type'] );
45
-
46
- // If we are on a post edit screen - get metadata value of the field for this post
47
- if ( $post_id ) {
48
- $values = (array) get_post_meta( $post_id, $field['id'], false );
49
- }
50
-
51
- if ( class_exists( $class ) ) {
52
- $this->fields[] = new $class( $field['id'], $field['name'], (array) $values, $args );
53
- }
54
-
55
- }
56
-
57
- }
58
-
59
- public function init_fields_for_post() {
60
-
61
- global $post, $temp_ID;
62
-
63
- // Get the current ID
64
- if( isset( $_GET['post'] ) )
65
- $post_id = $_GET['post'];
66
-
67
- elseif( isset( $_POST['post_ID'] ) )
68
- $post_id = $_POST['post_ID'];
69
-
70
- elseif ( ! empty( $post->ID ) )
71
- $post_id = $post->ID;
72
-
73
- if ( is_page() || ! isset( $post_id ) )
74
- return false;
75
-
76
- $this->init_fields( (int) $post_id );
77
-
78
- }
79
-
80
- function enqueue_scripts() {
81
-
82
- wp_enqueue_script( 'drkfr-scripts', trailingslashit( drkfr_URL ) . 'js/drkfr.js', array( 'jquery' ) );
83
-
84
- wp_localize_script( 'drkfr-scripts', 'drkfrData', array(
85
- 'strings' => array(
86
- 'confirmDeleteField' => __( 'Are you sure you want to delete this field?', 'drkfr' )
87
- )
88
- ) );
89
-
90
- foreach ( $this->fields as $field )
91
- $field->enqueue_scripts();
92
-
93
- }
94
-
95
- function enqueue_styles() {
96
-
97
- $suffix = drkfr_DEV ? '' : '.min';
98
-
99
- if ( version_compare( get_bloginfo( 'version' ), '3.8', '>=' ) )
100
- wp_enqueue_style( 'drkfr-styles', trailingslashit( drkfr_URL ) . "css/dist/drkfr$suffix.css" );
101
- else
102
- wp_enqueue_style( 'drkfr-styles', trailingslashit( drkfr_URL ) . 'css/legacy.css' );
103
-
104
- foreach ( $this->fields as $field )
105
- $field->enqueue_styles();
106
-
107
- }
108
-
109
- // Add metabox
110
- function add() {
111
-
112
- $this->_meta_box['context'] = empty($this->_meta_box['context']) ? 'normal' : $this->_meta_box['context'];
113
- $this->_meta_box['priority'] = empty($this->_meta_box['priority']) ? 'low' : $this->_meta_box['priority'];
114
-
115
- // Backwards compatablilty.
116
- if ( isset( $this->_meta_box['show_on']['key'] ) ) {
117
- $this->_meta_box['show_on'][ $this->_meta_box['show_on']['key'] ] = $this->_meta_box['show_on']['value'];
118
- unset( $this->_meta_box['show_on']['key'] );
119
- unset( $this->_meta_box['show_on']['value'] );
120
- }
121
-
122
- foreach ( (array) $this->_meta_box['pages'] as $page ) {
123
- if ( $this->is_metabox_displayed() ) {
124
- add_meta_box( $this->_meta_box['id'], $this->_meta_box['title'], array(&$this, 'show'), $page, $this->_meta_box['context'], $this->_meta_box['priority'] ) ;
125
- }
126
- }
127
-
128
- }
129
-
130
- /**
131
- * Handle 'Show On' and 'Hide On' Filters
132
- */
133
- function is_metabox_displayed() {
134
- $display = true;
135
- $display = $this->add_for_id( $display );
136
- $display = $this->hide_for_id( $display );
137
- $display = $this->add_for_page_template( $display );
138
- $display = $this->hide_for_page_template( $display );
139
- return $display;
140
- }
141
-
142
- // Add drkfr for ID
143
- function add_for_id( $display ) {
144
-
145
- if ( ! isset( $this->_meta_box['show_on']['id'] ) ) {
146
- return $display;
147
- }
148
-
149
- // Don't show drkfr if we can't identify ID of a post
150
- $post_id = $this->get_post_id();
151
-
152
- if ( ! isset( $post_id ) ) {
153
- return false;
154
- }
155
-
156
- // If value isn't an array, turn it into one
157
- $this->_meta_box['show_on']['id'] = ! is_array( $this->_meta_box['show_on']['id'] ) ? array( $this->_meta_box['show_on']['id'] ) : $this->_meta_box['show_on']['id'];
158
-
159
- return in_array( $post_id, $this->_meta_box['show_on']['id'] );
160
-
161
- }
162
-
163
- // Hide drkfr for ID
164
- function hide_for_id( $display ) {
165
-
166
- if ( ! isset( $this->_meta_box['hide_on']['id'] ) ) {
167
- return $display;
168
- }
169
-
170
- // Return if we can't identify ID of a post
171
- $post_id = $this->get_post_id();
172
- if ( ! isset( $post_id ) ) {
173
- return $display;
174
- }
175
-
176
- // If value isn't an array, turn it into one
177
- $this->_meta_box['hide_on']['id'] = ! is_array( $this->_meta_box['hide_on']['id'] ) ? array( $this->_meta_box['hide_on']['id'] ) : $this->_meta_box['hide_on']['id'];
178
-
179
- return ! in_array( $post_id, $this->_meta_box['hide_on']['id'] );
180
-
181
- }
182
-
183
- // Add drkfr for Page Template
184
- function add_for_page_template( $display ) {
185
-
186
- if ( ! isset( $this->_meta_box['show_on']['page-template'] ) ) {
187
- return $display;
188
- }
189
-
190
- // Return false if we can't identify ID of a post
191
- $post_id = $this->get_post_id();
192
- if ( ! isset( $post_id ) ) {
193
- return false;
194
- }
195
-
196
- // Get current template
197
- $current_template = get_post_meta( $post_id, '_wp_page_template', true );
198
-
199
- // If value isn't an array, turn it into one
200
- $this->_meta_box['show_on']['page-template'] = ! is_array( $this->_meta_box['show_on']['page-template'] ) ? array( $this->_meta_box['show_on']['page-template'] ) : $this->_meta_box['show_on']['page-template'];
201
-
202
- return in_array( $current_template, $this->_meta_box['show_on']['page-template'] );
203
-
204
- }
205
-
206
- // Hide drkfr for Page Template
207
- function hide_for_page_template( $display ) {
208
-
209
- if ( ! isset( $this->_meta_box['hide_on']['page-template'] ) ) {
210
- return $display;
211
- }
212
-
213
- // Return $display if we can't identify ID of a post and hence its current template
214
- $post_id = $this->get_post_id();
215
-
216
- if ( ! isset( $post_id ) ) {
217
- return $display;
218
- }
219
-
220
- // Get current template
221
- $current_template = get_post_meta( $post_id, '_wp_page_template', true );
222
-
223
- // If value isn't an array, turn it into one
224
- $this->_meta_box['hide_on']['page-template'] = ! is_array( $this->_meta_box['hide_on']['page-template'] ) ? array( $this->_meta_box['hide_on']['page-template'] ) : $this->_meta_box['hide_on']['page-template'];
225
-
226
- return ! in_array( $current_template, $this->_meta_box['hide_on']['page-template'] );
227
-
228
- }
229
-
230
- // display fields
231
- function show() { ?>
232
-
233
- <input type="hidden" name="wp_meta_box_nonce" value="<?php esc_attr_e( wp_create_nonce( basename(__FILE__) ) ); ?>" />
234
-
235
- <?php self::layout_fields( $this->fields );
236
-
237
- }
238
-
239
- /**
240
- * Layout an array of fields, depending on their 'cols' property.
241
- *
242
- * This is a static method so other fields can use it that rely on sub fields
243
- *
244
- * @param drkfr_Field[] $fields
245
- */
246
- static function layout_fields( array $fields ) { ?>
247
-
248
- <div class="drkfr_metabox">
249
-
250
- <?php $current_colspan = 0;
251
-
252
- foreach ( $fields as $field ) :
253
-
254
- if ( $current_colspan == 0 ) : ?>
255
-
256
- <div class="drkfr-row">
257
-
258
- <?php endif;
259
-
260
- $current_colspan += $field->args['cols'];
261
-
262
- $classes = array( 'field', get_class($field) );
263
-
264
- if ( ! empty( $field->args['repeatable'] ) )
265
- $classes[] = 'repeatable';
266
-
267
- if ( ! empty( $field->args['sortable'] ) )
268
- $classes[] = 'drkfr-sortable';
269
-
270
- $attrs = array(
271
- sprintf( 'id="%s"', sanitize_html_class( $field->id ) ),
272
- sprintf( 'class="%s"', esc_attr( implode(' ', array_map( 'sanitize_html_class', $classes ) ) ) )
273
- );
274
-
275
- // Field Repeatable Max.
276
- if ( isset( $field->args['repeatable_max'] ) )
277
- $attrs[] = sprintf( 'data-rep-max="%s"', intval( $field->args['repeatable_max'] ) );
278
-
279
- ?>
280
-
281
- <div class="drkfr-cell-<?php echo intval( $field->args['cols'] ); ?>">
282
-
283
- <div <?php echo implode( ' ', $attrs ); ?>>
284
- <?php $field->display(); ?>
285
- </div>
286
-
287
- <input type="hidden" name="_drkfr_present_<?php esc_attr_e( $field->id ); ?>" value="1" />
288
-
289
- </div>
290
-
291
- <?php if ( $current_colspan == 12 || $field === end( $fields ) ) :
292
-
293
- $current_colspan = 0; ?>
294
-
295
- </div><!-- .drkfr-row -->
296
-
297
- <?php endif; ?>
298
-
299
- <?php endforeach; ?>
300
-
301
- </div>
302
-
303
- <?php }
304
-
305
- function strip_repeatable( $values ) {
306
-
307
- foreach ( $values as $key => $value ) {
308
-
309
- if ( false !== strpos( $key, 'drkfr-group-x' ) || false !== strpos( $key, 'drkfr-field-x' ) )
310
- unset( $values[$key] );
311
-
312
- elseif ( is_array( $value ) )
313
- $values[$key] = $this->strip_repeatable( $value );
314
-
315
- }
316
-
317
- return $values;
318
- }
319
-
320
- // Save data from metabox
321
- function save( $post_id = 0 ) {
322
-
323
- // Verify nonce
324
- if ( ! isset( $_POST['wp_meta_box_nonce'] ) || ! wp_verify_nonce( $_POST['wp_meta_box_nonce'], basename( __FILE__ ) ) )
325
- return $post_id;
326
-
327
- foreach ( $this->_meta_box['fields'] as $field ) {
328
-
329
- // Verify this meta box was shown on the page
330
- if ( ! isset( $_POST['_drkfr_present_' . $field['id'] ] ) )
331
- continue;
332
-
333
- if ( isset( $_POST[ $field['id'] ] ) )
334
- $value = (array) $_POST[ $field['id'] ];
335
- else
336
- $value = array();
337
-
338
- $value = $this->strip_repeatable( $value );
339
-
340
- if ( ! $class = _drkfr_field_class_for_type( $field['type'] ) ) {
341
- do_action( 'drkfr_save_' . $field['type'], $field, $value );
342
- }
343
-
344
- $field_obj = new $class( $field['id'], $field['name'], $value, $field );
345
-
346
- $field_obj->save( $post_id, $value );
347
-
348
- }
349
-
350
- // If we are not on a post, need to refresh the field objects to reflect new values, as we do not get a redirect
351
- if ( ! $post_id ) {
352
- $this->fields = array();
353
- $this->init_fields();
354
- }
355
- }
356
-
357
- // Save the on save_post hook
358
- function save_for_post( $post_id ) {
359
-
360
- // check autosave
361
- if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
362
- return $post_id;
363
-
364
- $this->save( $post_id );
365
-
366
- }
367
-
368
- function get_post_id() {
369
-
370
- $post_id = isset( $_GET['post'] ) ? $_GET['post'] : null;
371
-
372
- if ( ! $post_id && isset( $_POST['post_id'] ) ) {
373
- $post_id = $_POST['post_id'];
374
- }
375
-
376
- return $post_id;
377
-
378
- }
379
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/classes.fields.php DELETED
@@ -1,1675 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Abstract class for all fields.
5
- * Subclasses need only override html()
6
- *
7
- * @abstract
8
- */
9
- abstract class drkfr_Field {
10
-
11
- public $value;
12
- public $field_index = 0;
13
-
14
- public function __construct( $name, $title, array $values, $args = array() ) {
15
-
16
- $this->id = $name;
17
- $this->name = $name . '[]';
18
- $this->title = $title;
19
- $this->args = wp_parse_args( $args, $this->get_default_args() );
20
-
21
- // Deprecated argument: 'std'
22
- if ( ! empty( $this->args['std'] ) && empty( $this->args['default'] ) ) {
23
- $this->args['default'] = $this->args['std'];
24
- _deprecated_argument( 'drkfr_Field', '0.9', "field argument 'std' is deprecated, use 'default' instead" );
25
- }
26
-
27
- if ( ! empty( $this->args['options'] ) && is_array( reset( $this->args['options'] ) ) ) {
28
- $re_format = array();
29
- foreach ( $this->args['options'] as $option ) {
30
- $re_format[$option['value']] = $option['name'];
31
- }
32
- $this->args['options'] = $re_format;
33
- }
34
-
35
- // If the field has a custom value populator callback
36
- if ( ! empty( $args['values_callback'] ) )
37
- $this->values = call_user_func( $args['values_callback'], get_the_id() );
38
- else
39
- $this->values = $values;
40
-
41
- $this->value = reset( $this->values );
42
-
43
- }
44
-
45
- /**
46
- * Get the default args for the abstract field.
47
- * These args are available to all fields.
48
- *
49
- * @return array $args
50
- */
51
- public function get_default_args() {
52
- return apply_filters(
53
- 'drkfr_field_default_args',
54
- array(
55
- 'desc' => '',
56
- 'repeatable' => false,
57
- 'sortable' => false,
58
- 'repeatable_max' => null,
59
- 'show_label' => false,
60
- 'readonly' => false,
61
- 'disabled' => false,
62
- 'default' => '',
63
- 'cols' => '12',
64
- 'style' => '',
65
- 'class' => '',
66
- 'data_delegate' => null,
67
- 'save_callback' => null,
68
- 'string-repeat-field' => __( 'Add New', 'drkfr' ),
69
- 'string-delete-field' => __( 'Remove Field', 'drkfr' ),
70
- ),
71
- get_class( $this )
72
- );
73
- }
74
-
75
- /**
76
- * Enqueue all scripts required by the field.
77
- *
78
- * @uses wp_enqueue_script()
79
- */
80
- public function enqueue_scripts() {
81
-
82
- if ( isset( $this->args['sortable'] ) && $this->args['sortable'] )
83
- wp_enqueue_script( 'jquery-ui-sortable' );
84
-
85
- }
86
-
87
- /**
88
- * Enqueue all styles required by the field.
89
- *
90
- * @uses wp_enqueue_style()
91
- */
92
- public function enqueue_styles() {}
93
-
94
- /**
95
- * Output the field input ID attribute.
96
- *
97
- * If multiple inputs are required for a single field,
98
- * use the append parameter to add unique identifier.
99
- *
100
- * @param string $append
101
- * @return null
102
- */
103
- public function id_attr( $append = null ) {
104
-
105
- printf( 'id="%s"', esc_attr( $this->get_the_id_attr( $append ) ) );
106
-
107
- }
108
-
109
- /**
110
- * Output the for attribute for the field.
111
- *
112
- *
113
- *
114
- * If multiple inputs are required for a single field,
115
- * use the append parameter to add unique identifier.
116
- *
117
- * @param string $append
118
- * @return null
119
- */
120
- public function get_the_id_attr( $append = null ) {
121
-
122
- $id = $this->id;
123
-
124
- if ( isset( $this->parent ) ) {
125
- $parent_id = preg_replace( '/drkfr\-field\-(\d+|x)/', 'drkfr-group-$1', $this->parent->get_the_id_attr() );
126
- $id = $parent_id . '[' . $id . ']';
127
- }
128
-
129
- $id .= '-drkfr-field-' . $this->field_index;
130
-
131
- if ( ! is_null( $append ) )
132
- $id .= '-' . $append;
133
-
134
- $id = str_replace( array( '[', ']', '--' ), '-', $id );
135
-
136
- return $id;
137
-
138
- }
139
-
140
- /**
141
- * Return the field input ID attribute value.
142
- *
143
- * If multiple inputs are required for a single field,
144
- * use the append parameter to add unique identifier.
145
- *
146
- * @param string $append
147
- * @return string id attribute value.
148
- */
149
- public function for_attr( $append = null ) {
150
-
151
- printf( 'for="%s"', esc_attr( $this->get_the_id_attr( $append ) ) );
152
-
153
- }
154
-
155
- public function name_attr( $append = null ) {
156
-
157
- printf( 'name="%s"', esc_attr( $this->get_the_name_attr( $append ) ) );
158
-
159
- }
160
-
161
- public function get_the_name_attr( $append = null ) {
162
-
163
- $name = str_replace( '[]', '', $this->name );
164
-
165
- if ( isset( $this->parent ) ) {
166
- $parent_name = preg_replace( '/drkfr\-field\-(\d+|x)/', 'drkfr-group-$1', $this->parent->get_the_name_attr() );
167
- $name = $parent_name . '[' . $name . ']';
168
- }
169
-
170
- $name .= "[drkfr-field-$this->field_index]";
171
-
172
- if ( ! is_null( $append ) )
173
- $name .= $append;
174
-
175
- return $name;
176
-
177
- }
178
-
179
- public function class_attr( $classes = '' ) {
180
-
181
- if ( $classes = implode( ' ', array_map( 'sanitize_html_class', array_filter( array_unique( explode( ' ', $classes . ' ' . $this->args['class'] ) ) ) ) ) ) { ?>
182
-
183
- class="<?php echo esc_attr( $classes ); ?>"
184
-
185
- <?php }
186
-
187
- }
188
-
189
- /**
190
- * Get JS Safe ID.
191
- *
192
- * For use as a unique field identifier in javascript.
193
- */
194
- public function get_js_id() {
195
-
196
- return str_replace( array( '-', '[', ']', '--' ),'_', $this->get_the_id_attr() ); // JS friendly ID
197
-
198
- }
199
-
200
- public function boolean_attr( $attrs = array() ) {
201
-
202
- if ( $this->args['readonly'] )
203
- $attrs[] = 'readonly';
204
-
205
- if ( $this->args['disabled'] )
206
- $attrs[] = 'disabled';
207
-
208
- $attrs = array_filter( array_unique( $attrs ) );
209
-
210
- foreach ( $attrs as $attr )
211
- echo esc_html( $attr ) . '="' . esc_attr( $attr ) . '"';
212
-
213
- }
214
-
215
- /**
216
- * Check if this field has a data delegate set
217
- *
218
- * @return boolean
219
- */
220
- public function has_data_delegate() {
221
- return (bool) $this->args['data_delegate'];
222
- }
223
-
224
- /**
225
- * Get the array of data from the data delegate
226
- *
227
- * @return array mixed
228
- */
229
- protected function get_delegate_data() {
230
-
231
- if ( $this->args['data_delegate'] )
232
- return call_user_func_array( $this->args['data_delegate'], array( $this ) );
233
-
234
- return array();
235
-
236
- }
237
-
238
- public function get_value() {
239
- return ( $this->value || $this->value === '0' ) ? $this->value : $this->args['default'];
240
- }
241
-
242
- public function &get_values() {
243
- return $this->values;
244
- }
245
-
246
- public function set_values( array $values ) {
247
-
248
- $this->values = $values;
249
-
250
- unset( $this->value );
251
-
252
- }
253
-
254
- public function parse_save_values() {}
255
-
256
- public function parse_save_value() {}
257
-
258
- /**
259
- * @todo this surely only works for posts
260
- * @todo why do values need to be passed in, they can already be passed in on construct
261
- */
262
- public function save( $post_id, $values ) {
263
-
264
- // Don't save readonly values.
265
- if ( $this->args['readonly'] )
266
- return;
267
-
268
- $this->values = $values;
269
- $this->parse_save_values();
270
-
271
- // Allow override from args
272
- if ( ! empty( $this->args['save_callback'] ) ) {
273
-
274
- call_user_func( $this->args['save_callback'], $this->values, $post_id );
275
-
276
- return;
277
-
278
- }
279
-
280
- // If we are not on a post edit screen
281
- if ( ! $post_id )
282
- return;
283
-
284
- delete_post_meta( $post_id, $this->id );
285
-
286
- foreach( $this->values as $v ) {
287
-
288
- $this->value = $v;
289
- $this->parse_save_value();
290
-
291
- if ( $this->value || $this->value === '0' )
292
- add_post_meta( $post_id, $this->id, $this->value );
293
-
294
- }
295
- }
296
-
297
- public function title() {
298
-
299
- if ( $this->title ) { ?>
300
-
301
- <div class="field-title">
302
- <label <?php $this->for_attr(); ?>>
303
- <?php echo esc_html( $this->title ); ?>
304
- </label>
305
- </div>
306
-
307
- <?php }
308
-
309
- }
310
-
311
- public function description() {
312
-
313
- if ( ! empty( $this->args['desc'] ) ) { ?>
314
-
315
- <div class="drkfr_metabox_description">
316
- <?php echo wp_kses_post( $this->args['desc'] ); ?>
317
- </div>
318
-
319
- <?php }
320
-
321
- }
322
-
323
- public function display() {
324
-
325
- // If there are no values and it's not repeateble, we want to do one with empty string
326
- if ( ! $this->get_values() && ! $this->args['repeatable'] )
327
- $values = array( '' );
328
- else
329
- $values = $this->get_values();
330
-
331
- $this->title();
332
-
333
- $this->description();
334
-
335
- $i = 0;
336
- foreach ( $values as $key => $value ) {
337
-
338
- $this->field_index = $i;
339
- $this->value = $value; ?>
340
-
341
- <div class="field-item" data-class="<?php echo esc_attr( get_class( $this ) ); ?>" style="position: relative; <?php echo esc_attr( $this->args['style'] ); ?>">
342
-
343
- <?php if ( $this->args['repeatable'] ) : ?>
344
- <button class="drkfr-delete-field" title="<?php echo esc_attr( $this->args['string-delete-field'] ); ?>">
345
- <span class="drkfr-delete-field-icon">&times;</span>
346
- </button>
347
- <?php endif; ?>
348
-
349
- <?php $this->html(); ?>
350
-
351
- </div>
352
-
353
- <?php
354
-
355
- $i++;
356
-
357
- }
358
-
359
- // Insert a hidden one if it's repeatable
360
- if ( $this->args['repeatable'] ) {
361
-
362
- $this->field_index = 'x'; // x used to distinguish hidden fields.
363
- $this->value = ''; ?>
364
-
365
- <div class="field-item hidden" data-class="<?php echo esc_attr( get_class( $this ) ); ?>" style="position: relative; <?php echo esc_attr( $this->args['style'] ); ?>">
366
-
367
- <?php if ( $this->args['repeatable'] ) : ?>
368
- <button class="drkfr-delete-field" title="<?php echo esc_attr( $this->args['string-delete-field'] ); ?>">
369
- <span class="drkfr-delete-field-icon">&times;</span>
370
- <?php echo esc_html( $this->args['string-delete-field'] ); ?>
371
- </button>
372
- <?php endif; ?>
373
-
374
- <?php $this->html(); ?>
375
-
376
- </div>
377
-
378
- <button class="button repeat-field"><?php echo esc_html( $this->args['string-repeat-field'] ); ?></button>
379
-
380
- <?php }
381
-
382
- }
383
-
384
- }
385
-
386
- /**
387
- * Standard text field.
388
- *
389
- * @extends drkfr_Field
390
- */
391
- class drkfr_Text_Field extends drkfr_Field {
392
-
393
- public function html() { ?>
394
-
395
- <input type="text" <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->get_value() ); ?>" />
396
-
397
- <?php }
398
- }
399
-
400
- class drkfr_Text_Small_Field extends drkfr_Text_Field {
401
-
402
- public function html() {
403
-
404
- $this->args['class'] .= ' drkfr_text_small';
405
-
406
- parent::html();
407
-
408
- }
409
- }
410
-
411
- /**
412
- * Field for image upload / file updoad.
413
- *
414
- * @todo ability to set image size (preview image) from caller
415
- */
416
- class drkfr_File_Field extends drkfr_Field {
417
-
418
- /**
419
- * Return the default args for the File field.
420
- *
421
- * @return array $args
422
- */
423
- public function get_default_args() {
424
- return array_merge(
425
- parent::get_default_args(),
426
- array(
427
- 'library-type' => array( 'video', 'audio', 'text', 'application' )
428
- )
429
- );
430
- }
431
-
432
- function enqueue_scripts() {
433
-
434
- global $post_ID;
435
- $post_ID = isset($post_ID) ? (int) $post_ID : 0;
436
-
437
- parent::enqueue_scripts();
438
-
439
- wp_enqueue_media( array( 'post' => $post_ID ));
440
- wp_enqueue_script( 'drkfr-file-upload', trailingslashit( drkfr_URL ) . 'js/file-upload.js', array( 'jquery', 'drkfr-scripts' ) );
441
-
442
- }
443
-
444
- public function html() {
445
-
446
- if ( $this->get_value() ) {
447
- $src = wp_mime_type_icon( $this->get_value() );
448
- $size = getimagesize( str_replace( site_url(), ABSPATH, $src ) );
449
- $icon_img = '<img src="' . $src . '" ' . $size[3] . ' />';
450
- }
451
-
452
- $data_type = ( ! empty( $this->args['library-type'] ) ? implode( ',', $this->args['library-type'] ) : null );
453
-
454
- ?>
455
-
456
- <div class="drkfr-file-wrap" <?php echo 'data-type="' . esc_attr( $data_type ) . '"'; ?>>
457
-
458
- <div class="drkfr-file-wrap-placeholder"></div>
459
-
460
- <button class="button drkfr-file-upload <?php echo esc_attr( $this->get_value() ) ? 'hidden' : '' ?>">
461
- <?php esc_html_e( 'Add File', 'drkfr' ); ?>
462
- </button>
463
-
464
- <div class="drkfr-file-holder type-file <?php echo $this->get_value() ? '' : 'hidden'; ?>">
465
-
466
- <?php if ( $this->get_value() ) : ?>
467
-
468
- <?php if ( isset( $icon_img ) ) echo $icon_img; ?>
469
-
470
- <div class="drkfr-file-name">
471
- <strong><?php echo esc_html( basename( get_attached_file( $this->get_value() ) ) ); ?></strong>
472
- </div>
473
-
474
- <?php endif; ?>
475
-
476
- </div>
477
-
478
- <button class="drkfr-remove-file button <?php echo $this->get_value() ? '' : 'hidden'; ?>">
479
- <?php esc_html_e( 'Remove', 'drkfr' ); ?>
480
- </button>
481
-
482
- <input type="hidden"
483
- <?php $this->class_attr( 'drkfr-file-upload-input' ); ?>
484
- <?php $this->name_attr(); ?>
485
- value="<?php echo esc_attr( $this->value ); ?>"
486
- />
487
-
488
- </div>
489
-
490
- <?php }
491
-
492
- }
493
-
494
- class drkfr_Image_Field extends drkfr_File_Field {
495
-
496
- /**
497
- * Return the default args for the Image field.
498
- *
499
- * @return array $args
500
- */
501
- public function get_default_args() {
502
- return array_merge(
503
- parent::get_default_args(),
504
- array(
505
- 'size' => 'thumbnail',
506
- 'library-type' => array( 'image' ),
507
- 'show_size' => false
508
- )
509
- );
510
- }
511
-
512
- public function html() {
513
-
514
- if ( $this->get_value() )
515
- $image = wp_get_attachment_image_src( $this->get_value(), $this->args['size'], true );
516
-
517
- // Convert size arg to array of width, height, crop
518
- $size = $this->parse_image_size( $this->args['size'] );
519
-
520
- // Inline styles
521
- $styles = sprintf( 'width: %1$dpx; height: %2$dpx; line-height: %2$dpx', intval( $size['width'] ), intval( $size['height'] ) );
522
- $placeholder_styles = sprintf( 'width: %dpx; height: %dpx;', intval( $size['width'] ) - 8, intval( $size['height'] ) - 8 );
523
-
524
- $data_type = ( ! empty( $this->args['library-type'] ) ? implode( ',', $this->args['library-type'] ) : null );
525
-
526
- ?>
527
-
528
- <div class="drkfr-file-wrap" style="<?php echo esc_attr( $styles ); ?>" data-type="<?php echo esc_attr( $data_type ); ?>">
529
-
530
- <div class="drkfr-file-wrap-placeholder" style="<?php echo esc_attr( $placeholder_styles ); ?>">
531
-
532
- <?php if ( $this->args['show_size'] ) : ?>
533
- <span class="dimensions">
534
- <?php printf( '%dpx &times; %dpx', intval( $size['width'] ), intval( $size['height'] ) ); ?>
535
- </span>
536
- <?php endif; ?>
537
-
538
- </div>
539
-
540
- <button class="button drkfr-file-upload <?php echo esc_attr( $this->get_value() ) ? 'hidden' : '' ?>" data-nonce="<?php echo wp_create_nonce( 'drkfr-file-upload-nonce' ); ?>">
541
- <?php esc_html_e( 'Add Image', 'drkfr' ); ?>
542
- </button>
543
-
544
- <div class="drkfr-file-holder type-img <?php echo $this->get_value() ? '' : 'hidden'; ?>" data-crop="<?php echo (bool) $size['crop']; ?>">
545
-
546
- <?php if ( ! empty( $image ) ) : ?>
547
- <img src="<?php echo esc_url( $image[0] ); ?>" width="<?php echo intval( $image[1] ); ?>" height="<?php echo intval( $image[2] ); ?>" />
548
- <?php endif; ?>
549
-
550
- </div>
551
-
552
- <button class="drkfr-remove-file button <?php echo $this->get_value() ? '' : 'hidden'; ?>">
553
- <?php esc_html_e( 'Remove', 'drkfr' ); ?>
554
- </button>
555
-
556
- <input type="hidden"
557
- <?php $this->class_attr( 'drkfr-file-upload-input' ); ?>
558
- <?php $this->name_attr(); ?>
559
- value="<?php echo esc_attr( $this->value ); ?>"
560
- />
561
-
562
- </div>
563
-
564
- <?php }
565
-
566
- /**
567
- * Parse the size argument to get pixel width, pixel height and crop information.
568
- *
569
- * @param string $size
570
- * @return array width, height, crop
571
- */
572
- private function parse_image_size( $size ) {
573
-
574
- // Handle string for built-in image sizes
575
- if ( is_string( $size ) && in_array( $size, array( 'thumbnail', 'medium', 'large' ) ) ) {
576
- return array(
577
- 'width' => get_option( $size . '_size_w' ),
578
- 'height' => get_option( $size . '_size_h' ),
579
- 'crop' => get_option( $size . '_crop' )
580
- );
581
- }
582
-
583
- // Handle string for additional image sizes
584
- global $_wp_additional_image_sizes;
585
- if ( is_string( $size ) && isset( $_wp_additional_image_sizes[$size] ) ) {
586
- return array(
587
- 'width' => $_wp_additional_image_sizes[$size]['width'],
588
- 'height' => $_wp_additional_image_sizes[$size]['height'],
589
- 'crop' => $_wp_additional_image_sizes[$size]['crop']
590
- );
591
- }
592
-
593
- // Handle default WP size format.
594
- if ( is_array( $size ) && isset( $size[0] ) && isset( $size[1] ) )
595
- $size = array( 'width' => $size[0], 'height' => $size[1] );
596
-
597
- return wp_parse_args( $size, array(
598
- 'width' => get_option( 'thumbnail_size_w' ),
599
- 'height' => get_option( 'thumbnail_size_h' ),
600
- 'crop' => get_option( 'thumbnail_crop' )
601
- ) );
602
-
603
- }
604
-
605
- /**
606
- * Ajax callback for outputing an image src based on post data.
607
- *
608
- * @return null
609
- */
610
- static function request_image_ajax_callback() {
611
-
612
- if ( ! ( isset( $_POST['nonce'] ) && wp_verify_nonce( $_POST['nonce'], 'drkfr-file-upload-nonce' ) ) )
613
- return;
614
-
615
- $id = intval( $_POST['id'] );
616
-
617
- $size = array(
618
- intval( $_POST['width'] ),
619
- intval( $_POST['height'] ),
620
- 'crop' => (bool) $_POST['crop']
621
- );
622
-
623
- $image = wp_get_attachment_image_src( $id, $size );
624
- echo reset( $image );
625
-
626
- die(); // this is required to return a proper result
627
- }
628
-
629
- }
630
- add_action( 'wp_ajax_drkfr_request_image', array( 'drkfr_Image_Field', 'request_image_ajax_callback' ) );
631
-
632
- /**
633
- * Standard text meta box for a URL.
634
- *
635
- */
636
- class drkfr_URL_Field extends drkfr_Field {
637
-
638
- public function html() { ?>
639
-
640
- <input type="text" <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_text_url code' ); ?> <?php $this->name_attr(); ?> value="<?php echo esc_attr( esc_url( $this->value ) ); ?>" />
641
-
642
- <?php }
643
- }
644
-
645
- /**
646
- * Date picker box.
647
- *
648
- */
649
- class drkfr_Date_Field extends drkfr_Field {
650
-
651
- public function enqueue_scripts() {
652
-
653
- parent::enqueue_scripts();
654
-
655
- wp_enqueue_style( 'drkfr-jquery-ui', trailingslashit( drkfr_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );
656
-
657
- wp_enqueue_script( 'drkfr-datetime', trailingslashit( drkfr_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'drkfr-scripts' ) );
658
- }
659
-
660
- public function html() { ?>
661
-
662
- <input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_text_small drkfr_datepicker' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->value ); ?>" />
663
-
664
- <?php }
665
- }
666
-
667
- class drkfr_Time_Field extends drkfr_Field {
668
-
669
- public function enqueue_scripts() {
670
-
671
- parent::enqueue_scripts();
672
-
673
- wp_enqueue_style( 'drkfr-jquery-ui', trailingslashit( drkfr_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );
674
-
675
- wp_enqueue_script( 'drkfr-timepicker', trailingslashit( drkfr_URL ) . 'js/jquery.timePicker.min.js', array( 'jquery', 'drkfr-scripts' ) );
676
- wp_enqueue_script( 'drkfr-datetime', trailingslashit( drkfr_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'drkfr-scripts' ) );
677
- }
678
-
679
- public function html() { ?>
680
-
681
- <input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_text_small drkfr_timepicker' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->value ); ?>"/>
682
-
683
- <?php }
684
-
685
- }
686
-
687
- /**
688
- * Date picker for date only (not time) box.
689
- *
690
- */
691
- class drkfr_Date_Timestamp_Field extends drkfr_Field {
692
-
693
- public function enqueue_scripts() {
694
-
695
- parent::enqueue_scripts();
696
-
697
- wp_enqueue_style( 'drkfr-jquery-ui', trailingslashit( drkfr_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );
698
-
699
- wp_enqueue_script( 'drkfr-timepicker', trailingslashit( drkfr_URL ) . 'js/jquery.timePicker.min.js', array( 'jquery', 'drkfr-scripts' ) );
700
- wp_enqueue_script( 'drkfr-datetime', trailingslashit( drkfr_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'drkfr-scripts' ) );
701
-
702
- }
703
-
704
- public function html() { ?>
705
-
706
- <input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_text_small drkfr_datepicker' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo $this->value ? esc_attr( date( 'm\/d\/Y', $this->value ) ) : '' ?>" />
707
-
708
- <?php }
709
-
710
- public function parse_save_values() {
711
-
712
- foreach( $this->values as &$value )
713
- $value = strtotime( $value );
714
-
715
- sort( $this->values );
716
-
717
- }
718
-
719
- }
720
-
721
- /**
722
- * Date picker for date and time (seperate fields) box.
723
- *
724
- */
725
- class drkfr_Datetime_Timestamp_Field extends drkfr_Field {
726
-
727
- public function enqueue_scripts() {
728
-
729
- parent::enqueue_scripts();
730
-
731
- wp_enqueue_style( 'drkfr-jquery-ui', trailingslashit( drkfr_URL ) . 'css/vendor/jquery-ui/jquery-ui.css', '1.10.3' );
732
-
733
- wp_enqueue_script( 'drkfr-timepicker', trailingslashit( drkfr_URL ) . 'js/jquery.timePicker.min.js', array( 'jquery', 'drkfr-scripts' ) );
734
- wp_enqueue_script( 'drkfr-datetime', trailingslashit( drkfr_URL ) . 'js/field.datetime.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-datepicker', 'drkfr-scripts' ) );
735
- }
736
-
737
- public function html() { ?>
738
-
739
- <input <?php $this->id_attr('date'); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_text_small drkfr_datepicker' ); ?> type="text" <?php $this->name_attr( '[date]' ); ?> value="<?php echo $this->value ? esc_attr( date( 'm\/d\/Y', $this->value ) ) : '' ?>" />
740
- <input <?php $this->id_attr('time'); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_text_small drkfr_timepicker' ); ?> type="text" <?php $this->name_attr( '[time]' ); ?> value="<?php echo $this->value ? esc_attr( date( 'h:i A', $this->value ) ) : '' ?>" />
741
-
742
- <?php }
743
-
744
- public function parse_save_values() {
745
-
746
- // Convert all [date] and [time] values to a unix timestamp.
747
- // If date is empty, assume delete. If time is empty, assume 00:00.
748
- foreach( $this->values as $key => &$value ) {
749
- if ( empty( $value['date'] ) )
750
- unset( $this->values[$key] );
751
- else
752
- $value = strtotime( $value['date'] . ' ' . $value['time'] );
753
- }
754
-
755
- $this->values = array_filter( $this->values );
756
- sort( $this->values );
757
-
758
- parent::parse_save_values();
759
-
760
- }
761
-
762
- }
763
-
764
- /**
765
- * Standard text field.
766
- *
767
- * Args:
768
- * - int "rows" - number of rows in the <textarea>
769
- */
770
- class drkfr_Textarea_Field extends drkfr_Field {
771
-
772
- public function html() { ?>
773
-
774
- <textarea <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> rows="<?php echo ! empty( $this->args['rows'] ) ? esc_attr( $this->args['rows'] ) : 4; ?>" <?php $this->name_attr(); ?>><?php echo esc_html( $this->value ); ?></textarea>
775
-
776
- <?php }
777
-
778
- }
779
-
780
- /**
781
- * Code style text field.
782
- *
783
- * Args:
784
- * - int "rows" - number of rows in the <textarea>
785
- */
786
- class drkfr_Textarea_Field_Code extends drkfr_Textarea_Field {
787
-
788
- public function html() {
789
-
790
- $this->args['class'] .= ' code';
791
-
792
- parent::html();
793
-
794
- }
795
-
796
- }
797
-
798
- /**
799
- * Colour picker
800
- *
801
- */
802
- class drkfr_Color_Picker extends drkfr_Field {
803
-
804
- public function enqueue_scripts() {
805
-
806
- parent::enqueue_scripts();
807
-
808
- wp_enqueue_script( 'drkfr-colorpicker', trailingslashit( drkfr_URL ) . 'js/field.colorpicker.js', array( 'jquery', 'wp-color-picker', 'drkfr-scripts' ) );
809
- wp_enqueue_style( 'wp-color-picker' );
810
- }
811
-
812
- public function html() { ?>
813
-
814
- <input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr( 'drkfr_colorpicker drkfr_text_small' ); ?> type="text" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $this->get_value() ); ?>" />
815
-
816
- <?php }
817
-
818
- }
819
-
820
- /**
821
- * Standard radio field.
822
- *
823
- * Args:
824
- * - bool "inline" - display the radio buttons inline
825
- */
826
- class drkfr_Radio_Field extends drkfr_Field {
827
-
828
- /**
829
- * Return the default args for the Radio input field.
830
- *
831
- * @return array $args
832
- */
833
- public function get_default_args() {
834
- return array_merge(
835
- parent::get_default_args(),
836
- array(
837
- 'options' => array(),
838
- )
839
- );
840
- }
841
-
842
- public function html() {
843
-
844
- if ( $this->has_data_delegate() )
845
- $this->args['options'] = $this->get_delegate_data(); ?>
846
-
847
- <?php foreach ( $this->args['options'] as $key => $value ): ?>
848
-
849
- <input <?php $this->id_attr( 'item-' . $key ); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> type="radio" <?php $this->name_attr(); ?> value="<?php echo esc_attr( $key ); ?>" <?php checked( $key, $this->get_value() ); ?> />
850
- <label <?php $this->for_attr( 'item-' . $key ); ?> style="margin-right: 20px;">
851
- <?php echo esc_html( $value ); ?>
852
- </label>
853
-
854
- <?php endforeach; ?>
855
-
856
- <?php }
857
-
858
- }
859
-
860
- /**
861
- * Standard checkbox field.
862
- *
863
- */
864
- class drkfr_Checkbox extends drkfr_Field {
865
-
866
- public function title() {}
867
-
868
- public function html() { ?>
869
-
870
- <input <?php $this->id_attr(); ?> <?php $this->boolean_attr(); ?> <?php $this->class_attr(); ?> type="checkbox" <?php $this->name_attr(); ?> value="1" <?php checked( $this->get_value() ); ?> />
871
- <label <?php $this->for_attr(); ?>><?php echo esc_html( $this->title ); ?></label>
872
-
873
- <?php }
874
-
875
- }
876
-
877
-
878
- /**
879
- * Standard title used as a splitter.
880
- *
881
- */
882
- class drkfr_Title extends drkfr_Field {
883
-
884
- public function title() {
885
- ?>
886
-
887
- <div class="field-title">
888
- <h2 <?php $this->class_attr(); ?>>
889
- <?php echo esc_html( $this->title ); ?>
890
- </h2>
891
- </div>
892
-
893
- <?php
894
-
895
- }
896
-
897
- public function html() {}
898
-
899
- }
900
-
901
- /**
902
- * wysiwyg field.
903
- *
904
- */
905
- class drkfr_wysiwyg extends drkfr_Field {
906
-
907
- /**
908
- * Return the default args for the WYSIWYG field.
909
- *
910
- * @return array $args
911
- */
912
- public function get_default_args() {
913
- return array_merge(
914
- parent::get_default_args(),
915
- array(
916
- 'options' => array(),
917
- )
918
- );
919
- }
920
-
921
- function enqueue_scripts() {
922
-
923
- parent::enqueue_scripts();
924
-
925
- wp_enqueue_script( 'drkfr-wysiwyg', trailingslashit( drkfr_URL ) . 'js/field-wysiwyg.js', array( 'jquery', 'drkfr-scripts' ) );
926
- }
927
-
928
- public function html() {
929
-
930
- $id = $this->get_the_id_attr();
931
- $name = $this->get_the_name_attr();
932
-
933
- $field_id = $this->get_js_id();
934
-
935
- printf( '<div class="drkfr-wysiwyg" data-id="%s" data-name="%s" data-field-id="%s">', $id, $name, $field_id );
936
-
937
- if ( $this->is_placeholder() ) {
938
-
939
- // For placeholder, output the markup for the editor in a JS var.
940
- ob_start();
941
- $this->args['options']['textarea_name'] = 'drkfr-placeholder-name-' . $field_id;
942
- wp_editor( '', 'drkfr-placeholder-id-' . $field_id, $this->args['options'] );
943
- $editor = ob_get_clean();
944
- $editor = str_replace( array( "\n", "\r" ), "", $editor );
945
- $editor = str_replace( array( "'" ), '"', $editor );
946
-
947
- ?>
948
-
949
- <script>
950
- if ( 'undefined' === typeof( drkfr_wysiwyg_editors ) )
951
- var drkfr_wysiwyg_editors = {};
952
- drkfr_wysiwyg_editors.<?php echo $field_id; ?> = '<?php echo $editor; ?>';
953
- </script>
954
-
955
- <?php
956
-
957
- } else {
958
-
959
- $this->args['options']['textarea_name'] = $name;
960
- echo wp_editor( $this->get_value(), $id, $this->args['options'] );
961
-
962
- }
963
-
964
- echo '</div>';
965
-
966
- }
967
-
968
- /**
969
- * Check if this is a placeholder field.
970
- * Either the field itself, or because it is part of a repeatable group.
971
- *
972
- * @return bool
973
- */
974
- public function is_placeholder() {
975
-
976
- if ( isset( $this->parent ) && ! is_int( $this->parent->field_index ) )
977
- return true;
978
-
979
- else return ! is_int( $this->field_index );
980
-
981
- }
982
-
983
- }
984
-
985
- /**
986
- * Standard select field.
987
- *
988
- * @supports "data_delegate"
989
- * @args
990
- * 'options' => array Array of options to show in the select, optionally use data_delegate instead
991
- * 'allow_none' => bool Allow no option to be selected (will palce a "None" at the top of the select)
992
- * 'multiple' => bool whether multiple can be selected
993
- */
994
- class drkfr_Select extends drkfr_Field {
995
-
996
- public function __construct() {
997
-
998
- $args = func_get_args();
999
-
1000
- call_user_func_array( array( 'parent', '__construct' ), $args );
1001
-
1002
- }
1003
-
1004
- /**
1005
- * Return the default args for the Select field.
1006
- *
1007
- * @return array $args
1008
- */
1009
- public function get_default_args() {
1010
- return array_merge(
1011
- parent::get_default_args(),
1012
- array(
1013
- 'options' => array(),
1014
- 'multiple' => false,
1015
- 'select2_options' => array(),
1016
- )
1017
- );
1018
- }
1019
-
1020
- public function parse_save_values(){
1021
-
1022
- if ( isset( $this->parent ) && isset( $this->args['multiple'] ) && $this->args['multiple'] )
1023
- $this->values = array( $this->values );
1024
-
1025
- }
1026
-
1027
- public function get_options() {
1028
-
1029
- if ( $this->has_data_delegate() )
1030
- $this->args['options'] = $this->get_delegate_data();
1031
-
1032
- return $this->args['options'];
1033
- }
1034
-
1035
- public function enqueue_scripts() {
1036
-
1037
- parent::enqueue_scripts();
1038
-
1039
- wp_enqueue_script( 'select2', trailingslashit( drkfr_URL ) . 'js/vendor/select2/select2.js', array( 'jquery' ) );
1040
- wp_enqueue_script( 'field-select', trailingslashit( drkfr_URL ) . 'js/field.select.js', array( 'jquery', 'select2', 'drkfr-scripts' ) );
1041
- }
1042
-
1043
- public function enqueue_styles() {
1044
-
1045
- parent::enqueue_styles();
1046
-
1047
- wp_enqueue_style( 'select2', trailingslashit( drkfr_URL ) . 'js/vendor/select2/select2.css' );
1048
- }
1049
-
1050
- public function html() {
1051
-
1052
- if ( $this->has_data_delegate() )
1053
- $this->args['options'] = $this->get_delegate_data();
1054
-
1055
- $this->output_field();
1056
-
1057
- $this->output_script();
1058
-
1059
- }
1060
-
1061
- public function output_field() {
1062
-
1063
- $val = (array) $this->get_value();
1064
-
1065
- $name = $this->get_the_name_attr();
1066
- $name .= ! empty( $this->args['multiple'] ) ? '[]' : null;
1067
-
1068
- ?>
1069
-
1070
- <select
1071
- <?php $this->id_attr(); ?>
1072
- <?php $this->boolean_attr(); ?>
1073
- <?php printf( 'name="%s"', esc_attr( $name ) ); ?>
1074
- <?php printf( 'data-field-id="%s" ', esc_attr( $this->get_js_id() ) ); ?>
1075
- <?php echo ! empty( $this->args['multiple'] ) ? 'multiple' : '' ?>
1076
- <?php $this->class_attr( 'drkfr_select' ); ?>
1077
- style="width: 100%"
1078
- >
1079
-
1080
- <?php if ( ! empty( $this->args['allow_none'] ) ) : ?>
1081
- <option value=""></option>
1082
- <?php endif; ?>
1083
-
1084
- <?php foreach ( $this->args['options'] as $value => $name ): ?>
1085
- <option <?php selected( in_array( $value, $val ) ) ?> value="<?php echo esc_attr( $value ); ?>"><?php echo esc_html( $name ); ?></option>
1086
- <?php endforeach; ?>
1087
-
1088
- </select>
1089
-
1090
- <?php
1091
- }
1092
-
1093
- public function output_script() {
1094
-
1095
- $options = wp_parse_args( $this->args['select2_options'], array(
1096
- 'placeholder' => __( 'Type to search', 'drkfr' ),
1097
- 'allowClear' => true,
1098
- ) );
1099
-
1100
- ?>
1101
-
1102
- <script type="text/javascript">
1103
-
1104
- (function($) {
1105
-
1106
- var options = <?php echo json_encode( $options ); ?>
1107
-
1108
- if ( 'undefined' === typeof( window.drkfr_select_fields ) )
1109
- window.drkfr_select_fields = {};
1110
-
1111
- var id = <?php echo json_encode( $this->get_js_id() ); ?>;
1112
- window.drkfr_select_fields[id] = options;
1113
-
1114
- })( jQuery );
1115
-
1116
- </script>
1117
-
1118
- <?php
1119
- }
1120
-
1121
- }
1122
-
1123
- class drkfr_Taxonomy extends drkfr_Select {
1124
-
1125
- /**
1126
- * Return the default args for the Taxonomy select field.
1127
- *
1128
- * @return array $args
1129
- */
1130
- public function get_default_args() {
1131
- return array_merge(
1132
- parent::get_default_args(),
1133
- array(
1134
- 'taxonomy' => '',
1135
- 'hide_empty' => false,
1136
- )
1137
- );
1138
- }
1139
-
1140
-
1141
- public function __construct() {
1142
-
1143
- $args = func_get_args();
1144
-
1145
- call_user_func_array( array( 'parent', '__construct' ), $args );
1146
-
1147
- $this->args['data_delegate'] = array( $this, 'get_delegate_data' );
1148
-
1149
- }
1150
-
1151
- public function get_delegate_data() {
1152
-
1153
- $terms = $this->get_terms();
1154
-
1155
- if ( is_wp_error( $terms ) ) {
1156
- return array();
1157
- }
1158
-
1159
- $term_options = array();
1160
-
1161
- foreach ( $terms as $term )
1162
- $term_options[$term->term_id] = $term->name;
1163
-
1164
- return $term_options;
1165
-
1166
- }
1167
-
1168
- private function get_terms() {
1169
-
1170
- return get_terms( $this->args['taxonomy'], array( 'hide_empty' => $this->args['hide_empty'] ) );
1171
-
1172
- }
1173
-
1174
- }
1175
-
1176
- /**
1177
- * Post Select field.
1178
- *
1179
- * @supports "data_delegate"
1180
- * @args
1181
- * 'options' => array Array of options to show in the select, optionally use data_delegate instead
1182
- * 'allow_none' => bool Allow no option to be selected (will palce a "None" at the top of the select)
1183
- * 'multiple' => bool whether multiple can be selected
1184
- */
1185
- class drkfr_Post_Select extends drkfr_Select {
1186
-
1187
- public function __construct() {
1188
-
1189
- $args = func_get_args();
1190
-
1191
- call_user_func_array( array( 'parent', '__construct' ), $args );
1192
-
1193
- if ( ! $this->args['use_ajax'] ) {
1194
-
1195
- $this->args['data_delegate'] = array( $this, 'get_delegate_data' );
1196
-
1197
- }
1198
-
1199
- }
1200
-
1201
- /**
1202
- * Return the default args for the Post select field.
1203
- *
1204
- * @return array $args
1205
- */
1206
- public function get_default_args() {
1207
- return array_merge(
1208
- parent::get_default_args(),
1209
- array(
1210
- 'query' => array(),
1211
- 'use_ajax' => false,
1212
- 'multiple' => false,
1213
- )
1214
- );
1215
- }
1216
-
1217
- public function get_delegate_data() {
1218
-
1219
- $data = array();
1220
-
1221
- foreach ( $this->get_posts() as $post_id )
1222
- $data[$post_id] = get_the_title( $post_id );
1223
-
1224
- return $data;
1225
-
1226
- }
1227
-
1228
- private function get_posts() {
1229
-
1230
- $this->args['query']['fields'] = 'ids';
1231
- $query = new WP_Query( $this->args['query'] );
1232
-
1233
- return isset( $query->posts ) ? $query->posts : array();
1234
-
1235
- }
1236
-
1237
- public function parse_save_value() {
1238
-
1239
- // AJAX multi select2 data is submitted as a string of comma separated post IDs.
1240
- // If empty, set to false instead of empty array to ensure the meta entry is deleted.
1241
- if ( $this->args['use_ajax'] && $this->args['multiple'] ) {
1242
- $this->value = ( ! empty( $this->value ) ) ? explode( ',', $this->value ) : false;
1243
- }
1244
-
1245
- }
1246
-
1247
- public function output_field() {
1248
-
1249
- // If AJAX, must use input type not standard select.
1250
- if ( $this->args['use_ajax'] ) :
1251
-
1252
- ?>
1253
-
1254
- <input
1255
- <?php $this->id_attr(); ?>
1256
- <?php printf( 'value="%s" ', esc_attr( implode( ',' , (array) $this->value ) ) ); ?>
1257
- <?php printf( 'name="%s"', esc_attr( $this->get_the_name_attr() ) ); ?>
1258
- <?php printf( 'data-field-id="%s" ', esc_attr( $this->get_js_id() ) ); ?>
1259
- <?php $this->boolean_attr(); ?>
1260
- class="drkfr_select"
1261
- style="width: 100%"
1262
- />
1263
-
1264
- <?php
1265
-
1266
- else :
1267
-
1268
- parent::output_field();
1269
-
1270
- endif;
1271
-
1272
- }
1273
-
1274
- public function output_script() {
1275
-
1276
- parent::output_script();
1277
-
1278
- ?>
1279
-
1280
- <script type="text/javascript">
1281
-
1282
- (function($) {
1283
-
1284
- if ( 'undefined' === typeof( window.drkfr_select_fields ) )
1285
- return false;
1286
-
1287
- // Get options for this field so we can modify it.
1288
- var id = <?php echo json_encode( $this->get_js_id() ); ?>;
1289
- var options = window.drkfr_select_fields[id];
1290
-
1291
- <?php if ( $this->args['use_ajax'] && $this->args['multiple'] ) : ?>
1292
- // The multiple setting is required when using ajax (because an input field is used instead of select)
1293
- options.multiple = true;
1294
- <?php endif; ?>
1295
-
1296
- <?php if ( $this->args['use_ajax'] && ! empty( $this->value ) ) : ?>
1297
-
1298
- options.initSelection = function( element, callback ) {
1299
-
1300
- var data = [];
1301
-
1302
- <?php if ( $this->args['multiple'] ) : ?>
1303
-
1304
- <?php foreach ( (array) $this->value as $post_id ) : ?>
1305
- data.push( <?php echo json_encode( array( 'id' => $post_id, 'text' => html_entity_decode( get_the_title( $post_id ) ) ) ); ?> );
1306
- <?php endforeach; ?>
1307
-
1308
- <?php else : ?>
1309
-
1310
- data = <?php echo json_encode( array( 'id' => $this->value, 'text' => html_entity_decode( get_the_title( $this->get_value() ) ) ) ); ?>;
1311
-
1312
- <?php endif; ?>
1313
-
1314
- callback( data );
1315
-
1316
- };
1317
-
1318
- <?php endif; ?>
1319
-
1320
- <?php if ( $this->args['use_ajax'] ) : ?>
1321
-
1322
- var ajaxData = {
1323
- action : 'drkfr_post_select',
1324
- post_id : '<?php echo intval( get_the_id() ); ?>', // Used for user capabilty check.
1325
- nonce : <?php echo json_encode( wp_create_nonce( 'drkfr_select_field' ) ); ?>,
1326
- query : <?php echo json_encode( $this->args['query'] ); ?>
1327
- };
1328
-
1329
- options.ajax = {
1330
- url: <?php echo json_encode( esc_url( admin_url( 'admin-ajax.php' ) ) ); ?>,
1331
- type: 'POST',
1332
- dataType: 'json',
1333
- data: function( term, page ) {
1334
- ajaxData.query.s = term;
1335
- ajaxData.query.paged = page;
1336
- return ajaxData;
1337
- },
1338
- results : function( results, page ) {
1339
- var postsPerPage = ajaxData.query.posts_per_page = ( 'posts_per_page' in ajaxData.query ) ? ajaxData.query.posts_per_page : ( 'showposts' in ajaxData.query ) ? ajaxData.query.showposts : 10;
1340
- var isMore = ( page * postsPerPage ) < results.total;
1341
- return { results: results.posts, more: isMore };
1342
- }
1343
- }
1344
-
1345
- <?php endif; ?>
1346
-
1347
- })( jQuery );
1348
-
1349
- </script>
1350
-
1351
- <?php
1352
- }
1353
-
1354
- }
1355
-
1356
- // TODO this should be in inside the class
1357
- function drkfr_ajax_post_select() {
1358
-
1359
- $post_id = ! empty( $_POST['post_id'] ) ? intval( $_POST['post_id'] ) : false;
1360
- $nonce = ! empty( $_POST['nonce'] ) ? $_POST['nonce'] : false;
1361
- $args = ! empty( $_POST['query'] ) ? $_POST['query'] : array();
1362
-
1363
- if ( ! $nonce || ! wp_verify_nonce( $nonce, 'drkfr_select_field' ) || ! current_user_can( 'edit_post', $post_id ) ) {
1364
- echo json_encode( array( 'total' => 0, 'posts' => array() ) );
1365
- exit;
1366
- }
1367
-
1368
- $args['fields'] = 'ids'; // Only need to retrieve post IDs.
1369
-
1370
- $query = new WP_Query( $args );
1371
-
1372
- $json = array( 'total' => $query->found_posts, 'posts' => array() );
1373
-
1374
- foreach ( $query->posts as $post_id ) {
1375
- array_push( $json['posts'], array( 'id' => $post_id, 'text' => html_entity_decode( get_the_title( $post_id ) ) ) );
1376
- }
1377
-
1378
- echo json_encode( $json );
1379
-
1380
- exit;
1381
-
1382
- }
1383
- add_action( 'wp_ajax_drkfr_post_select', 'drkfr_ajax_post_select' );
1384
-
1385
- /**
1386
- * Field to group child fieids
1387
- * pass $args[fields] array for child fields
1388
- * pass $args['repeatable'] for cloing all child fields (set)
1389
- *
1390
- * @todo remove global $post reference, somehow
1391
- */
1392
- class drkfr_Group_Field extends drkfr_Field {
1393
-
1394
- static $added_js;
1395
- private $fields = array();
1396
-
1397
- function __construct() {
1398
-
1399
- $args = func_get_args(); // you can't just put func_get_args() into a function as a parameter
1400
- call_user_func_array( array( 'parent', '__construct' ), $args );
1401
-
1402
- if ( ! empty( $this->args['fields'] ) ) {
1403
- foreach ( $this->args['fields'] as $f ) {
1404
-
1405
- $class = _drkfr_field_class_for_type( $f['type'] );
1406
- $this->add_field( new $class( $f['id'], $f['name'], array(), $f ) );
1407
-
1408
- }
1409
- }
1410
-
1411
- }
1412
-
1413
- /**
1414
- * Return the default args for the Group field.
1415
- *
1416
- * @return array $args
1417
- */
1418
- public function get_default_args() {
1419
- return array_merge(
1420
- parent::get_default_args(),
1421
- array(
1422
- 'fields' => array(),
1423
- 'string-repeat-field' => __( 'Add Item', 'drkfr' ),
1424
- 'string-delete-field' => __( 'Remove Item', 'drkfr' ),
1425
- )
1426
- );
1427
- }
1428
-
1429
- public function enqueue_scripts() {
1430
-
1431
- parent::enqueue_scripts();
1432
-
1433
- foreach ( $this->args['fields'] as $f ) {
1434
- $class = _drkfr_field_class_for_type( $f['type'] );
1435
- $field = new $class( '', '', array(), $f );
1436
- $field->enqueue_scripts();
1437
- }
1438
-
1439
- }
1440
-
1441
- public function enqueue_styles() {
1442
-
1443
- parent::enqueue_styles();
1444
-
1445
- foreach ( $this->args['fields'] as $f ) {
1446
- $class = _drkfr_field_class_for_type( $f['type'] );
1447
- $field = new $class( '', '', array(), $f );
1448
- $field->enqueue_styles();
1449
- }
1450
-
1451
- }
1452
-
1453
- public function display() {
1454
-
1455
- global $post;
1456
-
1457
- $field = $this->args;
1458
- $values = $this->get_values();
1459
-
1460
- $this->title();
1461
- $this->description();
1462
-
1463
- if ( ! $this->args['repeatable'] && empty( $values ) ) {
1464
- $values = array( null );
1465
- }
1466
-
1467
- if ( $values ) {
1468
-
1469
- $i = 0;
1470
- foreach ( $values as $value ) {
1471
-
1472
- $this->field_index = $i;
1473
- $this->value = $value;
1474
-
1475
- ?>
1476
-
1477
- <div class="field-item" data-class="<?php echo esc_attr( get_class($this) ) ?>" style="<?php echo esc_attr( $this->args['style'] ); ?>">
1478
- <?php $this->html(); ?>
1479
- </div>
1480
-
1481
- <?php
1482
-
1483
- $i++;
1484
-
1485
- }
1486
-
1487
- }
1488
-
1489
- if ( $this->args['repeatable'] ) {
1490
-
1491
- $this->field_index = 'x'; // x used to distinguish hidden fields.
1492
- $this->value = '';
1493
-
1494
- ?>
1495
-
1496
- <div class="field-item hidden" data-class="<?php echo esc_attr( get_class( $this ) ); ?>" style="<?php echo esc_attr( $this->args['style'] ); ?>">
1497
- <?php $this->html(); ?>
1498
- </div>
1499
-
1500
- <button class="button repeat-field">
1501
- <?php echo esc_html( $this->args['string-repeat-field'] ); ?>
1502
- </button>
1503
-
1504
- <?php }
1505
-
1506
- }
1507
-
1508
- public function html() {
1509
-
1510
- $fields = &$this->get_fields();
1511
- $value = $this->get_value();
1512
-
1513
- // Reset all field values.
1514
- foreach ( $fields as $field ) {
1515
- $field->set_values( array() );
1516
- }
1517
-
1518
- // Set values for this field.
1519
- if ( ! empty( $value ) ) {
1520
- foreach ( $value as $field_id => $field_value ) {
1521
- $field_value = ( ! empty( $field_value ) ) ? $field_value : array();
1522
- if ( ! empty( $fields[$field_id] ) ) {
1523
- $fields[$field_id]->set_values( (array) $field_value );
1524
- }
1525
- }
1526
- }
1527
-
1528
- ?>
1529
-
1530
- <?php if ( $this->args['repeatable'] ) : ?>
1531
- <button class="drkfr-delete-field">
1532
- <span class="drkfr-delete-field-icon">&times;</span>
1533
- <?php echo esc_html( $this->args['string-delete-field'] ); ?>
1534
- </button>
1535
- <?php endif; ?>
1536
-
1537
- <?php drkfr_Meta_Box::layout_fields( $fields ); ?>
1538
-
1539
- <?php }
1540
-
1541
- public function parse_save_values() {
1542
-
1543
- $fields = &$this->get_fields();
1544
- $values = &$this->get_values();
1545
-
1546
- foreach ( $values as &$group_value ) {
1547
- foreach ( $group_value as $field_id => &$field_value ) {
1548
-
1549
- if ( ! isset( $fields[$field_id] ) ) {
1550
- $field_value = array();
1551
- continue;
1552
- }
1553
-
1554
- $field = $fields[$field_id];
1555
- $field->set_values( $field_value );
1556
- $field->parse_save_values();
1557
-
1558
- $field_value = $field->get_values();
1559
-
1560
- // if the field is a repeatable field, store the whole array of them, if it's not repeatble,
1561
- // just store the first (and only) one directly
1562
- if ( ! $field->args['repeatable'] )
1563
- $field_value = reset( $field_value );
1564
- }
1565
- }
1566
-
1567
- }
1568
-
1569
- public function add_field( drkfr_Field $field ) {
1570
- $field->parent = $this;
1571
- $this->fields[$field->id] = $field;
1572
- }
1573
-
1574
- public function &get_fields() {
1575
- return $this->fields;
1576
- }
1577
-
1578
- public function set_values( array $values ) {
1579
-
1580
- $fields = &$this->get_fields();
1581
- $this->values = $values;
1582
-
1583
- // Reset all field values.
1584
- foreach ( $fields as $field ) {
1585
- $field->set_values( array() );
1586
- }
1587
-
1588
- foreach ( $values as $value ) {
1589
- foreach ( $value as $field_id => $field_value ) {
1590
- $fields[$field_id]->set_values( (array) $field_value );
1591
- }
1592
- }
1593
-
1594
- }
1595
-
1596
- }
1597
-
1598
-
1599
- /**
1600
- * Google map field class for drkfr
1601
- *
1602
- * It enables the google places API and doesn't store the place
1603
- * name. It only stores latitude and longitude of the selected area.
1604
- *
1605
- * Note
1606
- */
1607
- class drkfr_Gmap_Field extends drkfr_Field {
1608
-
1609
- /**
1610
- * Return the default args for the Map field.
1611
- *
1612
- * @return array $args
1613
- */
1614
- public function get_default_args() {
1615
- return array_merge(
1616
- parent::get_default_args(),
1617
- array(
1618
- 'field_width' => '100%',
1619
- 'field_height' => '250px',
1620
- 'default_lat' => '51.5073509',
1621
- 'default_long' => '-0.12775829999998223',
1622
- 'default_zoom' => '8',
1623
- 'string-marker-title' => __( 'Drag to set the exact location', 'drkfr' ),
1624
- )
1625
- );
1626
- }
1627
-
1628
- public function enqueue_scripts() {
1629
-
1630
- parent::enqueue_scripts();
1631
-
1632
- wp_enqueue_script( 'drkfr-google-maps', '//maps.google.com/maps/api/js?sensor=true&libraries=places' );
1633
- wp_enqueue_script( 'drkfr-google-maps-script', trailingslashit( drkfr_URL ) . 'js/field-gmap.js', array( 'jquery', 'drkfr-google-maps' ) );
1634
-
1635
- wp_localize_script( 'drkfr-google-maps-script', 'drkfrGmaps', array(
1636
- 'defaults' => array(
1637
- 'latitude' => $this->args['default_lat'],
1638
- 'longitude' => $this->args['default_long'],
1639
- 'zoom' => $this->args['default_zoom'],
1640
- ),
1641
- 'strings' => array(
1642
- 'markerTitle' => $this->args['string-marker-title']
1643
- )
1644
- ) );
1645
-
1646
- }
1647
-
1648
- public function html() {
1649
-
1650
- // Ensure all args used are set
1651
- $value = wp_parse_args(
1652
- $this->get_value(),
1653
- array( 'lat' => null, 'long' => null, 'elevation' => null )
1654
- );
1655
-
1656
- $style = array(
1657
- sprintf( 'width: %s;', $this->args['field_width'] ),
1658
- sprintf( 'height: %s;', $this->args['field_height'] ),
1659
- 'border: 1px solid #eee;',
1660
- 'margin-top: 8px;'
1661
- );
1662
-
1663
- ?>
1664
-
1665
- <input type="text" <?php $this->class_attr( 'map-search' ); ?> <?php $this->id_attr(); ?> />
1666
-
1667
- <div class="map" style="<?php echo esc_attr( implode( ' ', $style ) ); ?>"></div>
1668
-
1669
- <input type="hidden" class="latitude" <?php $this->name_attr( '[lat]' ); ?> value="<?php echo esc_attr( $value['lat'] ); ?>" />
1670
- <input type="hidden" class="longitude" <?php $this->name_attr( '[long]' ); ?> value="<?php echo esc_attr( $value['long'] ); ?>" />
1671
- <input type="hidden" class="elevation" <?php $this->name_attr( '[elevation]' ); ?> value="<?php echo esc_attr( $value['elevation'] ); ?>" />
1672
-
1673
- <?php
1674
- }
1675
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/dist/drkfr.css DELETED
@@ -1,63 +0,0 @@
1
-
2
- /**
3
- * drkfr Styles
4
- *
5
- * This file is used for development only and is loaded when drkfr_DEV is defined as true.
6
- * drkfr.min.css is generated by the Grunt build process.
7
- */
8
-
9
- @import '../src/layout.css';
10
- @import '../src/generic.css';
11
-
12
- /** Features **/
13
- @import '../src/repeatable.css';
14
- @import '../src/sortable.css';
15
-
16
- /** Fields **/
17
- @import '../src/group.css';
18
- @import '../src/file.css';
19
- @import '../src/misc-fields.css';
20
-
21
- .drkfr_metabox .field-item {
22
- background:white !important;
23
- border:none !important;
24
- }
25
-
26
- .drkfr_metabox .drkfr-handle {
27
- background:url('../../images/dragndrop.png') no-repeat whitesmoke !important;
28
- border:lightgray 0px solid !important;
29
- }
30
-
31
- .drkfr_metabox .drkfr-delete-field {
32
- font-size:14px !important;
33
- padding-top: 2px !important;
34
- padding-bottom: 4px !important;
35
- padding-left: 28px !important;
36
- padding-right: 12px !important;
37
- height:32px !important;
38
- top:7px !important;
39
- }
40
-
41
- .drkfr_metabox .drkfr-handle {
42
- height:47px !important;
43
- margin-bottom:10px !important;
44
- }
45
-
46
- .drkfr_metabox .field-title{
47
- margin-top:0px;
48
- font-size:18px;
49
- font-weight:400;
50
- }
51
-
52
- .drkfr_Title h2 {
53
- margin: 0px !important;
54
- padding: 0px !important;
55
- text-align: center;
56
- font-size: 22px !important;
57
- color: grey;
58
- font-weight: 400 !important;
59
- border-bottom: 5px solid whitesmoke;
60
- padding-bottom: 9px !important;
61
- }
62
-
63
- .drkfr_metabox .field {border:none;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/dist/drkfr.min.css DELETED
@@ -1,63 +0,0 @@
1
-
2
- /**
3
- * drkfr Styles
4
- *
5
- * This file is used for development only and is loaded when drkfr_DEV is defined as true.
6
- * drkfr.min.css is generated by the Grunt build process.
7
- */
8
-
9
- @import '../src/layout.css';
10
- @import '../src/generic.css';
11
-
12
- /** Features **/
13
- @import '../src/repeatable.css';
14
- @import '../src/sortable.css';
15
-
16
- /** Fields **/
17
- @import '../src/group.css';
18
- @import '../src/file.css';
19
- @import '../src/misc-fields.css';
20
-
21
- .drkfr_metabox .field-item {
22
- background:white !important;
23
- border:none !important;
24
- }
25
-
26
- .drkfr_metabox .drkfr-handle {
27
- background:url('../../images/dragndrop.png') no-repeat whitesmoke !important;
28
- border:lightgray 0px solid !important;
29
- }
30
-
31
- .drkfr_metabox .drkfr-delete-field {
32
- font-size:14px !important;
33
- padding-top: 2px !important;
34
- padding-bottom: 4px !important;
35
- padding-left: 28px !important;
36
- padding-right: 12px !important;
37
- height:32px !important;
38
- top:7px !important;
39
- }
40
-
41
- .drkfr_metabox .drkfr-handle {
42
- height:47px !important;
43
- margin-bottom:10px !important;
44
- }
45
-
46
- .drkfr_metabox .field-title{
47
- margin-top:0px;
48
- font-size:18px;
49
- font-weight:400;
50
- }
51
-
52
- .drkfr_Title h2 {
53
- margin: 0px !important;
54
- padding: 0px !important;
55
- text-align: center;
56
- font-size: 22px !important;
57
- color: grey;
58
- font-weight: 400 !important;
59
- border-bottom: 5px solid whitesmoke;
60
- padding-bottom: 9px !important;
61
- }
62
-
63
- .drkfr_metabox .field {border:none;}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/legacy.css DELETED
@@ -1,319 +0,0 @@
1
- /**
2
- * drkfr Styling
3
- */
4
- .drkfr_metabox tr td, table.drkfr_metabox tr th { vertical-align: top; padding: 5px; }
5
- .drkfr_metabox th { text-align: right; font-weight:bold;}
6
- .drkfr_metabox th label { margin-top:5px; display:block;}
7
- div.drkfr_metabox_description { color: #AAA; font-style: italic; margin: 0 0 8px !important;}
8
- span.drkfr_metabox_description { color: #AAA; font-style: italic;}
9
- .drkfr_metabox input,
10
- .drkfr_metabox textarea { font-size:12px; padding: 5px; margin: 0; }
11
- .drkfr_metabox input[type=text], table.drkfr_metabox textarea, table.drkfr_metabox select { width: 100%; }
12
- .drkfr_metabox textarea.drkfr_textarea_code,
13
- .drkfr_metabox textarea.drkfr_textarea { vertical-align: top; margin: 0; }
14
- .drkfr_metabox textarea.drkfr_textarea_code { font-family: Consolas,Monaco,monospace; line-height: 16px; }
15
- .drkfr_metabox input.drkfr_text_small { width: 100px; }
16
- .drkfr_metabox input.drkfr_timepicker { width: 100px; margin-right: 0;}
17
- .drkfr_metabox input.drkfr_text_money { width: 90px; margin-right: 15px;}
18
- .drkfr_metabox input.drkfr_text_medium { width: 230px; margin-right: 15px;}
19
- .drkfr_metabox input.drkfr_upload_file { width: 65%; }
20
- .drkfr_metabox li { font-size:12px; margin: 1px 0 5px 0; line-height: 16px; }
21
- .drkfr_metabox ul { padding-top:5px; margin: 0; }
22
- .drkfr_metabox select { font-size:12px; margin-top: 3px;}
23
- .drkfr_metabox input:focus, table.drkfr_metabox textarea:focus { background: #fffff8;}
24
- .drkfr_metabox_title { margin: 0 0 5px 0; padding: 5px 0 0 0; font: italic 24px/35px Georgia,"Times New Roman","Bitstream Charter",Times,serif;}
25
- .drkfr_radio_inline { padding: 4px 0 0 0;}
26
- .drkfr_radio_inline_option {display: inline; padding-right: 18px;}
27
- .drkfr_metabox input[type="radio"] { margin: 0 5px 0 0; padding: 0;}
28
- .drkfr_metabox input[type="checkbox"] { margin: 0 5px 0 0; padding: 0;}
29
- .drkfr_metabox .mceIframeContainer {background:#FFF;}
30
- .drkfr_metabox .meta_mce {width:97%;}
31
- .drkfr_metabox .meta_mce textarea {width:100%;}
32
- .drkfr_metabox .drkfr_upload_status { margin: 10px 0 0 0;}
33
- .drkfr_metabox .drkfr_upload_status .img_status { position: relative; }
34
- .drkfr_metabox .drkfr_upload_status .img_status img { border:1px solid #DFDFDF; background: #FAFAFA; max-width:350px; padding: 5px; -moz-border-radius: 2px; border-radius: 2px;}
35
- .drkfr_remove_file_button { text-indent: -9999px; background: url(../images/ico-delete.png); width: 16px; height: 16px; position: absolute; top: -5px; left: -5px;}
36
- /* Sidebar placement adjustments */
37
- .inner-sidebar table.drkfr_metabox input[type=text], table.drkfr_metabox textarea { width: 100%; }
38
- .inner-sidebar table.drkfr_metabox .drkfr_upload_status .img_status img { width: 90%; }
39
-
40
- /**
41
- * Timepicker
42
- */
43
- div.time-picker { position: absolute; height: 191px; width:4em; /* needed for IE */ overflow: auto; background: #fff; border: 1px solid #aaa; z-index: 99; margin: 0; }
44
- div.time-picker-12hours { width:6em; /* needed for IE */ }
45
- div.time-picker ul { list-style-type: none; margin: 0; padding: 0; }
46
- div.time-picker li { cursor: pointer; height: 10px; font: 12px/1 Helvetica, Arial, sans-serif; padding: 4px 3px; }
47
- div.time-picker li.selected { background: #0063CE; color: #fff; }
48
-
49
- .field { margin-bottom: 8px; }
50
- .field-title { margin-bottom: 8px; margin-top: 0; font-weight: bold; }
51
- .field-title label { vertical-align: baseline; }
52
- #poststuff .field-title h2 { margin: 0 !important; }
53
-
54
- .field.repeatable .field-item {
55
- padding-right: 25px;
56
- margin-bottom: 8px;
57
- }
58
-
59
- .drkfr-delete-field {
60
- position: absolute;
61
- top: 6px;
62
- right: 0;
63
- width: 16px;
64
- height: 16px;
65
- padding-left: 0;
66
- padding-right: 0;
67
- text-indent: 26px;
68
- overflow: hidden;
69
- white-space: nowrap;
70
- padding: 0;
71
- font-size: 20px;
72
- line-height: 20px;
73
- text-align: center;
74
- text-decoration: none;
75
- color: #464646;
76
- cursor: pointer;
77
- border-width: 0;
78
- border-radius: 3px;
79
- border: 1px solid #fff;
80
- box-shadow: 0 0 0 1px rgba(0,0,0,0.3);
81
- background: #f3f3f3;
82
- background-image: -webkit-gradient(linear,left top,left bottom,from(#fefefe),to(#f4f4f4));
83
- background-image: -webkit-linear-gradient(top,#fefefe,#f4f4f4);
84
- background-image: -moz-linear-gradient(top,#fefefe,#f4f4f4);
85
- background-image: -o-linear-gradient(top,#fefefe,#f4f4f4);
86
- background-image: linear-gradient(to bottom,#fefefe,#f4f4f4);
87
- }
88
-
89
- .drkfr-delete-field:hover,
90
- .drkfr-delete-field:focus,
91
- .drkfr-delete-field:active {
92
- box-shadow: 0 0 0 1px rgba(0,0,0,0.6);
93
- }
94
-
95
- .drkfr-delete-field .drkfr-delete-field-icon {
96
- content: ' ';
97
- display: block;
98
- position: absolute;
99
- height: 8px;
100
- width: 8px;
101
- top: 50%;
102
- left: 50%;
103
- margin-top: -4px;
104
- margin-left: -4px;
105
- background-image: url( '../images/drkfr-icon-remove.png');
106
- background-repeat: no-repeat;
107
- }
108
-
109
- @media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) {
110
-
111
- .drkfr-delete-field .drkfr-delete-field-icon {
112
- background-image: url( '../images/drkfr-icon-remove@2x.png');
113
- background-size: 8px 8px;
114
- }
115
-
116
- }
117
-
118
- #poststuff .field-title h2 { margin: 0 !important; }
119
-
120
- .field.repeatable .field-item { padding-right: 25px; margin-bottom: 8px; }
121
- .ui-icon.delete-field { position: absolute; top: 6px; right: 0; cursor: pointer; opacity: 0.75; }
122
- .ui-icon.delete-field:hover { opacity: 1; }
123
- button.repeat-field { display: block !important; clear: both; }
124
-
125
- .drkfr_Text_Small_Field.repeatable .field-item,
126
- .drkfr_Date_Field.repeatable .field-item,
127
- .drkfr_Time_Field.repeatable .field-item,
128
- .drkfr_Date_Timestamp_Field.repeatable .field-item,
129
- .drkfr_Date_Timestamp_Field.repeatable .field-item,
130
- .drkfr_Datetime_Timestamp_Field.repeatable .field-item {
131
- float: left; clear: both;
132
- }
133
- .drkfr_Datetime_Timestamp_Field input + input { margin-left: 4px; }
134
-
135
- #poststuff .drkfr_Group_Field h2 { padding: 0; margin: 8px 5px; }
136
- .drkfr_Group_Field.repeatable > .field-item { padding: 0 9px; margin-bottom: 16px ; border: 1px solid #DDD; background: #F9F9F9; border-radius: 3px; }
137
-
138
- .drkfr_Group_Field.repeatable > .field-item.ui-sortable-placeholder { margin-bottom: 16px !important; }
139
-
140
- .drkfr_Group_Field > .field-title {
141
- margin-top: 20px;
142
- font-size: 1.5em;
143
- margin-top: 10px;
144
- margin-bottom: 10px;
145
- padding: 0 0 3px;
146
- clear: left;
147
- color: #464646;
148
- font-family: "HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;
149
- font-weight: lighter;
150
- }
151
-
152
- .drkfr_Group_Field.repeatable > .field-item {
153
- padding: 0 9px;
154
- margin-bottom: 16px;
155
- border: 1px solid #DDD;
156
- border-radius: 3px;
157
- }
158
-
159
- .drkfr_Group_Field .group > .drkfr-delete-field {
160
- top: 0;
161
- right: -3px;
162
- width: auto;
163
- height: auto;
164
- padding: 2px 5px 2px 20px;
165
- text-indent: 0;
166
- font-size: 12px;
167
- line-height: 14px;
168
- }
169
-
170
- .drkfr_Group_Field .group > .drkfr-delete-field .drkfr-delete-field-icon {
171
- left: 10px;
172
- text-indent: 100%;
173
- overflow: hidden;
174
- }
175
-
176
-
177
- .drkfr_File_Field .field-item,
178
- .drkfr_Image_Field .field-item { float: left; margin: 0 8px 8px 0 !important; text-align: center; padding: 0 !important; z-index: 1; }
179
- .drkfr-file-wrap { position: relative; overflow: hidden; width: 150px; height: 150px; line-height: 150px; }
180
- .drkfr-file-wrap-placeholder { content: ' '; position: absolute; top: 0; left: 0; display: block; height: 142px; width: 142px; border: 4px dashed #DDD; z-index: -1; }
181
- .drkfr-file-wrap-placeholder .dimensions { line-height: normal; position: absolute; bottom: 10px; right: 10px; font-size: 18px; font-weight: bold; opacity: 0.2;}
182
- .drkfr-file-holder { position: relative; overflow: hidden; box-shadow: inset 0 0 15px rgba(0,0,0,0.1),inset 0 0 0 1px rgba(0,0,0,0.05); background: #eee; width: 100%; height: 100%; }
183
- .drkfr-file-holder.type-file img { position: absolute; top: 43%; margin-top: -30px; left: 50%; margin-left: -23px; }
184
- .drkfr-file-holder.type-img img { width: 100%; height: auto; margin-top: 0; vertical-align: top; }
185
- .drkfr-file-holder.type-img::after { content: ''; display: block; position: absolute; top: 0; left: 0; right: 0; bottom: 0; box-shadow: inset 0 0 0 1px rgba(0,0,0,0.1); overflow: hidden; z-index: 1; }
186
- .drkfr-file-name { position: absolute; left: 0; right: 0; bottom: 0; line-height: 1.4; overflow: hidden; max-height: 100%; word-wrap: break-word; text-align: center; font-weight: bold; background: rgba(255,255,255,0.8); box-shadow: inset 0 0 0 1px rgba(0,0,0,0.15); }
187
- .drkfr-file-name strong { padding: 5px 10px; display: block;}
188
- .drkfr_File_Field .drkfr-delete-field,
189
- .drkfr_Image_Field .drkfr-delete-field { z-index: 10; top: 10px; right: 10px; }
190
- .drkfr_File_Field .drkfr-remove-file,
191
- .drkfr_Image_Field .drkfr-remove-file { position: absolute; z-index: 1; top: 5px; right: 5px; }
192
- .drkfr_File_Field.repeatable .drkfr-remove-file,
193
- .drkfr_Image_Field.repeatable .drkfr-remove-file { display: none !important; }
194
-
195
-
196
- .drkfr_Color_Picker .field-item { float: left; clear: both; }
197
- .drkfr_Color_Picker .iris-picker .iris-slider-offset { width: auto; height: auto; border: none; background: transparent; margin: 0; /*top: 4px !important; bottom: 5px !important;*/ border-radius: 0; }
198
- .drkfr_Color_Picker .iris-picker .iris-strip .ui-slider-handle { margin-bottom: 0; }
199
- .drkfr_Color_Picker .iris-picker .iris-strip .ui-slider-handle:focus { outline: none; }
200
-
201
- .drkfr-loading:before { content: ' '; display: block; background: url( '../images/wpspin.gif' ) no-repeat; width: 16px; height: 16px; position: absolute; top: 50%; left: 50%; margin-top: -8px; margin-left: -8px; }
202
- @media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) {
203
- .drkfr-loading:before { background-image: url( 'images/wpspin-2x.gif'); background-size: 16px 16px; }
204
- }
205
-
206
- .drkfr-sortable > .field-item {
207
- padding-left: 16px;
208
- }
209
-
210
- .drkfr-sortable .drkfr-handle {
211
- height: 100%;
212
- width: 2px;
213
- position: absolute;
214
- top: 0;
215
- left: 0;
216
- background: transparent;
217
- cursor: move;
218
- border-left: 2px solid #DFDFDF;
219
- border-right: 2px solid #DFDFDF;
220
- }
221
-
222
- .drkfr-sortable .drkfr-handle:after {
223
- position: absolute;
224
- content: ' ';
225
- height: 100%;
226
- width: 0;
227
- position: absolute;
228
- top: 0;
229
- left: 100%;
230
- margin-left: 4px;
231
- background: transparent;
232
- cursor: move;
233
- border-left: 2px solid #DFDFDF;
234
- }
235
-
236
- .drkfr-sortable .ui-sortable-helper {
237
- opacity: 0.75;
238
- }
239
-
240
-
241
- .drkfr-sortable .ui-sortable-helper:before {
242
- content: ' ';
243
- position: absolute;
244
- width: 100%;
245
- height: 100%;
246
- top: -6px;
247
- left: -6px;
248
- background-color: #F8F8F8;
249
- border: 1px solid #DEDEDE;
250
- padding: 5px;
251
- z-index: -1;
252
- }
253
-
254
- .drkfr-sortable .ui-sortable-placeholder {
255
- border: 1px dashed #DDD !important;
256
- background: transparent !important;
257
- visibility: visible !important;
258
- margin-bottom: 6px !important;
259
- margin-right: 6px !important;
260
- }
261
-
262
- .drkfr_File_Field.drkfr-sortable .drkfr-handle,
263
- .drkfr_Image_Field.drkfr-sortable .drkfr-handle {
264
- background: transparent;
265
- width: 100%;
266
- z-index: 1;
267
- }
268
-
269
- .drkfr_File_Field.drkfr-sortable .drkfr-file-upload,
270
- .drkfr_Image_Field.drkfr-sortable .drkfr-file-upload {
271
- position: relative;
272
- z-index: 5;
273
- }
274
-
275
- .drkfr_File_Field.drkfr-sortable .ui-sortable-helper:before,
276
- .drkfr_Image_Field.drkfr-sortable .ui-sortable-helper:before {
277
- top: 0;
278
- left: 0;
279
- padding: 0;
280
- border: none;
281
- background: #F9F9F9;
282
- }
283
-
284
- .drkfr_Group_Field.drkfr-sortable > .field-item {
285
- position: relative;
286
- padding-top: 30px;
287
- }
288
-
289
- .drkfr_Group_Field.drkfr-sortable > .field-item > .drkfr-handle {
290
- top: -1px;
291
- left: -1px;
292
- right: -1px;
293
- height: 30px;
294
- width: auto;
295
- border: 1px solid #dfdfdf;
296
- border-radius: 3px 3px 0 0;
297
- background: #f1f1f1;
298
- background-image: -webkit-gradient(linear,left bottom,left top,from(#ececec),to(#f9f9f9));
299
- background-image: -webkit-linear-gradient(bottom,#ececec,#f9f9f9);
300
- background-image: -moz-linear-gradient(bottom,#ececec,#f9f9f9);
301
- background-image: -o-linear-gradient(bottom,#ececec,#f9f9f9);
302
- background-image: linear-gradient(to top,#ececec,#f9f9f9);
303
- }
304
-
305
- .drkfr_Group_Field.drkfr-sortable .drkfr-handle:after {
306
- display: none;
307
- }
308
-
309
- .drkfr_Group_Field.drkfr-sortable .group > .drkfr-delete-field {
310
- top: -33px;
311
- right: -5px;
312
- width: auto;
313
- height: auto;
314
- padding: 2px 5px 2px 20px;
315
- text-indent: 0;
316
- font-size: 12px;
317
- line-height: 14px;
318
- z-index: 1;
319
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/file.css DELETED
@@ -1,166 +0,0 @@
1
-
2
- .drkfr_File_Field .field-item,
3
- .drkfr_Image_Field .field-item {
4
- float: left;
5
- margin: 0 16px 16px 0 !important;
6
- text-align: center;
7
- padding: 0 !important;
8
- z-index: 1;
9
- }
10
-
11
- .drkfr-file-wrap {
12
- position: relative;
13
- overflow: hidden;
14
- width: 150px;
15
- height: 150px;
16
- line-height: 150px;
17
- }
18
-
19
- .drkfr-file-wrap-placeholder {
20
- content: ' ';
21
- position: absolute;
22
- top: 0;
23
- left: 0;
24
- display: block;
25
- height: 142px;
26
- width: 142px;
27
- border: 4px dashed #DDD;
28
- z-index: -1;
29
- }
30
-
31
- .drkfr-file-wrap-placeholder .dimensions {
32
- line-height: normal;
33
- position: absolute;
34
- bottom: 10px;
35
- right: 10px;
36
- font-size: 18px;
37
- font-weight: bold;
38
- opacity: 0.2;
39
- }
40
-
41
- .drkfr-file-holder {
42
- position: relative;
43
- overflow: hidden;
44
- box-shadow: inset 0 0 15px rgba(0,0,0,0.1), inset 0 0 0 1px rgba(0,0,0,0.05);
45
- background: #eee;
46
- width: 100%;
47
- height: 100%;
48
- }
49
-
50
- .drkfr-file-holder.type-file img {
51
- position: absolute;
52
- top: 43%;
53
- margin-top: -30px;
54
- left: 50%;
55
- margin-left: -23px;
56
- }
57
-
58
- .drkfr-file-holder.type-img img {
59
- width: 100%;
60
- height: auto;
61
- margin-top: 0;
62
- vertical-align: top;
63
- }
64
-
65
- .drkfr-file-holder.type-img::after {
66
- content: '';
67
- display: block;
68
- position: absolute;
69
- top: 0;
70
- left: 0;
71
- right: 0;
72
- bottom: 0;
73
- box-shadow: inset 0 0 0 1px rgba(0,0,0,0.1);
74
- overflow: hidden;
75
- z-index: 1;
76
- }
77
-
78
- .drkfr-file-name {
79
- position: absolute;
80
- left: 0;
81
- right: 0;
82
- bottom: 0;
83
- line-height: 1.4;
84
- overflow: hidden;
85
- max-height: 100%;
86
- word-wrap: break-word;
87
- text-align: center;
88
- font-weight: bold;
89
- background: rgba(255,255,255,0.8);
90
- box-shadow: inset 0 0 0 1px rgba(0,0,0,0.15);
91
- }
92
-
93
- .drkfr-file-name strong {
94
- padding: 5px 10px;
95
- display: block;
96
- }
97
-
98
- .drkfr_File_Field .drkfr-delete-field,
99
- .drkfr_Image_Field .drkfr-delete-field {
100
- z-index: 10;
101
- top: 10px;
102
- right: 10px;
103
- }
104
-
105
- .drkfr_File_Field .drkfr-remove-file,
106
- .drkfr_Image_Field .drkfr-remove-file {
107
- position: absolute;
108
- z-index: 1;
109
- top: 5px;
110
- right: 5px;
111
- }
112
-
113
- .drkfr_File_Field.repeatable .drkfr-remove-file,
114
- .drkfr_Image_Field.repeatable .drkfr-remove-file {
115
- display: none !important;
116
- }
117
-
118
- .drkfr-file-wrap .drkfr-file-upload {
119
- vertical-align: middle;
120
- }
121
-
122
- .drkfr-loading::before {
123
- content: ' ';
124
- display: block;
125
- background: url( '../../images/wpspin.gif' ) no-repeat;
126
- width: 16px;
127
- height: 16px;
128
- position: absolute;
129
- top: 50%;
130
- left: 50%;
131
- margin-top: -8px;
132
- margin-left: -8px;
133
- }
134
-
135
- @media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) {
136
-
137
- .drkfr-loading::before {
138
- background-image: url( '../../images/wpspin-2x.gif');
139
- background-size: 16px 16px;
140
- }
141
-
142
- }
143
-
144
- .drkfr_File_Field.drkfr-sortable .drkfr-handle,
145
- .drkfr_Image_Field.drkfr-sortable .drkfr-handle {
146
- border: none;
147
- background: transparent;
148
- height: 100%;
149
- width: 100%;
150
- z-index: 1;
151
- }
152
-
153
- .drkfr_File_Field.drkfr-sortable .drkfr-file-upload,
154
- .drkfr_Image_Field.drkfr-sortable .drkfr-file-upload {
155
- position: relative;
156
- z-index: 5;
157
- }
158
-
159
- .drkfr_File_Field.drkfr-sortable .ui-sortable-helper:before,
160
- .drkfr_Image_Field.drkfr-sortable .ui-sortable-helper:before {
161
- top: 0;
162
- left: 0;
163
- padding: 0;
164
- border: none;
165
- background: #F9F9F9;
166
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/generic.css DELETED
@@ -1,55 +0,0 @@
1
- .drkfr_metabox .field-item {
2
- position: relative;
3
- }
4
-
5
- .drkfr_metabox_description {
6
- color: #AAA;
7
- font-style: italic;
8
- margin: 0 0 16px !important;
9
- }
10
-
11
- .drkfr_metabox input[type=text],
12
- .drkfr_metabox textarea,
13
- .drkfr_metabox select {
14
- width: 100%;
15
- margin: 0;
16
- }
17
-
18
- .drkfr_metabox input.drkfr_text_small {
19
- width: 100px;
20
- }
21
-
22
- .drkfr_metabox input.drkfr_text_medium {
23
- width: 230px;
24
- margin-right: 15px;
25
- }
26
-
27
- .drkfr_metabox input[type="radio"] {
28
- margin: 0 5px 0 0;
29
- padding: 0;
30
- }
31
-
32
- .drkfr_metabox input[type="checkbox"] {
33
- margin: 0 5px 0 0;
34
- padding: 0;
35
- }
36
-
37
- .drkfr_metabox .field-title {
38
- margin-top: -4px;
39
- margin-bottom: 16px;
40
- margin-top: 0;
41
- font-weight: bold;
42
- }
43
-
44
- .drkfr_metabox .field-title label {
45
- vertical-align: baseline;
46
- }
47
- .drkfr_metabox .select2-search-choice-close {
48
- -webkit-transition: none;
49
- transition: none;
50
- top: 3px;
51
- }
52
-
53
- .drkfr_metabox [disabled] {
54
- background: #F7F7F7;
55
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/group.css DELETED
@@ -1,82 +0,0 @@
1
- /** Group **/
2
-
3
- .drkfr_metabox .drkfr_Group_Field > .field-title {
4
- font-size: 20px;
5
- clear: left;
6
- color: #222;
7
- font-family: 'Open Sans', sans-serif;
8
- font-weight: normal;
9
- margin: 8px 0;
10
- }
11
-
12
- .drkfr_metabox .drkfr_Group_Field.repeatable > .field-title {
13
- margin-bottom: 16px;
14
- }
15
-
16
- .drkfr_metabox .drkfr_Group_Field.repeatable > .field-item {
17
- padding: 30px 10px 0;
18
- margin-bottom: 16px;
19
- border: 1px solid #DDD;
20
- background: #FAFAFA;
21
- position: relative;
22
- }
23
-
24
- .drkfr_metabox .drkfr_Group_Field.repeatable > .field-item:before {
25
- content: ' ';
26
- display: block;
27
- position: absolute;
28
- top: 0;
29
- left: 0;
30
- right: 0;
31
- height: 33px;
32
- border-bottom: 1px solid #DDDDDD;
33
- }
34
-
35
- .drkfr_metabox .drkfr_Group_Field.repeatable > .field-item > .drkfr-delete-field {
36
- top: 5px;
37
- right: 5px;
38
- width: auto;
39
- text-indent: 0;
40
- padding-left: 24px;
41
- padding-right: 8px;
42
- height: 22px;
43
- line-height: 20px;
44
- font-size: 11px;
45
- z-index: 1;
46
- }
47
-
48
- .drkfr_metabox .drkfr_Group_Field.repeatable > .field-item > .drkfr-delete-field .drkfr-delete-field-icon {
49
- left: 12px;
50
- }
51
-
52
-
53
- .drkfr_Group_Field.drkfr-sortable > .field-item {
54
- position: relative;
55
- padding-top: 30px;
56
- }
57
-
58
- .drkfr_Group_Field.drkfr-sortable > .field-item > .drkfr-handle {
59
- top: -1px;
60
- left: -1px;
61
- right: -1px;
62
- height: 34px;
63
- width: auto;
64
- border: none;
65
- border-bottom: 1px solid #DDDDDD;
66
- }
67
-
68
- .drkfr_Group_Field.drkfr-sortable > .field-item.ui-sortable-helper > .drkfr-handle {
69
- padding: 0 5px;
70
- }
71
-
72
- .drkfr_metabox .drkfr_Group_Field.repeatable.drkfr-sortable > .field-item:before {
73
- display: none !important;
74
- }
75
-
76
- .drkfr_Group_Field.drkfr-sortable > .ui-sortable-placeholder {
77
- margin-bottom: 16px !important;
78
- }
79
-
80
- .drkfr_Group_Field .drkfr_metabox > .drkfr-row:last-child {
81
- margin-bottom: 0;
82
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/layout.css DELETED
@@ -1,57 +0,0 @@
1
- /** drkfr Layout **/
2
-
3
- .drkfr_metabox .field {
4
- overflow: hidden;
5
- padding: 16px 0;
6
- border-bottom: 1px solid #DFDFDF;
7
- }
8
-
9
- .drkfr-row:last-child > [class*="drkfr-cell-"] > .field {
10
- border-bottom: 0;
11
- }
12
-
13
- /* Neaten up the margins when metaboxes are within the standard postbox. */
14
- .postbox > .inside > .drkfr_metabox {
15
- margin: -10px 0;
16
- }
17
-
18
- .drkfr_metabox .drkfr-row {
19
- overflow: hidden;
20
- margin: 0 -5px;
21
- zoom: 1;
22
- }
23
-
24
- .drkfr_metabox .drkfr-row:before,
25
- .drkfr_metabox .drkfr-row:after {
26
- content: "";
27
- display: table;
28
- }
29
- .drkfr_metabox .drkfr-row:after {
30
- clear: both;
31
- }
32
-
33
- .drkfr_metabox [class*="drkfr-cell-"] {
34
- float: left;
35
- padding: 0 5px;
36
- -moz-box-sizing: border-box;
37
- box-sizing: border-box;
38
- }
39
-
40
- .drkfr_metabox .drkfr-cell-1 { width: 8.333333333%; }
41
- .drkfr_metabox .drkfr-cell-2 { width: 16.666666667%; }
42
- .drkfr_metabox .drkfr-cell-3 { width: 25%; }
43
- .drkfr_metabox .drkfr-cell-4 { width: 33.333333333%; }
44
- .drkfr_metabox .drkfr-cell-5 { width: 41.666666667%; }
45
- .drkfr_metabox .drkfr-cell-6 { width: 50%; }
46
- .drkfr_metabox .drkfr-cell-7 { width: 58.333333333%; }
47
- .drkfr_metabox .drkfr-cell-8 { width: 66.666666667%; }
48
- .drkfr_metabox .drkfr-cell-9 { width: 75%; }
49
- .drkfr_metabox .drkfr-cell-10 { width: 83.333333333%; }
50
- .drkfr_metabox .drkfr-cell-11 { width: 91.666666667%; }
51
- .drkfr_metabox .drkfr-cell-12 { width: 100%; }
52
-
53
- @media all and ( max-width: 850px ) {
54
-
55
- .drkfr_metabox [class*="drkfr-cell-"] { width: 100%; }
56
-
57
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/misc-fields.css DELETED
@@ -1,71 +0,0 @@
1
- /**
2
- * Title Field
3
- */
4
- .drkfr_Title .field-title {
5
- margin: 8px 0 !important;
6
- }
7
-
8
- .drkfr_Title {
9
- border-bottom: 0;
10
- padding-bottom: 0;
11
- margin-top: 16px;
12
- }
13
-
14
- .drkfr_Title h2 {
15
- margin: 0 !important;
16
- padding: 0 !important;
17
- }
18
-
19
-
20
- /**
21
- * Color Picker
22
- */
23
- .drkfr_Color_Picker .field-item {
24
- float: left;
25
- clear: both;
26
- }
27
-
28
- .drkfr_Color_Picker:before,
29
- .drkfr_Color_Picker:after {
30
- content: "";
31
- display: table;
32
- }
33
-
34
- .drkfr_Color_Picker:after {
35
- clear: both;
36
- }
37
-
38
- .drkfr_Color_Picker {
39
- zoom: 1;
40
- }
41
-
42
-
43
- /**
44
- * Timepicker
45
- */
46
- div.time-picker { position: absolute; height: 191px; width:4em; /* needed for IE */ overflow: auto; background: #fff; border: 1px solid #aaa; z-index: 99; margin: 0; }
47
- div.time-picker-12hours { width:6em; /* needed for IE */ }
48
- div.time-picker ul { list-style-type: none; margin: 0; padding: 0; }
49
- div.time-picker li { cursor: pointer; height: 10px; font: 12px/1 Helvetica, Arial, sans-serif; padding: 4px 3px; }
50
- div.time-picker li.selected { background: #0063CE; color: #fff; }
51
-
52
- .drkfr_metabox input.drkfr_timepicker {
53
- width: 100px;
54
- margin-right: 0;
55
- }
56
-
57
- .drkfr_Datetime_Timestamp_Field input + input {
58
- margin-left: 4px;
59
- }
60
-
61
- /**
62
- * Select Fields
63
- */
64
-
65
- .drkfr_select {
66
- width: 100%;
67
- }
68
-
69
- .select2-offscreen {
70
- display: none;
71
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/repeatable.css DELETED
@@ -1,88 +0,0 @@
1
- /**
2
- * Repeatable
3
- */
4
-
5
- .drkfr_metabox .field.repeatable > .field-item {
6
- padding-right: 30px;
7
- margin-bottom: 10px;
8
- }
9
-
10
- .drkfr_metabox .repeat-field {
11
- display: block !important;
12
- clear: both;
13
- }
14
-
15
- .drkfr_Text_Small_Field.repeatable .field-item,
16
- .drkfr_Date_Field.repeatable .field-item,
17
- .drkfr_Time_Field.repeatable .field-item,
18
- .drkfr_Date_Timestamp_Field.repeatable .field-item,
19
- .drkfr_Date_Timestamp_Field.repeatable .field-item,
20
- .drkfr_Datetime_Timestamp_Field.repeatable .field-item {
21
- float: left; clear: both;
22
- }
23
-
24
- .drkfr-delete-field {
25
- display: inline-block;
26
- text-decoration: none;
27
- font-size: 11px;
28
- line-height: 20px;
29
- height: 22px;
30
- width: 22px;
31
- margin: 0;
32
- padding: 0;
33
- cursor: pointer;
34
- border-width: 1px;
35
- border-style: solid;
36
- -webkit-border-radius: 3px;
37
- -webkit-appearance: none;
38
- border-radius: 3px;
39
- white-space: nowrap;
40
- -webkit-box-sizing: border-box;
41
- -moz-box-sizing: border-box;
42
- box-sizing: border-box;
43
- color: #555;
44
- border-color: #ccc;
45
- background: #f7f7f7;
46
- -webkit-box-shadow: inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);
47
- box-shadow: inset 0 1px 0 #fff,0 1px 0 rgba(0,0,0,.08);
48
- vertical-align: top;
49
- position: absolute;
50
- top: 3px;
51
- right: 0;
52
- text-indent: 100%;
53
- overflow: hidden;
54
- white-space: nowrap;
55
- }
56
-
57
- .drkfr-delete-field:hover,
58
- .drkfr-delete-field:focus,
59
- .drkfr-delete-field:active {
60
- background: #fafafa;
61
- border-color: #999;
62
- color: #222;
63
- }
64
-
65
- .drkfr-delete-field .drkfr-delete-field-icon {
66
- content: ' ';
67
- display: block;
68
- position: absolute;
69
- height: 8px;
70
- width: 8px;
71
- top: 50%;
72
- left: 50%;
73
- margin-top: -4px;
74
- margin-left: -4px;
75
- background-image: url( '../../images/drkfr-icon-remove.png');
76
- background-repeat: no-repeat;
77
- text-indent: 8px;
78
- overflow: hidden;
79
- }
80
-
81
- @media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) {
82
-
83
- .drkfr-delete-field .drkfr-delete-field-icon {
84
- background-image: url( '../../images/drkfr-icon-remove@2x.png');
85
- background-size: 8px 8px;
86
- }
87
-
88
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/src/sortable.css DELETED
@@ -1,40 +0,0 @@
1
-
2
- .drkfr-sortable > .field-item {
3
- padding-left: 15px;
4
- }
5
-
6
- .drkfr-sortable .drkfr-handle {
7
- height: 100%;
8
- width: 3px;
9
- position: absolute;
10
- top: 0;
11
- left: 0;
12
- background: transparent;
13
- cursor: move;
14
- border-left: 3px solid #DFDFDF;
15
- border-right: 3px solid #DFDFDF;
16
- }
17
-
18
- .drkfr-sortable .ui-sortable-helper {
19
- opacity: 0.75;
20
- }
21
-
22
- .drkfr-sortable .ui-sortable-helper:before {
23
- content: ' ';
24
- position: absolute;
25
- width: 100%;
26
- height: 100%;
27
- top: -6px;
28
- left: -6px;
29
- background-color: #F8F8F8;
30
- border: 1px solid #DEDEDE;
31
- padding: 5px;
32
- z-index: -1;
33
- }
34
-
35
- .drkfr-sortable > .ui-sortable-placeholder {
36
- border: 1px dashed #DDD !important;
37
- background: transparent !important;
38
- visibility: visible !important;
39
- margin-bottom: 8px !important;
40
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/vendor/jquery-ui/images/animated-overlay.gif DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-icons_222222_256x240.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-icons_2e83ff_256x240.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-icons_454545_256x240.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-icons_888888_256x240.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/images/ui-icons_cd0a0a_256x240.png DELETED
Binary file
drkfr/css/vendor/jquery-ui/jquery-ui.css DELETED
@@ -1,1175 +0,0 @@
1
- /*! jQuery UI - v1.10.2 - 2013-03-14
2
- * http://jqueryui.com
3
- * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
4
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
- * Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
6
-
7
- /* Layout helpers
8
- ----------------------------------*/
9
- .ui-helper-hidden {
10
- display: none;
11
- }
12
- .ui-helper-hidden-accessible {
13
- border: 0;
14
- clip: rect(0 0 0 0);
15
- height: 1px;
16
- margin: -1px;
17
- overflow: hidden;
18
- padding: 0;
19
- position: absolute;
20
- width: 1px;
21
- }
22
- .ui-helper-reset {
23
- margin: 0;
24
- padding: 0;
25
- border: 0;
26
- outline: 0;
27
- line-height: 1.3;
28
- text-decoration: none;
29
- font-size: 100%;
30
- list-style: none;
31
- }
32
- .ui-helper-clearfix:before,
33
- .ui-helper-clearfix:after {
34
- content: "";
35
- display: table;
36
- border-collapse: collapse;
37
- }
38
- .ui-helper-clearfix:after {
39
- clear: both;
40
- }
41
- .ui-helper-clearfix {
42
- min-height: 0; /* support: IE7 */
43
- }
44
- .ui-helper-zfix {
45
- width: 100%;
46
- height: 100%;
47
- top: 0;
48
- left: 0;
49
- position: absolute;
50
- opacity: 0;
51
- filter:Alpha(Opacity=0);
52
- }
53
-
54
- .ui-front {
55
- z-index: 100;
56
- }
57
-
58
-
59
- /* Interaction Cues
60
- ----------------------------------*/
61
- .ui-state-disabled {
62
- cursor: default !important;
63
- }
64
-
65
-
66
- /* Icons
67
- ----------------------------------*/
68
-
69
- /* states and images */
70
- .ui-icon {
71
- display: block;
72
- text-indent: -99999px;
73
- overflow: hidden;
74
- background-repeat: no-repeat;
75
- }
76
-
77
-
78
- /* Misc visuals
79
- ----------------------------------*/
80
-
81
- /* Overlays */
82
- .ui-widget-overlay {
83
- position: fixed;
84
- top: 0;
85
- left: 0;
86
- width: 100%;
87
- height: 100%;
88
- }
89
- .ui-accordion .ui-accordion-header {
90
- display: block;
91
- cursor: pointer;
92
- position: relative;
93
- margin-top: 2px;
94
- padding: .5em .5em .5em .7em;
95
- min-height: 0; /* support: IE7 */
96
- }
97
- .ui-accordion .ui-accordion-icons {
98
- padding-left: 2.2em;
99
- }
100
- .ui-accordion .ui-accordion-noicons {
101
- padding-left: .7em;
102
- }
103
- .ui-accordion .ui-accordion-icons .ui-accordion-icons {
104
- padding-left: 2.2em;
105
- }
106
- .ui-accordion .ui-accordion-header .ui-accordion-header-icon {
107
- position: absolute;
108
- left: .5em;
109
- top: 50%;
110
- margin-top: -8px;
111
- }
112
- .ui-accordion .ui-accordion-content {
113
- padding: 1em 2.2em;
114
- border-top: 0;
115
- overflow: auto;
116
- }
117
- .ui-autocomplete {
118
- position: absolute;
119
- top: 0;
120
- left: 0;
121
- cursor: default;
122
- }
123
- .ui-button {
124
- display: inline-block;
125
- position: relative;
126
- padding: 0;
127
- line-height: normal;
128
- margin-right: .1em;
129
- cursor: pointer;
130
- vertical-align: middle;
131
- text-align: center;
132
- overflow: visible; /* removes extra width in IE */
133
- }
134
- .ui-button,
135
- .ui-button:link,
136
- .ui-button:visited,
137
- .ui-button:hover,
138
- .ui-button:active {
139
- text-decoration: none;
140
- }
141
- /* to make room for the icon, a width needs to be set here */
142
- .ui-button-icon-only {
143
- width: 2.2em;
144
- }
145
- /* button elements seem to need a little more width */
146
- button.ui-button-icon-only {
147
- width: 2.4em;
148
- }
149
- .ui-button-icons-only {
150
- width: 3.4em;
151
- }
152
- button.ui-button-icons-only {
153
- width: 3.7em;
154
- }
155
-
156
- /* button text element */
157
- .ui-button .ui-button-text {
158
- display: block;
159
- line-height: normal;
160
- }
161
- .ui-button-text-only .ui-button-text {
162
- padding: .4em 1em;
163
- }
164
- .ui-button-icon-only .ui-button-text,
165
- .ui-button-icons-only .ui-button-text {
166
- padding: .4em;
167
- text-indent: -9999999px;
168
- }
169
- .ui-button-text-icon-primary .ui-button-text,
170
- .ui-button-text-icons .ui-button-text {
171
- padding: .4em 1em .4em 2.1em;
172
- }
173
- .ui-button-text-icon-secondary .ui-button-text,
174
- .ui-button-text-icons .ui-button-text {
175
- padding: .4em 2.1em .4em 1em;
176
- }
177
- .ui-button-text-icons .ui-button-text {
178
- padding-left: 2.1em;
179
- padding-right: 2.1em;
180
- }
181
- /* no icon support for input elements, provide padding by default */
182
- input.ui-button {
183
- padding: .4em 1em;
184
- }
185
-
186
- /* button icon element(s) */
187
- .ui-button-icon-only .ui-icon,
188
- .ui-button-text-icon-primary .ui-icon,
189
- .ui-button-text-icon-secondary .ui-icon,
190
- .ui-button-text-icons .ui-icon,
191
- .ui-button-icons-only .ui-icon {
192
- position: absolute;
193
- top: 50%;
194
- margin-top: -8px;
195
- }
196
- .ui-button-icon-only .ui-icon {
197
- left: 50%;
198
- margin-left: -8px;
199
- }
200
- .ui-button-text-icon-primary .ui-button-icon-primary,
201
- .ui-button-text-icons .ui-button-icon-primary,
202
- .ui-button-icons-only .ui-button-icon-primary {
203
- left: .5em;
204
- }
205
- .ui-button-text-icon-secondary .ui-button-icon-secondary,
206
- .ui-button-text-icons .ui-button-icon-secondary,
207
- .ui-button-icons-only .ui-button-icon-secondary {
208
- right: .5em;
209
- }
210
-
211
- /* button sets */
212
- .ui-buttonset {
213
- margin-right: 7px;
214
- }
215
- .ui-buttonset .ui-button {
216
- margin-left: 0;
217
- margin-right: -.3em;
218
- }
219
-
220
- /* workarounds */
221
- /* reset extra padding in Firefox, see h5bp.com/l */
222
- input.ui-button::-moz-focus-inner,
223
- button.ui-button::-moz-focus-inner {
224
- border: 0;
225
- padding: 0;
226
- }
227
- .ui-datepicker {
228
- width: 17em;
229
- padding: .2em .2em 0;
230
- display: none;
231
- }
232
- .ui-datepicker .ui-datepicker-header {
233
- position: relative;
234
- padding: .2em 0;
235
- }
236
- .ui-datepicker .ui-datepicker-prev,
237
- .ui-datepicker .ui-datepicker-next {
238
- position: absolute;
239
- top: 2px;
240
- width: 1.8em;
241
- height: 1.8em;
242
- }
243
- .ui-datepicker .ui-datepicker-prev-hover,
244
- .ui-datepicker .ui-datepicker-next-hover {
245
- top: 1px;
246
- }
247
- .ui-datepicker .ui-datepicker-prev {
248
- left: 2px;
249
- }
250
- .ui-datepicker .ui-datepicker-next {
251
- right: 2px;
252
- }
253
- .ui-datepicker .ui-datepicker-prev-hover {
254
- left: 1px;
255
- }
256
- .ui-datepicker .ui-datepicker-next-hover {
257
- right: 1px;
258
- }
259
- .ui-datepicker .ui-datepicker-prev span,
260
- .ui-datepicker .ui-datepicker-next span {
261
- display: block;
262
- position: absolute;
263
- left: 50%;
264
- margin-left: -8px;
265
- top: 50%;
266
- margin-top: -8px;
267
- }
268
- .ui-datepicker .ui-datepicker-title {
269
- margin: 0 2.3em;
270
- line-height: 1.8em;
271
- text-align: center;
272
- }
273
- .ui-datepicker .ui-datepicker-title select {
274
- font-size: 1em;
275
- margin: 1px 0;
276
- }
277
- .ui-datepicker select.ui-datepicker-month-year {
278
- width: 100%;
279
- }
280
- .ui-datepicker select.ui-datepicker-month,
281
- .ui-datepicker select.ui-datepicker-year {
282
- width: 49%;
283
- }
284
- .ui-datepicker table {
285
- width: 100%;
286
- font-size: .9em;
287
- border-collapse: collapse;
288
- margin: 0 0 .4em;
289
- }
290
- .ui-datepicker th {
291
- padding: .7em .3em;
292
- text-align: center;
293
- font-weight: bold;
294
- border: 0;
295
- }
296
- .ui-datepicker td {
297
- border: 0;
298
- padding: 1px;
299
- }
300
- .ui-datepicker td span,
301
- .ui-datepicker td a {
302
- display: block;
303
- padding: .2em;
304
- text-align: right;
305
- text-decoration: none;
306
- }
307
- .ui-datepicker .ui-datepicker-buttonpane {
308
- background-image: none;
309
- margin: .7em 0 0 0;
310
- padding: 0 .2em;
311
- border-left: 0;
312
- border-right: 0;
313
- border-bottom: 0;
314
- }
315
- .ui-datepicker .ui-datepicker-buttonpane button {
316
- float: right;
317
- margin: .5em .2em .4em;
318
- cursor: pointer;
319
- padding: .2em .6em .3em .6em;
320
- width: auto;
321
- overflow: visible;
322
- }
323
- .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
324
- float: left;
325
- }
326
-
327
- /* with multiple calendars */
328
- .ui-datepicker.ui-datepicker-multi {
329
- width: auto;
330
- }
331
- .ui-datepicker-multi .ui-datepicker-group {
332
- float: left;
333
- }
334
- .ui-datepicker-multi .ui-datepicker-group table {
335
- width: 95%;
336
- margin: 0 auto .4em;
337
- }
338
- .ui-datepicker-multi-2 .ui-datepicker-group {
339
- width: 50%;
340
- }
341
- .ui-datepicker-multi-3 .ui-datepicker-group {
342
- width: 33.3%;
343
- }
344
- .ui-datepicker-multi-4 .ui-datepicker-group {
345
- width: 25%;
346
- }
347
- .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
348
- .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
349
- border-left-width: 0;
350
- }
351
- .ui-datepicker-multi .ui-datepicker-buttonpane {
352
- clear: left;
353
- }
354
- .ui-datepicker-row-break {
355
- clear: both;
356
- width: 100%;
357
- font-size: 0;
358
- }
359
-
360
- /* RTL support */
361
- .ui-datepicker-rtl {
362
- direction: rtl;
363
- }
364
- .ui-datepicker-rtl .ui-datepicker-prev {
365
- right: 2px;
366
- left: auto;
367
- }
368
- .ui-datepicker-rtl .ui-datepicker-next {
369
- left: 2px;
370
- right: auto;
371
- }
372
- .ui-datepicker-rtl .ui-datepicker-prev:hover {
373
- right: 1px;
374
- left: auto;
375
- }
376
- .ui-datepicker-rtl .ui-datepicker-next:hover {
377
- left: 1px;
378
- right: auto;
379
- }
380
- .ui-datepicker-rtl .ui-datepicker-buttonpane {
381
- clear: right;
382
- }
383
- .ui-datepicker-rtl .ui-datepicker-buttonpane button {
384
- float: left;
385
- }
386
- .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
387
- .ui-datepicker-rtl .ui-datepicker-group {
388
- float: right;
389
- }
390
- .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
391
- .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
392
- border-right-width: 0;
393
- border-left-width: 1px;
394
- }
395
- .ui-dialog {
396
- position: absolute;
397
- top: 0;
398
- left: 0;
399
- padding: .2em;
400
- outline: 0;
401
- }
402
- .ui-dialog .ui-dialog-titlebar {
403
- padding: .4em 1em;
404
- position: relative;
405
- }
406
- .ui-dialog .ui-dialog-title {
407
- float: left;
408
- margin: .1em 0;
409
- white-space: nowrap;
410
- width: 90%;
411
- overflow: hidden;
412
- text-overflow: ellipsis;
413
- }
414
- .ui-dialog .ui-dialog-titlebar-close {
415
- position: absolute;
416
- right: .3em;
417
- top: 50%;
418
- width: 21px;
419
- margin: -10px 0 0 0;
420
- padding: 1px;
421
- height: 20px;
422
- }
423
- .ui-dialog .ui-dialog-content {
424
- position: relative;
425
- border: 0;
426
- padding: .5em 1em;
427
- background: none;
428
- overflow: auto;
429
- }
430
- .ui-dialog .ui-dialog-buttonpane {
431
- text-align: left;
432
- border-width: 1px 0 0 0;
433
- background-image: none;
434
- margin-top: .5em;
435
- padding: .3em 1em .5em .4em;
436
- }
437
- .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
438
- float: right;
439
- }
440
- .ui-dialog .ui-dialog-buttonpane button {
441
- margin: .5em .4em .5em 0;
442
- cursor: pointer;
443
- }
444
- .ui-dialog .ui-resizable-se {
445
- width: 12px;
446
- height: 12px;
447
- right: -5px;
448
- bottom: -5px;
449
- background-position: 16px 16px;
450
- }
451
- .ui-draggable .ui-dialog-titlebar {
452
- cursor: move;
453
- }
454
- .ui-menu {
455
- list-style: none;
456
- padding: 2px;
457
- margin: 0;
458
- display: block;
459
- outline: none;
460
- }
461
- .ui-menu .ui-menu {
462
- margin-top: -3px;
463
- position: absolute;
464
- }
465
- .ui-menu .ui-menu-item {
466
- margin: 0;
467
- padding: 0;
468
- width: 100%;
469
- }
470
- .ui-menu .ui-menu-divider {
471
- margin: 5px -2px 5px -2px;
472
- height: 0;
473
- font-size: 0;
474
- line-height: 0;
475
- border-width: 1px 0 0 0;
476
- }
477
- .ui-menu .ui-menu-item a {
478
- text-decoration: none;
479
- display: block;
480
- padding: 2px .4em;
481
- line-height: 1.5;
482
- min-height: 0; /* support: IE7 */
483
- font-weight: normal;
484
- }
485
- .ui-menu .ui-menu-item a.ui-state-focus,
486
- .ui-menu .ui-menu-item a.ui-state-active {
487
- font-weight: normal;
488
- margin: -1px;
489
- }
490
-
491
- .ui-menu .ui-state-disabled {
492
- font-weight: normal;
493
- margin: .4em 0 .2em;
494
- line-height: 1.5;
495
- }
496
- .ui-menu .ui-state-disabled a {
497
- cursor: default;
498
- }
499
-
500
- /* icon support */
501
- .ui-menu-icons {
502
- position: relative;
503
- }
504
- .ui-menu-icons .ui-menu-item a {
505
- position: relative;
506
- padding-left: 2em;
507
- }
508
-
509
- /* left-aligned */
510
- .ui-menu .ui-icon {
511
- position: absolute;
512
- top: .2em;
513
- left: .2em;
514
- }
515
-
516
- /* right-aligned */
517
- .ui-menu .ui-menu-icon {
518
- position: static;
519
- float: right;
520
- }
521
- .ui-progressbar {
522
- height: 2em;
523
- text-align: left;
524
- overflow: hidden;
525
- }
526
- .ui-progressbar .ui-progressbar-value {
527
- margin: -1px;
528
- height: 100%;
529
- }
530
- .ui-progressbar .ui-progressbar-overlay {
531
- background: url("images/animated-overlay.gif");
532
- height: 100%;
533
- filter: alpha(opacity=25);
534
- opacity: 0.25;
535
- }
536
- .ui-progressbar-indeterminate .ui-progressbar-value {
537
- background-image: none;
538
- }
539
- .ui-resizable {
540
- position: relative;
541
- }
542
- .ui-resizable-handle {
543
- position: absolute;
544
- font-size: 0.1px;
545
- display: block;
546
- }
547
- .ui-resizable-disabled .ui-resizable-handle,
548
- .ui-resizable-autohide .ui-resizable-handle {
549
- display: none;
550
- }
551
- .ui-resizable-n {
552
- cursor: n-resize;
553
- height: 7px;
554
- width: 100%;
555
- top: -5px;
556
- left: 0;
557
- }
558
- .ui-resizable-s {
559
- cursor: s-resize;
560
- height: 7px;
561
- width: 100%;
562
- bottom: -5px;
563
- left: 0;
564
- }
565
- .ui-resizable-e {
566
- cursor: e-resize;
567
- width: 7px;
568
- right: -5px;
569
- top: 0;
570
- height: 100%;
571
- }
572
- .ui-resizable-w {
573
- cursor: w-resize;
574
- width: 7px;
575
- left: -5px;
576
- top: 0;
577
- height: 100%;
578
- }
579
- .ui-resizable-se {
580
- cursor: se-resize;
581
- width: 12px;
582
- height: 12px;
583
- right: 1px;
584
- bottom: 1px;
585
- }
586
- .ui-resizable-sw {
587
- cursor: sw-resize;
588
- width: 9px;
589
- height: 9px;
590
- left: -5px;
591
- bottom: -5px;
592
- }
593
- .ui-resizable-nw {
594
- cursor: nw-resize;
595
- width: 9px;
596
- height: 9px;
597
- left: -5px;
598
- top: -5px;
599
- }
600
- .ui-resizable-ne {
601
- cursor: ne-resize;
602
- width: 9px;
603
- height: 9px;
604
- right: -5px;
605
- top: -5px;
606
- }
607
- .ui-selectable-helper {
608
- position: absolute;
609
- z-index: 100;
610
- border: 1px dotted black;
611
- }
612
- .ui-slider {
613
- position: relative;
614
- text-align: left;
615
- }
616
- .ui-slider .ui-slider-handle {
617
- position: absolute;
618
- z-index: 2;
619
- width: 1.2em;
620
- height: 1.2em;
621
- cursor: default;
622
- }
623
- .ui-slider .ui-slider-range {
624
- position: absolute;
625
- z-index: 1;
626
- font-size: .7em;
627
- display: block;
628
- border: 0;
629
- background-position: 0 0;
630
- }
631
-
632
- /* For IE8 - See #6727 */
633
- .ui-slider.ui-state-disabled .ui-slider-handle,
634
- .ui-slider.ui-state-disabled .ui-slider-range {
635
- filter: inherit;
636
- }
637
-
638
- .ui-slider-horizontal {
639
- height: .8em;
640
- }
641
- .ui-slider-horizontal .ui-slider-handle {
642
- top: -.3em;
643
- margin-left: -.6em;
644
- }
645
- .ui-slider-horizontal .ui-slider-range {
646
- top: 0;
647
- height: 100%;
648
- }
649
- .ui-slider-horizontal .ui-slider-range-min {
650
- left: 0;
651
- }
652
- .ui-slider-horizontal .ui-slider-range-max {
653
- right: 0;
654
- }
655
-
656
- .ui-slider-vertical {
657
- width: .8em;
658
- height: 100px;
659
- }
660
- .ui-slider-vertical .ui-slider-handle {
661
- left: -.3em;
662
- margin-left: 0;
663
- margin-bottom: -.6em;
664
- }
665
- .ui-slider-vertical .ui-slider-range {
666
- left: 0;
667
- width: 100%;
668
- }
669
- .ui-slider-vertical .ui-slider-range-min {
670
- bottom: 0;
671
- }
672
- .ui-slider-vertical .ui-slider-range-max {
673
- top: 0;
674
- }
675
- .ui-spinner {
676
- position: relative;
677
- display: inline-block;
678
- overflow: hidden;
679
- padding: 0;
680
- vertical-align: middle;
681
- }
682
- .ui-spinner-input {
683
- border: none;
684
- background: none;
685
- color: inherit;
686
- padding: 0;
687
- margin: .2em 0;
688
- vertical-align: middle;
689
- margin-left: .4em;
690
- margin-right: 22px;
691
- }
692
- .ui-spinner-button {
693
- width: 16px;
694
- height: 50%;
695
- font-size: .5em;
696
- padding: 0;
697
- margin: 0;
698
- text-align: center;
699
- position: absolute;
700
- cursor: default;
701
- display: block;
702
- overflow: hidden;
703
- right: 0;
704
- }
705
- /* more specificity required here to overide default borders */
706
- .ui-spinner a.ui-spinner-button {
707
- border-top: none;
708
- border-bottom: none;
709
- border-right: none;
710
- }
711
- /* vertical centre icon */
712
- .ui-spinner .ui-icon {
713
- position: absolute;
714
- margin-top: -8px;
715
- top: 50%;
716
- left: 0;
717
- }
718
- .ui-spinner-up {
719
- top: 0;
720
- }
721
- .ui-spinner-down {
722
- bottom: 0;
723
- }
724
-
725
- /* TR overrides */
726
- .ui-spinner .ui-icon-triangle-1-s {
727
- /* need to fix icons sprite */
728
- background-position: -65px -16px;
729
- }
730
- .ui-tabs {
731
- position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
732
- padding: .2em;
733
- }
734
- .ui-tabs .ui-tabs-nav {
735
- margin: 0;
736
- padding: .2em .2em 0;
737
- }
738
- .ui-tabs .ui-tabs-nav li {
739
- list-style: none;
740
- float: left;
741
- position: relative;
742
- top: 0;
743
- margin: 1px .2em 0 0;
744
- border-bottom-width: 0;
745
- padding: 0;
746
- white-space: nowrap;
747
- }
748
- .ui-tabs .ui-tabs-nav li a {
749
- float: left;
750
- padding: .5em 1em;
751
- text-decoration: none;
752
- }
753
- .ui-tabs .ui-tabs-nav li.ui-tabs-active {
754
- margin-bottom: -1px;
755
- padding-bottom: 1px;
756
- }
757
- .ui-tabs .ui-tabs-nav li.ui-tabs-active a,
758
- .ui-tabs .ui-tabs-nav li.ui-state-disabled a,
759
- .ui-tabs .ui-tabs-nav li.ui-tabs-loading a {
760
- cursor: text;
761
- }
762
- .ui-tabs .ui-tabs-nav li a, /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
763
- .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a {
764
- cursor: pointer;
765
- }
766
- .ui-tabs .ui-tabs-panel {
767
- display: block;
768
- border-width: 0;
769
- padding: 1em 1.4em;
770
- background: none;
771
- }
772
- .ui-tooltip {
773
- padding: 8px;
774
- position: absolute;
775
- z-index: 9999;
776
- max-width: 300px;
777
- -webkit-box-shadow: 0 0 5px #aaa;
778
- box-shadow: 0 0 5px #aaa;
779
- }
780
- body .ui-tooltip {
781
- border-width: 2px;
782
- }
783
-
784
- /* Component containers
785
- ----------------------------------*/
786
- .ui-widget {
787
- font-family: Verdana,Arial,sans-serif;
788
- font-size: 1.1em;
789
- }
790
- .ui-widget .ui-widget {
791
- font-size: 1em;
792
- }
793
- .ui-widget input,
794
- .ui-widget select,
795
- .ui-widget textarea,
796
- .ui-widget button {
797
- font-family: Verdana,Arial,sans-serif;
798
- font-size: 1em;
799
- }
800
- .ui-widget-content {
801
- border: 1px solid #aaaaaa;
802
- background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
803
- color: #222222;
804
- }
805
- .ui-widget-content a {
806
- color: #222222;
807
- }
808
- .ui-widget-header {
809
- border: 1px solid #aaaaaa;
810
- background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
811
- color: #222222;
812
- font-weight: bold;
813
- }
814
- .ui-widget-header a {
815
- color: #222222;
816
- }
817
-
818
- /* Interaction states
819
- ----------------------------------*/
820
- .ui-state-default,
821
- .ui-widget-content .ui-state-default,
822
- .ui-widget-header .ui-state-default {
823
- border: 1px solid #d3d3d3;
824
- background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
825
- font-weight: normal;
826
- color: #555555;
827
- }
828
- .ui-state-default a,
829
- .ui-state-default a:link,
830
- .ui-state-default a:visited {
831
- color: #555555;
832
- text-decoration: none;
833
- }
834
- .ui-state-hover,
835
- .ui-widget-content .ui-state-hover,
836
- .ui-widget-header .ui-state-hover,
837
- .ui-state-focus,
838
- .ui-widget-content .ui-state-focus,
839
- .ui-widget-header .ui-state-focus {
840
- border: 1px solid #999999;
841
- background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
842
- font-weight: normal;
843
- color: #212121;
844
- }
845
- .ui-state-hover a,
846
- .ui-state-hover a:hover,
847
- .ui-state-hover a:link,
848
- .ui-state-hover a:visited {
849
- color: #212121;
850
- text-decoration: none;
851
- }
852
- .ui-state-active,
853
- .ui-widget-content .ui-state-active,
854
- .ui-widget-header .ui-state-active {
855
- border: 1px solid #aaaaaa;
856
- background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
857
- font-weight: normal;
858
- color: #212121;
859
- }
860
- .ui-state-active a,
861
- .ui-state-active a:link,
862
- .ui-state-active a:visited {
863
- color: #212121;
864
- text-decoration: none;
865
- }
866
-
867
- /* Interaction Cues
868
- ----------------------------------*/
869
- .ui-state-highlight,
870
- .ui-widget-content .ui-state-highlight,
871
- .ui-widget-header .ui-state-highlight {
872
- border: 1px solid #fcefa1;
873
- background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
874
- color: #363636;
875
- }
876
- .ui-state-highlight a,
877
- .ui-widget-content .ui-state-highlight a,
878
- .ui-widget-header .ui-state-highlight a {
879
- color: #363636;
880
- }
881
- .ui-state-error,
882
- .ui-widget-content .ui-state-error,
883
- .ui-widget-header .ui-state-error {
884
- border: 1px solid #cd0a0a;
885
- background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
886
- color: #cd0a0a;
887
- }
888
- .ui-state-error a,
889
- .ui-widget-content .ui-state-error a,
890
- .ui-widget-header .ui-state-error a {
891
- color: #cd0a0a;
892
- }
893
- .ui-state-error-text,
894
- .ui-widget-content .ui-state-error-text,
895
- .ui-widget-header .ui-state-error-text {
896
- color: #cd0a0a;
897
- }
898
- .ui-priority-primary,
899
- .ui-widget-content .ui-priority-primary,
900
- .ui-widget-header .ui-priority-primary {
901
- font-weight: bold;
902
- }
903
- .ui-priority-secondary,
904
- .ui-widget-content .ui-priority-secondary,
905
- .ui-widget-header .ui-priority-secondary {
906
- opacity: .7;
907
- filter:Alpha(Opacity=70);
908
- font-weight: normal;
909
- }
910
- .ui-state-disabled,
911
- .ui-widget-content .ui-state-disabled,
912
- .ui-widget-header .ui-state-disabled {
913
- opacity: .35;
914
- filter:Alpha(Opacity=35);
915
- background-image: none;
916
- }
917
- .ui-state-disabled .ui-icon {
918
- filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
919
- }
920
-
921
- /* Icons
922
- ----------------------------------*/
923
-
924
- /* states and images */
925
- .ui-icon {
926
- width: 16px;
927
- height: 16px;
928
- }
929
- .ui-icon,
930
- .ui-widget-content .ui-icon {
931
- background-image: url(images/ui-icons_222222_256x240.png);
932
- }
933
- .ui-widget-header .ui-icon {
934
- background-image: url(images/ui-icons_222222_256x240.png);
935
- }
936
- .ui-state-default .ui-icon {
937
- background-image: url(images/ui-icons_888888_256x240.png);
938
- }
939
- .ui-state-hover .ui-icon,
940
- .ui-state-focus .ui-icon {
941
- background-image: url(images/ui-icons_454545_256x240.png);
942
- }
943
- .ui-state-active .ui-icon {
944
- background-image: url(images/ui-icons_454545_256x240.png);
945
- }
946
- .ui-state-highlight .ui-icon {
947
- background-image: url(images/ui-icons_2e83ff_256x240.png);
948
- }
949
- .ui-state-error .ui-icon,
950
- .ui-state-error-text .ui-icon {
951
- background-image: url(images/ui-icons_cd0a0a_256x240.png);
952
- }
953
-
954
- /* positioning */
955
- .ui-icon-blank { background-position: 16px 16px; }
956
- .ui-icon-carat-1-n { background-position: 0 0; }
957
- .ui-icon-carat-1-ne { background-position: -16px 0; }
958
- .ui-icon-carat-1-e { background-position: -32px 0; }
959
- .ui-icon-carat-1-se { background-position: -48px 0; }
960
- .ui-icon-carat-1-s { background-position: -64px 0; }
961
- .ui-icon-carat-1-sw { background-position: -80px 0; }
962
- .ui-icon-carat-1-w { background-position: -96px 0; }
963
- .ui-icon-carat-1-nw { background-position: -112px 0; }
964
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
965
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
966
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
967
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
968
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
969
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
970
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
971
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
972
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
973
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
974
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
975
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
976
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
977
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
978
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
979
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
980
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
981
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
982
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
983
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
984
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
985
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
986
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
987
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
988
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
989
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
990
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
991
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
992
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
993
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
994
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
995
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
996
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
997
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
998
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
999
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
1000
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
1001
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
1002
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
1003
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
1004
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
1005
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
1006
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
1007
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
1008
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
1009
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
1010
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
1011
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
1012
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
1013
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
1014
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
1015
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
1016
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
1017
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
1018
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
1019
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
1020
- .ui-icon-arrow-4 { background-position: 0 -80px; }
1021
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
1022
- .ui-icon-extlink { background-position: -32px -80px; }
1023
- .ui-icon-newwin { background-position: -48px -80px; }
1024
- .ui-icon-refresh { background-position: -64px -80px; }
1025
- .ui-icon-shuffle { background-position: -80px -80px; }
1026
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
1027
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
1028
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
1029
- .ui-icon-folder-open { background-position: -16px -96px; }
1030
- .ui-icon-document { background-position: -32px -96px; }
1031
- .ui-icon-document-b { background-position: -48px -96px; }
1032
- .ui-icon-note { background-position: -64px -96px; }
1033
- .ui-icon-mail-closed { background-position: -80px -96px; }
1034
- .ui-icon-mail-open { background-position: -96px -96px; }
1035
- .ui-icon-suitcase { background-position: -112px -96px; }
1036
- .ui-icon-comment { background-position: -128px -96px; }
1037
- .ui-icon-person { background-position: -144px -96px; }
1038
- .ui-icon-print { background-position: -160px -96px; }
1039
- .ui-icon-trash { background-position: -176px -96px; }
1040
- .ui-icon-locked { background-position: -192px -96px; }
1041
- .ui-icon-unlocked { background-position: -208px -96px; }
1042
- .ui-icon-bookmark { background-position: -224px -96px; }
1043
- .ui-icon-tag { background-position: -240px -96px; }
1044
- .ui-icon-home { background-position: 0 -112px; }
1045
- .ui-icon-flag { background-position: -16px -112px; }
1046
- .ui-icon-calendar { background-position: -32px -112px; }
1047
- .ui-icon-cart { background-position: -48px -112px; }
1048
- .ui-icon-pencil { background-position: -64px -112px; }
1049
- .ui-icon-clock { background-position: -80px -112px; }
1050
- .ui-icon-disk { background-position: -96px -112px; }
1051
- .ui-icon-calculator { background-position: -112px -112px; }
1052
- .ui-icon-zoomin { background-position: -128px -112px; }
1053
- .ui-icon-zoomout { background-position: -144px -112px; }
1054
- .ui-icon-search { background-position: -160px -112px; }
1055
- .ui-icon-wrench { background-position: -176px -112px; }
1056
- .ui-icon-gear { background-position: -192px -112px; }
1057
- .ui-icon-heart { background-position: -208px -112px; }
1058
- .ui-icon-star { background-position: -224px -112px; }
1059
- .ui-icon-link { background-position: -240px -112px; }
1060
- .ui-icon-cancel { background-position: 0 -128px; }
1061
- .ui-icon-plus { background-position: -16px -128px; }
1062
- .ui-icon-plusthick { background-position: -32px -128px; }
1063
- .ui-icon-minus { background-position: -48px -128px; }
1064
- .ui-icon-minusthick { background-position: -64px -128px; }
1065
- .ui-icon-close { background-position: -80px -128px; }
1066
- .ui-icon-closethick { background-position: -96px -128px; }
1067
- .ui-icon-key { background-position: -112px -128px; }
1068
- .ui-icon-lightbulb { background-position: -128px -128px; }
1069
- .ui-icon-scissors { background-position: -144px -128px; }
1070
- .ui-icon-clipboard { background-position: -160px -128px; }
1071
- .ui-icon-copy { background-position: -176px -128px; }
1072
- .ui-icon-contact { background-position: -192px -128px; }
1073
- .ui-icon-image { background-position: -208px -128px; }
1074
- .ui-icon-video { background-position: -224px -128px; }
1075
- .ui-icon-script { background-position: -240px -128px; }
1076
- .ui-icon-alert { background-position: 0 -144px; }
1077
- .ui-icon-info { background-position: -16px -144px; }
1078
- .ui-icon-notice { background-position: -32px -144px; }
1079
- .ui-icon-help { background-position: -48px -144px; }
1080
- .ui-icon-check { background-position: -64px -144px; }
1081
- .ui-icon-bullet { background-position: -80px -144px; }
1082
- .ui-icon-radio-on { background-position: -96px -144px; }
1083
- .ui-icon-radio-off { background-position: -112px -144px; }
1084
- .ui-icon-pin-w { background-position: -128px -144px; }
1085
- .ui-icon-pin-s { background-position: -144px -144px; }
1086
- .ui-icon-play { background-position: 0 -160px; }
1087
- .ui-icon-pause { background-position: -16px -160px; }
1088
- .ui-icon-seek-next { background-position: -32px -160px; }
1089
- .ui-icon-seek-prev { background-position: -48px -160px; }
1090
- .ui-icon-seek-end { background-position: -64px -160px; }
1091
- .ui-icon-seek-start { background-position: -80px -160px; }
1092
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
1093
- .ui-icon-seek-first { background-position: -80px -160px; }
1094
- .ui-icon-stop { background-position: -96px -160px; }
1095
- .ui-icon-eject { background-position: -112px -160px; }
1096
- .ui-icon-volume-off { background-position: -128px -160px; }
1097
- .ui-icon-volume-on { background-position: -144px -160px; }
1098
- .ui-icon-power { background-position: 0 -176px; }
1099
- .ui-icon-signal-diag { background-position: -16px -176px; }
1100
- .ui-icon-signal { background-position: -32px -176px; }
1101
- .ui-icon-battery-0 { background-position: -48px -176px; }
1102
- .ui-icon-battery-1 { background-position: -64px -176px; }
1103
- .ui-icon-battery-2 { background-position: -80px -176px; }
1104
- .ui-icon-battery-3 { background-position: -96px -176px; }
1105
- .ui-icon-circle-plus { background-position: 0 -192px; }
1106
- .ui-icon-circle-minus { background-position: -16px -192px; }
1107
- .ui-icon-circle-close { background-position: -32px -192px; }
1108
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
1109
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
1110
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
1111
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
1112
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
1113
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
1114
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
1115
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
1116
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
1117
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
1118
- .ui-icon-circle-check { background-position: -208px -192px; }
1119
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
1120
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
1121
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
1122
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
1123
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
1124
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
1125
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
1126
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
1127
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
1128
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
1129
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
1130
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
1131
-
1132
-
1133
- /* Misc visuals
1134
- ----------------------------------*/
1135
-
1136
- /* Corner radius */
1137
- .ui-corner-all,
1138
- .ui-corner-top,
1139
- .ui-corner-left,
1140
- .ui-corner-tl {
1141
- border-top-left-radius: 4px;
1142
- }
1143
- .ui-corner-all,
1144
- .ui-corner-top,
1145
- .ui-corner-right,
1146
- .ui-corner-tr {
1147
- border-top-right-radius: 4px;
1148
- }
1149
- .ui-corner-all,
1150
- .ui-corner-bottom,
1151
- .ui-corner-left,
1152
- .ui-corner-bl {
1153
- border-bottom-left-radius: 4px;
1154
- }
1155
- .ui-corner-all,
1156
- .ui-corner-bottom,
1157
- .ui-corner-right,
1158
- .ui-corner-br {
1159
- border-bottom-right-radius: 4px;
1160
- }
1161
-
1162
- /* Overlays */
1163
- .ui-widget-overlay {
1164
- background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
1165
- opacity: .3;
1166
- filter: Alpha(Opacity=30);
1167
- }
1168
- .ui-widget-shadow {
1169
- margin: -8px 0 0 -8px;
1170
- padding: 8px;
1171
- background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
1172
- opacity: .3;
1173
- filter: Alpha(Opacity=30);
1174
- border-radius: 8px;
1175
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/css/vendor/jquery-ui/jquery-ui.min.css DELETED
@@ -1,5 +0,0 @@
1
- /*! jQuery UI - v1.10.2 - 2013-03-14
2
- * http://jqueryui.com
3
- * Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css
4
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
5
- * Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0}.ui-menu .ui-menu{margin-top:-3px;position:absolute}.ui-menu .ui-menu-item{margin:0;padding:0;width:100%}.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400}.ui-menu .ui-menu-item a.ui-state-focus,.ui-menu .ui-menu-item a.ui-state-active{font-weight:400;margin:-1px}.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5}.ui-menu .ui-state-disabled a{cursor:default}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em}.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em}.ui-menu .ui-menu-icon{position:static;float:right}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:.1px;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:0;background:0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:0;border-bottom:0;border-right:0}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:0}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.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:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.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}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.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}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
 
 
 
 
 
drkfr/css/vendor/jquery-ui/jquery.ui.theme.css DELETED
@@ -1,406 +0,0 @@
1
- /*!
2
- * jQuery UI CSS Framework 1.10.2
3
- * http://jqueryui.com
4
- *
5
- * Copyright 2013 jQuery Foundation and other contributors
6
- * Released under the MIT license.
7
- * http://jquery.org/license
8
- *
9
- * http://docs.jquery.com/UI/Theming/API
10
- *
11
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
12
- */
13
-
14
-
15
- /* Component containers
16
- ----------------------------------*/
17
- .ui-widget {
18
- font-family: Verdana,Arial,sans-serif;
19
- font-size: 1.1em;
20
- }
21
- .ui-widget .ui-widget {
22
- font-size: 1em;
23
- }
24
- .ui-widget input,
25
- .ui-widget select,
26
- .ui-widget textarea,
27
- .ui-widget button {
28
- font-family: Verdana,Arial,sans-serif;
29
- font-size: 1em;
30
- }
31
- .ui-widget-content {
32
- border: 1px solid #aaaaaa;
33
- background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;
34
- color: #222222;
35
- }
36
- .ui-widget-content a {
37
- color: #222222;
38
- }
39
- .ui-widget-header {
40
- border: 1px solid #aaaaaa;
41
- background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
42
- color: #222222;
43
- font-weight: bold;
44
- }
45
- .ui-widget-header a {
46
- color: #222222;
47
- }
48
-
49
- /* Interaction states
50
- ----------------------------------*/
51
- .ui-state-default,
52
- .ui-widget-content .ui-state-default,
53
- .ui-widget-header .ui-state-default {
54
- border: 1px solid #d3d3d3;
55
- background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;
56
- font-weight: normal;
57
- color: #555555;
58
- }
59
- .ui-state-default a,
60
- .ui-state-default a:link,
61
- .ui-state-default a:visited {
62
- color: #555555;
63
- text-decoration: none;
64
- }
65
- .ui-state-hover,
66
- .ui-widget-content .ui-state-hover,
67
- .ui-widget-header .ui-state-hover,
68
- .ui-state-focus,
69
- .ui-widget-content .ui-state-focus,
70
- .ui-widget-header .ui-state-focus {
71
- border: 1px solid #999999;
72
- background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;
73
- font-weight: normal;
74
- color: #212121;
75
- }
76
- .ui-state-hover a,
77
- .ui-state-hover a:hover,
78
- .ui-state-hover a:link,
79
- .ui-state-hover a:visited {
80
- color: #212121;
81
- text-decoration: none;
82
- }
83
- .ui-state-active,
84
- .ui-widget-content .ui-state-active,
85
- .ui-widget-header .ui-state-active {
86
- border: 1px solid #aaaaaa;
87
- background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
88
- font-weight: normal;
89
- color: #212121;
90
- }
91
- .ui-state-active a,
92
- .ui-state-active a:link,
93
- .ui-state-active a:visited {
94
- color: #212121;
95
- text-decoration: none;
96
- }
97
-
98
- /* Interaction Cues
99
- ----------------------------------*/
100
- .ui-state-highlight,
101
- .ui-widget-content .ui-state-highlight,
102
- .ui-widget-header .ui-state-highlight {
103
- border: 1px solid #fcefa1;
104
- background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;
105
- color: #363636;
106
- }
107
- .ui-state-highlight a,
108
- .ui-widget-content .ui-state-highlight a,
109
- .ui-widget-header .ui-state-highlight a {
110
- color: #363636;
111
- }
112
- .ui-state-error,
113
- .ui-widget-content .ui-state-error,
114
- .ui-widget-header .ui-state-error {
115
- border: 1px solid #cd0a0a;
116
- background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;
117
- color: #cd0a0a;
118
- }
119
- .ui-state-error a,
120
- .ui-widget-content .ui-state-error a,
121
- .ui-widget-header .ui-state-error a {
122
- color: #cd0a0a;
123
- }
124
- .ui-state-error-text,
125
- .ui-widget-content .ui-state-error-text,
126
- .ui-widget-header .ui-state-error-text {
127
- color: #cd0a0a;
128
- }
129
- .ui-priority-primary,
130
- .ui-widget-content .ui-priority-primary,
131
- .ui-widget-header .ui-priority-primary {
132
- font-weight: bold;
133
- }
134
- .ui-priority-secondary,
135
- .ui-widget-content .ui-priority-secondary,
136
- .ui-widget-header .ui-priority-secondary {
137
- opacity: .7;
138
- filter:Alpha(Opacity=70);
139
- font-weight: normal;
140
- }
141
- .ui-state-disabled,
142
- .ui-widget-content .ui-state-disabled,
143
- .ui-widget-header .ui-state-disabled {
144
- opacity: .35;
145
- filter:Alpha(Opacity=35);
146
- background-image: none;
147
- }
148
- .ui-state-disabled .ui-icon {
149
- filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
150
- }
151
-
152
- /* Icons
153
- ----------------------------------*/
154
-
155
- /* states and images */
156
- .ui-icon {
157
- width: 16px;
158
- height: 16px;
159
- }
160
- .ui-icon,
161
- .ui-widget-content .ui-icon {
162
- background-image: url(images/ui-icons_222222_256x240.png);
163
- }
164
- .ui-widget-header .ui-icon {
165
- background-image: url(images/ui-icons_222222_256x240.png);
166
- }
167
- .ui-state-default .ui-icon {
168
- background-image: url(images/ui-icons_888888_256x240.png);
169
- }
170
- .ui-state-hover .ui-icon,
171
- .ui-state-focus .ui-icon {
172
- background-image: url(images/ui-icons_454545_256x240.png);
173
- }
174
- .ui-state-active .ui-icon {
175
- background-image: url(images/ui-icons_454545_256x240.png);
176
- }
177
- .ui-state-highlight .ui-icon {
178
- background-image: url(images/ui-icons_2e83ff_256x240.png);
179
- }
180
- .ui-state-error .ui-icon,
181
- .ui-state-error-text .ui-icon {
182
- background-image: url(images/ui-icons_cd0a0a_256x240.png);
183
- }
184
-
185
- /* positioning */
186
- .ui-icon-blank { background-position: 16px 16px; }
187
- .ui-icon-carat-1-n { background-position: 0 0; }
188
- .ui-icon-carat-1-ne { background-position: -16px 0; }
189
- .ui-icon-carat-1-e { background-position: -32px 0; }
190
- .ui-icon-carat-1-se { background-position: -48px 0; }
191
- .ui-icon-carat-1-s { background-position: -64px 0; }
192
- .ui-icon-carat-1-sw { background-position: -80px 0; }
193
- .ui-icon-carat-1-w { background-position: -96px 0; }
194
- .ui-icon-carat-1-nw { background-position: -112px 0; }
195
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
196
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
197
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
198
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
199
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
200
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
201
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
202
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
203
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
204
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
205
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
206
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
207
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
208
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
209
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
210
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
211
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
212
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
213
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
214
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
215
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
216
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
217
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
218
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
219
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
220
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
221
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
222
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
223
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
224
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
225
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
226
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
227
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
228
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
229
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
230
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
231
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
232
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
233
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
234
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
235
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
236
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
237
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
238
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
239
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
240
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
241
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
242
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
243
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
244
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
245
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
246
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
247
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
248
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
249
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
250
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
251
- .ui-icon-arrow-4 { background-position: 0 -80px; }
252
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
253
- .ui-icon-extlink { background-position: -32px -80px; }
254
- .ui-icon-newwin { background-position: -48px -80px; }
255
- .ui-icon-refresh { background-position: -64px -80px; }
256
- .ui-icon-shuffle { background-position: -80px -80px; }
257
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
258
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
259
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
260
- .ui-icon-folder-open { background-position: -16px -96px; }
261
- .ui-icon-document { background-position: -32px -96px; }
262
- .ui-icon-document-b { background-position: -48px -96px; }
263
- .ui-icon-note { background-position: -64px -96px; }
264
- .ui-icon-mail-closed { background-position: -80px -96px; }
265
- .ui-icon-mail-open { background-position: -96px -96px; }
266
- .ui-icon-suitcase { background-position: -112px -96px; }
267
- .ui-icon-comment { background-position: -128px -96px; }
268
- .ui-icon-person { background-position: -144px -96px; }
269
- .ui-icon-print { background-position: -160px -96px; }
270
- .ui-icon-trash { background-position: -176px -96px; }
271
- .ui-icon-locked { background-position: -192px -96px; }
272
- .ui-icon-unlocked { background-position: -208px -96px; }
273
- .ui-icon-bookmark { background-position: -224px -96px; }
274
- .ui-icon-tag { background-position: -240px -96px; }
275
- .ui-icon-home { background-position: 0 -112px; }
276
- .ui-icon-flag { background-position: -16px -112px; }
277
- .ui-icon-calendar { background-position: -32px -112px; }
278
- .ui-icon-cart { background-position: -48px -112px; }
279
- .ui-icon-pencil { background-position: -64px -112px; }
280
- .ui-icon-clock { background-position: -80px -112px; }
281
- .ui-icon-disk { background-position: -96px -112px; }
282
- .ui-icon-calculator { background-position: -112px -112px; }
283
- .ui-icon-zoomin { background-position: -128px -112px; }
284
- .ui-icon-zoomout { background-position: -144px -112px; }
285
- .ui-icon-search { background-position: -160px -112px; }
286
- .ui-icon-wrench { background-position: -176px -112px; }
287
- .ui-icon-gear { background-position: -192px -112px; }
288
- .ui-icon-heart { background-position: -208px -112px; }
289
- .ui-icon-star { background-position: -224px -112px; }
290
- .ui-icon-link { background-position: -240px -112px; }
291
- .ui-icon-cancel { background-position: 0 -128px; }
292
- .ui-icon-plus { background-position: -16px -128px; }
293
- .ui-icon-plusthick { background-position: -32px -128px; }
294
- .ui-icon-minus { background-position: -48px -128px; }
295
- .ui-icon-minusthick { background-position: -64px -128px; }
296
- .ui-icon-close { background-position: -80px -128px; }
297
- .ui-icon-closethick { background-position: -96px -128px; }
298
- .ui-icon-key { background-position: -112px -128px; }
299
- .ui-icon-lightbulb { background-position: -128px -128px; }
300
- .ui-icon-scissors { background-position: -144px -128px; }
301
- .ui-icon-clipboard { background-position: -160px -128px; }
302
- .ui-icon-copy { background-position: -176px -128px; }
303
- .ui-icon-contact { background-position: -192px -128px; }
304
- .ui-icon-image { background-position: -208px -128px; }
305
- .ui-icon-video { background-position: -224px -128px; }
306
- .ui-icon-script { background-position: -240px -128px; }
307
- .ui-icon-alert { background-position: 0 -144px; }
308
- .ui-icon-info { background-position: -16px -144px; }
309
- .ui-icon-notice { background-position: -32px -144px; }
310
- .ui-icon-help { background-position: -48px -144px; }
311
- .ui-icon-check { background-position: -64px -144px; }
312
- .ui-icon-bullet { background-position: -80px -144px; }
313
- .ui-icon-radio-on { background-position: -96px -144px; }
314
- .ui-icon-radio-off { background-position: -112px -144px; }
315
- .ui-icon-pin-w { background-position: -128px -144px; }
316
- .ui-icon-pin-s { background-position: -144px -144px; }
317
- .ui-icon-play { background-position: 0 -160px; }
318
- .ui-icon-pause { background-position: -16px -160px; }
319
- .ui-icon-seek-next { background-position: -32px -160px; }
320
- .ui-icon-seek-prev { background-position: -48px -160px; }
321
- .ui-icon-seek-end { background-position: -64px -160px; }
322
- .ui-icon-seek-start { background-position: -80px -160px; }
323
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
324
- .ui-icon-seek-first { background-position: -80px -160px; }
325
- .ui-icon-stop { background-position: -96px -160px; }
326
- .ui-icon-eject { background-position: -112px -160px; }
327
- .ui-icon-volume-off { background-position: -128px -160px; }
328
- .ui-icon-volume-on { background-position: -144px -160px; }
329
- .ui-icon-power { background-position: 0 -176px; }
330
- .ui-icon-signal-diag { background-position: -16px -176px; }
331
- .ui-icon-signal { background-position: -32px -176px; }
332
- .ui-icon-battery-0 { background-position: -48px -176px; }
333
- .ui-icon-battery-1 { background-position: -64px -176px; }
334
- .ui-icon-battery-2 { background-position: -80px -176px; }
335
- .ui-icon-battery-3 { background-position: -96px -176px; }
336
- .ui-icon-circle-plus { background-position: 0 -192px; }
337
- .ui-icon-circle-minus { background-position: -16px -192px; }
338
- .ui-icon-circle-close { background-position: -32px -192px; }
339
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
340
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
341
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
342
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
343
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
344
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
345
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
346
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
347
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
348
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
349
- .ui-icon-circle-check { background-position: -208px -192px; }
350
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
351
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
352
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
353
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
354
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
355
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
356
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
357
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
358
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
359
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
360
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
361
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
362
-
363
-
364
- /* Misc visuals
365
- ----------------------------------*/
366
-
367
- /* Corner radius */
368
- .ui-corner-all,
369
- .ui-corner-top,
370
- .ui-corner-left,
371
- .ui-corner-tl {
372
- border-top-left-radius: 4px;
373
- }
374
- .ui-corner-all,
375
- .ui-corner-top,
376
- .ui-corner-right,
377
- .ui-corner-tr {
378
- border-top-right-radius: 4px;
379
- }
380
- .ui-corner-all,
381
- .ui-corner-bottom,
382
- .ui-corner-left,
383
- .ui-corner-bl {
384
- border-bottom-left-radius: 4px;
385
- }
386
- .ui-corner-all,
387
- .ui-corner-bottom,
388
- .ui-corner-right,
389
- .ui-corner-br {
390
- border-bottom-right-radius: 4px;
391
- }
392
-
393
- /* Overlays */
394
- .ui-widget-overlay {
395
- background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
396
- opacity: .3;
397
- filter: Alpha(Opacity=30);
398
- }
399
- .ui-widget-shadow {
400
- margin: -8px 0 0 -8px;
401
- padding: 8px;
402
- background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;
403
- opacity: .3;
404
- filter: Alpha(Opacity=30);
405
- border-radius: 8px;
406
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/custom-meta-boxes.php DELETED
@@ -1,136 +0,0 @@
1
- <?php
2
- if ( ! defined( 'drkfr_DEV') )
3
- define( 'drkfr_DEV', false );
4
-
5
- if ( ! defined( 'drkfr_PATH') )
6
- define( 'drkfr_PATH', plugin_dir_path( __FILE__ ) );
7
-
8
- if ( ! defined( 'drkfr_URL' ) )
9
- define( 'drkfr_URL', plugins_url( '', __FILE__ ) );
10
-
11
- include_once( drkfr_PATH . '/classes.fields.php' );
12
- include_once( drkfr_PATH . '/class.drkfr-meta-box.php' );
13
-
14
- // Make it possible to add fields in locations other than post edit screen.
15
- include_once( drkfr_PATH . '/fields-anywhere.php' );
16
-
17
- // include_once( drkfr_PATH . '/example-functions.php' );
18
-
19
- /**
20
- * Get all the meta boxes on init
21
- *
22
- * @return null
23
- */
24
- function drkfr_init() {
25
-
26
- if ( ! is_admin() )
27
- return;
28
-
29
- // Load translations
30
- $textdomain = 'drkfr';
31
- $locale = apply_filters( 'plugin_locale', get_locale(), $textdomain );
32
-
33
- // By default, try to load language files from /wp-content/languages/custom-meta-boxes/
34
- load_textdomain( $textdomain, WP_LANG_DIR . '/custom-meta-boxes/' . $textdomain . '-' . $locale . '.mo' );
35
- load_textdomain( $textdomain, drkfr_PATH . '/languages/' . $textdomain . '-' . $locale . '.mo' );
36
-
37
- $meta_boxes = apply_filters( 'drkfr_meta_boxes', array() );
38
-
39
- if ( ! empty( $meta_boxes ) )
40
- foreach ( $meta_boxes as $meta_box )
41
- new drkfr_Meta_Box( $meta_box );
42
-
43
- }
44
- add_action( 'init', 'drkfr_init', 50 );
45
-
46
- /**
47
- * Return an array of built in available fields
48
- *
49
- * Key is field name, Value is class used by field.
50
- * Available fields can be modified using the 'drkfr_field_types' filter.
51
- *
52
- * @return array
53
- */
54
- function _drkfr_available_fields() {
55
-
56
- return apply_filters( 'drkfr_field_types', array(
57
- 'text' => 'drkfr_Text_Field',
58
- 'text_small' => 'drkfr_Text_Small_Field',
59
- 'text_url' => 'drkfr_URL_Field',
60
- 'url' => 'drkfr_URL_Field',
61
- 'radio' => 'drkfr_Radio_Field',
62
- 'checkbox' => 'drkfr_Checkbox',
63
- 'file' => 'drkfr_File_Field',
64
- 'image' => 'drkfr_Image_Field',
65
- 'wysiwyg' => 'drkfr_wysiwyg',
66
- 'textarea' => 'drkfr_Textarea_Field',
67
- 'textarea_code' => 'drkfr_Textarea_Field_Code',
68
- 'select' => 'drkfr_Select',
69
- 'taxonomy_select' => 'drkfr_Taxonomy',
70
- 'post_select' => 'drkfr_Post_Select',
71
- 'date' => 'drkfr_Date_Field',
72
- 'date_unix' => 'drkfr_Date_Timestamp_Field',
73
- 'datetime_unix' => 'drkfr_Datetime_Timestamp_Field',
74
- 'time' => 'drkfr_Time_Field',
75
- 'colorpicker' => 'drkfr_Color_Picker',
76
- 'title' => 'drkfr_Title',
77
- 'group' => 'drkfr_Group_Field',
78
- 'gmap' => 'drkfr_Gmap_Field',
79
- ) );
80
-
81
- }
82
-
83
- /**
84
- * Get a field class by type
85
- *
86
- * @param string $type
87
- * @return string $class, or false if not found.
88
- */
89
- function _drkfr_field_class_for_type( $type ) {
90
-
91
- $map = _drkfr_available_fields();
92
-
93
- if ( isset( $map[$type] ) )
94
- return $map[$type];
95
-
96
- return false;
97
-
98
- }
99
-
100
- /**
101
- * For the order of repeatable fields to be guaranteed, orderby meta_id needs to be set.
102
- * Note usermeta has a different meta_id column name.
103
- *
104
- * Only do this for older versions as meta is now ordered by ID (since 3.8)
105
- * See http://core.trac.wordpress.org/ticket/25511
106
- *
107
- * @param string $query
108
- * @return string $query
109
- */
110
- function drkfr_fix_meta_query_order($query) {
111
-
112
- $pattern = '/^SELECT (post_id|user_id), meta_key, meta_value FROM \w* WHERE post_id IN \([\d|,]*\)$/';
113
-
114
- if (
115
- 0 === strpos( $query, "SELECT post_id, meta_key, meta_value" ) &&
116
- preg_match( $pattern, $query, $matches )
117
- ) {
118
-
119
- if ( isset( $matches[1] ) && 'user_id' == $matches[1] )
120
- $meta_id_column = 'umeta_id';
121
- else
122
- $meta_id_column = 'meta_id';
123
-
124
- $meta_query_orderby = ' ORDER BY ' . $meta_id_column;
125
-
126
- if ( false === strpos( $query, $meta_query_orderby ) )
127
- $query .= $meta_query_orderby;
128
-
129
- }
130
-
131
- return $query;
132
-
133
- }
134
-
135
- if ( version_compare( get_bloginfo( 'version' ), '3.8', '<' ) )
136
- add_filter( 'query', 'drkfr_fix_meta_query_order', 1 );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/fields-anywhere.php DELETED
@@ -1,92 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Create drkfr Meta boxes anywhere you like (other than the post edit screen).
5
- *
6
- * This is functional, but a little hacky.
7
- */
8
-
9
- /**
10
- * Draw the meta boxes in places other than the post edit screen
11
- *
12
- * @return null
13
- */
14
- function drkfr_draw_meta_boxes( $pages, $context = 'normal', $object = null ) {
15
-
16
- drkfr_do_meta_boxes( $pages, $context, $object );
17
-
18
- wp_enqueue_script('post');
19
-
20
- }
21
-
22
- /**
23
- * Meta-Box template function
24
- *
25
- * @since 2.5.0
26
- *
27
- * @param string|object $screen Screen identifier
28
- * @param string $context box context
29
- * @param mixed $object gets passed to the box callback function as first parameter
30
- * @return int number of meta_boxes
31
- */
32
- function drkfr_do_meta_boxes( $screen, $context, $object ) {
33
-
34
- global $wp_meta_boxes;
35
-
36
- static $already_sorted = false;
37
-
38
- if ( empty( $screen ) )
39
- $screen = get_current_screen();
40
-
41
- elseif ( is_string( $screen ) )
42
- $screen = convert_to_screen( $screen );
43
-
44
- $page = $screen->id;
45
-
46
- $hidden = get_hidden_meta_boxes( $screen );
47
-
48
- $i = 0;
49
-
50
- do {
51
- // Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose
52
-
53
- if ( ! $already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) )
54
- foreach ( $sorted as $box_context => $ids )
55
- foreach ( explode(',', $ids ) as $id )
56
- if ( $id && 'dashboard_browser_nag' !== $id )
57
- add_meta_box( $id, null, null, $screen, $box_context, 'sorted' );
58
-
59
- $already_sorted = true;
60
-
61
- if ( ! isset( $wp_meta_boxes ) || ! isset( $wp_meta_boxes[$page] ) || ! isset( $wp_meta_boxes[$page][$context] ) )
62
- break;
63
-
64
- foreach ( array( 'high', 'sorted', 'core', 'default', 'low' ) as $priority ) {
65
-
66
- if ( isset( $wp_meta_boxes[$page][$context][$priority] ) ) {
67
-
68
- foreach ( (array) $wp_meta_boxes[$page][$context][$priority] as $box ) {
69
-
70
- if ( false == $box || ! $box['title'] )
71
- continue;
72
-
73
- $i++;
74
-
75
- $hidden_class = in_array($box['id'], $hidden) ? ' hide-if-js' : ''; ?>
76
-
77
- <div id="<?php esc_attr_e( $box['id'] ); ?>" class="<?php esc_attr_e( postbox_classes( $box['id'], $page ) . $hidden_class ); ?>">
78
-
79
- <?php call_user_func( $box['callback'], $object, $box ); ?>
80
-
81
- </div>
82
-
83
- <?php }
84
-
85
- }
86
-
87
- }
88
- } while( 0 );
89
-
90
- return $i;
91
-
92
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/images/drkfr-icon-remove.png DELETED
Binary file
drkfr/images/drkfr-icon-remove@2x.png DELETED
Binary file
drkfr/images/wpspin-2x.gif DELETED
Binary file
drkfr/images/wpspin.gif DELETED
Binary file
drkfr/js/drkfr.js DELETED
@@ -1,315 +0,0 @@
1
- /**
2
- * Custom jQuery for Custom Metaboxes and Fields
3
- */
4
-
5
- /*jslint browser: true, devel: true, indent: 4, maxerr: 50, sub: true */
6
- /*global jQuery, tb_show, tb_remove */
7
-
8
- 'use strict';
9
-
10
- var drkfr = {
11
-
12
- _initCallbacks: [],
13
- _clonedFieldCallbacks: [],
14
- _deletedFieldCallbacks: [],
15
-
16
- _sortStartCallbacks: [],
17
- _sortEndCallbacks: [],
18
-
19
- init : function() {
20
-
21
- jQuery( '.field.repeatable' ).each( function() {
22
- drkfr.isMaxFields( jQuery(this) );
23
- } );
24
-
25
- // Unbind & Re-bind all drkfr events to prevent duplicates.
26
- jQuery(document).unbind( 'click.drkfr' );
27
- jQuery(document).on( 'click.drkfr', '.drkfr-delete-field', drkfr.deleteField );
28
- jQuery(document).on( 'click.drkfr', '.repeat-field', drkfr.repeatField );
29
-
30
- // When toggling the display of the meta box container - reinitialize
31
- jQuery(document).on( 'click.drkfr', '.postbox h3, .postbox .handlediv', drkfr.init );
32
-
33
- drkfr.doneInit();
34
-
35
- jQuery('.field.drkfr-sortable' ).each( function() {
36
- drkfr.sortableInit( jQuery(this) );
37
- } );
38
-
39
-
40
- },
41
-
42
- repeatField : function( e ) {
43
-
44
- var templateField, newT, field, index, attr;
45
-
46
- field = jQuery( this ).closest('.field' );
47
-
48
- e.preventDefault();
49
- jQuery(this).blur();
50
-
51
- if ( drkfr.isMaxFields( field, 1 ) )
52
- return;
53
-
54
- templateField = field.children( '.field-item.hidden' );
55
-
56
- newT = templateField.clone();
57
- newT.removeClass( 'hidden' );
58
-
59
- var excludeInputTypes = '[type=submit],[type=button],[type=checkbox],[type=radio],[readonly]';
60
- newT.find( 'input' ).not( excludeInputTypes ).val( '' );
61
-
62
- newT.find( '.drkfr_upload_status' ).html('');
63
-
64
- newT.insertBefore( templateField );
65
-
66
- // Recalculate group ids & update the name fields..
67
- index = 0;
68
- attr = ['id','name','for','data-id','data-name'];
69
-
70
- field.children( '.field-item' ).not( templateField ).each( function() {
71
-
72
- var search = field.hasClass( 'drkfr_Group_Field' ) ? /drkfr-group-(\d|x)*/g : /drkfr-field-(\d|x)*/g;
73
- var replace = field.hasClass( 'drkfr_Group_Field' ) ? 'drkfr-group-' + index : 'drkfr-field-' + index;
74
-
75
- jQuery(this).find( '[' + attr.join('],[') + ']' ).each( function() {
76
-
77
- for ( var i = 0; i < attr.length; i++ )
78
- if ( typeof( jQuery(this).attr( attr[i] ) ) !== 'undefined' )
79
- jQuery(this).attr( attr[i], jQuery(this).attr( attr[i] ).replace( search, replace ) );
80
-
81
- } );
82
-
83
- index += 1;
84
-
85
- } );
86
-
87
- drkfr.clonedField( newT );
88
-
89
- if ( field.hasClass( 'drkfr-sortable' ) )
90
- drkfr.sortableInit( field );
91
-
92
-
93
- },
94
-
95
- deleteField : function( e ) {
96
-
97
- var fieldItem, field;
98
-
99
- e.preventDefault();
100
- jQuery(this).blur();
101
-
102
- if ( ! confirm( drkfrData.strings.confirmDeleteField ) ) {
103
- return;
104
- }
105
-
106
- fieldItem = jQuery( this ).closest('.field-item' );
107
- field = fieldItem.closest( '.field' );
108
-
109
- drkfr.isMaxFields( field, -1 );
110
- drkfr.deletedField( fieldItem );
111
-
112
- fieldItem.remove();
113
-
114
- },
115
-
116
- /**
117
- * Prevent having more than the maximum number of repeatable fields.
118
- * When called, if there is the maximum, disable .repeat-field button.
119
- * Note: Information Passed using data-max attribute on the .field element.
120
- *
121
- * @param jQuery .field
122
- * @param int modifier - adjust count by this ammount. 1 If adding a field, 0 if checking, -1 if removing a field... etc
123
- * @return null
124
- */
125
- isMaxFields: function( field, modifier ) {
126
-
127
- var count, addBtn, min, max, count;
128
-
129
- modifier = (modifier) ? parseInt( modifier, 10 ) : 0;
130
-
131
- addBtn = field.children( '.repeat-field' );
132
- count = field.children('.field-item').not('.hidden').length + modifier; // Count after anticipated action (modifier)
133
- max = field.attr( 'data-rep-max' );
134
-
135
- // Show all the remove field buttons.
136
- field.find( '> .field-item > .drkfr-delete-field, > .field-item > .group > .drkfr-delete-field' ).show();
137
-
138
- if ( typeof( max ) === 'undefined' )
139
- return false;
140
-
141
- // Disable the add new field button?
142
- if ( count >= parseInt( max, 10 ) )
143
- addBtn.attr( 'disabled', 'disabled' );
144
- else
145
- addBtn.removeAttr( 'disabled' );
146
-
147
- if ( count > parseInt( max, 10 ) )
148
- return true;
149
-
150
- },
151
-
152
- addCallbackForInit: function( callback ) {
153
-
154
- this._initCallbacks.push( callback )
155
-
156
- },
157
-
158
- /**
159
- * Fire init callbacks.
160
- * Called when drkfr has been set up.
161
- */
162
- doneInit: function() {
163
-
164
- var _this = this,
165
- callbacks = drkfr._initCallbacks;
166
-
167
- if ( callbacks ) {
168
- for ( var a = 0; a < callbacks.length; a++) {
169
- callbacks[a]();
170
- }
171
- }
172
-
173
- },
174
-
175
- addCallbackForClonedField: function( fieldName, callback ) {
176
-
177
- if ( jQuery.isArray( fieldName ) )
178
- for ( var i = 0; i < fieldName.length; i++ )
179
- drkfr.addCallbackForClonedField( fieldName[i], callback );
180
-
181
- this._clonedFieldCallbacks[fieldName] = this._clonedFieldCallbacks[fieldName] ? this._clonedFieldCallbacks[fieldName] : []
182
- this._clonedFieldCallbacks[fieldName].push( callback )
183
-
184
- },
185
-
186
- /**
187
- * Fire clonedField callbacks.
188
- * Called when a field has been cloned.
189
- */
190
- clonedField: function( el ) {
191
-
192
- // also check child elements
193
- el.add( el.find( 'div[data-class]' ) ).each( function( i, el ) {
194
-
195
- el = jQuery( el )
196
- var callbacks = drkfr._clonedFieldCallbacks[el.attr( 'data-class') ]
197
-
198
- if ( callbacks )
199
- for ( var a = 0; a < callbacks.length; a++ )
200
- callbacks[a]( el );
201
-
202
- })
203
- },
204
-
205
- addCallbackForDeletedField: function( fieldName, callback ) {
206
-
207
- if ( jQuery.isArray( fieldName ) )
208
- for ( var i = 0; i < fieldName.length; i++ )
209
- drkfr._deletedFieldCallbacks( fieldName[i], callback );
210
-
211
- this._deletedFieldCallbacks[fieldName] = this._deletedFieldCallbacks[fieldName] ? this._deletedFieldCallbacks[fieldName] : []
212
- this._deletedFieldCallbacks[fieldName].push( callback )
213
-
214
- },
215
-
216
- /**
217
- * Fire deletedField callbacks.
218
- * Called when a field has been cloned.
219
- */
220
- deletedField: function( el ) {
221
-
222
- // also check child elements
223
- el.add( el.find( 'div[data-class]' ) ).each( function(i, el) {
224
-
225
- el = jQuery( el )
226
- var callbacks = drkfr._deletedFieldCallbacks[el.attr( 'data-class') ]
227
-
228
- if ( callbacks )
229
- for ( var a = 0; a < callbacks.length; a++ )
230
- callbacks[a]( el )
231
-
232
- })
233
- },
234
-
235
- sortableInit : function( field ) {
236
-
237
- var items = field.find(' > .field-item').not('.hidden');
238
-
239
- field.find( '> .field-item > .drkfr-handle' ).remove();
240
-
241
- items.each( function() {
242
- jQuery(this).append( '<div class="drkfr-handle"></div>' );
243
- } );
244
-
245
- field.sortable( {
246
- handle: "> .drkfr-handle" ,
247
- cursor: "move",
248
- items: " > .field-item",
249
- beforeStop: function( event, ui ) { drkfr.sortStart( jQuery( ui.item[0] ) ); },
250
- deactivate: function( event, ui ) { drkfr.sortEnd( jQuery( ui.item[0] ) ); },
251
- } );
252
-
253
- },
254
-
255
- sortStart : function ( el ) {
256
-
257
- // also check child elements
258
- el.add( el.find( 'div[data-class]' ) ).each( function(i, el) {
259
-
260
- el = jQuery( el )
261
- var callbacks = drkfr._sortStartCallbacks[el.attr( 'data-class') ]
262
-
263
- if ( callbacks )
264
- for ( var a = 0; a < callbacks.length; a++ )
265
- callbacks[a]( el )
266
-
267
- })
268
-
269
- },
270
-
271
- addCallbackForSortStart: function( fieldName, callback ) {
272
-
273
- if ( jQuery.isArray( fieldName ) )
274
- for ( var i = 0; i < fieldName.length; i++ )
275
- drkfr.addCallbackForSortStart( fieldName[i], callback );
276
-
277
- this._sortStartCallbacks[fieldName] = this._sortStartCallbacks[fieldName] ? this._sortStartCallbacks[fieldName] : []
278
- this._sortStartCallbacks[fieldName].push( callback )
279
-
280
- },
281
-
282
- sortEnd : function ( el ) {
283
-
284
- // also check child elements
285
- el.add( el.find( 'div[data-class]' ) ).each( function(i, el) {
286
-
287
- el = jQuery( el )
288
- var callbacks = drkfr._sortEndCallbacks[el.attr( 'data-class') ]
289
-
290
- if ( callbacks )
291
- for ( var a = 0; a < callbacks.length; a++ )
292
- callbacks[a]( el )
293
-
294
- })
295
-
296
- },
297
-
298
- addCallbackForSortEnd: function( fieldName, callback ) {
299
-
300
- if ( jQuery.isArray( fieldName ) )
301
- for ( var i = 0; i < fieldName.length; i++ )
302
- drkfr.addCallbackForSortEnd( fieldName[i], callback );
303
-
304
- this._sortEndCallbacks[fieldName] = this._sortEndCallbacks[fieldName] ? this._sortEndCallbacks[fieldName] : []
305
- this._sortEndCallbacks[fieldName].push( callback )
306
-
307
- }
308
-
309
- }
310
-
311
- jQuery(document).ready( function() {
312
-
313
- drkfr.init();
314
-
315
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/field-gmap.js DELETED
@@ -1,93 +0,0 @@
1
- /*jshint devel:true */
2
- /*global google */
3
-
4
- (function($) {
5
-
6
- var drkfrGmapsInit = function( fieldEl ) {
7
-
8
- var searchInput = $('.map-search', fieldEl ).get(0);
9
- var mapCanvas = $('.map', fieldEl ).get(0);
10
- var latitude = $('.latitude', fieldEl );
11
- var longitude = $('.longitude', fieldEl );
12
- var elevation = $('.elevation', fieldEl );
13
- var elevator = new google.maps.ElevationService();
14
-
15
- var mapOptions = {
16
- center: new google.maps.LatLng( drkfrGmaps.defaults.latitude, drkfrGmaps.defaults.longitude ),
17
- zoom: parseInt( drkfrGmaps.defaults.zoom ),
18
- mapTypeId: google.maps.MapTypeId.ROADMAP
19
- };
20
-
21
- var map = new google.maps.Map( mapCanvas, mapOptions );
22
-
23
- // Marker
24
- var markerOptions = {
25
- map: map,
26
- draggable: true,
27
- title: drkfrGmaps.strings.markerTitle
28
- };
29
-
30
- var marker = new google.maps.Marker( markerOptions );
31
- marker.setPosition( mapOptions.center );
32
-
33
- function setPosition( latLng, zoom ) {
34
-
35
- marker.setPosition( latLng );
36
- map.setCenter( latLng );
37
-
38
- if ( zoom ) {
39
- map.setZoom( zoom );
40
- }
41
-
42
- latitude.val( latLng.lat() );
43
- longitude.val( latLng.lng() );
44
-
45
- elevator.getElevationForLocations( { locations: [ marker.getPosition() ] }, function (results, status) {
46
- if (status == google.maps.ElevationStatus.OK && results[0] ) {
47
- elevation.val( results[0].elevation );
48
- }
49
- });
50
-
51
- }
52
-
53
- // Set stored Coordinates
54
- if ( latitude.val() && longitude.val() ) {
55
- latLng = new google.maps.LatLng( latitude.val(), longitude.val() );
56
- setPosition( latLng, 17 )
57
- }
58
-
59
- google.maps.event.addListener( marker, 'dragend', function() {
60
- setPosition( marker.getPosition() );
61
- });
62
-
63
- // Search
64
- var autocomplete = new google.maps.places.Autocomplete(searchInput);
65
- autocomplete.bindTo('bounds', map);
66
-
67
- google.maps.event.addListener(autocomplete, 'place_changed', function() {
68
- var place = autocomplete.getPlace();
69
- if (place.geometry.viewport) {
70
- map.fitBounds(place.geometry.viewport);
71
- }
72
-
73
- setPosition( place.geometry.location, 17 );
74
-
75
- });
76
-
77
- $(searchInput).keypress(function(e) {
78
- if (e.keyCode === 13) {
79
- e.preventDefault();
80
- }
81
- });
82
-
83
- }
84
-
85
- drkfr.addCallbackForInit( function() {
86
- $('.drkfr_Gmap_Field .field-item').each(function() {
87
- drkfrGmapsInit( $(this) );
88
- });
89
- } );
90
-
91
- drkfr.addCallbackForClonedField( ['drkfr_Gmap_Field'], drkfrGmapsInit );
92
-
93
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/field-wysiwyg.js DELETED
@@ -1,106 +0,0 @@
1
- drkfr.addCallbackForDeletedField( 'drkfr_wysiwyg', function( el ) {
2
-
3
- // Destroy WYSIWYG editors instances.
4
- el.find( '.drkfr-wysiwyg textarea' ).each( function() {
5
- var instance = tinyMCE.get( jQuery(this).attr('id') );
6
- if ( instance !== null && typeof( instance ) !== 'undefined' )
7
- instance.remove();
8
- } );
9
-
10
- } );
11
-
12
- drkfr.addCallbackForClonedField( 'drkfr_wysiwyg', function( newT ) {
13
-
14
- newT.find( '.drkfr-wysiwyg' ).each( function (i) {
15
-
16
- var el, id, name, ed, dom, i, fieldId, nameRegex, idRegex;
17
-
18
- el = jQuery(this);
19
- id = el.attr( 'data-id' );
20
- name = el.attr( 'data-name' );
21
- ed = tinyMCE.get(id);
22
- fieldId = el.attr('data-field-id'); //Field identifier, not including field/group index.,
23
-
24
- if ( ed )
25
- return;
26
-
27
- nameRegex = new RegExp( 'drkfr-placeholder-name-' + fieldId, 'g' );
28
- idRegex = new RegExp( 'drkfr-placeholder-id-' + fieldId, 'g' );
29
-
30
- // Placeholder markup for the new wysiwyg is stored as a prop on var drkfr_wysiwyg_editors
31
- // Copy, update ids & names & insert.
32
- el.html( drkfr_wysiwyg_editors[fieldId].replace( nameRegex, name ).replace( idRegex, id ) );
33
-
34
- // If no settings for this field. Clone from placeholder.
35
- if ( typeof( tinyMCEPreInit.mceInit[ id ] ) === 'undefined' ) {
36
- var newSettings = jQuery.extend( {}, tinyMCEPreInit.mceInit[ 'drkfr-placeholder-id-' + fieldId ] );
37
- for ( var prop in newSettings )
38
- if ( 'string' === typeof( newSettings[prop] ) )
39
- newSettings[prop] = newSettings[prop].replace( idRegex, id ).replace( nameRegex, name );
40
- tinyMCEPreInit.mceInit[ id ] = newSettings;
41
- }
42
-
43
- // If no Quicktag settings for this field. Clone from placeholder.
44
- if ( typeof( tinyMCEPreInit.qtInit[ id ] ) === 'undefined' ) {
45
- var newQTS = jQuery.extend( {}, tinyMCEPreInit.qtInit[ 'drkfr-placeholder-id-' + fieldId ] );
46
- for ( var prop in newQTS )
47
- if ( 'string' === typeof( newQTS[prop] ) )
48
- newQTS[prop] = newQTS[prop].replace( idRegex, id ).replace( nameRegex, name );
49
- tinyMCEPreInit.qtInit[ id ] = newQTS;
50
- }
51
-
52
- var mode = el.find('.wp-editor-wrap').hasClass('tmce-active') ? 'tmce' : 'html';
53
-
54
- // If current mode is visual, create the tinyMCE.
55
- if ( 'tmce' === mode ) {
56
- if ( tinyMCE.majorVersion === '4' ) {
57
- var ed = tinymce.init( tinyMCEPreInit.mceInit[id] );
58
- } else if ( tinyMCE.majorVersion === '3' ) {
59
- var ed = new tinymce.Editor( id, tinyMCEPreInit.mceInit[id] );
60
- ed.render();
61
- }
62
- }
63
-
64
- // Init Quicktags.
65
- QTags.instances[0] = undefined;
66
- try { quicktags( tinyMCEPreInit.qtInit[id] ); } catch(e){}
67
-
68
- } );
69
-
70
- } );
71
-
72
-
73
- drkfr.addCallbackForSortStart( 'drkfr_wysiwyg', function( el ) {
74
-
75
- el.find( '.wp-editor-area' ).each(function(){
76
- var id = jQuery(this).attr('id');
77
-
78
- if ( tinyMCE.majorVersion === '4' ) {
79
- tinyMCE.execCommand('mceRemoveEditor', false, id);
80
- } else if ( tinyMCE.majorVersion === '3' ) {
81
- tinyMCE.execCommand('mceRemoveControl', false, id);
82
- }
83
-
84
-
85
- });
86
-
87
- } );
88
-
89
- drkfr.addCallbackForSortEnd( 'drkfr_wysiwyg', function( el ) {
90
-
91
- el.find( '.wp-editor-area' ).each(function(){
92
-
93
- var id = jQuery(this).attr('id'),
94
- mode = jQuery(this).closest('.wp-editor-wrap').hasClass('tmce-active') ? 'tmce' : 'html';
95
-
96
- if ( 'tmce' === mode ) {
97
- if ( tinyMCE.majorVersion === '4' ) {
98
- tinyMCE.execCommand('mceAddEditor', false, id);
99
- } else if ( tinyMCE.majorVersion === '3' ) {
100
- tinyMCE.execCommand('mceAddControl', false, id);
101
- }
102
- }
103
-
104
- });
105
-
106
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/field.colorpicker.js DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * ColorPickers
3
- */
4
-
5
- drkfr.addCallbackForInit( function() {
6
-
7
- // Colorpicker
8
- jQuery('input:text.drkfr_colorpicker').wpColorPicker();
9
-
10
- } );
11
-
12
- drkfr.addCallbackForClonedField( 'drkfr_Color_Picker', function( newT ) {
13
-
14
- // Reinitialize colorpickers
15
- newT.find('.wp-color-result').remove();
16
- newT.find('input:text.drkfr_colorpicker').wpColorPicker();
17
-
18
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/field.datetime.js DELETED
@@ -1,47 +0,0 @@
1
-
2
- /**
3
- * Date & Time Fields
4
- */
5
-
6
- drkfr.addCallbackForClonedField( ['drkfr_Date_Field', 'drkfr_Time_Field', 'drkfr_Date_Timestamp_Field', 'drkfr_Datetime_Timestamp_Field' ], function( newT ) {
7
-
8
- // Reinitialize all the datepickers
9
- newT.find( '.drkfr_datepicker' ).each(function () {
10
- jQuery(this).attr( 'id', '' ).removeClass( 'hasDatepicker' ).removeData( 'datepicker' ).unbind().datepicker();
11
- });
12
-
13
- // Reinitialize all the timepickers.
14
- newT.find('.drkfr_timepicker' ).each(function () {
15
- jQuery(this).timePicker({
16
- startTime: "00:00",
17
- endTime: "23:30",
18
- show24Hours: false,
19
- separator: ':',
20
- step: 30
21
- });
22
- });
23
-
24
- } );
25
-
26
- drkfr.addCallbackForInit( function() {
27
-
28
- // Datepicker
29
- jQuery('.drkfr_datepicker').each(function () {
30
- jQuery(this).datepicker();
31
- });
32
-
33
- // Wrap date picker in class to narrow the scope of jQuery UI CSS and prevent conflicts
34
- jQuery("#ui-datepicker-div").wrap('<div class="drkfr_element" />');
35
-
36
- // Timepicker
37
- jQuery('.drkfr_timepicker').each(function () {
38
- jQuery(this).timePicker({
39
- startTime: "00:00",
40
- endTime: "23:30",
41
- show24Hours: false,
42
- separator: ':',
43
- step: 30
44
- });
45
- } );
46
-
47
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/field.select.js DELETED
@@ -1,29 +0,0 @@
1
- var drkfrSelectInit = function() {
2
-
3
- jQuery( '.drkfr_select' ).each( function() {
4
-
5
- var el = jQuery(this);
6
- var fieldID = el.attr( 'data-field-id'); // JS Friendly ID
7
-
8
- // If fieldID is set
9
- // If fieldID options exist
10
- // If Element is not hidden template field.
11
- // If elemnt has not already been initialized.
12
- if ( fieldID && fieldID in window.drkfr_select_fields && el.is( ':visible' ) && ! el.hasClass( 'select2-added' ) ) {
13
-
14
- // Get options for this field.
15
- options = window.drkfr_select_fields[fieldID];
16
-
17
- el.addClass( 'select2-added' ).select2( options );
18
-
19
- }
20
-
21
- })
22
-
23
- };
24
-
25
- // Hook this in for all the required fields.
26
- drkfr.addCallbackForInit( drkfrSelectInit );
27
- drkfr.addCallbackForClonedField( 'drkfr_Select', drkfrSelectInit );
28
- drkfr.addCallbackForClonedField( 'drkfr_Post_Select', drkfrSelectInit );
29
- drkfr.addCallbackForClonedField( 'drkfr_Taxonomy', drkfrSelectInit );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/file-upload.js DELETED
@@ -1,129 +0,0 @@
1
- jQuery( document ).ready( function() {
2
-
3
- jQuery( document ).on( 'click', '.drkfr-file-upload', function(e) {
4
-
5
- e.preventDefault();
6
-
7
- var link = jQuery( this );
8
- var container = jQuery( this ).parent();
9
-
10
- var frameArgs = {
11
- multiple: false,
12
- title: 'Select File',
13
- }
14
-
15
- library = container.attr( 'data-type' ).split(',');
16
- if ( library.length > 0 )
17
- frameArgs.library = { type: library }
18
-
19
- var drkfr_Frame = wp.media( frameArgs );
20
-
21
- drkfr_Frame.on( 'select', function() {
22
-
23
- var selection = drkfr_Frame.state().get('selection'),
24
- model = selection.first(),
25
- fileHolder = container.find( '.drkfr-file-holder' );
26
-
27
- jQuery( container ).find( '.drkfr-file-upload-input' ).val( model.id );
28
-
29
- link.hide(); // Hide 'add media' button
30
-
31
- drkfr_Frame.close();
32
-
33
- fileHolder.html( '' );
34
- fileHolder.show();
35
- fileHolder.siblings( '.drkfr-remove-file' ).show();
36
-
37
- var fieldType = container.closest( '.field-item' ).attr( 'data-class' );
38
-
39
- if ( 'drkfr_Image_Field' === fieldType ) {
40
-
41
- var data = {
42
- action: 'drkfr_request_image',
43
- id: model.attributes.id,
44
- width: container.width(),
45
- height: container.height(),
46
- crop: fileHolder.attr('data-crop'),
47
- nonce: link.attr( 'data-nonce' )
48
- }
49
-
50
- fileHolder.addClass( 'drkfr-loading' );
51
-
52
- jQuery.post( ajaxurl, data, function( src ) {
53
- // Insert image
54
- jQuery( '<img />', { src: src } ).prependTo( fileHolder );
55
- fileHolder.removeClass( 'drkfr-loading' );
56
- }).fail( function() {
57
- // Fallback - insert full size image.
58
- jQuery( '<img />', { src: model.attributes.url } ).prependTo( fileHolder );
59
- fileHolder.removeClass( 'drkfr-loading' );
60
- });
61
-
62
- } else {
63
-
64
- jQuery( '<img />', { src: model.attributes.icon } ).prependTo( fileHolder );
65
- fileHolder.append( jQuery('<div class="drkfr-file-name" />').html( '<strong>' + model.attributes.filename + '</strong>' ) );
66
-
67
- }
68
-
69
- });
70
-
71
- drkfr_Frame.open();
72
-
73
- } );
74
-
75
- jQuery( document ).on( 'click', '.drkfr-remove-file', function(e) {
76
-
77
- e.preventDefault();
78
-
79
- var container = jQuery( this ).parent().parent();
80
-
81
- container.find( '.drkfr-file-holder' ).html( '' ).hide();
82
- container.find( '.drkfr-file-upload-input' ).val( '' );
83
- container.find( '.drkfr-file-upload' ).show().css( 'display', 'inline-block' );
84
- container.find( '.drkfr-remove-file' ).hide();
85
-
86
- } );
87
-
88
- /**
89
- * Recalculate the dimensions of the file upload field.
90
- * It should never be larger than the available width.
91
- * It should maintain the aspect ratio of the original field.
92
- * It should recalculate when resized.
93
- * @return {[type]} [description]
94
- */
95
- var recalculateFileFieldSize = function() {
96
-
97
- jQuery( '.drkfr-file-wrap' ).each( function() {
98
-
99
- var el = jQuery(this),
100
- container = el.closest( '.postbox' ),
101
- width = container.width() - 12 - 10 - 10,
102
- ratio = el.height() / el.width();
103
-
104
- if ( el.attr( 'data-original-width' ) )
105
- el.width( el.attr( 'data-original-width' ) );
106
- else
107
- el.attr( 'data-original-width', el.width() );
108
-
109
- if ( el.attr( 'data-original-height' ) )
110
- el.height( el.attr( 'data-original-height' ) );
111
- else
112
- el.attr( 'data-original-height', el.height() );
113
-
114
- if ( el.width() > width ) {
115
- el.width( width );
116
- el.find( '.drkfr-file-wrap-placeholder' ).width( width - 8 );
117
- el.height( width * ratio );
118
- el.css( 'line-height', ( width * ratio ) + 'px' );
119
- el.find( '.drkfr-file-wrap-placeholder' ).height( ( width * ratio ) - 8 );
120
- }
121
-
122
-
123
- } );
124
- }
125
-
126
- recalculateFileFieldSize();
127
- jQuery(window).resize( recalculateFileFieldSize );
128
-
129
- } );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/jquery.timePicker.min.js DELETED
@@ -1,20 +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 and 2013 Dennis Burke
6
- * @name timePicker
7
- * @author Anders Fajerson (http://perifer.se)
8
- * @example $("#mytime").timePicker();
9
- * @example $("#mytime").timePicker({step:30, startTime:"15:00", endTime:"18:00"});
10
- *
11
- * Based on timePicker by Sam Collet (http://www.texotela.co.uk/code/jquery/timepicker/)
12
- *
13
- * Options:
14
- * step: # of minutes to step the time by
15
- * startTime: beginning of the range of acceptable times
16
- * endTime: end of the range of acceptable times
17
- * separator: separator string to use between hours and minutes (e.g. ':')
18
- * show24Hours: use a 24-hour scheme
19
- */
20
- (function(e){"use strict";function n(t,n,r){t.value=e(n).text();e(t).change();t.focus();r.hide()}function r(e,t){var n=e.getHours();var r=t.show24Hours?n:(n+11)%12+1;var s=e.getMinutes();return i(r)+t.separator+i(s)+(t.show24Hours?"":n<12?" am":" pm")}function i(e){return(e<10?"0":"")+e}function s(e,t){return typeof e==="object"?u(e):o(e,t)}function o(e,t){if(e){e=a(e,t);var n=e.split(t.separator);var r=parseFloat(n[0]);var i=parseFloat(n[1]);if(!t.show24Hours){if(r===12&&e.indexOf("am")!==-1){r=0}else if(r!==12&&e.indexOf("pm")!==-1){r+=12}}var s=new Date(0,0,0,r,i,0);return u(s)}return null}function u(e){e.setFullYear(2001);e.setMonth(0);e.setDate(0);return e}function a(e,t){var n,r,i,s,o,u;if(t.show24Hours){return e}if(e){r=e.toLowerCase().replace(/\s*/g,"");if(n=/^(\d{1,2})(a|p)m*$/.exec(r)){if(parseInt(n[1],10)<12){return""+n[1]+":00"+n[2]+"m"}}else if(i=/^(\d{1,2}):(\d{1,2})(a|p)m*$/.exec(r)){s=parseInt(i[1],10);o=parseInt(i[2],10);u=i[3]+"m";if(s<12||o<59){return""+s+":"+(o>=10?o:o+"0")+u}}else if(i=/^(\d{1,2}):(\d{1,2})$/.exec(r)){s=parseInt(i[1],10);o=parseInt(i[2],10);u="am";if(s<=24&&o<=59){if(s>=12){s=s-12;u="pm"}if(s===0){s=12}return s+":"+o+u}}}}var t={init:function(t){var n=e.extend({},e.fn.timePicker.defaults,t);return this.each(function(){e.timePicker(this,n)})},destroy:function(){return this.each(function(){if(this.timePicker){var t=e(this).data("timepickerdiv");e(this).data("timepickerdiv","");e("#"+t).remove();delete this.timePicker}})}};e.timePicker=function(t,n){try{var r=e(t)[0];return r.timePicker||(r.timePicker=new e._timePicker(r,n))}catch(i){throw"timepicker must be called on an element"}};e.timePicker.version="0.4.0";e._timePicker=function(t,i){var f=false;var l=false;var c=s(i.startTime,i);var h=s(i.endTime,i);var p=i.defaultSelected?s(i.defaultSelected,i):c;var d="selected";var v="li."+d;var m="tp"+(new Date).getTime();e(t).attr("autocomplete","off");e(t).data("timepickerdiv",m);var g=[];var y=new Date(c);while(y<=h){g[g.length]=r(y,i);y=new Date(y.setMinutes(y.getMinutes()+i.step))}var b=e('<div id="'+m+'" class="time-picker'+(i.show24Hours?"":" time-picker-12hours")+'"></div>');var w=e("<ul></ul>");for(var E=0;E<g.length;E+=1){w.append("<li>"+g[E]+"</li>")}b.append(w);b.appendTo("body").hide();b.mouseover(function(){f=true}).mouseout(function(){f=false});e("li",w).mouseover(function(){if(!l){e(v,b).removeClass(d);e(this).addClass(d)}}).mousedown(function(){f=true}).click(function(){n(t,this,b,i);f=false});var S=function(){if(b.is(":visible")){return false}e("li",b).removeClass(d);var n=e(t).offset();b.css({top:n.top+t.offsetHeight,left:n.left});b.show();var s=t.value?o(t.value,i):p;var a=c.getHours()*60+c.getMinutes();var f=s.getHours()*60+s.getMinutes()-a;var l=Math.round(f/i.step);var v=u(new Date(0,0,0,0,l*i.step+a,0));v=c<v&&v<=h?v:c;var m=e("li:contains("+r(v,i)+")",b);if(m.length){m.addClass(d);b[0].scrollTop=m[0].offsetTop}return true};e(t).focus(S).click(S);e(t).blur(function(){if(!f){b.hide()}e(this).val(a(e(this).val(),i))});e(t).keydown(function(r){var s;l=true;var o=b[0].scrollTop;switch(r.which){case 38:if(S()){break}s=e(v,w);var u=s.prev().addClass(d)[0];if(u){s.removeClass(d);if(u.offsetTop<o){b[0].scrollTop=o-u.offsetHeight}}else{s.removeClass(d);u=e("li:last",w).addClass(d)[0];b[0].scrollTop=u.offsetTop-u.offsetHeight}break;case 40:if(S()){break}s=e(v,w);var a=s.next().addClass(d)[0];if(a){s.removeClass(d);if(a.offsetTop+a.offsetHeight>o+b[0].offsetHeight){b[0].scrollTop=o+a.offsetHeight}}else{s.removeClass(d);a=e("li:first",w).addClass(d)[0];b[0].scrollTop=0}break;case 13:if(b.is(":visible")){var f=e(v,w)[0];n(t,f,b,i);r.preventDefault()}break;case 27:b.hide();break}});e(t).keyup(function(){l=false});this.getTime=function(){return o(t.value,i)};this.setTime=function(n){t.value=r(s(n,i),i);e(t).change()}};e.fn.timePicker=function(n){if(t[n]){return t[n].apply(this,Array.prototype.slice.call(arguments,1))}else if(typeof n==="object"||!n){return t.init.apply(this,arguments)}else{e.error("Method "+n+" does not exist on jQuery.tooltip")}};e.fn.timePicker.defaults={step:30,startTime:new Date(0,0,0,0,0,0),endTime:new Date(0,0,0,23,30,0),defaultSelected:null,separator:":",show24Hours:true}})(jQuery)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/.bower.json DELETED
@@ -1,25 +0,0 @@
1
- {
2
- "name": "select2",
3
- "version": "3.5.1",
4
- "main": [
5
- "select2.js",
6
- "select2.css",
7
- "select2.png",
8
- "select2x2.png",
9
- "select2-spinner.gif"
10
- ],
11
- "dependencies": {
12
- "jquery": ">= 1.7.1"
13
- },
14
- "homepage": "https://github.com/ivaynberg/select2",
15
- "_release": "3.5.1",
16
- "_resolution": {
17
- "type": "version",
18
- "tag": "3.5.1",
19
- "commit": "621a3f9532357148b05efc0602f7e06b44ff9bb4"
20
- },
21
- "_source": "git://github.com/ivaynberg/select2.git",
22
- "_target": "~3.5.1",
23
- "_originalSource": "select2",
24
- "_direct": true
25
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- .idea
2
-
 
 
drkfr/js/vendor/select2/LICENSE DELETED
@@ -1,18 +0,0 @@
1
- Copyright 2014 Igor Vaynberg
2
-
3
- Version: @@ver@@ Timestamp: @@timestamp@@
4
-
5
- This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
6
- General Public License version 2 (the "GPL License"). You may choose either license to govern your
7
- use of this software only upon the condition that you accept all of the terms of either the Apache
8
- License or the GPL License.
9
-
10
- You may obtain a copy of the Apache License and the GPL License at:
11
-
12
- http://www.apache.org/licenses/LICENSE-2.0
13
- http://www.gnu.org/licenses/gpl-2.0.html
14
-
15
- Unless required by applicable law or agreed to in writing, software distributed under the Apache License
16
- or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
17
- either express or implied. See the Apache License and the GPL License for the specific language governing
18
- permissions and limitations under the Apache License and the GPL License.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/README.md DELETED
@@ -1,99 +0,0 @@
1
- Select2
2
- =======
3
-
4
- Select2 is a jQuery-based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.
5
-
6
- To get started, checkout examples and documentation at http://ivaynberg.github.com/select2
7
-
8
- Use cases
9
- ---------
10
-
11
- * Enhancing native selects with search.
12
- * Enhancing native selects with a better multi-select interface.
13
- * Loading data from JavaScript: easily load items via ajax and have them searchable.
14
- * Nesting optgroups: native selects only support one level of nested. Select2 does not have this restriction.
15
- * Tagging: ability to add new items on the fly.
16
- * Working with large, remote datasets: ability to partially load a dataset based on the search term.
17
- * Paging of large datasets: easy support for loading more pages when the results are scrolled to the end.
18
- * Templating: support for custom rendering of results and selections.
19
-
20
- Browser compatibility
21
- ---------------------
22
- * IE 8+
23
- * Chrome 8+
24
- * Firefox 10+
25
- * Safari 3+
26
- * Opera 10.6+
27
-
28
- Usage
29
- -----
30
- You can source Select2 directly from a [CDN like JSDliver](http://www.jsdelivr.com/#!select2), [download it from this GitHub repo](https://github.com/ivaynberg/select2/tags), or use one of the integrations below.
31
-
32
- Integrations
33
- ------------
34
-
35
- * [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / [Apache Wicket](http://wicket.apache.org))
36
- * [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails)
37
- * [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org))
38
- * [Django](https://github.com/applegrew/django-select2)
39
- * [Symfony](https://github.com/19Gerhard85/sfSelect2WidgetsPlugin)
40
- * [Symfony2](https://github.com/avocode/FormExtensions)
41
- * [Bootstrap 2](https://github.com/t0m/select2-bootstrap-css) and [Bootstrap 3](https://github.com/t0m/select2-bootstrap-css/tree/bootstrap3) (CSS skins)
42
- * [Meteor](https://github.com/nate-strauser/meteor-select2) (modern reactive JavaScript framework; + [Bootstrap 3 skin](https://github.com/esperadomedia/meteor-select2-bootstrap3-css/))
43
- * [Meteor](https://jquery-select2.meteor.com)
44
- * [Yii 2.x](http://demos.krajee.com/widgets#select2)
45
- * [Yii 1.x](https://github.com/tonybolzan/yii-select2)
46
- * [AtmosphereJS](https://atmospherejs.com/package/jquery-select2)
47
-
48
- ### Example Integrations
49
-
50
- * [Knockout.js](https://github.com/ivaynberg/select2/wiki/Knockout.js-Integration)
51
- * [Socket.IO](https://github.com/ivaynberg/select2/wiki/Socket.IO-Integration)
52
- * [PHP](https://github.com/ivaynberg/select2/wiki/PHP-Example)
53
- * [.Net MVC] (https://github.com/ivaynberg/select2/wiki/.Net-MVC-Example)
54
-
55
- Internationalization (i18n)
56
- ---------------------------
57
-
58
- Select2 supports multiple languages by simply including the right language JS
59
- file (`select2_locale_it.js`, `select2_locale_nl.js`, etc.) after `select2.js`.
60
-
61
- Missing a language? Just copy `select2_locale_en.js.template`, translate
62
- it, and make a pull request back to Select2 here on GitHub.
63
-
64
- Bug tracker
65
- -----------
66
-
67
- Have a bug? Please create an issue here on GitHub!
68
-
69
- https://github.com/ivaynberg/select2/issues
70
-
71
- Mailing list
72
- ------------
73
-
74
- Have a question? Ask on our mailing list!
75
-
76
- select2@googlegroups.com
77
-
78
- https://groups.google.com/d/forum/select2
79
-
80
-
81
- Copyright and license
82
- ---------------------
83
-
84
- Copyright 2012 Igor Vaynberg
85
-
86
- This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
87
- General Public License version 2 (the "GPL License"). You may choose either license to govern your
88
- use of this software only upon the condition that you accept all of the terms of either the Apache
89
- License or the GPL License.
90
-
91
- You may obtain a copy of the Apache License and the GPL License in the LICENSE file, or at:
92
-
93
- http://www.apache.org/licenses/LICENSE-2.0
94
- http://www.gnu.org/licenses/gpl-2.0.html
95
-
96
- Unless required by applicable law or agreed to in writing, software distributed under the Apache License
97
- or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
98
- either express or implied. See the Apache License and the GPL License for the specific language governing
99
- permissions and limitations under the Apache License and the GPL License.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/bower.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "name": "select2",
3
- "version": "3.5.1",
4
- "main": ["select2.js", "select2.css", "select2.png", "select2x2.png", "select2-spinner.gif"],
5
- "dependencies": {
6
- "jquery": ">= 1.7.1"
7
- }
8
- }
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/component.json DELETED
@@ -1,66 +0,0 @@
1
- {
2
- "name": "select2",
3
- "repo": "ivaynberg/select2",
4
- "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
5
- "version": "3.5.1",
6
- "demo": "http://ivaynberg.github.io/select2/",
7
- "keywords": [
8
- "jquery"
9
- ],
10
- "main": "select2.js",
11
- "styles": [
12
- "select2.css",
13
- "select2-bootstrap.css"
14
- ],
15
- "scripts": [
16
- "select2.js",
17
- "select2_locale_ar.js",
18
- "select2_locale_bg.js",
19
- "select2_locale_ca.js",
20
- "select2_locale_cs.js",
21
- "select2_locale_da.js",
22
- "select2_locale_de.js",
23
- "select2_locale_el.js",
24
- "select2_locale_es.js",
25
- "select2_locale_et.js",
26
- "select2_locale_eu.js",
27
- "select2_locale_fa.js",
28
- "select2_locale_fi.js",
29
- "select2_locale_fr.js",
30
- "select2_locale_gl.js",
31
- "select2_locale_he.js",
32
- "select2_locale_hr.js",
33
- "select2_locale_hu.js",
34
- "select2_locale_id.js",
35
- "select2_locale_is.js",
36
- "select2_locale_it.js",
37
- "select2_locale_ja.js",
38
- "select2_locale_ka.js",
39
- "select2_locale_ko.js",
40
- "select2_locale_lt.js",
41
- "select2_locale_lv.js",
42
- "select2_locale_mk.js",
43
- "select2_locale_ms.js",
44
- "select2_locale_nl.js",
45
- "select2_locale_no.js",
46
- "select2_locale_pl.js",
47
- "select2_locale_pt-BR.js",
48
- "select2_locale_pt-PT.js",
49
- "select2_locale_ro.js",
50
- "select2_locale_ru.js",
51
- "select2_locale_sk.js",
52
- "select2_locale_sv.js",
53
- "select2_locale_th.js",
54
- "select2_locale_tr.js",
55
- "select2_locale_uk.js",
56
- "select2_locale_vi.js",
57
- "select2_locale_zh-CN.js",
58
- "select2_locale_zh-TW.js"
59
- ],
60
- "images": [
61
- "select2-spinner.gif",
62
- "select2.png",
63
- "select2x2.png"
64
- ],
65
- "license": "MIT"
66
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/composer.json DELETED
@@ -1,29 +0,0 @@
1
- {
2
- "name":
3
- "ivaynberg/select2",
4
- "description": "Select2 is a jQuery based replacement for select boxes.",
5
- "version": "3.5.1",
6
- "type": "component",
7
- "homepage": "http://ivaynberg.github.io/select2/",
8
- "license": "Apache-2.0",
9
- "require": {
10
- "robloach/component-installer": "*",
11
- "components/jquery": ">=1.7.1"
12
- },
13
- "extra": {
14
- "component": {
15
- "scripts": [
16
- "select2.js"
17
- ],
18
- "files": [
19
- "select2.js",
20
- "select2_locale_*.js",
21
- "select2.css",
22
- "select2-bootstrap.css",
23
- "select2-spinner.gif",
24
- "select2.png",
25
- "select2x2.png"
26
- ]
27
- }
28
- }
29
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/package.json DELETED
@@ -1,20 +0,0 @@
1
- {
2
- "name" : "Select2",
3
- "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
4
- "homepage": "http://ivaynberg.github.io/select2",
5
- "author": "Igor Vaynberg",
6
- "repository": {"type": "git", "url": "git://github.com/ivaynberg/select2.git"},
7
- "main": "select2.js",
8
- "version": "3.5.1",
9
- "jspm": {
10
- "main": "select2",
11
- "files": ["select2.js", "select2.png", "select2.css", "select2-spinner.gif"],
12
- "shim": {
13
- "select2": {
14
- "imports": ["jquery", "./select2.css!"],
15
- "exports": "$"
16
- }
17
- },
18
- "buildConfig": { "uglify": true }
19
- }
20
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/release.sh DELETED
@@ -1,79 +0,0 @@
1
- #!/bin/bash
2
- set -e
3
-
4
- echo -n "Enter the version for this release: "
5
-
6
- read ver
7
-
8
- if [ ! $ver ]; then
9
- echo "Invalid version."
10
- exit
11
- fi
12
-
13
- name="select2"
14
- js="$name.js"
15
- mini="$name.min.js"
16
- css="$name.css"
17
- release="$name-$ver"
18
- tag="$ver"
19
- branch="build-$ver"
20
- curbranch=`git branch | grep "*" | sed "s/* //"`
21
- timestamp=$(date)
22
- tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g"
23
- remote="github"
24
-
25
- echo "Pulling from origin"
26
-
27
- git pull
28
-
29
- echo "Updating Version Identifiers"
30
-
31
- sed -E -e "s/\"version\": \"([0-9\.]+)\",/\"version\": \"$ver\",/g" -i -- bower.json select2.jquery.json component.json composer.json package.json
32
-
33
- git add bower.json
34
- git add select2.jquery.json
35
- git add component.json
36
- git add composer.json
37
- git add package.json
38
-
39
- git commit -m "modified version identifiers in descriptors for release $ver"
40
- git push
41
-
42
- git branch "$branch"
43
- git checkout "$branch"
44
-
45
- echo "Tokenizing..."
46
-
47
- find . -name "$js" | xargs -I{} sed -e "$tokens" -i -- {}
48
- find . -name "$css" | xargs -I{} sed -e "$tokens" -i -- {}
49
-
50
- sed -e "s/latest/$ver/g" -i -- bower.json
51
-
52
- git add "$js"
53
- git add "$css"
54
-
55
- echo "Minifying..."
56
-
57
- echo "/*" > "$mini"
58
- cat LICENSE | sed "$tokens" >> "$mini"
59
- echo "*/" >> "$mini"
60
-
61
- curl -s \
62
- --data-urlencode "js_code@$js" \
63
- http://marijnhaverbeke.nl/uglifyjs \
64
- >> "$mini"
65
-
66
- git add "$mini"
67
-
68
- git commit -m "release $ver"
69
-
70
- echo "Tagging..."
71
- git tag -a "$tag" -m "tagged version $ver"
72
- git push "$remote" --tags
73
-
74
- echo "Cleaning Up..."
75
-
76
- git checkout "$curbranch"
77
- git branch -D "$branch"
78
-
79
- echo "Done"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2-bootstrap.css DELETED
@@ -1,87 +0,0 @@
1
- .form-control .select2-choice {
2
- border: 0;
3
- border-radius: 2px;
4
- }
5
-
6
- .form-control .select2-choice .select2-arrow {
7
- border-radius: 0 2px 2px 0;
8
- }
9
-
10
- .form-control.select2-container {
11
- height: auto !important;
12
- padding: 0;
13
- }
14
-
15
- .form-control.select2-container.select2-dropdown-open {
16
- border-color: #5897FB;
17
- border-radius: 3px 3px 0 0;
18
- }
19
-
20
- .form-control .select2-container.select2-dropdown-open .select2-choices {
21
- border-radius: 3px 3px 0 0;
22
- }
23
-
24
- .form-control.select2-container .select2-choices {
25
- border: 0 !important;
26
- border-radius: 3px;
27
- }
28
-
29
- .control-group.warning .select2-container .select2-choice,
30
- .control-group.warning .select2-container .select2-choices,
31
- .control-group.warning .select2-container-active .select2-choice,
32
- .control-group.warning .select2-container-active .select2-choices,
33
- .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choice,
34
- .control-group.warning .select2-dropdown-open.select2-drop-above .select2-choices,
35
- .control-group.warning .select2-container-multi.select2-container-active .select2-choices {
36
- border: 1px solid #C09853 !important;
37
- }
38
-
39
- .control-group.warning .select2-container .select2-choice div {
40
- border-left: 1px solid #C09853 !important;
41
- background: #FCF8E3 !important;
42
- }
43
-
44
- .control-group.error .select2-container .select2-choice,
45
- .control-group.error .select2-container .select2-choices,
46
- .control-group.error .select2-container-active .select2-choice,
47
- .control-group.error .select2-container-active .select2-choices,
48
- .control-group.error .select2-dropdown-open.select2-drop-above .select2-choice,
49
- .control-group.error .select2-dropdown-open.select2-drop-above .select2-choices,
50
- .control-group.error .select2-container-multi.select2-container-active .select2-choices {
51
- border: 1px solid #B94A48 !important;
52
- }
53
-
54
- .control-group.error .select2-container .select2-choice div {
55
- border-left: 1px solid #B94A48 !important;
56
- background: #F2DEDE !important;
57
- }
58
-
59
- .control-group.info .select2-container .select2-choice,
60
- .control-group.info .select2-container .select2-choices,
61
- .control-group.info .select2-container-active .select2-choice,
62
- .control-group.info .select2-container-active .select2-choices,
63
- .control-group.info .select2-dropdown-open.select2-drop-above .select2-choice,
64
- .control-group.info .select2-dropdown-open.select2-drop-above .select2-choices,
65
- .control-group.info .select2-container-multi.select2-container-active .select2-choices {
66
- border: 1px solid #3A87AD !important;
67
- }
68
-
69
- .control-group.info .select2-container .select2-choice div {
70
- border-left: 1px solid #3A87AD !important;
71
- background: #D9EDF7 !important;
72
- }
73
-
74
- .control-group.success .select2-container .select2-choice,
75
- .control-group.success .select2-container .select2-choices,
76
- .control-group.success .select2-container-active .select2-choice,
77
- .control-group.success .select2-container-active .select2-choices,
78
- .control-group.success .select2-dropdown-open.select2-drop-above .select2-choice,
79
- .control-group.success .select2-dropdown-open.select2-drop-above .select2-choices,
80
- .control-group.success .select2-container-multi.select2-container-active .select2-choices {
81
- border: 1px solid #468847 !important;
82
- }
83
-
84
- .control-group.success .select2-container .select2-choice div {
85
- border-left: 1px solid #468847 !important;
86
- background: #DFF0D8 !important;
87
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2-spinner.gif DELETED
Binary file
drkfr/js/vendor/select2/select2.css DELETED
@@ -1,704 +0,0 @@
1
- /*
2
- Version: 3.5.1 Timestamp: Tue Jul 22 18:58:56 EDT 2014
3
- */
4
- .select2-container {
5
- margin: 0;
6
- position: relative;
7
- display: inline-block;
8
- /* inline-block for ie7 */
9
- zoom: 1;
10
- *display: inline;
11
- vertical-align: middle;
12
- }
13
-
14
- .select2-container,
15
- .select2-drop,
16
- .select2-search,
17
- .select2-search input {
18
- /*
19
- Force border-box so that % widths fit the parent
20
- container without overlap because of margin/padding.
21
- More Info : http://www.quirksmode.org/css/box.html
22
- */
23
- -webkit-box-sizing: border-box; /* webkit */
24
- -moz-box-sizing: border-box; /* firefox */
25
- box-sizing: border-box; /* css3 */
26
- }
27
-
28
- .select2-container .select2-choice {
29
- display: block;
30
- height: 26px;
31
- padding: 0 0 0 8px;
32
- overflow: hidden;
33
- position: relative;
34
-
35
- border: 1px solid #aaa;
36
- white-space: nowrap;
37
- line-height: 26px;
38
- color: #444;
39
- text-decoration: none;
40
-
41
- border-radius: 4px;
42
-
43
- background-clip: padding-box;
44
-
45
- -webkit-touch-callout: none;
46
- -webkit-user-select: none;
47
- -moz-user-select: none;
48
- -ms-user-select: none;
49
- user-select: none;
50
-
51
- background-color: #fff;
52
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
53
- background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
54
- background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
55
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
56
- background-image: linear-gradient(to top, #eee 0%, #fff 50%);
57
- }
58
-
59
- html[dir="rtl"] .select2-container .select2-choice {
60
- padding: 0 8px 0 0;
61
- }
62
-
63
- .select2-container.select2-drop-above .select2-choice {
64
- border-bottom-color: #aaa;
65
-
66
- border-radius: 0 0 4px 4px;
67
-
68
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
69
- background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
70
- background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
71
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
72
- background-image: linear-gradient(to bottom, #eee 0%, #fff 90%);
73
- }
74
-
75
- .select2-container.select2-allowclear .select2-choice .select2-chosen {
76
- margin-right: 42px;
77
- }
78
-
79
- .select2-container .select2-choice > .select2-chosen {
80
- margin-right: 26px;
81
- display: block;
82
- overflow: hidden;
83
-
84
- white-space: nowrap;
85
-
86
- text-overflow: ellipsis;
87
- float: none;
88
- width: auto;
89
- }
90
-
91
- html[dir="rtl"] .select2-container .select2-choice > .select2-chosen {
92
- margin-left: 26px;
93
- margin-right: 0;
94
- }
95
-
96
- .select2-container .select2-choice abbr {
97
- display: none;
98
- width: 12px;
99
- height: 12px;
100
- position: absolute;
101
- right: 24px;
102
- top: 8px;
103
-
104
- font-size: 1px;
105
- text-decoration: none;
106
-
107
- border: 0;
108
- background: url('select2.png') right top no-repeat;
109
- cursor: pointer;
110
- outline: 0;
111
- }
112
-
113
- .select2-container.select2-allowclear .select2-choice abbr {
114
- display: inline-block;
115
- }
116
-
117
- .select2-container .select2-choice abbr:hover {
118
- background-position: right -11px;
119
- cursor: pointer;
120
- }
121
-
122
- .select2-drop-mask {
123
- border: 0;
124
- margin: 0;
125
- padding: 0;
126
- position: fixed;
127
- left: 0;
128
- top: 0;
129
- min-height: 100%;
130
- min-width: 100%;
131
- height: auto;
132
- width: auto;
133
- opacity: 0;
134
- z-index: 9998;
135
- /* styles required for IE to work */
136
- background-color: #fff;
137
- filter: alpha(opacity=0);
138
- }
139
-
140
- .select2-drop {
141
- width: 100%;
142
- margin-top: -1px;
143
- position: absolute;
144
- z-index: 9999;
145
- top: 100%;
146
-
147
- background: #fff;
148
- color: #000;
149
- border: 1px solid #aaa;
150
- border-top: 0;
151
-
152
- border-radius: 0 0 4px 4px;
153
-
154
- -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
155
- box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
156
- }
157
-
158
- .select2-drop.select2-drop-above {
159
- margin-top: 1px;
160
- border-top: 1px solid #aaa;
161
- border-bottom: 0;
162
-
163
- border-radius: 4px 4px 0 0;
164
-
165
- -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
166
- box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
167
- }
168
-
169
- .select2-drop-active {
170
- border: 1px solid #5897fb;
171
- border-top: none;
172
- }
173
-
174
- .select2-drop.select2-drop-above.select2-drop-active {
175
- border-top: 1px solid #5897fb;
176
- }
177
-
178
- .select2-drop-auto-width {
179
- border-top: 1px solid #aaa;
180
- width: auto;
181
- }
182
-
183
- .select2-drop-auto-width .select2-search {
184
- padding-top: 4px;
185
- }
186
-
187
- .select2-container .select2-choice .select2-arrow {
188
- display: inline-block;
189
- width: 18px;
190
- height: 100%;
191
- position: absolute;
192
- right: 0;
193
- top: 0;
194
-
195
- border-left: 1px solid #aaa;
196
- border-radius: 0 4px 4px 0;
197
-
198
- background-clip: padding-box;
199
-
200
- background: #ccc;
201
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
202
- background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
203
- background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
204
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
205
- background-image: linear-gradient(to top, #ccc 0%, #eee 60%);
206
- }
207
-
208
- html[dir="rtl"] .select2-container .select2-choice .select2-arrow {
209
- left: 0;
210
- right: auto;
211
-
212
- border-left: none;
213
- border-right: 1px solid #aaa;
214
- border-radius: 4px 0 0 4px;
215
- }
216
-
217
- .select2-container .select2-choice .select2-arrow b {
218
- display: block;
219
- width: 100%;
220
- height: 100%;
221
- background: url('select2.png') no-repeat 0 1px;
222
- }
223
-
224
- html[dir="rtl"] .select2-container .select2-choice .select2-arrow b {
225
- background-position: 2px 1px;
226
- }
227
-
228
- .select2-search {
229
- display: inline-block;
230
- width: 100%;
231
- min-height: 26px;
232
- margin: 0;
233
- padding-left: 4px;
234
- padding-right: 4px;
235
-
236
- position: relative;
237
- z-index: 10000;
238
-
239
- white-space: nowrap;
240
- }
241
-
242
- .select2-search input {
243
- width: 100%;
244
- height: auto !important;
245
- min-height: 26px;
246
- padding: 4px 20px 4px 5px;
247
- margin: 0;
248
-
249
- outline: 0;
250
- font-family: sans-serif;
251
- font-size: 1em;
252
-
253
- border: 1px solid #aaa;
254
- border-radius: 0;
255
-
256
- -webkit-box-shadow: none;
257
- box-shadow: none;
258
-
259
- background: #fff url('select2.png') no-repeat 100% -22px;
260
- background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
261
- background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
262
- background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
263
- background: url('select2.png') no-repeat 100% -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
264
- }
265
-
266
- html[dir="rtl"] .select2-search input {
267
- padding: 4px 5px 4px 20px;
268
-
269
- background: #fff url('select2.png') no-repeat -37px -22px;
270
- background: url('select2.png') no-repeat -37px -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
271
- background: url('select2.png') no-repeat -37px -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
272
- background: url('select2.png') no-repeat -37px -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
273
- background: url('select2.png') no-repeat -37px -22px, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
274
- }
275
-
276
- .select2-drop.select2-drop-above .select2-search input {
277
- margin-top: 4px;
278
- }
279
-
280
- .select2-search input.select2-active {
281
- background: #fff url('select2-spinner.gif') no-repeat 100%;
282
- background: url('select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
283
- background: url('select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
284
- background: url('select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
285
- background: url('select2-spinner.gif') no-repeat 100%, linear-gradient(to bottom, #fff 85%, #eee 99%) 0 0;
286
- }
287
-
288
- .select2-container-active .select2-choice,
289
- .select2-container-active .select2-choices {
290
- border: 1px solid #5897fb;
291
- outline: none;
292
-
293
- -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
294
- box-shadow: 0 0 5px rgba(0, 0, 0, .3);
295
- }
296
-
297
- .select2-dropdown-open .select2-choice {
298
- border-bottom-color: transparent;
299
- -webkit-box-shadow: 0 1px 0 #fff inset;
300
- box-shadow: 0 1px 0 #fff inset;
301
-
302
- border-bottom-left-radius: 0;
303
- border-bottom-right-radius: 0;
304
-
305
- background-color: #eee;
306
- background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
307
- background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
308
- background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
309
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
310
- background-image: linear-gradient(to top, #fff 0%, #eee 50%);
311
- }
312
-
313
- .select2-dropdown-open.select2-drop-above .select2-choice,
314
- .select2-dropdown-open.select2-drop-above .select2-choices {
315
- border: 1px solid #5897fb;
316
- border-top-color: transparent;
317
-
318
- background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
319
- background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
320
- background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
321
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
322
- background-image: linear-gradient(to bottom, #fff 0%, #eee 50%);
323
- }
324
-
325
- .select2-dropdown-open .select2-choice .select2-arrow {
326
- background: transparent;
327
- border-left: none;
328
- filter: none;
329
- }
330
- html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow {
331
- border-right: none;
332
- }
333
-
334
- .select2-dropdown-open .select2-choice .select2-arrow b {
335
- background-position: -18px 1px;
336
- }
337
-
338
- html[dir="rtl"] .select2-dropdown-open .select2-choice .select2-arrow b {
339
- background-position: -16px 1px;
340
- }
341
-
342
- .select2-hidden-accessible {
343
- border: 0;
344
- clip: rect(0 0 0 0);
345
- height: 1px;
346
- margin: -1px;
347
- overflow: hidden;
348
- padding: 0;
349
- position: absolute;
350
- width: 1px;
351
- }
352
-
353
- /* results */
354
- .select2-results {
355
- max-height: 200px;
356
- padding: 0 0 0 4px;
357
- margin: 4px 4px 4px 0;
358
- position: relative;
359
- overflow-x: hidden;
360
- overflow-y: auto;
361
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
362
- }
363
-
364
- html[dir="rtl"] .select2-results {
365
- padding: 0 4px 0 0;
366
- margin: 4px 0 4px 4px;
367
- }
368
-
369
- .select2-results ul.select2-result-sub {
370
- margin: 0;
371
- padding-left: 0;
372
- }
373
-
374
- .select2-results li {
375
- list-style: none;
376
- display: list-item;
377
- background-image: none;
378
- }
379
-
380
- .select2-results li.select2-result-with-children > .select2-result-label {
381
- font-weight: bold;
382
- }
383
-
384
- .select2-results .select2-result-label {
385
- padding: 3px 7px 4px;
386
- margin: 0;
387
- cursor: pointer;
388
-
389
- min-height: 1em;
390
-
391
- -webkit-touch-callout: none;
392
- -webkit-user-select: none;
393
- -moz-user-select: none;
394
- -ms-user-select: none;
395
- user-select: none;
396
- }
397
-
398
- .select2-results-dept-1 .select2-result-label { padding-left: 20px }
399
- .select2-results-dept-2 .select2-result-label { padding-left: 40px }
400
- .select2-results-dept-3 .select2-result-label { padding-left: 60px }
401
- .select2-results-dept-4 .select2-result-label { padding-left: 80px }
402
- .select2-results-dept-5 .select2-result-label { padding-left: 100px }
403
- .select2-results-dept-6 .select2-result-label { padding-left: 110px }
404
- .select2-results-dept-7 .select2-result-label { padding-left: 120px }
405
-
406
- .select2-results .select2-highlighted {
407
- background: #3875d7;
408
- color: #fff;
409
- }
410
-
411
- .select2-results li em {
412
- background: #feffde;
413
- font-style: normal;
414
- }
415
-
416
- .select2-results .select2-highlighted em {
417
- background: transparent;
418
- }
419
-
420
- .select2-results .select2-highlighted ul {
421
- background: #fff;
422
- color: #000;
423
- }
424
-
425
- .select2-results .select2-no-results,
426
- .select2-results .select2-searching,
427
- .select2-results .select2-ajax-error,
428
- .select2-results .select2-selection-limit {
429
- background: #f4f4f4;
430
- display: list-item;
431
- padding-left: 5px;
432
- }
433
-
434
- /*
435
- disabled look for disabled choices in the results dropdown
436
- */
437
- .select2-results .select2-disabled.select2-highlighted {
438
- color: #666;
439
- background: #f4f4f4;
440
- display: list-item;
441
- cursor: default;
442
- }
443
- .select2-results .select2-disabled {
444
- background: #f4f4f4;
445
- display: list-item;
446
- cursor: default;
447
- }
448
-
449
- .select2-results .select2-selected {
450
- display: none;
451
- }
452
-
453
- .select2-more-results.select2-active {
454
- background: #f4f4f4 url('select2-spinner.gif') no-repeat 100%;
455
- }
456
-
457
- .select2-results .select2-ajax-error {
458
- background: rgba(255, 50, 50, .2);
459
- }
460
-
461
- .select2-more-results {
462
- background: #f4f4f4;
463
- display: list-item;
464
- }
465
-
466
- /* disabled styles */
467
-
468
- .select2-container.select2-container-disabled .select2-choice {
469
- background-color: #f4f4f4;
470
- background-image: none;
471
- border: 1px solid #ddd;
472
- cursor: default;
473
- }
474
-
475
- .select2-container.select2-container-disabled .select2-choice .select2-arrow {
476
- background-color: #f4f4f4;
477
- background-image: none;
478
- border-left: 0;
479
- }
480
-
481
- .select2-container.select2-container-disabled .select2-choice abbr {
482
- display: none;
483
- }
484
-
485
-
486
- /* multiselect */
487
-
488
- .select2-container-multi .select2-choices {
489
- height: auto !important;
490
- height: 1%;
491
- margin: 0;
492
- padding: 0 5px 0 0;
493
- position: relative;
494
-
495
- border: 1px solid #aaa;
496
- cursor: text;
497
- overflow: hidden;
498
-
499
- background-color: #fff;
500
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
501
- background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
502
- background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
503
- background-image: linear-gradient(to bottom, #eee 1%, #fff 15%);
504
- }
505
-
506
- html[dir="rtl"] .select2-container-multi .select2-choices {
507
- padding: 0 0 0 5px;
508
- }
509
-
510
- .select2-locked {
511
- padding: 3px 5px 3px 5px !important;
512
- }
513
-
514
- .select2-container-multi .select2-choices {
515
- min-height: 26px;
516
- }
517
-
518
- .select2-container-multi.select2-container-active .select2-choices {
519
- border: 1px solid #5897fb;
520
- outline: none;
521
-
522
- -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
523
- box-shadow: 0 0 5px rgba(0, 0, 0, .3);
524
- }
525
- .select2-container-multi .select2-choices li {
526
- float: left;
527
- list-style: none;
528
- }
529
- html[dir="rtl"] .select2-container-multi .select2-choices li
530
- {
531
- float: right;
532
- }
533
- .select2-container-multi .select2-choices .select2-search-field {
534
- margin: 0;
535
- padding: 0;
536
- white-space: nowrap;
537
- }
538
-
539
- .select2-container-multi .select2-choices .select2-search-field input {
540
- padding: 5px;
541
- margin: 1px 0;
542
-
543
- font-family: sans-serif;
544
- font-size: 100%;
545
- color: #666;
546
- outline: 0;
547
- border: 0;
548
- -webkit-box-shadow: none;
549
- box-shadow: none;
550
- background: transparent !important;
551
- }
552
-
553
- .select2-container-multi .select2-choices .select2-search-field input.select2-active {
554
- background: #fff url('select2-spinner.gif') no-repeat 100% !important;
555
- }
556
-
557
- .select2-default {
558
- color: #999 !important;
559
- }
560
-
561
- .select2-container-multi .select2-choices .select2-search-choice {
562
- padding: 3px 5px 3px 18px;
563
- margin: 3px 0 3px 5px;
564
- position: relative;
565
-
566
- line-height: 13px;
567
- color: #333;
568
- cursor: default;
569
- border: 1px solid #aaaaaa;
570
-
571
- border-radius: 3px;
572
-
573
- -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
574
- box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
575
-
576
- background-clip: padding-box;
577
-
578
- -webkit-touch-callout: none;
579
- -webkit-user-select: none;
580
- -moz-user-select: none;
581
- -ms-user-select: none;
582
- user-select: none;
583
-
584
- background-color: #e4e4e4;
585
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
586
- background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
587
- background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
588
- background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
589
- background-image: linear-gradient(to top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
590
- }
591
- html[dir="rtl"] .select2-container-multi .select2-choices .select2-search-choice
592
- {
593
- margin: 3px 5px 3px 0;
594
- padding: 3px 18px 3px 5px;
595
- }
596
- .select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
597
- cursor: default;
598
- }
599
- .select2-container-multi .select2-choices .select2-search-choice-focus {
600
- background: #d4d4d4;
601
- }
602
-
603
- .select2-search-choice-close {
604
- display: block;
605
- width: 12px;
606
- height: 13px;
607
- position: absolute;
608
- right: 3px;
609
- top: 4px;
610
-
611
- font-size: 1px;
612
- outline: none;
613
- background: url('select2.png') right top no-repeat;
614
- }
615
- html[dir="rtl"] .select2-search-choice-close {
616
- right: auto;
617
- left: 3px;
618
- }
619
-
620
- .select2-container-multi .select2-search-choice-close {
621
- left: 3px;
622
- }
623
-
624
- html[dir="rtl"] .select2-container-multi .select2-search-choice-close {
625
- left: auto;
626
- right: 2px;
627
- }
628
-
629
- .select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
630
- background-position: right -11px;
631
- }
632
- .select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
633
- background-position: right -11px;
634
- }
635
-
636
- /* disabled styles */
637
- .select2-container-multi.select2-container-disabled .select2-choices {
638
- background-color: #f4f4f4;
639
- background-image: none;
640
- border: 1px solid #ddd;
641
- cursor: default;
642
- }
643
-
644
- .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
645
- padding: 3px 5px 3px 5px;
646
- border: 1px solid #ddd;
647
- background-image: none;
648
- background-color: #f4f4f4;
649
- }
650
-
651
- .select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
652
- background: none;
653
- }
654
- /* end multiselect */
655
-
656
-
657
- .select2-result-selectable .select2-match,
658
- .select2-result-unselectable .select2-match {
659
- text-decoration: underline;
660
- }
661
-
662
- .select2-offscreen, .select2-offscreen:focus {
663
- clip: rect(0 0 0 0) !important;
664
- width: 1px !important;
665
- height: 1px !important;
666
- border: 0 !important;
667
- margin: 0 !important;
668
- padding: 0 !important;
669
- overflow: hidden !important;
670
- position: absolute !important;
671
- outline: 0 !important;
672
- left: 0px !important;
673
- top: 0px !important;
674
- }
675
-
676
- .select2-display-none {
677
- display: none;
678
- }
679
-
680
- .select2-measure-scrollbar {
681
- position: absolute;
682
- top: -10000px;
683
- left: -10000px;
684
- width: 100px;
685
- height: 100px;
686
- overflow: scroll;
687
- }
688
-
689
- /* Retina-ize icons */
690
-
691
- @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 2dppx) {
692
- .select2-search input,
693
- .select2-search-choice-close,
694
- .select2-container .select2-choice abbr,
695
- .select2-container .select2-choice .select2-arrow b {
696
- background-image: url('select2x2.png') !important;
697
- background-repeat: no-repeat !important;
698
- background-size: 60px 40px !important;
699
- }
700
-
701
- .select2-search input {
702
- background-position: 100% -21px !important;
703
- }
704
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2.jquery.json DELETED
@@ -1,36 +0,0 @@
1
- {
2
- "name": "select2",
3
- "title": "Select2",
4
- "description": "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results.",
5
- "keywords": [
6
- "select",
7
- "autocomplete",
8
- "typeahead",
9
- "dropdown",
10
- "multiselect",
11
- "tag",
12
- "tagging"
13
- ],
14
- "version": "3.5.1",
15
- "author": {
16
- "name": "Igor Vaynberg",
17
- "url": "https://github.com/ivaynberg"
18
- },
19
- "licenses": [
20
- {
21
- "type": "Apache",
22
- "url": "http://www.apache.org/licenses/LICENSE-2.0"
23
- },
24
- {
25
- "type": "GPL v2",
26
- "url": "http://www.gnu.org/licenses/gpl-2.0.html"
27
- }
28
- ],
29
- "bugs": "https://github.com/ivaynberg/select2/issues",
30
- "homepage": "http://ivaynberg.github.com/select2",
31
- "docs": "http://ivaynberg.github.com/select2/",
32
- "download": "https://github.com/ivaynberg/select2/tags",
33
- "dependencies": {
34
- "jquery": ">=1.7.1"
35
- }
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2.js DELETED
@@ -1,3508 +0,0 @@
1
- /*
2
- Copyright 2012 Igor Vaynberg
3
-
4
- Version: 3.5.1 Timestamp: Tue Jul 22 18:58:56 EDT 2014
5
-
6
- This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
7
- General Public License version 2 (the "GPL License"). You may choose either license to govern your
8
- use of this software only upon the condition that you accept all of the terms of either the Apache
9
- License or the GPL License.
10
-
11
- You may obtain a copy of the Apache License and the GPL License at:
12
-
13
- http://www.apache.org/licenses/LICENSE-2.0
14
- http://www.gnu.org/licenses/gpl-2.0.html
15
-
16
- Unless required by applicable law or agreed to in writing, software distributed under the
17
- Apache License or the GPL License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
18
- CONDITIONS OF ANY KIND, either express or implied. See the Apache License and the GPL License for
19
- the specific language governing permissions and limitations under the Apache License and the GPL License.
20
- */
21
- (function ($) {
22
- if(typeof $.fn.each2 == "undefined") {
23
- $.extend($.fn, {
24
- /*
25
- * 4-10 times faster .each replacement
26
- * use it carefully, as it overrides jQuery context of element on each iteration
27
- */
28
- each2 : function (c) {
29
- var j = $([0]), i = -1, l = this.length;
30
- while (
31
- ++i < l
32
- && (j.context = j[0] = this[i])
33
- && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object
34
- );
35
- return this;
36
- }
37
- });
38
- }
39
- })(jQuery);
40
-
41
- (function ($, undefined) {
42
- "use strict";
43
- /*global document, window, jQuery, console */
44
-
45
- if (window.Select2 !== undefined) {
46
- return;
47
- }
48
-
49
- var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer,
50
- lastMousePosition={x:0,y:0}, $document, scrollBarDimensions,
51
-
52
- KEY = {
53
- TAB: 9,
54
- ENTER: 13,
55
- ESC: 27,
56
- SPACE: 32,
57
- LEFT: 37,
58
- UP: 38,
59
- RIGHT: 39,
60
- DOWN: 40,
61
- SHIFT: 16,
62
- CTRL: 17,
63
- ALT: 18,
64
- PAGE_UP: 33,
65
- PAGE_DOWN: 34,
66
- HOME: 36,
67
- END: 35,
68
- BACKSPACE: 8,
69
- DELETE: 46,
70
- isArrow: function (k) {
71
- k = k.which ? k.which : k;
72
- switch (k) {
73
- case KEY.LEFT:
74
- case KEY.RIGHT:
75
- case KEY.UP:
76
- case KEY.DOWN:
77
- return true;
78
- }
79
- return false;
80
- },
81
- isControl: function (e) {
82
- var k = e.which;
83
- switch (k) {
84
- case KEY.SHIFT:
85
- case KEY.CTRL:
86
- case KEY.ALT:
87
- return true;
88
- }
89
-
90
- if (e.metaKey) return true;
91
-
92
- return false;
93
- },
94
- isFunctionKey: function (k) {
95
- k = k.which ? k.which : k;
96
- return k >= 112 && k <= 123;
97
- }
98
- },
99
- MEASURE_SCROLLBAR_TEMPLATE = "<div class='select2-measure-scrollbar'></div>",
100
-
101
- DIACRITICS = {"\u24B6":"A","\uFF21":"A","\u00C0":"A","\u00C1":"A","\u00C2":"A","\u1EA6":"A","\u1EA4":"A","\u1EAA":"A","\u1EA8":"A","\u00C3":"A","\u0100":"A","\u0102":"A","\u1EB0":"A","\u1EAE":"A","\u1EB4":"A","\u1EB2":"A","\u0226":"A","\u01E0":"A","\u00C4":"A","\u01DE":"A","\u1EA2":"A","\u00C5":"A","\u01FA":"A","\u01CD":"A","\u0200":"A","\u0202":"A","\u1EA0":"A","\u1EAC":"A","\u1EB6":"A","\u1E00":"A","\u0104":"A","\u023A":"A","\u2C6F":"A","\uA732":"AA","\u00C6":"AE","\u01FC":"AE","\u01E2":"AE","\uA734":"AO","\uA736":"AU","\uA738":"AV","\uA73A":"AV","\uA73C":"AY","\u24B7":"B","\uFF22":"B","\u1E02":"B","\u1E04":"B","\u1E06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24B8":"C","\uFF23":"C","\u0106":"C","\u0108":"C","\u010A":"C","\u010C":"C","\u00C7":"C","\u1E08":"C","\u0187":"C","\u023B":"C","\uA73E":"C","\u24B9":"D","\uFF24":"D","\u1E0A":"D","\u010E":"D","\u1E0C":"D","\u1E10":"D","\u1E12":"D","\u1E0E":"D","\u0110":"D","\u018B":"D","\u018A":"D","\u0189":"D","\uA779":"D","\u01F1":"DZ","\u01C4":"DZ","\u01F2":"Dz","\u01C5":"Dz","\u24BA":"E","\uFF25":"E","\u00C8":"E","\u00C9":"E","\u00CA":"E","\u1EC0":"E","\u1EBE":"E","\u1EC4":"E","\u1EC2":"E","\u1EBC":"E","\u0112":"E","\u1E14":"E","\u1E16":"E","\u0114":"E","\u0116":"E","\u00CB":"E","\u1EBA":"E","\u011A":"E","\u0204":"E","\u0206":"E","\u1EB8":"E","\u1EC6":"E","\u0228":"E","\u1E1C":"E","\u0118":"E","\u1E18":"E","\u1E1A":"E","\u0190":"E","\u018E":"E","\u24BB":"F","\uFF26":"F","\u1E1E":"F","\u0191":"F","\uA77B":"F","\u24BC":"G","\uFF27":"G","\u01F4":"G","\u011C":"G","\u1E20":"G","\u011E":"G","\u0120":"G","\u01E6":"G","\u0122":"G","\u01E4":"G","\u0193":"G","\uA7A0":"G","\uA77D":"G","\uA77E":"G","\u24BD":"H","\uFF28":"H","\u0124":"H","\u1E22":"H","\u1E26":"H","\u021E":"H","\u1E24":"H","\u1E28":"H","\u1E2A":"H","\u0126":"H","\u2C67":"H","\u2C75":"H","\uA78D":"H","\u24BE":"I","\uFF29":"I","\u00CC":"I","\u00CD":"I","\u00CE":"I","\u0128":"I","\u012A":"I","\u012C":"I","\u0130":"I","\u00CF":"I","\u1E2E":"I","\u1EC8":"I","\u01CF":"I","\u0208":"I","\u020A":"I","\u1ECA":"I","\u012E":"I","\u1E2C":"I","\u0197":"I","\u24BF":"J","\uFF2A":"J","\u0134":"J","\u0248":"J","\u24C0":"K","\uFF2B":"K","\u1E30":"K","\u01E8":"K","\u1E32":"K","\u0136":"K","\u1E34":"K","\u0198":"K","\u2C69":"K","\uA740":"K","\uA742":"K","\uA744":"K","\uA7A2":"K","\u24C1":"L","\uFF2C":"L","\u013F":"L","\u0139":"L","\u013D":"L","\u1E36":"L","\u1E38":"L","\u013B":"L","\u1E3C":"L","\u1E3A":"L","\u0141":"L","\u023D":"L","\u2C62":"L","\u2C60":"L","\uA748":"L","\uA746":"L","\uA780":"L","\u01C7":"LJ","\u01C8":"Lj","\u24C2":"M","\uFF2D":"M","\u1E3E":"M","\u1E40":"M","\u1E42":"M","\u2C6E":"M","\u019C":"M","\u24C3":"N","\uFF2E":"N","\u01F8":"N","\u0143":"N","\u00D1":"N","\u1E44":"N","\u0147":"N","\u1E46":"N","\u0145":"N","\u1E4A":"N","\u1E48":"N","\u0220":"N","\u019D":"N","\uA790":"N","\uA7A4":"N","\u01CA":"NJ","\u01CB":"Nj","\u24C4":"O","\uFF2F":"O","\u00D2":"O","\u00D3":"O","\u00D4":"O","\u1ED2":"O","\u1ED0":"O","\u1ED6":"O","\u1ED4":"O","\u00D5":"O","\u1E4C":"O","\u022C":"O","\u1E4E":"O","\u014C":"O","\u1E50":"O","\u1E52":"O","\u014E":"O","\u022E":"O","\u0230":"O","\u00D6":"O","\u022A":"O","\u1ECE":"O","\u0150":"O","\u01D1":"O","\u020C":"O","\u020E":"O","\u01A0":"O","\u1EDC":"O","\u1EDA":"O","\u1EE0":"O","\u1EDE":"O","\u1EE2":"O","\u1ECC":"O","\u1ED8":"O","\u01EA":"O","\u01EC":"O","\u00D8":"O","\u01FE":"O","\u0186":"O","\u019F":"O","\uA74A":"O","\uA74C":"O","\u01A2":"OI","\uA74E":"OO","\u0222":"OU","\u24C5":"P","\uFF30":"P","\u1E54":"P","\u1E56":"P","\u01A4":"P","\u2C63":"P","\uA750":"P","\uA752":"P","\uA754":"P","\u24C6":"Q","\uFF31":"Q","\uA756":"Q","\uA758":"Q","\u024A":"Q","\u24C7":"R","\uFF32":"R","\u0154":"R","\u1E58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1E5A":"R","\u1E5C":"R","\u0156":"R","\u1E5E":"R","\u024C":"R","\u2C64":"R","\uA75A":"R","\uA7A6":"R","\uA782":"R","\u24C8":"S","\uFF33":"S","\u1E9E":"S","\u015A":"S","\u1E64":"S","\u015C":"S","\u1E60":"S","\u0160":"S","\u1E66":"S","\u1E62":"S","\u1E68":"S","\u0218":"S","\u015E":"S","\u2C7E":"S","\uA7A8":"S","\uA784":"S","\u24C9":"T","\uFF34":"T","\u1E6A":"T","\u0164":"T","\u1E6C":"T","\u021A":"T","\u0162":"T","\u1E70":"T","\u1E6E":"T","\u0166":"T","\u01AC":"T","\u01AE":"T","\u023E":"T","\uA786":"T","\uA728":"TZ","\u24CA":"U","\uFF35":"U","\u00D9":"U","\u00DA":"U","\u00DB":"U","\u0168":"U","\u1E78":"U","\u016A":"U","\u1E7A":"U","\u016C":"U","\u00DC":"U","\u01DB":"U","\u01D7":"U","\u01D5":"U","\u01D9":"U","\u1EE6":"U","\u016E":"U","\u0170":"U","\u01D3":"U","\u0214":"U","\u0216":"U","\u01AF":"U","\u1EEA":"U","\u1EE8":"U","\u1EEE":"U","\u1EEC":"U","\u1EF0":"U","\u1EE4":"U","\u1E72":"U","\u0172":"U","\u1E76":"U","\u1E74":"U","\u0244":"U","\u24CB":"V","\uFF36":"V","\u1E7C":"V","\u1E7E":"V","\u01B2":"V","\uA75E":"V","\u0245":"V","\uA760":"VY","\u24CC":"W","\uFF37":"W","\u1E80":"W","\u1E82":"W","\u0174":"W","\u1E86":"W","\u1E84":"W","\u1E88":"W","\u2C72":"W","\u24CD":"X","\uFF38":"X","\u1E8A":"X","\u1E8C":"X","\u24CE":"Y","\uFF39":"Y","\u1EF2":"Y","\u00DD":"Y","\u0176":"Y","\u1EF8":"Y","\u0232":"Y","\u1E8E":"Y","\u0178":"Y","\u1EF6":"Y","\u1EF4":"Y","\u01B3":"Y","\u024E":"Y","\u1EFE":"Y","\u24CF":"Z","\uFF3A":"Z","\u0179":"Z","\u1E90":"Z","\u017B":"Z","\u017D":"Z","\u1E92":"Z","\u1E94":"Z","\u01B5":"Z","\u0224":"Z","\u2C7F":"Z","\u2C6B":"Z","\uA762":"Z","\u24D0":"a","\uFF41":"a","\u1E9A":"a","\u00E0":"a","\u00E1":"a","\u00E2":"a","\u1EA7":"a","\u1EA5":"a","\u1EAB":"a","\u1EA9":"a","\u00E3":"a","\u0101":"a","\u0103":"a","\u1EB1":"a","\u1EAF":"a","\u1EB5":"a","\u1EB3":"a","\u0227":"a","\u01E1":"a","\u00E4":"a","\u01DF":"a","\u1EA3":"a","\u00E5":"a","\u01FB":"a","\u01CE":"a","\u0201":"a","\u0203":"a","\u1EA1":"a","\u1EAD":"a","\u1EB7":"a","\u1E01":"a","\u0105":"a","\u2C65":"a","\u0250":"a","\uA733":"aa","\u00E6":"ae","\u01FD":"ae","\u01E3":"ae","\uA735":"ao","\uA737":"au","\uA739":"av","\uA73B":"av","\uA73D":"ay","\u24D1":"b","\uFF42":"b","\u1E03":"b","\u1E05":"b","\u1E07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24D2":"c","\uFF43":"c","\u0107":"c","\u0109":"c","\u010B":"c","\u010D":"c","\u00E7":"c","\u1E09":"c","\u0188":"c","\u023C":"c","\uA73F":"c","\u2184":"c","\u24D3":"d","\uFF44":"d","\u1E0B":"d","\u010F":"d","\u1E0D":"d","\u1E11":"d","\u1E13":"d","\u1E0F":"d","\u0111":"d","\u018C":"d","\u0256":"d","\u0257":"d","\uA77A":"d","\u01F3":"dz","\u01C6":"dz","\u24D4":"e","\uFF45":"e","\u00E8":"e","\u00E9":"e","\u00EA":"e","\u1EC1":"e","\u1EBF":"e","\u1EC5":"e","\u1EC3":"e","\u1EBD":"e","\u0113":"e","\u1E15":"e","\u1E17":"e","\u0115":"e","\u0117":"e","\u00EB":"e","\u1EBB":"e","\u011B":"e","\u0205":"e","\u0207":"e","\u1EB9":"e","\u1EC7":"e","\u0229":"e","\u1E1D":"e","\u0119":"e","\u1E19":"e","\u1E1B":"e","\u0247":"e","\u025B":"e","\u01DD":"e","\u24D5":"f","\uFF46":"f","\u1E1F":"f","\u0192":"f","\uA77C":"f","\u24D6":"g","\uFF47":"g","\u01F5":"g","\u011D":"g","\u1E21":"g","\u011F":"g","\u0121":"g","\u01E7":"g","\u0123":"g","\u01E5":"g","\u0260":"g","\uA7A1":"g","\u1D79":"g","\uA77F":"g","\u24D7":"h","\uFF48":"h","\u0125":"h","\u1E23":"h","\u1E27":"h","\u021F":"h","\u1E25":"h","\u1E29":"h","\u1E2B":"h","\u1E96":"h","\u0127":"h","\u2C68":"h","\u2C76":"h","\u0265":"h","\u0195":"hv","\u24D8":"i","\uFF49":"i","\u00EC":"i","\u00ED":"i","\u00EE":"i","\u0129":"i","\u012B":"i","\u012D":"i","\u00EF":"i","\u1E2F":"i","\u1EC9":"i","\u01D0":"i","\u0209":"i","\u020B":"i","\u1ECB":"i","\u012F":"i","\u1E2D":"i","\u0268":"i","\u0131":"i","\u24D9":"j","\uFF4A":"j","\u0135":"j","\u01F0":"j","\u0249":"j","\u24DA":"k","\uFF4B":"k","\u1E31":"k","\u01E9":"k","\u1E33":"k","\u0137":"k","\u1E35":"k","\u0199":"k","\u2C6A":"k","\uA741":"k","\uA743":"k","\uA745":"k","\uA7A3":"k","\u24DB":"l","\uFF4C":"l","\u0140":"l","\u013A":"l","\u013E":"l","\u1E37":"l","\u1E39":"l","\u013C":"l","\u1E3D":"l","\u1E3B":"l","\u017F":"l","\u0142":"l","\u019A":"l","\u026B":"l","\u2C61":"l","\uA749":"l","\uA781":"l","\uA747":"l","\u01C9":"lj","\u24DC":"m","\uFF4D":"m","\u1E3F":"m","\u1E41":"m","\u1E43":"m","\u0271":"m","\u026F":"m","\u24DD":"n","\uFF4E":"n","\u01F9":"n","\u0144":"n","\u00F1":"n","\u1E45":"n","\u0148":"n","\u1E47":"n","\u0146":"n","\u1E4B":"n","\u1E49":"n","\u019E":"n","\u0272":"n","\u0149":"n","\uA791":"n","\uA7A5":"n","\u01CC":"nj","\u24DE":"o","\uFF4F":"o","\u00F2":"o","\u00F3":"o","\u00F4":"o","\u1ED3":"o","\u1ED1":"o","\u1ED7":"o","\u1ED5":"o","\u00F5":"o","\u1E4D":"o","\u022D":"o","\u1E4F":"o","\u014D":"o","\u1E51":"o","\u1E53":"o","\u014F":"o","\u022F":"o","\u0231":"o","\u00F6":"o","\u022B":"o","\u1ECF":"o","\u0151":"o","\u01D2":"o","\u020D":"o","\u020F":"o","\u01A1":"o","\u1EDD":"o","\u1EDB":"o","\u1EE1":"o","\u1EDF":"o","\u1EE3":"o","\u1ECD":"o","\u1ED9":"o","\u01EB":"o","\u01ED":"o","\u00F8":"o","\u01FF":"o","\u0254":"o","\uA74B":"o","\uA74D":"o","\u0275":"o","\u01A3":"oi","\u0223":"ou","\uA74F":"oo","\u24DF":"p","\uFF50":"p","\u1E55":"p","\u1E57":"p","\u01A5":"p","\u1D7D":"p","\uA751":"p","\uA753":"p","\uA755":"p","\u24E0":"q","\uFF51":"q","\u024B":"q","\uA757":"q","\uA759":"q","\u24E1":"r","\uFF52":"r","\u0155":"r","\u1E59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1E5B":"r","\u1E5D":"r","\u0157":"r","\u1E5F":"r","\u024D":"r","\u027D":"r","\uA75B":"r","\uA7A7":"r","\uA783":"r","\u24E2":"s","\uFF53":"s","\u00DF":"s","\u015B":"s","\u1E65":"s","\u015D":"s","\u1E61":"s","\u0161":"s","\u1E67":"s","\u1E63":"s","\u1E69":"s","\u0219":"s","\u015F":"s","\u023F":"s","\uA7A9":"s","\uA785":"s","\u1E9B":"s","\u24E3":"t","\uFF54":"t","\u1E6B":"t","\u1E97":"t","\u0165":"t","\u1E6D":"t","\u021B":"t","\u0163":"t","\u1E71":"t","\u1E6F":"t","\u0167":"t","\u01AD":"t","\u0288":"t","\u2C66":"t","\uA787":"t","\uA729":"tz","\u24E4":"u","\uFF55":"u","\u00F9":"u","\u00FA":"u","\u00FB":"u","\u0169":"u","\u1E79":"u","\u016B":"u","\u1E7B":"u","\u016D":"u","\u00FC":"u","\u01DC":"u","\u01D8":"u","\u01D6":"u","\u01DA":"u","\u1EE7":"u","\u016F":"u","\u0171":"u","\u01D4":"u","\u0215":"u","\u0217":"u","\u01B0":"u","\u1EEB":"u","\u1EE9":"u","\u1EEF":"u","\u1EED":"u","\u1EF1":"u","\u1EE5":"u","\u1E73":"u","\u0173":"u","\u1E77":"u","\u1E75":"u","\u0289":"u","\u24E5":"v","\uFF56":"v","\u1E7D":"v","\u1E7F":"v","\u028B":"v","\uA75F":"v","\u028C":"v","\uA761":"vy","\u24E6":"w","\uFF57":"w","\u1E81":"w","\u1E83":"w","\u0175":"w","\u1E87":"w","\u1E85":"w","\u1E98":"w","\u1E89":"w","\u2C73":"w","\u24E7":"x","\uFF58":"x","\u1E8B":"x","\u1E8D":"x","\u24E8":"y","\uFF59":"y","\u1EF3":"y","\u00FD":"y","\u0177":"y","\u1EF9":"y","\u0233":"y","\u1E8F":"y","\u00FF":"y","\u1EF7":"y","\u1E99":"y","\u1EF5":"y","\u01B4":"y","\u024F":"y","\u1EFF":"y","\u24E9":"z","\uFF5A":"z","\u017A":"z","\u1E91":"z","\u017C":"z","\u017E":"z","\u1E93":"z","\u1E95":"z","\u01B6":"z","\u0225":"z","\u0240":"z","\u2C6C":"z","\uA763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038A":"\u0399","\u03AA":"\u0399","\u038C":"\u039F","\u038E":"\u03A5","\u03AB":"\u03A5","\u038F":"\u03A9","\u03AC":"\u03B1","\u03AD":"\u03B5","\u03AE":"\u03B7","\u03AF":"\u03B9","\u03CA":"\u03B9","\u0390":"\u03B9","\u03CC":"\u03BF","\u03CD":"\u03C5","\u03CB":"\u03C5","\u03B0":"\u03C5","\u03C9":"\u03C9","\u03C2":"\u03C3"};
102
-
103
- $document = $(document);
104
-
105
- nextUid=(function() { var counter=1; return function() { return counter++; }; }());
106
-
107
-
108
- function reinsertElement(element) {
109
- var placeholder = $(document.createTextNode(''));
110
-
111
- element.before(placeholder);
112
- placeholder.before(element);
113
- placeholder.remove();
114
- }
115
-
116
- function stripDiacritics(str) {
117
- // Used 'uni range + named function' from http://jsperf.com/diacritics/18
118
- function match(a) {
119
- return DIACRITICS[a] || a;
120
- }
121
-
122
- return str.replace(/[^\u0000-\u007E]/g, match);
123
- }
124
-
125
- function indexOf(value, array) {
126
- var i = 0, l = array.length;
127
- for (; i < l; i = i + 1) {
128
- if (equal(value, array[i])) return i;
129
- }
130
- return -1;
131
- }
132
-
133
- function measureScrollbar () {
134
- var $template = $( MEASURE_SCROLLBAR_TEMPLATE );
135
- $template.appendTo('body');
136
-
137
- var dim = {
138
- width: $template.width() - $template[0].clientWidth,
139
- height: $template.height() - $template[0].clientHeight
140
- };
141
- $template.remove();
142
-
143
- return dim;
144
- }
145
-
146
- /**
147
- * Compares equality of a and b
148
- * @param a
149
- * @param b
150
- */
151
- function equal(a, b) {
152
- if (a === b) return true;
153
- if (a === undefined || b === undefined) return false;
154
- if (a === null || b === null) return false;
155
- // Check whether 'a' or 'b' is a string (primitive or object).
156
- // The concatenation of an empty string (+'') converts its argument to a string's primitive.
157
- if (a.constructor === String) return a+'' === b+''; // a+'' - in case 'a' is a String object
158
- if (b.constructor === String) return b+'' === a+''; // b+'' - in case 'b' is a String object
159
- return false;
160
- }
161
-
162
- /**
163
- * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty
164
- * strings
165
- * @param string
166
- * @param separator
167
- */
168
- function splitVal(string, separator) {
169
- var val, i, l;
170
- if (string === null || string.length < 1) return [];
171
- val = string.split(separator);
172
- for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]);
173
- return val;
174
- }
175
-
176
- function getSideBorderPadding(element) {
177
- return element.outerWidth(false) - element.width();
178
- }
179
-
180
- function installKeyUpChangeEvent(element) {
181
- var key="keyup-change-value";
182
- element.on("keydown", function () {
183
- if ($.data(element, key) === undefined) {
184
- $.data(element, key, element.val());
185
- }
186
- });
187
- element.on("keyup", function () {
188
- var val= $.data(element, key);
189
- if (val !== undefined && element.val() !== val) {
190
- $.removeData(element, key);
191
- element.trigger("keyup-change");
192
- }
193
- });
194
- }
195
-
196
-
197
- /**
198
- * filters mouse events so an event is fired only if the mouse moved.
199
- *
200
- * filters out mouse events that occur when mouse is stationary but
201
- * the elements under the pointer are scrolled.
202
- */
203
- function installFilteredMouseMove(element) {
204
- element.on("mousemove", function (e) {
205
- var lastpos = lastMousePosition;
206
- if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) {
207
- $(e.target).trigger("mousemove-filtered", e);
208
- }
209
- });
210
- }
211
-
212
- /**
213
- * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made
214
- * within the last quietMillis milliseconds.
215
- *
216
- * @param quietMillis number of milliseconds to wait before invoking fn
217
- * @param fn function to be debounced
218
- * @param ctx object to be used as this reference within fn
219
- * @return debounced version of fn
220
- */
221
- function debounce(quietMillis, fn, ctx) {
222
- ctx = ctx || undefined;
223
- var timeout;
224
- return function () {
225
- var args = arguments;
226
- window.clearTimeout(timeout);
227
- timeout = window.setTimeout(function() {
228
- fn.apply(ctx, args);
229
- }, quietMillis);
230
- };
231
- }
232
-
233
- function installDebouncedScroll(threshold, element) {
234
- var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);});
235
- element.on("scroll", function (e) {
236
- if (indexOf(e.target, element.get()) >= 0) notify(e);
237
- });
238
- }
239
-
240
- function focus($el) {
241
- if ($el[0] === document.activeElement) return;
242
-
243
- /* set the focus in a 0 timeout - that way the focus is set after the processing
244
- of the current event has finished - which seems like the only reliable way
245
- to set focus */
246
- window.setTimeout(function() {
247
- var el=$el[0], pos=$el.val().length, range;
248
-
249
- $el.focus();
250
-
251
- /* make sure el received focus so we do not error out when trying to manipulate the caret.
252
- sometimes modals or others listeners may steal it after its set */
253
- var isVisible = (el.offsetWidth > 0 || el.offsetHeight > 0);
254
- if (isVisible && el === document.activeElement) {
255
-
256
- /* after the focus is set move the caret to the end, necessary when we val()
257
- just before setting focus */
258
- if(el.setSelectionRange)
259
- {
260
- el.setSelectionRange(pos, pos);
261
- }
262
- else if (el.createTextRange) {
263
- range = el.createTextRange();
264
- range.collapse(false);
265
- range.select();
266
- }
267
- }
268
- }, 0);
269
- }
270
-
271
- function getCursorInfo(el) {
272
- el = $(el)[0];
273
- var offset = 0;
274
- var length = 0;
275
- if ('selectionStart' in el) {
276
- offset = el.selectionStart;
277
- length = el.selectionEnd - offset;
278
- } else if ('selection' in document) {
279
- el.focus();
280
- var sel = document.selection.createRange();
281
- length = document.selection.createRange().text.length;
282
- sel.moveStart('character', -el.value.length);
283
- offset = sel.text.length - length;
284
- }
285
- return { offset: offset, length: length };
286
- }
287
-
288
- function killEvent(event) {
289
- event.preventDefault();
290
- event.stopPropagation();
291
- }
292
- function killEventImmediately(event) {
293
- event.preventDefault();
294
- event.stopImmediatePropagation();
295
- }
296
-
297
- function measureTextWidth(e) {
298
- if (!sizer){
299
- var style = e[0].currentStyle || window.getComputedStyle(e[0], null);
300
- sizer = $(document.createElement("div")).css({
301
- position: "absolute",
302
- left: "-10000px",
303
- top: "-10000px",
304
- display: "none",
305
- fontSize: style.fontSize,
306
- fontFamily: style.fontFamily,
307
- fontStyle: style.fontStyle,
308
- fontWeight: style.fontWeight,
309
- letterSpacing: style.letterSpacing,
310
- textTransform: style.textTransform,
311
- whiteSpace: "nowrap"
312
- });
313
- sizer.attr("class","select2-sizer");
314
- $("body").append(sizer);
315
- }
316
- sizer.text(e.val());
317
- return sizer.width();
318
- }
319
-
320
- function syncCssClasses(dest, src, adapter) {
321
- var classes, replacements = [], adapted;
322
-
323
- classes = $.trim(dest.attr("class"));
324
-
325
- if (classes) {
326
- classes = '' + classes; // for IE which returns object
327
-
328
- $(classes.split(/\s+/)).each2(function() {
329
- if (this.indexOf("select2-") === 0) {
330
- replacements.push(this);
331
- }
332
- });
333
- }
334
-
335
- classes = $.trim(src.attr("class"));
336
-
337
- if (classes) {
338
- classes = '' + classes; // for IE which returns object
339
-
340
- $(classes.split(/\s+/)).each2(function() {
341
- if (this.indexOf("select2-") !== 0) {
342
- adapted = adapter(this);
343
-
344
- if (adapted) {
345
- replacements.push(adapted);
346
- }
347
- }
348
- });
349
- }
350
-
351
- dest.attr("class", replacements.join(" "));
352
- }
353
-
354
-
355
- function markMatch(text, term, markup, escapeMarkup) {
356
- var match=stripDiacritics(text.toUpperCase()).indexOf(stripDiacritics(term.toUpperCase())),
357
- tl=term.length;
358
-
359
- if (match<0) {
360
- markup.push(escapeMarkup(text));
361
- return;
362
- }
363
-
364
- markup.push(escapeMarkup(text.substring(0, match)));
365
- markup.push("<span class='select2-match'>");
366
- markup.push(escapeMarkup(text.substring(match, match + tl)));
367
- markup.push("</span>");
368
- markup.push(escapeMarkup(text.substring(match + tl, text.length)));
369
- }
370
-
371
- function defaultEscapeMarkup(markup) {
372
- var replace_map = {
373
- '\\': '&#92;',
374
- '&': '&amp;',
375
- '<': '&lt;',
376
- '>': '&gt;',
377
- '"': '&quot;',
378
- "'": '&#39;',
379
- "/": '&#47;'
380
- };
381
-
382
- return String(markup).replace(/[&<>"'\/\\]/g, function (match) {
383
- return replace_map[match];
384
- });
385
- }
386
-
387
- /**
388
- * Produces an ajax-based query function
389
- *
390
- * @param options object containing configuration parameters
391
- * @param options.params parameter map for the transport ajax call, can contain such options as cache, jsonpCallback, etc. see $.ajax
392
- * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax
393
- * @param options.url url for the data
394
- * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url.
395
- * @param options.dataType request data type: ajax, jsonp, other datatypes supported by jQuery's $.ajax function or the transport function if specified
396
- * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often
397
- * @param options.results a function(remoteData, pageNumber, query) that converts data returned form the remote request to the format expected by Select2.
398
- * The expected format is an object containing the following keys:
399
- * results array of objects that will be used as choices
400
- * more (optional) boolean indicating whether there are more results available
401
- * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true}
402
- */
403
- function ajax(options) {
404
- var timeout, // current scheduled but not yet executed request
405
- handler = null,
406
- quietMillis = options.quietMillis || 100,
407
- ajaxUrl = options.url,
408
- self = this;
409
-
410
- return function (query) {
411
- window.clearTimeout(timeout);
412
- timeout = window.setTimeout(function () {
413
- var data = options.data, // ajax data function
414
- url = ajaxUrl, // ajax url string or function
415
- transport = options.transport || $.fn.select2.ajaxDefaults.transport,
416
- // deprecated - to be removed in 4.0 - use params instead
417
- deprecated = {
418
- type: options.type || 'GET', // set type of request (GET or POST)
419
- cache: options.cache || false,
420
- jsonpCallback: options.jsonpCallback||undefined,
421
- dataType: options.dataType||"json"
422
- },
423
- params = $.extend({}, $.fn.select2.ajaxDefaults.params, deprecated);
424
-
425
- data = data ? data.call(self, query.term, query.page, query.context) : null;
426
- url = (typeof url === 'function') ? url.call(self, query.term, query.page, query.context) : url;
427
-
428
- if (handler && typeof handler.abort === "function") { handler.abort(); }
429
-
430
- if (options.params) {
431
- if ($.isFunction(options.params)) {
432
- $.extend(params, options.params.call(self));
433
- } else {
434
- $.extend(params, options.params);
435
- }
436
- }
437
-
438
- $.extend(params, {
439
- url: url,
440
- dataType: options.dataType,
441
- data: data,
442
- success: function (data) {
443
- // TODO - replace query.page with query so users have access to term, page, etc.
444
- // added query as third paramter to keep backwards compatibility
445
- var results = options.results(data, query.page, query);
446
- query.callback(results);
447
- },
448
- error: function(jqXHR, textStatus, errorThrown){
449
- var results = {
450
- hasError: true,
451
- jqXHR: jqXHR,
452
- textStatus: textStatus,
453
- errorThrown: errorThrown,
454
- };
455
-
456
- query.callback(results);
457
- }
458
- });
459
- handler = transport.call(self, params);
460
- }, quietMillis);
461
- };
462
- }
463
-
464
- /**
465
- * Produces a query function that works with a local array
466
- *
467
- * @param options object containing configuration parameters. The options parameter can either be an array or an
468
- * object.
469
- *
470
- * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys.
471
- *
472
- * If the object form is used it is assumed that it contains 'data' and 'text' keys. The 'data' key should contain
473
- * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text'
474
- * key can either be a String in which case it is expected that each element in the 'data' array has a key with the
475
- * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract
476
- * the text.
477
- */
478
- function local(options) {
479
- var data = options, // data elements
480
- dataText,
481
- tmp,
482
- text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search
483
-
484
- if ($.isArray(data)) {
485
- tmp = data;
486
- data = { results: tmp };
487
- }
488
-
489
- if ($.isFunction(data) === false) {
490
- tmp = data;
491
- data = function() { return tmp; };
492
- }
493
-
494
- var dataItem = data();
495
- if (dataItem.text) {
496
- text = dataItem.text;
497
- // if text is not a function we assume it to be a key name
498
- if (!$.isFunction(text)) {
499
- dataText = dataItem.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available
500
- text = function (item) { return item[dataText]; };
501
- }
502
- }
503
-
504
- return function (query) {
505
- var t = query.term, filtered = { results: [] }, process;
506
- if (t === "") {
507
- query.callback(data());
508
- return;
509
- }
510
-
511
- process = function(datum, collection) {
512
- var group, attr;
513
- datum = datum[0];
514
- if (datum.children) {
515
- group = {};
516
- for (attr in datum) {
517
- if (datum.hasOwnProperty(attr)) group[attr]=datum[attr];
518
- }
519
- group.children=[];
520
- $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); });
521
- if (group.children.length || query.matcher(t, text(group), datum)) {
522
- collection.push(group);
523
- }
524
- } else {
525
- if (query.matcher(t, text(datum), datum)) {
526
- collection.push(datum);
527
- }
528
- }
529
- };
530
-
531
- $(data().results).each2(function(i, datum) { process(datum, filtered.results); });
532
- query.callback(filtered);
533
- };
534
- }
535
-
536
- // TODO javadoc
537
- function tags(data) {
538
- var isFunc = $.isFunction(data);
539
- return function (query) {
540
- var t = query.term, filtered = {results: []};
541
- var result = isFunc ? data(query) : data;
542
- if ($.isArray(result)) {
543
- $(result).each(function () {
544
- var isObject = this.text !== undefined,
545
- text = isObject ? this.text : this;
546
- if (t === "" || query.matcher(t, text)) {
547
- filtered.results.push(isObject ? this : {id: this, text: this});
548
- }
549
- });
550
- query.callback(filtered);
551
- }
552
- };
553
- }
554
-
555
- /**
556
- * Checks if the formatter function should be used.
557
- *
558
- * Throws an error if it is not a function. Returns true if it should be used,
559
- * false if no formatting should be performed.
560
- *
561
- * @param formatter
562
- */
563
- function checkFormatter(formatter, formatterName) {
564
- if ($.isFunction(formatter)) return true;
565
- if (!formatter) return false;
566
- if (typeof(formatter) === 'string') return true;
567
- throw new Error(formatterName +" must be a string, function, or falsy value");
568
- }
569
-
570
- /**
571
- * Returns a given value
572
- * If given a function, returns its output
573
- *
574
- * @param val string|function
575
- * @param context value of "this" to be passed to function
576
- * @returns {*}
577
- */
578
- function evaluate(val, context) {
579
- if ($.isFunction(val)) {
580
- var args = Array.prototype.slice.call(arguments, 2);
581
- return val.apply(context, args);
582
- }
583
- return val;
584
- }
585
-
586
- function countResults(results) {
587
- var count = 0;
588
- $.each(results, function(i, item) {
589
- if (item.children) {
590
- count += countResults(item.children);
591
- } else {
592
- count++;
593
- }
594
- });
595
- return count;
596
- }
597
-
598
- /**
599
- * Default tokenizer. This function uses breaks the input on substring match of any string from the
600
- * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those
601
- * two options have to be defined in order for the tokenizer to work.
602
- *
603
- * @param input text user has typed so far or pasted into the search field
604
- * @param selection currently selected choices
605
- * @param selectCallback function(choice) callback tho add the choice to selection
606
- * @param opts select2's opts
607
- * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value
608
- */
609
- function defaultTokenizer(input, selection, selectCallback, opts) {
610
- var original = input, // store the original so we can compare and know if we need to tell the search to update its text
611
- dupe = false, // check for whether a token we extracted represents a duplicate selected choice
612
- token, // token
613
- index, // position at which the separator was found
614
- i, l, // looping variables
615
- separator; // the matched separator
616
-
617
- if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined;
618
-
619
- while (true) {
620
- index = -1;
621
-
622
- for (i = 0, l = opts.tokenSeparators.length; i < l; i++) {
623
- separator = opts.tokenSeparators[i];
624
- index = input.indexOf(separator);
625
- if (index >= 0) break;
626
- }
627
-
628
- if (index < 0) break; // did not find any token separator in the input string, bail
629
-
630
- token = input.substring(0, index);
631
- input = input.substring(index + separator.length);
632
-
633
- if (token.length > 0) {
634
- token = opts.createSearchChoice.call(this, token, selection);
635
- if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) {
636
- dupe = false;
637
- for (i = 0, l = selection.length; i < l; i++) {
638
- if (equal(opts.id(token), opts.id(selection[i]))) {
639
- dupe = true; break;
640
- }
641
- }
642
-
643
- if (!dupe) selectCallback(token);
644
- }
645
- }
646
- }
647
-
648
- if (original!==input) return input;
649
- }
650
-
651
- function cleanupJQueryElements() {
652
- var self = this;
653
-
654
- $.each(arguments, function (i, element) {
655
- self[element].remove();
656
- self[element] = null;
657
- });
658
- }
659
-
660
- /**
661
- * Creates a new class
662
- *
663
- * @param superClass
664
- * @param methods
665
- */
666
- function clazz(SuperClass, methods) {
667
- var constructor = function () {};
668
- constructor.prototype = new SuperClass;
669
- constructor.prototype.constructor = constructor;
670
- constructor.prototype.parent = SuperClass.prototype;
671
- constructor.prototype = $.extend(constructor.prototype, methods);
672
- return constructor;
673
- }
674
-
675
- AbstractSelect2 = clazz(Object, {
676
-
677
- // abstract
678
- bind: function (func) {
679
- var self = this;
680
- return function () {
681
- func.apply(self, arguments);
682
- };
683
- },
684
-
685
- // abstract
686
- init: function (opts) {
687
- var results, search, resultsSelector = ".select2-results";
688
-
689
- // prepare options
690
- this.opts = opts = this.prepareOpts(opts);
691
-
692
- this.id=opts.id;
693
-
694
- // destroy if called on an existing component
695
- if (opts.element.data("select2") !== undefined &&
696
- opts.element.data("select2") !== null) {
697
- opts.element.data("select2").destroy();
698
- }
699
-
700
- this.container = this.createContainer();
701
-
702
- this.liveRegion = $("<span>", {
703
- role: "status",
704
- "aria-live": "polite"
705
- })
706
- .addClass("select2-hidden-accessible")
707
- .appendTo(document.body);
708
-
709
- this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid());
710
- this.containerEventName= this.containerId
711
- .replace(/([.])/g, '_')
712
- .replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
713
- this.container.attr("id", this.containerId);
714
-
715
- this.container.attr("title", opts.element.attr("title"));
716
-
717
- this.body = $("body");
718
-
719
- syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
720
-
721
- this.container.attr("style", opts.element.attr("style"));
722
- this.container.css(evaluate(opts.containerCss, this.opts.element));
723
- this.container.addClass(evaluate(opts.containerCssClass, this.opts.element));
724
-
725
- this.elementTabIndex = this.opts.element.attr("tabindex");
726
-
727
- // swap container for the element
728
- this.opts.element
729
- .data("select2", this)
730
- .attr("tabindex", "-1")
731
- .before(this.container)
732
- .on("click.select2", killEvent); // do not leak click events
733
-
734
- this.container.data("select2", this);
735
-
736
- this.dropdown = this.container.find(".select2-drop");
737
-
738
- syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);
739
-
740
- this.dropdown.addClass(evaluate(opts.dropdownCssClass, this.opts.element));
741
- this.dropdown.data("select2", this);
742
- this.dropdown.on("click", killEvent);
743
-
744
- this.results = results = this.container.find(resultsSelector);
745
- this.search = search = this.container.find("input.select2-input");
746
-
747
- this.queryCount = 0;
748
- this.resultsPage = 0;
749
- this.context = null;
750
-
751
- // initialize the container
752
- this.initContainer();
753
-
754
- this.container.on("click", killEvent);
755
-
756
- installFilteredMouseMove(this.results);
757
-
758
- this.dropdown.on("mousemove-filtered", resultsSelector, this.bind(this.highlightUnderEvent));
759
- this.dropdown.on("touchstart touchmove touchend", resultsSelector, this.bind(function (event) {
760
- this._touchEvent = true;
761
- this.highlightUnderEvent(event);
762
- }));
763
- this.dropdown.on("touchmove", resultsSelector, this.bind(this.touchMoved));
764
- this.dropdown.on("touchstart touchend", resultsSelector, this.bind(this.clearTouchMoved));
765
-
766
- // Waiting for a click event on touch devices to select option and hide dropdown
767
- // otherwise click will be triggered on an underlying element
768
- this.dropdown.on('click', this.bind(function (event) {
769
- if (this._touchEvent) {
770
- this._touchEvent = false;
771
- this.selectHighlighted();
772
- }
773
- }));
774
-
775
- installDebouncedScroll(80, this.results);
776
- this.dropdown.on("scroll-debounced", resultsSelector, this.bind(this.loadMoreIfNeeded));
777
-
778
- // do not propagate change event from the search field out of the component
779
- $(this.container).on("change", ".select2-input", function(e) {e.stopPropagation();});
780
- $(this.dropdown).on("change", ".select2-input", function(e) {e.stopPropagation();});
781
-
782
- // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel
783
- if ($.fn.mousewheel) {
784
- results.mousewheel(function (e, delta, deltaX, deltaY) {
785
- var top = results.scrollTop();
786
- if (deltaY > 0 && top - deltaY <= 0) {
787
- results.scrollTop(0);
788
- killEvent(e);
789
- } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) {
790
- results.scrollTop(results.get(0).scrollHeight - results.height());
791
- killEvent(e);
792
- }
793
- });
794
- }
795
-
796
- installKeyUpChangeEvent(search);
797
- search.on("keyup-change input paste", this.bind(this.updateResults));
798
- search.on("focus", function () { search.addClass("select2-focused"); });
799
- search.on("blur", function () { search.removeClass("select2-focused");});
800
-
801
- this.dropdown.on("mouseup", resultsSelector, this.bind(function (e) {
802
- if ($(e.target).closest(".select2-result-selectable").length > 0) {
803
- this.highlightUnderEvent(e);
804
- this.selectHighlighted(e);
805
- }
806
- }));
807
-
808
- // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening
809
- // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's
810
- // dom it will trigger the popup close, which is not what we want
811
- // focusin can cause focus wars between modals and select2 since the dropdown is outside the modal.
812
- this.dropdown.on("click mouseup mousedown touchstart touchend focusin", function (e) { e.stopPropagation(); });
813
-
814
- this.nextSearchTerm = undefined;
815
-
816
- if ($.isFunction(this.opts.initSelection)) {
817
- // initialize selection based on the current value of the source element
818
- this.initSelection();
819
-
820
- // if the user has provided a function that can set selection based on the value of the source element
821
- // we monitor the change event on the element and trigger it, allowing for two way synchronization
822
- this.monitorSource();
823
- }
824
-
825
- if (opts.maximumInputLength !== null) {
826
- this.search.attr("maxlength", opts.maximumInputLength);
827
- }
828
-
829
- var disabled = opts.element.prop("disabled");
830
- if (disabled === undefined) disabled = false;
831
- this.enable(!disabled);
832
-
833
- var readonly = opts.element.prop("readonly");
834
- if (readonly === undefined) readonly = false;
835
- this.readonly(readonly);
836
-
837
- // Calculate size of scrollbar
838
- scrollBarDimensions = scrollBarDimensions || measureScrollbar();
839
-
840
- this.autofocus = opts.element.prop("autofocus");
841
- opts.element.prop("autofocus", false);
842
- if (this.autofocus) this.focus();
843
-
844
- this.search.attr("placeholder", opts.searchInputPlaceholder);
845
- },
846
-
847
- // abstract
848
- destroy: function () {
849
- var element=this.opts.element, select2 = element.data("select2"), self = this;
850
-
851
- this.close();
852
-
853
- if (element.length && element[0].detachEvent) {
854
- element.each(function () {
855
- this.detachEvent("onpropertychange", self._sync);
856
- });
857
- }
858
- if (this.propertyObserver) {
859
- this.propertyObserver.disconnect();
860
- this.propertyObserver = null;
861
- }
862
- this._sync = null;
863
-
864
- if (select2 !== undefined) {
865
- select2.container.remove();
866
- select2.liveRegion.remove();
867
- select2.dropdown.remove();
868
- element
869
- .removeClass("select2-offscreen")
870
- .removeData("select2")
871
- .off(".select2")
872
- .prop("autofocus", this.autofocus || false);
873
- if (this.elementTabIndex) {
874
- element.attr({tabindex: this.elementTabIndex});
875
- } else {
876
- element.removeAttr("tabindex");
877
- }
878
- element.show();
879
- }
880
-
881
- cleanupJQueryElements.call(this,
882
- "container",
883
- "liveRegion",
884
- "dropdown",
885
- "results",
886
- "search"
887
- );
888
- },
889
-
890
- // abstract
891
- optionToData: function(element) {
892
- if (element.is("option")) {
893
- return {
894
- id:element.prop("value"),
895
- text:element.text(),
896
- element: element.get(),
897
- css: element.attr("class"),
898
- disabled: element.prop("disabled"),
899
- locked: equal(element.attr("locked"), "locked") || equal(element.data("locked"), true)
900
- };
901
- } else if (element.is("optgroup")) {
902
- return {
903
- text:element.attr("label"),
904
- children:[],
905
- element: element.get(),
906
- css: element.attr("class")
907
- };
908
- }
909
- },
910
-
911
- // abstract
912
- prepareOpts: function (opts) {
913
- var element, select, idKey, ajaxUrl, self = this;
914
-
915
- element = opts.element;
916
-
917
- if (element.get(0).tagName.toLowerCase() === "select") {
918
- this.select = select = opts.element;
919
- }
920
-
921
- if (select) {
922
- // these options are not allowed when attached to a select because they are picked up off the element itself
923
- $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () {
924
- if (this in opts) {
925
- throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element.");
926
- }
927
- });
928
- }
929
-
930
- opts = $.extend({}, {
931
- populateResults: function(container, results, query) {
932
- var populate, id=this.opts.id, liveRegion=this.liveRegion;
933
-
934
- populate=function(results, container, depth) {
935
-
936
- var i, l, result, selectable, disabled, compound, node, label, innerContainer, formatted;
937
-
938
- results = opts.sortResults(results, container, query);
939
-
940
- // collect the created nodes for bulk append
941
- var nodes = [];
942
- for (i = 0, l = results.length; i < l; i = i + 1) {
943
-
944
- result=results[i];
945
-
946
- disabled = (result.disabled === true);
947
- selectable = (!disabled) && (id(result) !== undefined);
948
-
949
- compound=result.children && result.children.length > 0;
950
-
951
- node=$("<li></li>");
952
- node.addClass("select2-results-dept-"+depth);
953
- node.addClass("select2-result");
954
- node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable");
955
- if (disabled) { node.addClass("select2-disabled"); }
956
- if (compound) { node.addClass("select2-result-with-children"); }
957
- node.addClass(self.opts.formatResultCssClass(result));
958
- node.attr("role", "presentation");
959
-
960
- label=$(document.createElement("div"));
961
- label.addClass("select2-result-label");
962
- label.attr("id", "select2-result-label-" + nextUid());
963
- label.attr("role", "option");
964
-
965
- formatted=opts.formatResult(result, label, query, self.opts.escapeMarkup);
966
- if (formatted!==undefined) {
967
- label.html(formatted);
968
- node.append(label);
969
- }
970
-
971
-
972
- if (compound) {
973
-
974
- innerContainer=$("<ul></ul>");
975
- innerContainer.addClass("select2-result-sub");
976
- populate(result.children, innerContainer, depth+1);
977
- node.append(innerContainer);
978
- }
979
-
980
- node.data("select2-data", result);
981
- nodes.push(node[0]);
982
- }
983
-
984
- // bulk append the created nodes
985
- container.append(nodes);
986
- liveRegion.text(opts.formatMatches(results.length));
987
- };
988
-
989
- populate(results, container, 0);
990
- }
991
- }, $.fn.select2.defaults, opts);
992
-
993
- if (typeof(opts.id) !== "function") {
994
- idKey = opts.id;
995
- opts.id = function (e) { return e[idKey]; };
996
- }
997
-
998
- if ($.isArray(opts.element.data("select2Tags"))) {
999
- if ("tags" in opts) {
1000
- throw "tags specified as both an attribute 'data-select2-tags' and in options of Select2 " + opts.element.attr("id");
1001
- }
1002
- opts.tags=opts.element.data("select2Tags");
1003
- }
1004
-
1005
- if (select) {
1006
- opts.query = this.bind(function (query) {
1007
- var data = { results: [], more: false },
1008
- term = query.term,
1009
- children, placeholderOption, process;
1010
-
1011
- process=function(element, collection) {
1012
- var group;
1013
- if (element.is("option")) {
1014
- if (query.matcher(term, element.text(), element)) {
1015
- collection.push(self.optionToData(element));
1016
- }
1017
- } else if (element.is("optgroup")) {
1018
- group=self.optionToData(element);
1019
- element.children().each2(function(i, elm) { process(elm, group.children); });
1020
- if (group.children.length>0) {
1021
- collection.push(group);
1022
- }
1023
- }
1024
- };
1025
-
1026
- children=element.children();
1027
-
1028
- // ignore the placeholder option if there is one
1029
- if (this.getPlaceholder() !== undefined && children.length > 0) {
1030
- placeholderOption = this.getPlaceholderOption();
1031
- if (placeholderOption) {
1032
- children=children.not(placeholderOption);
1033
- }
1034
- }
1035
-
1036
- children.each2(function(i, elm) { process(elm, data.results); });
1037
-
1038
- query.callback(data);
1039
- });
1040
- // this is needed because inside val() we construct choices from options and their id is hardcoded
1041
- opts.id=function(e) { return e.id; };
1042
- } else {
1043
- if (!("query" in opts)) {
1044
-
1045
- if ("ajax" in opts) {
1046
- ajaxUrl = opts.element.data("ajax-url");
1047
- if (ajaxUrl && ajaxUrl.length > 0) {
1048
- opts.ajax.url = ajaxUrl;
1049
- }
1050
- opts.query = ajax.call(opts.element, opts.ajax);
1051
- } else if ("data" in opts) {
1052
- opts.query = local(opts.data);
1053
- } else if ("tags" in opts) {
1054
- opts.query = tags(opts.tags);
1055
- if (opts.createSearchChoice === undefined) {
1056
- opts.createSearchChoice = function (term) { return {id: $.trim(term), text: $.trim(term)}; };
1057
- }
1058
- if (opts.initSelection === undefined) {
1059
- opts.initSelection = function (element, callback) {
1060
- var data = [];
1061
- $(splitVal(element.val(), opts.separator)).each(function () {
1062
- var obj = { id: this, text: this },
1063
- tags = opts.tags;
1064
- if ($.isFunction(tags)) tags=tags();
1065
- $(tags).each(function() { if (equal(this.id, obj.id)) { obj = this; return false; } });
1066
- data.push(obj);
1067
- });
1068
-
1069
- callback(data);
1070
- };
1071
- }
1072
- }
1073
- }
1074
- }
1075
- if (typeof(opts.query) !== "function") {
1076
- throw "query function not defined for Select2 " + opts.element.attr("id");
1077
- }
1078
-
1079
- if (opts.createSearchChoicePosition === 'top') {
1080
- opts.createSearchChoicePosition = function(list, item) { list.unshift(item); };
1081
- }
1082
- else if (opts.createSearchChoicePosition === 'bottom') {
1083
- opts.createSearchChoicePosition = function(list, item) { list.push(item); };
1084
- }
1085
- else if (typeof(opts.createSearchChoicePosition) !== "function") {
1086
- throw "invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";
1087
- }
1088
-
1089
- return opts;
1090
- },
1091
-
1092
- /**
1093
- * Monitor the original element for changes and update select2 accordingly
1094
- */
1095
- // abstract
1096
- monitorSource: function () {
1097
- var el = this.opts.element, observer, self = this;
1098
-
1099
- el.on("change.select2", this.bind(function (e) {
1100
- if (this.opts.element.data("select2-change-triggered") !== true) {
1101
- this.initSelection();
1102
- }
1103
- }));
1104
-
1105
- this._sync = this.bind(function () {
1106
-
1107
- // sync enabled state
1108
- var disabled = el.prop("disabled");
1109
- if (disabled === undefined) disabled = false;
1110
- this.enable(!disabled);
1111
-
1112
- var readonly = el.prop("readonly");
1113
- if (readonly === undefined) readonly = false;
1114
- this.readonly(readonly);
1115
-
1116
- syncCssClasses(this.container, this.opts.element, this.opts.adaptContainerCssClass);
1117
- this.container.addClass(evaluate(this.opts.containerCssClass, this.opts.element));
1118
-
1119
- syncCssClasses(this.dropdown, this.opts.element, this.opts.adaptDropdownCssClass);
1120
- this.dropdown.addClass(evaluate(this.opts.dropdownCssClass, this.opts.element));
1121
-
1122
- });
1123
-
1124
- // IE8-10 (IE9/10 won't fire propertyChange via attachEventListener)
1125
- if (el.length && el[0].attachEvent) {
1126
- el.each(function() {
1127
- this.attachEvent("onpropertychange", self._sync);
1128
- });
1129
- }
1130
-
1131
- // safari, chrome, firefox, IE11
1132
- observer = window.MutationObserver || window.WebKitMutationObserver|| window.MozMutationObserver;
1133
- if (observer !== undefined) {
1134
- if (this.propertyObserver) { delete this.propertyObserver; this.propertyObserver = null; }
1135
- this.propertyObserver = new observer(function (mutations) {
1136
- $.each(mutations, self._sync);
1137
- });
1138
- this.propertyObserver.observe(el.get(0), { attributes:true, subtree:false });
1139
- }
1140
- },
1141
-
1142
- // abstract
1143
- triggerSelect: function(data) {
1144
- var evt = $.Event("select2-selecting", { val: this.id(data), object: data, choice: data });
1145
- this.opts.element.trigger(evt);
1146
- return !evt.isDefaultPrevented();
1147
- },
1148
-
1149
- /**
1150
- * Triggers the change event on the source element
1151
- */
1152
- // abstract
1153
- triggerChange: function (details) {
1154
-
1155
- details = details || {};
1156
- details= $.extend({}, details, { type: "change", val: this.val() });
1157
- // prevents recursive triggering
1158
- this.opts.element.data("select2-change-triggered", true);
1159
- this.opts.element.trigger(details);
1160
- this.opts.element.data("select2-change-triggered", false);
1161
-
1162
- // some validation frameworks ignore the change event and listen instead to keyup, click for selects
1163
- // so here we trigger the click event manually
1164
- this.opts.element.click();
1165
-
1166
- // ValidationEngine ignores the change event and listens instead to blur
1167
- // so here we trigger the blur event manually if so desired
1168
- if (this.opts.blurOnChange)
1169
- this.opts.element.blur();
1170
- },
1171
-
1172
- //abstract
1173
- isInterfaceEnabled: function()
1174
- {
1175
- return this.enabledInterface === true;
1176
- },
1177
-
1178
- // abstract
1179
- enableInterface: function() {
1180
- var enabled = this._enabled && !this._readonly,
1181
- disabled = !enabled;
1182
-
1183
- if (enabled === this.enabledInterface) return false;
1184
-
1185
- this.container.toggleClass("select2-container-disabled", disabled);
1186
- this.close();
1187
- this.enabledInterface = enabled;
1188
-
1189
- return true;
1190
- },
1191
-
1192
- // abstract
1193
- enable: function(enabled) {
1194
- if (enabled === undefined) enabled = true;
1195
- if (this._enabled === enabled) return;
1196
- this._enabled = enabled;
1197
-
1198
- this.opts.element.prop("disabled", !enabled);
1199
- this.enableInterface();
1200
- },
1201
-
1202
- // abstract
1203
- disable: function() {
1204
- this.enable(false);
1205
- },
1206
-
1207
- // abstract
1208
- readonly: function(enabled) {
1209
- if (enabled === undefined) enabled = false;
1210
- if (this._readonly === enabled) return;
1211
- this._readonly = enabled;
1212
-
1213
- this.opts.element.prop("readonly", enabled);
1214
- this.enableInterface();
1215
- },
1216
-
1217
- // abstract
1218
- opened: function () {
1219
- return (this.container) ? this.container.hasClass("select2-dropdown-open") : false;
1220
- },
1221
-
1222
- // abstract
1223
- positionDropdown: function() {
1224
- var $dropdown = this.dropdown,
1225
- offset = this.container.offset(),
1226
- height = this.container.outerHeight(false),
1227
- width = this.container.outerWidth(false),
1228
- dropHeight = $dropdown.outerHeight(false),
1229
- $window = $(window),
1230
- windowWidth = $window.width(),
1231
- windowHeight = $window.height(),
1232
- viewPortRight = $window.scrollLeft() + windowWidth,
1233
- viewportBottom = $window.scrollTop() + windowHeight,
1234
- dropTop = offset.top + height,
1235
- dropLeft = offset.left,
1236
- enoughRoomBelow = dropTop + dropHeight <= viewportBottom,
1237
- enoughRoomAbove = (offset.top - dropHeight) >= $window.scrollTop(),
1238
- dropWidth = $dropdown.outerWidth(false),
1239
- enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight,
1240
- aboveNow = $dropdown.hasClass("select2-drop-above"),
1241
- bodyOffset,
1242
- above,
1243
- changeDirection,
1244
- css,
1245
- resultsListNode;
1246
-
1247
- // always prefer the current above/below alignment, unless there is not enough room
1248
- if (aboveNow) {
1249
- above = true;
1250
- if (!enoughRoomAbove && enoughRoomBelow) {
1251
- changeDirection = true;
1252
- above = false;
1253
- }
1254
- } else {
1255
- above = false;
1256
- if (!enoughRoomBelow && enoughRoomAbove) {
1257
- changeDirection = true;
1258
- above = true;
1259
- }
1260
- }
1261
-
1262
- //if we are changing direction we need to get positions when dropdown is hidden;
1263
- if (changeDirection) {
1264
- $dropdown.hide();
1265
- offset = this.container.offset();
1266
- height = this.container.outerHeight(false);
1267
- width = this.container.outerWidth(false);
1268
- dropHeight = $dropdown.outerHeight(false);
1269
- viewPortRight = $window.scrollLeft() + windowWidth;
1270
- viewportBottom = $window.scrollTop() + windowHeight;
1271
- dropTop = offset.top + height;
1272
- dropLeft = offset.left;
1273
- dropWidth = $dropdown.outerWidth(false);
1274
- enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1275
- $dropdown.show();
1276
-
1277
- // fix so the cursor does not move to the left within the search-textbox in IE
1278
- this.focusSearch();
1279
- }
1280
-
1281
- if (this.opts.dropdownAutoWidth) {
1282
- resultsListNode = $('.select2-results', $dropdown)[0];
1283
- $dropdown.addClass('select2-drop-auto-width');
1284
- $dropdown.css('width', '');
1285
- // Add scrollbar width to dropdown if vertical scrollbar is present
1286
- dropWidth = $dropdown.outerWidth(false) + (resultsListNode.scrollHeight === resultsListNode.clientHeight ? 0 : scrollBarDimensions.width);
1287
- dropWidth > width ? width = dropWidth : dropWidth = width;
1288
- dropHeight = $dropdown.outerHeight(false);
1289
- enoughRoomOnRight = dropLeft + dropWidth <= viewPortRight;
1290
- }
1291
- else {
1292
- this.container.removeClass('select2-drop-auto-width');
1293
- }
1294
-
1295
- //console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow);
1296
- //console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body.scrollTop(), "enough?", enoughRoomAbove);
1297
-
1298
- // fix positioning when body has an offset and is not position: static
1299
- if (this.body.css('position') !== 'static') {
1300
- bodyOffset = this.body.offset();
1301
- dropTop -= bodyOffset.top;
1302
- dropLeft -= bodyOffset.left;
1303
- }
1304
-
1305
- if (!enoughRoomOnRight) {
1306
- dropLeft = offset.left + this.container.outerWidth(false) - dropWidth;
1307
- }
1308
-
1309
- css = {
1310
- left: dropLeft,
1311
- width: width
1312
- };
1313
-
1314
- if (above) {
1315
- css.top = offset.top - dropHeight;
1316
- css.bottom = 'auto';
1317
- this.container.addClass("select2-drop-above");
1318
- $dropdown.addClass("select2-drop-above");
1319
- }
1320
- else {
1321
- css.top = dropTop;
1322
- css.bottom = 'auto';
1323
- this.container.removeClass("select2-drop-above");
1324
- $dropdown.removeClass("select2-drop-above");
1325
- }
1326
- css = $.extend(css, evaluate(this.opts.dropdownCss, this.opts.element));
1327
-
1328
- $dropdown.css(css);
1329
- },
1330
-
1331
- // abstract
1332
- shouldOpen: function() {
1333
- var event;
1334
-
1335
- if (this.opened()) return false;
1336
-
1337
- if (this._enabled === false || this._readonly === true) return false;
1338
-
1339
- event = $.Event("select2-opening");
1340
- this.opts.element.trigger(event);
1341
- return !event.isDefaultPrevented();
1342
- },
1343
-
1344
- // abstract
1345
- clearDropdownAlignmentPreference: function() {
1346
- // clear the classes used to figure out the preference of where the dropdown should be opened
1347
- this.container.removeClass("select2-drop-above");
1348
- this.dropdown.removeClass("select2-drop-above");
1349
- },
1350
-
1351
- /**
1352
- * Opens the dropdown
1353
- *
1354
- * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example,
1355
- * the dropdown is already open, or if the 'open' event listener on the element called preventDefault().
1356
- */
1357
- // abstract
1358
- open: function () {
1359
-
1360
- if (!this.shouldOpen()) return false;
1361
-
1362
- this.opening();
1363
-
1364
- // Only bind the document mousemove when the dropdown is visible
1365
- $document.on("mousemove.select2Event", function (e) {
1366
- lastMousePosition.x = e.pageX;
1367
- lastMousePosition.y = e.pageY;
1368
- });
1369
-
1370
- return true;
1371
- },
1372
-
1373
- /**
1374
- * Performs the opening of the dropdown
1375
- */
1376
- // abstract
1377
- opening: function() {
1378
- var cid = this.containerEventName,
1379
- scroll = "scroll." + cid,
1380
- resize = "resize."+cid,
1381
- orient = "orientationchange."+cid,
1382
- mask;
1383
-
1384
- this.container.addClass("select2-dropdown-open").addClass("select2-container-active");
1385
-
1386
- this.clearDropdownAlignmentPreference();
1387
-
1388
- if(this.dropdown[0] !== this.body.children().last()[0]) {
1389
- this.dropdown.detach().appendTo(this.body);
1390
- }
1391
-
1392
- // create the dropdown mask if doesn't already exist
1393
- mask = $("#select2-drop-mask");
1394
- if (mask.length == 0) {
1395
- mask = $(document.createElement("div"));
1396
- mask.attr("id","select2-drop-mask").attr("class","select2-drop-mask");
1397
- mask.hide();
1398
- mask.appendTo(this.body);
1399
- mask.on("mousedown touchstart click", function (e) {
1400
- // Prevent IE from generating a click event on the body
1401
- reinsertElement(mask);
1402
-
1403
- var dropdown = $("#select2-drop"), self;
1404
- if (dropdown.length > 0) {
1405
- self=dropdown.data("select2");
1406
- if (self.opts.selectOnBlur) {
1407
- self.selectHighlighted({noFocus: true});
1408
- }
1409
- self.close();
1410
- e.preventDefault();
1411
- e.stopPropagation();
1412
- }
1413
- });
1414
- }
1415
-
1416
- // ensure the mask is always right before the dropdown
1417
- if (this.dropdown.prev()[0] !== mask[0]) {
1418
- this.dropdown.before(mask);
1419
- }
1420
-
1421
- // move the global id to the correct dropdown
1422
- $("#select2-drop").removeAttr("id");
1423
- this.dropdown.attr("id", "select2-drop");
1424
-
1425
- // show the elements
1426
- mask.show();
1427
-
1428
- this.positionDropdown();
1429
- this.dropdown.show();
1430
- this.positionDropdown();
1431
-
1432
- this.dropdown.addClass("select2-drop-active");
1433
-
1434
- // attach listeners to events that can change the position of the container and thus require
1435
- // the position of the dropdown to be updated as well so it does not come unglued from the container
1436
- var that = this;
1437
- this.container.parents().add(window).each(function () {
1438
- $(this).on(resize+" "+scroll+" "+orient, function (e) {
1439
- if (that.opened()) that.positionDropdown();
1440
- });
1441
- });
1442
-
1443
-
1444
- },
1445
-
1446
- // abstract
1447
- close: function () {
1448
- if (!this.opened()) return;
1449
-
1450
- var cid = this.containerEventName,
1451
- scroll = "scroll." + cid,
1452
- resize = "resize."+cid,
1453
- orient = "orientationchange."+cid;
1454
-
1455
- // unbind event listeners
1456
- this.container.parents().add(window).each(function () { $(this).off(scroll).off(resize).off(orient); });
1457
-
1458
- this.clearDropdownAlignmentPreference();
1459
-
1460
- $("#select2-drop-mask").hide();
1461
- this.dropdown.removeAttr("id"); // only the active dropdown has the select2-drop id
1462
- this.dropdown.hide();
1463
- this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active");
1464
- this.results.empty();
1465
-
1466
- // Now that the dropdown is closed, unbind the global document mousemove event
1467
- $document.off("mousemove.select2Event");
1468
-
1469
- this.clearSearch();
1470
- this.search.removeClass("select2-active");
1471
- this.opts.element.trigger($.Event("select2-close"));
1472
- },
1473
-
1474
- /**
1475
- * Opens control, sets input value, and updates results.
1476
- */
1477
- // abstract
1478
- externalSearch: function (term) {
1479
- this.open();
1480
- this.search.val(term);
1481
- this.updateResults(false);
1482
- },
1483
-
1484
- // abstract
1485
- clearSearch: function () {
1486
-
1487
- },
1488
-
1489
- //abstract
1490
- getMaximumSelectionSize: function() {
1491
- return evaluate(this.opts.maximumSelectionSize, this.opts.element);
1492
- },
1493
-
1494
- // abstract
1495
- ensureHighlightVisible: function () {
1496
- var results = this.results, children, index, child, hb, rb, y, more, topOffset;
1497
-
1498
- index = this.highlight();
1499
-
1500
- if (index < 0) return;
1501
-
1502
- if (index == 0) {
1503
-
1504
- // if the first element is highlighted scroll all the way to the top,
1505
- // that way any unselectable headers above it will also be scrolled
1506
- // into view
1507
-
1508
- results.scrollTop(0);
1509
- return;
1510
- }
1511
-
1512
- children = this.findHighlightableChoices().find('.select2-result-label');
1513
-
1514
- child = $(children[index]);
1515
-
1516
- topOffset = (child.offset() || {}).top || 0;
1517
-
1518
- hb = topOffset + child.outerHeight(true);
1519
-
1520
- // if this is the last child lets also make sure select2-more-results is visible
1521
- if (index === children.length - 1) {
1522
- more = results.find("li.select2-more-results");
1523
- if (more.length > 0) {
1524
- hb = more.offset().top + more.outerHeight(true);
1525
- }
1526
- }
1527
-
1528
- rb = results.offset().top + results.outerHeight(true);
1529
- if (hb > rb) {
1530
- results.scrollTop(results.scrollTop() + (hb - rb));
1531
- }
1532
- y = topOffset - results.offset().top;
1533
-
1534
- // make sure the top of the element is visible
1535
- if (y < 0 && child.css('display') != 'none' ) {
1536
- results.scrollTop(results.scrollTop() + y); // y is negative
1537
- }
1538
- },
1539
-
1540
- // abstract
1541
- findHighlightableChoices: function() {
1542
- return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)");
1543
- },
1544
-
1545
- // abstract
1546
- moveHighlight: function (delta) {
1547
- var choices = this.findHighlightableChoices(),
1548
- index = this.highlight();
1549
-
1550
- while (index > -1 && index < choices.length) {
1551
- index += delta;
1552
- var choice = $(choices[index]);
1553
- if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled") && !choice.hasClass("select2-selected")) {
1554
- this.highlight(index);
1555
- break;
1556
- }
1557
- }
1558
- },
1559
-
1560
- // abstract
1561
- highlight: function (index) {
1562
- var choices = this.findHighlightableChoices(),
1563
- choice,
1564
- data;
1565
-
1566
- if (arguments.length === 0) {
1567
- return indexOf(choices.filter(".select2-highlighted")[0], choices.get());
1568
- }
1569
-
1570
- if (index >= choices.length) index = choices.length - 1;
1571
- if (index < 0) index = 0;
1572
-
1573
- this.removeHighlight();
1574
-
1575
- choice = $(choices[index]);
1576
- choice.addClass("select2-highlighted");
1577
-
1578
- // ensure assistive technology can determine the active choice
1579
- this.search.attr("aria-activedescendant", choice.find(".select2-result-label").attr("id"));
1580
-
1581
- this.ensureHighlightVisible();
1582
-
1583
- this.liveRegion.text(choice.text());
1584
-
1585
- data = choice.data("select2-data");
1586
- if (data) {
1587
- this.opts.element.trigger({ type: "select2-highlight", val: this.id(data), choice: data });
1588
- }
1589
- },
1590
-
1591
- removeHighlight: function() {
1592
- this.results.find(".select2-highlighted").removeClass("select2-highlighted");
1593
- },
1594
-
1595
- touchMoved: function() {
1596
- this._touchMoved = true;
1597
- },
1598
-
1599
- clearTouchMoved: function() {
1600
- this._touchMoved = false;
1601
- },
1602
-
1603
- // abstract
1604
- countSelectableResults: function() {
1605
- return this.findHighlightableChoices().length;
1606
- },
1607
-
1608
- // abstract
1609
- highlightUnderEvent: function (event) {
1610
- var el = $(event.target).closest(".select2-result-selectable");
1611
- if (el.length > 0 && !el.is(".select2-highlighted")) {
1612
- var choices = this.findHighlightableChoices();
1613
- this.highlight(choices.index(el));
1614
- } else if (el.length == 0) {
1615
- // if we are over an unselectable item remove all highlights
1616
- this.removeHighlight();
1617
- }
1618
- },
1619
-
1620
- // abstract
1621
- loadMoreIfNeeded: function () {
1622
- var results = this.results,
1623
- more = results.find("li.select2-more-results"),
1624
- below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible
1625
- page = this.resultsPage + 1,
1626
- self=this,
1627
- term=this.search.val(),
1628
- context=this.context;
1629
-
1630
- if (more.length === 0) return;
1631
- below = more.offset().top - results.offset().top - results.height();
1632
-
1633
- if (below <= this.opts.loadMorePadding) {
1634
- more.addClass("select2-active");
1635
- this.opts.query({
1636
- element: this.opts.element,
1637
- term: term,
1638
- page: page,
1639
- context: context,
1640
- matcher: this.opts.matcher,
1641
- callback: this.bind(function (data) {
1642
-
1643
- // ignore a response if the select2 has been closed before it was received
1644
- if (!self.opened()) return;
1645
-
1646
-
1647
- self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context});
1648
- self.postprocessResults(data, false, false);
1649
-
1650
- if (data.more===true) {
1651
- more.detach().appendTo(results).text(evaluate(self.opts.formatLoadMore, self.opts.element, page+1));
1652
- window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);
1653
- } else {
1654
- more.remove();
1655
- }
1656
- self.positionDropdown();
1657
- self.resultsPage = page;
1658
- self.context = data.context;
1659
- this.opts.element.trigger({ type: "select2-loaded", items: data });
1660
- })});
1661
- }
1662
- },
1663
-
1664
- /**
1665
- * Default tokenizer function which does nothing
1666
- */
1667
- tokenize: function() {
1668
-
1669
- },
1670
-
1671
- /**
1672
- * @param initial whether or not this is the call to this method right after the dropdown has been opened
1673
- */
1674
- // abstract
1675
- updateResults: function (initial) {
1676
- var search = this.search,
1677
- results = this.results,
1678
- opts = this.opts,
1679
- data,
1680
- self = this,
1681
- input,
1682
- term = search.val(),
1683
- lastTerm = $.data(this.container, "select2-last-term"),
1684
- // sequence number used to drop out-of-order responses
1685
- queryNumber;
1686
-
1687
- // prevent duplicate queries against the same term
1688
- if (initial !== true && lastTerm && equal(term, lastTerm)) return;
1689
-
1690
- $.data(this.container, "select2-last-term", term);
1691
-
1692
- // if the search is currently hidden we do not alter the results
1693
- if (initial !== true && (this.showSearchInput === false || !this.opened())) {
1694
- return;
1695
- }
1696
-
1697
- function postRender() {
1698
- search.removeClass("select2-active");
1699
- self.positionDropdown();
1700
- if (results.find('.select2-no-results,.select2-selection-limit,.select2-searching').length) {
1701
- self.liveRegion.text(results.text());
1702
- }
1703
- else {
1704
- self.liveRegion.text(self.opts.formatMatches(results.find('.select2-result-selectable').length));
1705
- }
1706
- }
1707
-
1708
- function render(html) {
1709
- results.html(html);
1710
- postRender();
1711
- }
1712
-
1713
- queryNumber = ++this.queryCount;
1714
-
1715
- var maxSelSize = this.getMaximumSelectionSize();
1716
- if (maxSelSize >=1) {
1717
- data = this.data();
1718
- if ($.isArray(data) && data.length >= maxSelSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) {
1719
- render("<li class='select2-selection-limit'>" + evaluate(opts.formatSelectionTooBig, opts.element, maxSelSize) + "</li>");
1720
- return;
1721
- }
1722
- }
1723
-
1724
- if (search.val().length < opts.minimumInputLength) {
1725
- if (checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) {
1726
- render("<li class='select2-no-results'>" + evaluate(opts.formatInputTooShort, opts.element, search.val(), opts.minimumInputLength) + "</li>");
1727
- } else {
1728
- render("");
1729
- }
1730
- if (initial && this.showSearch) this.showSearch(true);
1731
- return;
1732
- }
1733
-
1734
- if (opts.maximumInputLength && search.val().length > opts.maximumInputLength) {
1735
- if (checkFormatter(opts.formatInputTooLong, "formatInputTooLong")) {
1736
- render("<li class='select2-no-results'>" + evaluate(opts.formatInputTooLong, opts.element, search.val(), opts.maximumInputLength) + "</li>");
1737
- } else {
1738
- render("");
1739
- }
1740
- return;
1741
- }
1742
-
1743
- if (opts.formatSearching && this.findHighlightableChoices().length === 0) {
1744
- render("<li class='select2-searching'>" + evaluate(opts.formatSearching, opts.element) + "</li>");
1745
- }
1746
-
1747
- search.addClass("select2-active");
1748
-
1749
- this.removeHighlight();
1750
-
1751
- // give the tokenizer a chance to pre-process the input
1752
- input = this.tokenize();
1753
- if (input != undefined && input != null) {
1754
- search.val(input);
1755
- }
1756
-
1757
- this.resultsPage = 1;
1758
-
1759
- opts.query({
1760
- element: opts.element,
1761
- term: search.val(),
1762
- page: this.resultsPage,
1763
- context: null,
1764
- matcher: opts.matcher,
1765
- callback: this.bind(function (data) {
1766
- var def; // default choice
1767
-
1768
- // ignore old responses
1769
- if (queryNumber != this.queryCount) {
1770
- return;
1771
- }
1772
-
1773
- // ignore a response if the select2 has been closed before it was received
1774
- if (!this.opened()) {
1775
- this.search.removeClass("select2-active");
1776
- return;
1777
- }
1778
-
1779
- // handle ajax error
1780
- if(data.hasError !== undefined && checkFormatter(opts.formatAjaxError, "formatAjaxError")) {
1781
- render("<li class='select2-ajax-error'>" + evaluate(opts.formatAjaxError, opts.element, data.jqXHR, data.textStatus, data.errorThrown) + "</li>");
1782
- return;
1783
- }
1784
-
1785
- // save context, if any
1786
- this.context = (data.context===undefined) ? null : data.context;
1787
- // create a default choice and prepend it to the list
1788
- if (this.opts.createSearchChoice && search.val() !== "") {
1789
- def = this.opts.createSearchChoice.call(self, search.val(), data.results);
1790
- if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) {
1791
- if ($(data.results).filter(
1792
- function () {
1793
- return equal(self.id(this), self.id(def));
1794
- }).length === 0) {
1795
- this.opts.createSearchChoicePosition(data.results, def);
1796
- }
1797
- }
1798
- }
1799
-
1800
- if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) {
1801
- render("<li class='select2-no-results'>" + evaluate(opts.formatNoMatches, opts.element, search.val()) + "</li>");
1802
- return;
1803
- }
1804
-
1805
- results.empty();
1806
- self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null});
1807
-
1808
- if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) {
1809
- results.append("<li class='select2-more-results'>" + opts.escapeMarkup(evaluate(opts.formatLoadMore, opts.element, this.resultsPage)) + "</li>");
1810
- window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10);
1811
- }
1812
-
1813
- this.postprocessResults(data, initial);
1814
-
1815
- postRender();
1816
-
1817
- this.opts.element.trigger({ type: "select2-loaded", items: data });
1818
- })});
1819
- },
1820
-
1821
- // abstract
1822
- cancel: function () {
1823
- this.close();
1824
- },
1825
-
1826
- // abstract
1827
- blur: function () {
1828
- // if selectOnBlur == true, select the currently highlighted option
1829
- if (this.opts.selectOnBlur)
1830
- this.selectHighlighted({noFocus: true});
1831
-
1832
- this.close();
1833
- this.container.removeClass("select2-container-active");
1834
- // synonymous to .is(':focus'), which is available in jquery >= 1.6
1835
- if (this.search[0] === document.activeElement) { this.search.blur(); }
1836
- this.clearSearch();
1837
- this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
1838
- },
1839
-
1840
- // abstract
1841
- focusSearch: function () {
1842
- focus(this.search);
1843
- },
1844
-
1845
- // abstract
1846
- selectHighlighted: function (options) {
1847
- if (this._touchMoved) {
1848
- this.clearTouchMoved();
1849
- return;
1850
- }
1851
- var index=this.highlight(),
1852
- highlighted=this.results.find(".select2-highlighted"),
1853
- data = highlighted.closest('.select2-result').data("select2-data");
1854
-
1855
- if (data) {
1856
- this.highlight(index);
1857
- this.onSelect(data, options);
1858
- } else if (options && options.noFocus) {
1859
- this.close();
1860
- }
1861
- },
1862
-
1863
- // abstract
1864
- getPlaceholder: function () {
1865
- var placeholderOption;
1866
- return this.opts.element.attr("placeholder") ||
1867
- this.opts.element.attr("data-placeholder") || // jquery 1.4 compat
1868
- this.opts.element.data("placeholder") ||
1869
- this.opts.placeholder ||
1870
- ((placeholderOption = this.getPlaceholderOption()) !== undefined ? placeholderOption.text() : undefined);
1871
- },
1872
-
1873
- // abstract
1874
- getPlaceholderOption: function() {
1875
- if (this.select) {
1876
- var firstOption = this.select.children('option').first();
1877
- if (this.opts.placeholderOption !== undefined ) {
1878
- //Determine the placeholder option based on the specified placeholderOption setting
1879
- return (this.opts.placeholderOption === "first" && firstOption) ||
1880
- (typeof this.opts.placeholderOption === "function" && this.opts.placeholderOption(this.select));
1881
- } else if ($.trim(firstOption.text()) === "" && firstOption.val() === "") {
1882
- //No explicit placeholder option specified, use the first if it's blank
1883
- return firstOption;
1884
- }
1885
- }
1886
- },
1887
-
1888
- /**
1889
- * Get the desired width for the container element. This is
1890
- * derived first from option `width` passed to select2, then
1891
- * the inline 'style' on the original element, and finally
1892
- * falls back to the jQuery calculated element width.
1893
- */
1894
- // abstract
1895
- initContainerWidth: function () {
1896
- function resolveContainerWidth() {
1897
- var style, attrs, matches, i, l, attr;
1898
-
1899
- if (this.opts.width === "off") {
1900
- return null;
1901
- } else if (this.opts.width === "element"){
1902
- return this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px';
1903
- } else if (this.opts.width === "copy" || this.opts.width === "resolve") {
1904
- // check if there is inline style on the element that contains width
1905
- style = this.opts.element.attr('style');
1906
- if (style !== undefined) {
1907
- attrs = style.split(';');
1908
- for (i = 0, l = attrs.length; i < l; i = i + 1) {
1909
- attr = attrs[i].replace(/\s/g, '');
1910
- matches = attr.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i);
1911
- if (matches !== null && matches.length >= 1)
1912
- return matches[1];
1913
- }
1914
- }
1915
-
1916
- if (this.opts.width === "resolve") {
1917
- // next check if css('width') can resolve a width that is percent based, this is sometimes possible
1918
- // when attached to input type=hidden or elements hidden via css
1919
- style = this.opts.element.css('width');
1920
- if (style.indexOf("%") > 0) return style;
1921
-
1922
- // finally, fallback on the calculated width of the element
1923
- return (this.opts.element.outerWidth(false) === 0 ? 'auto' : this.opts.element.outerWidth(false) + 'px');
1924
- }
1925
-
1926
- return null;
1927
- } else if ($.isFunction(this.opts.width)) {
1928
- return this.opts.width();
1929
- } else {
1930
- return this.opts.width;
1931
- }
1932
- };
1933
-
1934
- var width = resolveContainerWidth.call(this);
1935
- if (width !== null) {
1936
- this.container.css("width", width);
1937
- }
1938
- }
1939
- });
1940
-
1941
- SingleSelect2 = clazz(AbstractSelect2, {
1942
-
1943
- // single
1944
-
1945
- createContainer: function () {
1946
- var container = $(document.createElement("div")).attr({
1947
- "class": "select2-container"
1948
- }).html([
1949
- "<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>",
1950
- " <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>",
1951
- " <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>",
1952
- "</a>",
1953
- "<label for='' class='select2-offscreen'></label>",
1954
- "<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />",
1955
- "<div class='select2-drop select2-display-none'>",
1956
- " <div class='select2-search'>",
1957
- " <label for='' class='select2-offscreen'></label>",
1958
- " <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'",
1959
- " aria-autocomplete='list' />",
1960
- " </div>",
1961
- " <ul class='select2-results' role='listbox'>",
1962
- " </ul>",
1963
- "</div>"].join(""));
1964
- return container;
1965
- },
1966
-
1967
- // single
1968
- enableInterface: function() {
1969
- if (this.parent.enableInterface.apply(this, arguments)) {
1970
- this.focusser.prop("disabled", !this.isInterfaceEnabled());
1971
- }
1972
- },
1973
-
1974
- // single
1975
- opening: function () {
1976
- var el, range, len;
1977
-
1978
- if (this.opts.minimumResultsForSearch >= 0) {
1979
- this.showSearch(true);
1980
- }
1981
-
1982
- this.parent.opening.apply(this, arguments);
1983
-
1984
- if (this.showSearchInput !== false) {
1985
- // IE appends focusser.val() at the end of field :/ so we manually insert it at the beginning using a range
1986
- // all other browsers handle this just fine
1987
-
1988
- this.search.val(this.focusser.val());
1989
- }
1990
- if (this.opts.shouldFocusInput(this)) {
1991
- this.search.focus();
1992
- // move the cursor to the end after focussing, otherwise it will be at the beginning and
1993
- // new text will appear *before* focusser.val()
1994
- el = this.search.get(0);
1995
- if (el.createTextRange) {
1996
- range = el.createTextRange();
1997
- range.collapse(false);
1998
- range.select();
1999
- } else if (el.setSelectionRange) {
2000
- len = this.search.val().length;
2001
- el.setSelectionRange(len, len);
2002
- }
2003
- }
2004
-
2005
- // initializes search's value with nextSearchTerm (if defined by user)
2006
- // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter
2007
- if(this.search.val() === "") {
2008
- if(this.nextSearchTerm != undefined){
2009
- this.search.val(this.nextSearchTerm);
2010
- this.search.select();
2011
- }
2012
- }
2013
-
2014
- this.focusser.prop("disabled", true).val("");
2015
- this.updateResults(true);
2016
- this.opts.element.trigger($.Event("select2-open"));
2017
- },
2018
-
2019
- // single
2020
- close: function () {
2021
- if (!this.opened()) return;
2022
- this.parent.close.apply(this, arguments);
2023
-
2024
- this.focusser.prop("disabled", false);
2025
-
2026
- if (this.opts.shouldFocusInput(this)) {
2027
- this.focusser.focus();
2028
- }
2029
- },
2030
-
2031
- // single
2032
- focus: function () {
2033
- if (this.opened()) {
2034
- this.close();
2035
- } else {
2036
- this.focusser.prop("disabled", false);
2037
- if (this.opts.shouldFocusInput(this)) {
2038
- this.focusser.focus();
2039
- }
2040
- }
2041
- },
2042
-
2043
- // single
2044
- isFocused: function () {
2045
- return this.container.hasClass("select2-container-active");
2046
- },
2047
-
2048
- // single
2049
- cancel: function () {
2050
- this.parent.cancel.apply(this, arguments);
2051
- this.focusser.prop("disabled", false);
2052
-
2053
- if (this.opts.shouldFocusInput(this)) {
2054
- this.focusser.focus();
2055
- }
2056
- },
2057
-
2058
- // single
2059
- destroy: function() {
2060
- $("label[for='" + this.focusser.attr('id') + "']")
2061
- .attr('for', this.opts.element.attr("id"));
2062
- this.parent.destroy.apply(this, arguments);
2063
-
2064
- cleanupJQueryElements.call(this,
2065
- "selection",
2066
- "focusser"
2067
- );
2068
- },
2069
-
2070
- // single
2071
- initContainer: function () {
2072
-
2073
- var selection,
2074
- container = this.container,
2075
- dropdown = this.dropdown,
2076
- idSuffix = nextUid(),
2077
- elementLabel;
2078
-
2079
- if (this.opts.minimumResultsForSearch < 0) {
2080
- this.showSearch(false);
2081
- } else {
2082
- this.showSearch(true);
2083
- }
2084
-
2085
- this.selection = selection = container.find(".select2-choice");
2086
-
2087
- this.focusser = container.find(".select2-focusser");
2088
-
2089
- // add aria associations
2090
- selection.find(".select2-chosen").attr("id", "select2-chosen-"+idSuffix);
2091
- this.focusser.attr("aria-labelledby", "select2-chosen-"+idSuffix);
2092
- this.results.attr("id", "select2-results-"+idSuffix);
2093
- this.search.attr("aria-owns", "select2-results-"+idSuffix);
2094
-
2095
- // rewrite labels from original element to focusser
2096
- this.focusser.attr("id", "s2id_autogen"+idSuffix);
2097
-
2098
- elementLabel = $("label[for='" + this.opts.element.attr("id") + "']");
2099
-
2100
- this.focusser.prev()
2101
- .text(elementLabel.text())
2102
- .attr('for', this.focusser.attr('id'));
2103
-
2104
- // Ensure the original element retains an accessible name
2105
- var originalTitle = this.opts.element.attr("title");
2106
- this.opts.element.attr("title", (originalTitle || elementLabel.text()));
2107
-
2108
- this.focusser.attr("tabindex", this.elementTabIndex);
2109
-
2110
- // write label for search field using the label from the focusser element
2111
- this.search.attr("id", this.focusser.attr('id') + '_search');
2112
-
2113
- this.search.prev()
2114
- .text($("label[for='" + this.focusser.attr('id') + "']").text())
2115
- .attr('for', this.search.attr('id'));
2116
-
2117
- this.search.on("keydown", this.bind(function (e) {
2118
- if (!this.isInterfaceEnabled()) return;
2119
-
2120
- // filter 229 keyCodes (input method editor is processing key input)
2121
- if (229 == e.keyCode) return;
2122
-
2123
- if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {
2124
- // prevent the page from scrolling
2125
- killEvent(e);
2126
- return;
2127
- }
2128
-
2129
- switch (e.which) {
2130
- case KEY.UP:
2131
- case KEY.DOWN:
2132
- this.moveHighlight((e.which === KEY.UP) ? -1 : 1);
2133
- killEvent(e);
2134
- return;
2135
- case KEY.ENTER:
2136
- this.selectHighlighted();
2137
- killEvent(e);
2138
- return;
2139
- case KEY.TAB:
2140
- this.selectHighlighted({noFocus: true});
2141
- return;
2142
- case KEY.ESC:
2143
- this.cancel(e);
2144
- killEvent(e);
2145
- return;
2146
- }
2147
- }));
2148
-
2149
- this.search.on("blur", this.bind(function(e) {
2150
- // a workaround for chrome to keep the search field focussed when the scroll bar is used to scroll the dropdown.
2151
- // without this the search field loses focus which is annoying
2152
- if (document.activeElement === this.body.get(0)) {
2153
- window.setTimeout(this.bind(function() {
2154
- if (this.opened()) {
2155
- this.search.focus();
2156
- }
2157
- }), 0);
2158
- }
2159
- }));
2160
-
2161
- this.focusser.on("keydown", this.bind(function (e) {
2162
- if (!this.isInterfaceEnabled()) return;
2163
-
2164
- if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) {
2165
- return;
2166
- }
2167
-
2168
- if (this.opts.openOnEnter === false && e.which === KEY.ENTER) {
2169
- killEvent(e);
2170
- return;
2171
- }
2172
-
2173
- if (e.which == KEY.DOWN || e.which == KEY.UP
2174
- || (e.which == KEY.ENTER && this.opts.openOnEnter)) {
2175
-
2176
- if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) return;
2177
-
2178
- this.open();
2179
- killEvent(e);
2180
- return;
2181
- }
2182
-
2183
- if (e.which == KEY.DELETE || e.which == KEY.BACKSPACE) {
2184
- if (this.opts.allowClear) {
2185
- this.clear();
2186
- }
2187
- killEvent(e);
2188
- return;
2189
- }
2190
- }));
2191
-
2192
-
2193
- installKeyUpChangeEvent(this.focusser);
2194
- this.focusser.on("keyup-change input", this.bind(function(e) {
2195
- if (this.opts.minimumResultsForSearch >= 0) {
2196
- e.stopPropagation();
2197
- if (this.opened()) return;
2198
- this.open();
2199
- }
2200
- }));
2201
-
2202
- selection.on("mousedown touchstart", "abbr", this.bind(function (e) {
2203
- if (!this.isInterfaceEnabled()) return;
2204
- this.clear();
2205
- killEventImmediately(e);
2206
- this.close();
2207
- this.selection.focus();
2208
- }));
2209
-
2210
- selection.on("mousedown touchstart", this.bind(function (e) {
2211
- // Prevent IE from generating a click event on the body
2212
- reinsertElement(selection);
2213
-
2214
- if (!this.container.hasClass("select2-container-active")) {
2215
- this.opts.element.trigger($.Event("select2-focus"));
2216
- }
2217
-
2218
- if (this.opened()) {
2219
- this.close();
2220
- } else if (this.isInterfaceEnabled()) {
2221
- this.open();
2222
- }
2223
-
2224
- killEvent(e);
2225
- }));
2226
-
2227
- dropdown.on("mousedown touchstart", this.bind(function() {
2228
- if (this.opts.shouldFocusInput(this)) {
2229
- this.search.focus();
2230
- }
2231
- }));
2232
-
2233
- selection.on("focus", this.bind(function(e) {
2234
- killEvent(e);
2235
- }));
2236
-
2237
- this.focusser.on("focus", this.bind(function(){
2238
- if (!this.container.hasClass("select2-container-active")) {
2239
- this.opts.element.trigger($.Event("select2-focus"));
2240
- }
2241
- this.container.addClass("select2-container-active");
2242
- })).on("blur", this.bind(function() {
2243
- if (!this.opened()) {
2244
- this.container.removeClass("select2-container-active");
2245
- this.opts.element.trigger($.Event("select2-blur"));
2246
- }
2247
- }));
2248
- this.search.on("focus", this.bind(function(){
2249
- if (!this.container.hasClass("select2-container-active")) {
2250
- this.opts.element.trigger($.Event("select2-focus"));
2251
- }
2252
- this.container.addClass("select2-container-active");
2253
- }));
2254
-
2255
- this.initContainerWidth();
2256
- this.opts.element.addClass("select2-offscreen");
2257
- this.setPlaceholder();
2258
-
2259
- },
2260
-
2261
- // single
2262
- clear: function(triggerChange) {
2263
- var data=this.selection.data("select2-data");
2264
- if (data) { // guard against queued quick consecutive clicks
2265
- var evt = $.Event("select2-clearing");
2266
- this.opts.element.trigger(evt);
2267
- if (evt.isDefaultPrevented()) {
2268
- return;
2269
- }
2270
- var placeholderOption = this.getPlaceholderOption();
2271
- this.opts.element.val(placeholderOption ? placeholderOption.val() : "");
2272
- this.selection.find(".select2-chosen").empty();
2273
- this.selection.removeData("select2-data");
2274
- this.setPlaceholder();
2275
-
2276
- if (triggerChange !== false){
2277
- this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });
2278
- this.triggerChange({removed:data});
2279
- }
2280
- }
2281
- },
2282
-
2283
- /**
2284
- * Sets selection based on source element's value
2285
- */
2286
- // single
2287
- initSelection: function () {
2288
- var selected;
2289
- if (this.isPlaceholderOptionSelected()) {
2290
- this.updateSelection(null);
2291
- this.close();
2292
- this.setPlaceholder();
2293
- } else {
2294
- var self = this;
2295
- this.opts.initSelection.call(null, this.opts.element, function(selected){
2296
- if (selected !== undefined && selected !== null) {
2297
- self.updateSelection(selected);
2298
- self.close();
2299
- self.setPlaceholder();
2300
- self.nextSearchTerm = self.opts.nextSearchTerm(selected, self.search.val());
2301
- }
2302
- });
2303
- }
2304
- },
2305
-
2306
- isPlaceholderOptionSelected: function() {
2307
- var placeholderOption;
2308
- if (this.getPlaceholder() === undefined) return false; // no placeholder specified so no option should be considered
2309
- return ((placeholderOption = this.getPlaceholderOption()) !== undefined && placeholderOption.prop("selected"))
2310
- || (this.opts.element.val() === "")
2311
- || (this.opts.element.val() === undefined)
2312
- || (this.opts.element.val() === null);
2313
- },
2314
-
2315
- // single
2316
- prepareOpts: function () {
2317
- var opts = this.parent.prepareOpts.apply(this, arguments),
2318
- self=this;
2319
-
2320
- if (opts.element.get(0).tagName.toLowerCase() === "select") {
2321
- // install the selection initializer
2322
- opts.initSelection = function (element, callback) {
2323
- var selected = element.find("option").filter(function() { return this.selected && !this.disabled });
2324
- // a single select box always has a value, no need to null check 'selected'
2325
- callback(self.optionToData(selected));
2326
- };
2327
- } else if ("data" in opts) {
2328
- // install default initSelection when applied to hidden input and data is local
2329
- opts.initSelection = opts.initSelection || function (element, callback) {
2330
- var id = element.val();
2331
- //search in data by id, storing the actual matching item
2332
- var match = null;
2333
- opts.query({
2334
- matcher: function(term, text, el){
2335
- var is_match = equal(id, opts.id(el));
2336
- if (is_match) {
2337
- match = el;
2338
- }
2339
- return is_match;
2340
- },
2341
- callback: !$.isFunction(callback) ? $.noop : function() {
2342
- callback(match);
2343
- }
2344
- });
2345
- };
2346
- }
2347
-
2348
- return opts;
2349
- },
2350
-
2351
- // single
2352
- getPlaceholder: function() {
2353
- // if a placeholder is specified on a single select without a valid placeholder option ignore it
2354
- if (this.select) {
2355
- if (this.getPlaceholderOption() === undefined) {
2356
- return undefined;
2357
- }
2358
- }
2359
-
2360
- return this.parent.getPlaceholder.apply(this, arguments);
2361
- },
2362
-
2363
- // single
2364
- setPlaceholder: function () {
2365
- var placeholder = this.getPlaceholder();
2366
-
2367
- if (this.isPlaceholderOptionSelected() && placeholder !== undefined) {
2368
-
2369
- // check for a placeholder option if attached to a select
2370
- if (this.select && this.getPlaceholderOption() === undefined) return;
2371
-
2372
- this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(placeholder));
2373
-
2374
- this.selection.addClass("select2-default");
2375
-
2376
- this.container.removeClass("select2-allowclear");
2377
- }
2378
- },
2379
-
2380
- // single
2381
- postprocessResults: function (data, initial, noHighlightUpdate) {
2382
- var selected = 0, self = this, showSearchInput = true;
2383
-
2384
- // find the selected element in the result list
2385
-
2386
- this.findHighlightableChoices().each2(function (i, elm) {
2387
- if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) {
2388
- selected = i;
2389
- return false;
2390
- }
2391
- });
2392
-
2393
- // and highlight it
2394
- if (noHighlightUpdate !== false) {
2395
- if (initial === true && selected >= 0) {
2396
- this.highlight(selected);
2397
- } else {
2398
- this.highlight(0);
2399
- }
2400
- }
2401
-
2402
- // hide the search box if this is the first we got the results and there are enough of them for search
2403
-
2404
- if (initial === true) {
2405
- var min = this.opts.minimumResultsForSearch;
2406
- if (min >= 0) {
2407
- this.showSearch(countResults(data.results) >= min);
2408
- }
2409
- }
2410
- },
2411
-
2412
- // single
2413
- showSearch: function(showSearchInput) {
2414
- if (this.showSearchInput === showSearchInput) return;
2415
-
2416
- this.showSearchInput = showSearchInput;
2417
-
2418
- this.dropdown.find(".select2-search").toggleClass("select2-search-hidden", !showSearchInput);
2419
- this.dropdown.find(".select2-search").toggleClass("select2-offscreen", !showSearchInput);
2420
- //add "select2-with-searchbox" to the container if search box is shown
2421
- $(this.dropdown, this.container).toggleClass("select2-with-searchbox", showSearchInput);
2422
- },
2423
-
2424
- // single
2425
- onSelect: function (data, options) {
2426
-
2427
- if (!this.triggerSelect(data)) { return; }
2428
-
2429
- var old = this.opts.element.val(),
2430
- oldData = this.data();
2431
-
2432
- this.opts.element.val(this.id(data));
2433
- this.updateSelection(data);
2434
-
2435
- this.opts.element.trigger({ type: "select2-selected", val: this.id(data), choice: data });
2436
-
2437
- this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());
2438
- this.close();
2439
-
2440
- if ((!options || !options.noFocus) && this.opts.shouldFocusInput(this)) {
2441
- this.focusser.focus();
2442
- }
2443
-
2444
- if (!equal(old, this.id(data))) {
2445
- this.triggerChange({ added: data, removed: oldData });
2446
- }
2447
- },
2448
-
2449
- // single
2450
- updateSelection: function (data) {
2451
-
2452
- var container=this.selection.find(".select2-chosen"), formatted, cssClass;
2453
-
2454
- this.selection.data("select2-data", data);
2455
-
2456
- container.empty();
2457
- if (data !== null) {
2458
- formatted=this.opts.formatSelection(data, container, this.opts.escapeMarkup);
2459
- }
2460
- if (formatted !== undefined) {
2461
- container.append(formatted);
2462
- }
2463
- cssClass=this.opts.formatSelectionCssClass(data, container);
2464
- if (cssClass !== undefined) {
2465
- container.addClass(cssClass);
2466
- }
2467
-
2468
- this.selection.removeClass("select2-default");
2469
-
2470
- if (this.opts.allowClear && this.getPlaceholder() !== undefined) {
2471
- this.container.addClass("select2-allowclear");
2472
- }
2473
- },
2474
-
2475
- // single
2476
- val: function () {
2477
- var val,
2478
- triggerChange = false,
2479
- data = null,
2480
- self = this,
2481
- oldData = this.data();
2482
-
2483
- if (arguments.length === 0) {
2484
- return this.opts.element.val();
2485
- }
2486
-
2487
- val = arguments[0];
2488
-
2489
- if (arguments.length > 1) {
2490
- triggerChange = arguments[1];
2491
- }
2492
-
2493
- if (this.select) {
2494
- this.select
2495
- .val(val)
2496
- .find("option").filter(function() { return this.selected }).each2(function (i, elm) {
2497
- data = self.optionToData(elm);
2498
- return false;
2499
- });
2500
- this.updateSelection(data);
2501
- this.setPlaceholder();
2502
- if (triggerChange) {
2503
- this.triggerChange({added: data, removed:oldData});
2504
- }
2505
- } else {
2506
- // val is an id. !val is true for [undefined,null,'',0] - 0 is legal
2507
- if (!val && val !== 0) {
2508
- this.clear(triggerChange);
2509
- return;
2510
- }
2511
- if (this.opts.initSelection === undefined) {
2512
- throw new Error("cannot call val() if initSelection() is not defined");
2513
- }
2514
- this.opts.element.val(val);
2515
- this.opts.initSelection(this.opts.element, function(data){
2516
- self.opts.element.val(!data ? "" : self.id(data));
2517
- self.updateSelection(data);
2518
- self.setPlaceholder();
2519
- if (triggerChange) {
2520
- self.triggerChange({added: data, removed:oldData});
2521
- }
2522
- });
2523
- }
2524
- },
2525
-
2526
- // single
2527
- clearSearch: function () {
2528
- this.search.val("");
2529
- this.focusser.val("");
2530
- },
2531
-
2532
- // single
2533
- data: function(value) {
2534
- var data,
2535
- triggerChange = false;
2536
-
2537
- if (arguments.length === 0) {
2538
- data = this.selection.data("select2-data");
2539
- if (data == undefined) data = null;
2540
- return data;
2541
- } else {
2542
- if (arguments.length > 1) {
2543
- triggerChange = arguments[1];
2544
- }
2545
- if (!value) {
2546
- this.clear(triggerChange);
2547
- } else {
2548
- data = this.data();
2549
- this.opts.element.val(!value ? "" : this.id(value));
2550
- this.updateSelection(value);
2551
- if (triggerChange) {
2552
- this.triggerChange({added: value, removed:data});
2553
- }
2554
- }
2555
- }
2556
- }
2557
- });
2558
-
2559
- MultiSelect2 = clazz(AbstractSelect2, {
2560
-
2561
- // multi
2562
- createContainer: function () {
2563
- var container = $(document.createElement("div")).attr({
2564
- "class": "select2-container select2-container-multi"
2565
- }).html([
2566
- "<ul class='select2-choices'>",
2567
- " <li class='select2-search-field'>",
2568
- " <label for='' class='select2-offscreen'></label>",
2569
- " <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>",
2570
- " </li>",
2571
- "</ul>",
2572
- "<div class='select2-drop select2-drop-multi select2-display-none'>",
2573
- " <ul class='select2-results'>",
2574
- " </ul>",
2575
- "</div>"].join(""));
2576
- return container;
2577
- },
2578
-
2579
- // multi
2580
- prepareOpts: function () {
2581
- var opts = this.parent.prepareOpts.apply(this, arguments),
2582
- self=this;
2583
-
2584
- // TODO validate placeholder is a string if specified
2585
-
2586
- if (opts.element.get(0).tagName.toLowerCase() === "select") {
2587
- // install the selection initializer
2588
- opts.initSelection = function (element, callback) {
2589
-
2590
- var data = [];
2591
-
2592
- element.find("option").filter(function() { return this.selected && !this.disabled }).each2(function (i, elm) {
2593
- data.push(self.optionToData(elm));
2594
- });
2595
- callback(data);
2596
- };
2597
- } else if ("data" in opts) {
2598
- // install default initSelection when applied to hidden input and data is local
2599
- opts.initSelection = opts.initSelection || function (element, callback) {
2600
- var ids = splitVal(element.val(), opts.separator);
2601
- //search in data by array of ids, storing matching items in a list
2602
- var matches = [];
2603
- opts.query({
2604
- matcher: function(term, text, el){
2605
- var is_match = $.grep(ids, function(id) {
2606
- return equal(id, opts.id(el));
2607
- }).length;
2608
- if (is_match) {
2609
- matches.push(el);
2610
- }
2611
- return is_match;
2612
- },
2613
- callback: !$.isFunction(callback) ? $.noop : function() {
2614
- // reorder matches based on the order they appear in the ids array because right now
2615
- // they are in the order in which they appear in data array
2616
- var ordered = [];
2617
- for (var i = 0; i < ids.length; i++) {
2618
- var id = ids[i];
2619
- for (var j = 0; j < matches.length; j++) {
2620
- var match = matches[j];
2621
- if (equal(id, opts.id(match))) {
2622
- ordered.push(match);
2623
- matches.splice(j, 1);
2624
- break;
2625
- }
2626
- }
2627
- }
2628
- callback(ordered);
2629
- }
2630
- });
2631
- };
2632
- }
2633
-
2634
- return opts;
2635
- },
2636
-
2637
- // multi
2638
- selectChoice: function (choice) {
2639
-
2640
- var selected = this.container.find(".select2-search-choice-focus");
2641
- if (selected.length && choice && choice[0] == selected[0]) {
2642
-
2643
- } else {
2644
- if (selected.length) {
2645
- this.opts.element.trigger("choice-deselected", selected);
2646
- }
2647
- selected.removeClass("select2-search-choice-focus");
2648
- if (choice && choice.length) {
2649
- this.close();
2650
- choice.addClass("select2-search-choice-focus");
2651
- this.opts.element.trigger("choice-selected", choice);
2652
- }
2653
- }
2654
- },
2655
-
2656
- // multi
2657
- destroy: function() {
2658
- $("label[for='" + this.search.attr('id') + "']")
2659
- .attr('for', this.opts.element.attr("id"));
2660
- this.parent.destroy.apply(this, arguments);
2661
-
2662
- cleanupJQueryElements.call(this,
2663
- "searchContainer",
2664
- "selection"
2665
- );
2666
- },
2667
-
2668
- // multi
2669
- initContainer: function () {
2670
-
2671
- var selector = ".select2-choices", selection;
2672
-
2673
- this.searchContainer = this.container.find(".select2-search-field");
2674
- this.selection = selection = this.container.find(selector);
2675
-
2676
- var _this = this;
2677
- this.selection.on("click", ".select2-search-choice:not(.select2-locked)", function (e) {
2678
- //killEvent(e);
2679
- _this.search[0].focus();
2680
- _this.selectChoice($(this));
2681
- });
2682
-
2683
- // rewrite labels from original element to focusser
2684
- this.search.attr("id", "s2id_autogen"+nextUid());
2685
-
2686
- this.search.prev()
2687
- .text($("label[for='" + this.opts.element.attr("id") + "']").text())
2688
- .attr('for', this.search.attr('id'));
2689
-
2690
- this.search.on("input paste", this.bind(function() {
2691
- if (this.search.attr('placeholder') && this.search.val().length == 0) return;
2692
- if (!this.isInterfaceEnabled()) return;
2693
- if (!this.opened()) {
2694
- this.open();
2695
- }
2696
- }));
2697
-
2698
- this.search.attr("tabindex", this.elementTabIndex);
2699
-
2700
- this.keydowns = 0;
2701
- this.search.on("keydown", this.bind(function (e) {
2702
- if (!this.isInterfaceEnabled()) return;
2703
-
2704
- ++this.keydowns;
2705
- var selected = selection.find(".select2-search-choice-focus");
2706
- var prev = selected.prev(".select2-search-choice:not(.select2-locked)");
2707
- var next = selected.next(".select2-search-choice:not(.select2-locked)");
2708
- var pos = getCursorInfo(this.search);
2709
-
2710
- if (selected.length &&
2711
- (e.which == KEY.LEFT || e.which == KEY.RIGHT || e.which == KEY.BACKSPACE || e.which == KEY.DELETE || e.which == KEY.ENTER)) {
2712
- var selectedChoice = selected;
2713
- if (e.which == KEY.LEFT && prev.length) {
2714
- selectedChoice = prev;
2715
- }
2716
- else if (e.which == KEY.RIGHT) {
2717
- selectedChoice = next.length ? next : null;
2718
- }
2719
- else if (e.which === KEY.BACKSPACE) {
2720
- if (this.unselect(selected.first())) {
2721
- this.search.width(10);
2722
- selectedChoice = prev.length ? prev : next;
2723
- }
2724
- } else if (e.which == KEY.DELETE) {
2725
- if (this.unselect(selected.first())) {
2726
- this.search.width(10);
2727
- selectedChoice = next.length ? next : null;
2728
- }
2729
- } else if (e.which == KEY.ENTER) {
2730
- selectedChoice = null;
2731
- }
2732
-
2733
- this.selectChoice(selectedChoice);
2734
- killEvent(e);
2735
- if (!selectedChoice || !selectedChoice.length) {
2736
- this.open();
2737
- }
2738
- return;
2739
- } else if (((e.which === KEY.BACKSPACE && this.keydowns == 1)
2740
- || e.which == KEY.LEFT) && (pos.offset == 0 && !pos.length)) {
2741
-
2742
- this.selectChoice(selection.find(".select2-search-choice:not(.select2-locked)").last());
2743
- killEvent(e);
2744
- return;
2745
- } else {
2746
- this.selectChoice(null);
2747
- }
2748
-
2749
- if (this.opened()) {
2750
- switch (e.which) {
2751
- case KEY.UP:
2752
- case KEY.DOWN:
2753
- this.moveHighlight((e.which === KEY.UP) ? -1 : 1);
2754
- killEvent(e);
2755
- return;
2756
- case KEY.ENTER:
2757
- this.selectHighlighted();
2758
- killEvent(e);
2759
- return;
2760
- case KEY.TAB:
2761
- this.selectHighlighted({noFocus:true});
2762
- this.close();
2763
- return;
2764
- case KEY.ESC:
2765
- this.cancel(e);
2766
- killEvent(e);
2767
- return;
2768
- }
2769
- }
2770
-
2771
- if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e)
2772
- || e.which === KEY.BACKSPACE || e.which === KEY.ESC) {
2773
- return;
2774
- }
2775
-
2776
- if (e.which === KEY.ENTER) {
2777
- if (this.opts.openOnEnter === false) {
2778
- return;
2779
- } else if (e.altKey || e.ctrlKey || e.shiftKey || e.metaKey) {
2780
- return;
2781
- }
2782
- }
2783
-
2784
- this.open();
2785
-
2786
- if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) {
2787
- // prevent the page from scrolling
2788
- killEvent(e);
2789
- }
2790
-
2791
- if (e.which === KEY.ENTER) {
2792
- // prevent form from being submitted
2793
- killEvent(e);
2794
- }
2795
-
2796
- }));
2797
-
2798
- this.search.on("keyup", this.bind(function (e) {
2799
- this.keydowns = 0;
2800
- this.resizeSearch();
2801
- })
2802
- );
2803
-
2804
- this.search.on("blur", this.bind(function(e) {
2805
- this.container.removeClass("select2-container-active");
2806
- this.search.removeClass("select2-focused");
2807
- this.selectChoice(null);
2808
- if (!this.opened()) this.clearSearch();
2809
- e.stopImmediatePropagation();
2810
- this.opts.element.trigger($.Event("select2-blur"));
2811
- }));
2812
-
2813
- this.container.on("click", selector, this.bind(function (e) {
2814
- if (!this.isInterfaceEnabled()) return;
2815
- if ($(e.target).closest(".select2-search-choice").length > 0) {
2816
- // clicked inside a select2 search choice, do not open
2817
- return;
2818
- }
2819
- this.selectChoice(null);
2820
- this.clearPlaceholder();
2821
- if (!this.container.hasClass("select2-container-active")) {
2822
- this.opts.element.trigger($.Event("select2-focus"));
2823
- }
2824
- this.open();
2825
- this.focusSearch();
2826
- e.preventDefault();
2827
- }));
2828
-
2829
- this.container.on("focus", selector, this.bind(function () {
2830
- if (!this.isInterfaceEnabled()) return;
2831
- if (!this.container.hasClass("select2-container-active")) {
2832
- this.opts.element.trigger($.Event("select2-focus"));
2833
- }
2834
- this.container.addClass("select2-container-active");
2835
- this.dropdown.addClass("select2-drop-active");
2836
- this.clearPlaceholder();
2837
- }));
2838
-
2839
- this.initContainerWidth();
2840
- this.opts.element.addClass("select2-offscreen");
2841
-
2842
- // set the placeholder if necessary
2843
- this.clearSearch();
2844
- },
2845
-
2846
- // multi
2847
- enableInterface: function() {
2848
- if (this.parent.enableInterface.apply(this, arguments)) {
2849
- this.search.prop("disabled", !this.isInterfaceEnabled());
2850
- }
2851
- },
2852
-
2853
- // multi
2854
- initSelection: function () {
2855
- var data;
2856
- if (this.opts.element.val() === "" && this.opts.element.text() === "") {
2857
- this.updateSelection([]);
2858
- this.close();
2859
- // set the placeholder if necessary
2860
- this.clearSearch();
2861
- }
2862
- if (this.select || this.opts.element.val() !== "") {
2863
- var self = this;
2864
- this.opts.initSelection.call(null, this.opts.element, function(data){
2865
- if (data !== undefined && data !== null) {
2866
- self.updateSelection(data);
2867
- self.close();
2868
- // set the placeholder if necessary
2869
- self.clearSearch();
2870
- }
2871
- });
2872
- }
2873
- },
2874
-
2875
- // multi
2876
- clearSearch: function () {
2877
- var placeholder = this.getPlaceholder(),
2878
- maxWidth = this.getMaxSearchWidth();
2879
-
2880
- if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) {
2881
- this.search.val(placeholder).addClass("select2-default");
2882
- // stretch the search box to full width of the container so as much of the placeholder is visible as possible
2883
- // we could call this.resizeSearch(), but we do not because that requires a sizer and we do not want to create one so early because of a firefox bug, see #944
2884
- this.search.width(maxWidth > 0 ? maxWidth : this.container.css("width"));
2885
- } else {
2886
- this.search.val("").width(10);
2887
- }
2888
- },
2889
-
2890
- // multi
2891
- clearPlaceholder: function () {
2892
- if (this.search.hasClass("select2-default")) {
2893
- this.search.val("").removeClass("select2-default");
2894
- }
2895
- },
2896
-
2897
- // multi
2898
- opening: function () {
2899
- this.clearPlaceholder(); // should be done before super so placeholder is not used to search
2900
- this.resizeSearch();
2901
-
2902
- this.parent.opening.apply(this, arguments);
2903
-
2904
- this.focusSearch();
2905
-
2906
- // initializes search's value with nextSearchTerm (if defined by user)
2907
- // ignore nextSearchTerm if the dropdown is opened by the user pressing a letter
2908
- if(this.search.val() === "") {
2909
- if(this.nextSearchTerm != undefined){
2910
- this.search.val(this.nextSearchTerm);
2911
- this.search.select();
2912
- }
2913
- }
2914
-
2915
- this.updateResults(true);
2916
- if (this.opts.shouldFocusInput(this)) {
2917
- this.search.focus();
2918
- }
2919
- this.opts.element.trigger($.Event("select2-open"));
2920
- },
2921
-
2922
- // multi
2923
- close: function () {
2924
- if (!this.opened()) return;
2925
- this.parent.close.apply(this, arguments);
2926
- },
2927
-
2928
- // multi
2929
- focus: function () {
2930
- this.close();
2931
- this.search.focus();
2932
- },
2933
-
2934
- // multi
2935
- isFocused: function () {
2936
- return this.search.hasClass("select2-focused");
2937
- },
2938
-
2939
- // multi
2940
- updateSelection: function (data) {
2941
- var ids = [], filtered = [], self = this;
2942
-
2943
- // filter out duplicates
2944
- $(data).each(function () {
2945
- if (indexOf(self.id(this), ids) < 0) {
2946
- ids.push(self.id(this));
2947
- filtered.push(this);
2948
- }
2949
- });
2950
- data = filtered;
2951
-
2952
- this.selection.find(".select2-search-choice").remove();
2953
- $(data).each(function () {
2954
- self.addSelectedChoice(this);
2955
- });
2956
- self.postprocessResults();
2957
- },
2958
-
2959
- // multi
2960
- tokenize: function() {
2961
- var input = this.search.val();
2962
- input = this.opts.tokenizer.call(this, input, this.data(), this.bind(this.onSelect), this.opts);
2963
- if (input != null && input != undefined) {
2964
- this.search.val(input);
2965
- if (input.length > 0) {
2966
- this.open();
2967
- }
2968
- }
2969
-
2970
- },
2971
-
2972
- // multi
2973
- onSelect: function (data, options) {
2974
-
2975
- if (!this.triggerSelect(data) || data.text === "") { return; }
2976
-
2977
- this.addSelectedChoice(data);
2978
-
2979
- this.opts.element.trigger({ type: "selected", val: this.id(data), choice: data });
2980
-
2981
- // keep track of the search's value before it gets cleared
2982
- this.nextSearchTerm = this.opts.nextSearchTerm(data, this.search.val());
2983
-
2984
- this.clearSearch();
2985
- this.updateResults();
2986
-
2987
- if (this.select || !this.opts.closeOnSelect) this.postprocessResults(data, false, this.opts.closeOnSelect===true);
2988
-
2989
- if (this.opts.closeOnSelect) {
2990
- this.close();
2991
- this.search.width(10);
2992
- } else {
2993
- if (this.countSelectableResults()>0) {
2994
- this.search.width(10);
2995
- this.resizeSearch();
2996
- if (this.getMaximumSelectionSize() > 0 && this.val().length >= this.getMaximumSelectionSize()) {
2997
- // if we reached max selection size repaint the results so choices
2998
- // are replaced with the max selection reached message
2999
- this.updateResults(true);
3000
- } else {
3001
- // initializes search's value with nextSearchTerm and update search result
3002
- if(this.nextSearchTerm != undefined){
3003
- this.search.val(this.nextSearchTerm);
3004
- this.updateResults();
3005
- this.search.select();
3006
- }
3007
- }
3008
- this.positionDropdown();
3009
- } else {
3010
- // if nothing left to select close
3011
- this.close();
3012
- this.search.width(10);
3013
- }
3014
- }
3015
-
3016
- // since its not possible to select an element that has already been
3017
- // added we do not need to check if this is a new element before firing change
3018
- this.triggerChange({ added: data });
3019
-
3020
- if (!options || !options.noFocus)
3021
- this.focusSearch();
3022
- },
3023
-
3024
- // multi
3025
- cancel: function () {
3026
- this.close();
3027
- this.focusSearch();
3028
- },
3029
-
3030
- addSelectedChoice: function (data) {
3031
- var enableChoice = !data.locked,
3032
- enabledItem = $(
3033
- "<li class='select2-search-choice'>" +
3034
- " <div></div>" +
3035
- " <a href='#' class='select2-search-choice-close' tabindex='-1'></a>" +
3036
- "</li>"),
3037
- disabledItem = $(
3038
- "<li class='select2-search-choice select2-locked'>" +
3039
- "<div></div>" +
3040
- "</li>");
3041
- var choice = enableChoice ? enabledItem : disabledItem,
3042
- id = this.id(data),
3043
- val = this.getVal(),
3044
- formatted,
3045
- cssClass;
3046
-
3047
- formatted=this.opts.formatSelection(data, choice.find("div"), this.opts.escapeMarkup);
3048
- if (formatted != undefined) {
3049
- choice.find("div").replaceWith("<div>"+formatted+"</div>");
3050
- }
3051
- cssClass=this.opts.formatSelectionCssClass(data, choice.find("div"));
3052
- if (cssClass != undefined) {
3053
- choice.addClass(cssClass);
3054
- }
3055
-
3056
- if(enableChoice){
3057
- choice.find(".select2-search-choice-close")
3058
- .on("mousedown", killEvent)
3059
- .on("click dblclick", this.bind(function (e) {
3060
- if (!this.isInterfaceEnabled()) return;
3061
-
3062
- this.unselect($(e.target));
3063
- this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus");
3064
- killEvent(e);
3065
- this.close();
3066
- this.focusSearch();
3067
- })).on("focus", this.bind(function () {
3068
- if (!this.isInterfaceEnabled()) return;
3069
- this.container.addClass("select2-container-active");
3070
- this.dropdown.addClass("select2-drop-active");
3071
- }));
3072
- }
3073
-
3074
- choice.data("select2-data", data);
3075
- choice.insertBefore(this.searchContainer);
3076
-
3077
- val.push(id);
3078
- this.setVal(val);
3079
- },
3080
-
3081
- // multi
3082
- unselect: function (selected) {
3083
- var val = this.getVal(),
3084
- data,
3085
- index;
3086
- selected = selected.closest(".select2-search-choice");
3087
-
3088
- if (selected.length === 0) {
3089
- throw "Invalid argument: " + selected + ". Must be .select2-search-choice";
3090
- }
3091
-
3092
- data = selected.data("select2-data");
3093
-
3094
- if (!data) {
3095
- // prevent a race condition when the 'x' is clicked really fast repeatedly the event can be queued
3096
- // and invoked on an element already removed
3097
- return;
3098
- }
3099
-
3100
- var evt = $.Event("select2-removing");
3101
- evt.val = this.id(data);
3102
- evt.choice = data;
3103
- this.opts.element.trigger(evt);
3104
-
3105
- if (evt.isDefaultPrevented()) {
3106
- return false;
3107
- }
3108
-
3109
- while((index = indexOf(this.id(data), val)) >= 0) {
3110
- val.splice(index, 1);
3111
- this.setVal(val);
3112
- if (this.select) this.postprocessResults();
3113
- }
3114
-
3115
- selected.remove();
3116
-
3117
- this.opts.element.trigger({ type: "select2-removed", val: this.id(data), choice: data });
3118
- this.triggerChange({ removed: data });
3119
-
3120
- return true;
3121
- },
3122
-
3123
- // multi
3124
- postprocessResults: function (data, initial, noHighlightUpdate) {
3125
- var val = this.getVal(),
3126
- choices = this.results.find(".select2-result"),
3127
- compound = this.results.find(".select2-result-with-children"),
3128
- self = this;
3129
-
3130
- choices.each2(function (i, choice) {
3131
- var id = self.id(choice.data("select2-data"));
3132
- if (indexOf(id, val) >= 0) {
3133
- choice.addClass("select2-selected");
3134
- // mark all children of the selected parent as selected
3135
- choice.find(".select2-result-selectable").addClass("select2-selected");
3136
- }
3137
- });
3138
-
3139
- compound.each2(function(i, choice) {
3140
- // hide an optgroup if it doesn't have any selectable children
3141
- if (!choice.is('.select2-result-selectable')
3142
- && choice.find(".select2-result-selectable:not(.select2-selected)").length === 0) {
3143
- choice.addClass("select2-selected");
3144
- }
3145
- });
3146
-
3147
- if (this.highlight() == -1 && noHighlightUpdate !== false){
3148
- self.highlight(0);
3149
- }
3150
-
3151
- //If all results are chosen render formatNoMatches
3152
- if(!this.opts.createSearchChoice && !choices.filter('.select2-result:not(.select2-selected)').length > 0){
3153
- if(!data || data && !data.more && this.results.find(".select2-no-results").length === 0) {
3154
- if (checkFormatter(self.opts.formatNoMatches, "formatNoMatches")) {
3155
- this.results.append("<li class='select2-no-results'>" + evaluate(self.opts.formatNoMatches, self.opts.element, self.search.val()) + "</li>");
3156
- }
3157
- }
3158
- }
3159
-
3160
- },
3161
-
3162
- // multi
3163
- getMaxSearchWidth: function() {
3164
- return this.selection.width() - getSideBorderPadding(this.search);
3165
- },
3166
-
3167
- // multi
3168
- resizeSearch: function () {
3169
- var minimumWidth, left, maxWidth, containerLeft, searchWidth,
3170
- sideBorderPadding = getSideBorderPadding(this.search);
3171
-
3172
- minimumWidth = measureTextWidth(this.search) + 10;
3173
-
3174
- left = this.search.offset().left;
3175
-
3176
- maxWidth = this.selection.width();
3177
- containerLeft = this.selection.offset().left;
3178
-
3179
- searchWidth = maxWidth - (left - containerLeft) - sideBorderPadding;
3180
-
3181
- if (searchWidth < minimumWidth) {
3182
- searchWidth = maxWidth - sideBorderPadding;
3183
- }
3184
-
3185
- if (searchWidth < 40) {
3186
- searchWidth = maxWidth - sideBorderPadding;
3187
- }
3188
-
3189
- if (searchWidth <= 0) {
3190
- searchWidth = minimumWidth;
3191
- }
3192
-
3193
- this.search.width(Math.floor(searchWidth));
3194
- },
3195
-
3196
- // multi
3197
- getVal: function () {
3198
- var val;
3199
- if (this.select) {
3200
- val = this.select.val();
3201
- return val === null ? [] : val;
3202
- } else {
3203
- val = this.opts.element.val();
3204
- return splitVal(val, this.opts.separator);
3205
- }
3206
- },
3207
-
3208
- // multi
3209
- setVal: function (val) {
3210
- var unique;
3211
- if (this.select) {
3212
- this.select.val(val);
3213
- } else {
3214
- unique = [];
3215
- // filter out duplicates
3216
- $(val).each(function () {
3217
- if (indexOf(this, unique) < 0) unique.push(this);
3218
- });
3219
- this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator));
3220
- }
3221
- },
3222
-
3223
- // multi
3224
- buildChangeDetails: function (old, current) {
3225
- var current = current.slice(0),
3226
- old = old.slice(0);
3227
-
3228
- // remove intersection from each array
3229
- for (var i = 0; i < current.length; i++) {
3230
- for (var j = 0; j < old.length; j++) {
3231
- if (equal(this.opts.id(current[i]), this.opts.id(old[j]))) {
3232
- current.splice(i, 1);
3233
- if(i>0){
3234
- i--;
3235
- }
3236
- old.splice(j, 1);
3237
- j--;
3238
- }
3239
- }
3240
- }
3241
-
3242
- return {added: current, removed: old};
3243
- },
3244
-
3245
-
3246
- // multi
3247
- val: function (val, triggerChange) {
3248
- var oldData, self=this;
3249
-
3250
- if (arguments.length === 0) {
3251
- return this.getVal();
3252
- }
3253
-
3254
- oldData=this.data();
3255
- if (!oldData.length) oldData=[];
3256
-
3257
- // val is an id. !val is true for [undefined,null,'',0] - 0 is legal
3258
- if (!val && val !== 0) {
3259
- this.opts.element.val("");
3260
- this.updateSelection([]);
3261
- this.clearSearch();
3262
- if (triggerChange) {
3263
- this.triggerChange({added: this.data(), removed: oldData});
3264
- }
3265
- return;
3266
- }
3267
-
3268
- // val is a list of ids
3269
- this.setVal(val);
3270
-
3271
- if (this.select) {
3272
- this.opts.initSelection(this.select, this.bind(this.updateSelection));
3273
- if (triggerChange) {
3274
- this.triggerChange(this.buildChangeDetails(oldData, this.data()));
3275
- }
3276
- } else {
3277
- if (this.opts.initSelection === undefined) {
3278
- throw new Error("val() cannot be called if initSelection() is not defined");
3279
- }
3280
-
3281
- this.opts.initSelection(this.opts.element, function(data){
3282
- var ids=$.map(data, self.id);
3283
- self.setVal(ids);
3284
- self.updateSelection(data);
3285
- self.clearSearch();
3286
- if (triggerChange) {
3287
- self.triggerChange(self.buildChangeDetails(oldData, self.data()));
3288
- }
3289
- });
3290
- }
3291
- this.clearSearch();
3292
- },
3293
-
3294
- // multi
3295
- onSortStart: function() {
3296
- if (this.select) {
3297
- throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");
3298
- }
3299
-
3300
- // collapse search field into 0 width so its container can be collapsed as well
3301
- this.search.width(0);
3302
- // hide the container
3303
- this.searchContainer.hide();
3304
- },
3305
-
3306
- // multi
3307
- onSortEnd:function() {
3308
-
3309
- var val=[], self=this;
3310
-
3311
- // show search and move it to the end of the list
3312
- this.searchContainer.show();
3313
- // make sure the search container is the last item in the list
3314
- this.searchContainer.appendTo(this.searchContainer.parent());
3315
- // since we collapsed the width in dragStarted, we resize it here
3316
- this.resizeSearch();
3317
-
3318
- // update selection
3319
- this.selection.find(".select2-search-choice").each(function() {
3320
- val.push(self.opts.id($(this).data("select2-data")));
3321
- });
3322
- this.setVal(val);
3323
- this.triggerChange();
3324
- },
3325
-
3326
- // multi
3327
- data: function(values, triggerChange) {
3328
- var self=this, ids, old;
3329
- if (arguments.length === 0) {
3330
- return this.selection
3331
- .children(".select2-search-choice")
3332
- .map(function() { return $(this).data("select2-data"); })
3333
- .get();
3334
- } else {
3335
- old = this.data();
3336
- if (!values) { values = []; }
3337
- ids = $.map(values, function(e) { return self.opts.id(e); });
3338
- this.setVal(ids);
3339
- this.updateSelection(values);
3340
- this.clearSearch();
3341
- if (triggerChange) {
3342
- this.triggerChange(this.buildChangeDetails(old, this.data()));
3343
- }
3344
- }
3345
- }
3346
- });
3347
-
3348
- $.fn.select2 = function () {
3349
-
3350
- var args = Array.prototype.slice.call(arguments, 0),
3351
- opts,
3352
- select2,
3353
- method, value, multiple,
3354
- allowedMethods = ["val", "destroy", "opened", "open", "close", "focus", "isFocused", "container", "dropdown", "onSortStart", "onSortEnd", "enable", "disable", "readonly", "positionDropdown", "data", "search"],
3355
- valueMethods = ["opened", "isFocused", "container", "dropdown"],
3356
- propertyMethods = ["val", "data"],
3357
- methodsMap = { search: "externalSearch" };
3358
-
3359
- this.each(function () {
3360
- if (args.length === 0 || typeof(args[0]) === "object") {
3361
- opts = args.length === 0 ? {} : $.extend({}, args[0]);
3362
- opts.element = $(this);
3363
-
3364
- if (opts.element.get(0).tagName.toLowerCase() === "select") {
3365
- multiple = opts.element.prop("multiple");
3366
- } else {
3367
- multiple = opts.multiple || false;
3368
- if ("tags" in opts) {opts.multiple = multiple = true;}
3369
- }
3370
-
3371
- select2 = multiple ? new window.Select2["class"].multi() : new window.Select2["class"].single();
3372
- select2.init(opts);
3373
- } else if (typeof(args[0]) === "string") {
3374
-
3375
- if (indexOf(args[0], allowedMethods) < 0) {
3376
- throw "Unknown method: " + args[0];
3377
- }
3378
-
3379
- value = undefined;
3380
- select2 = $(this).data("select2");
3381
- if (select2 === undefined) return;
3382
-
3383
- method=args[0];
3384
-
3385
- if (method === "container") {
3386
- value = select2.container;
3387
- } else if (method === "dropdown") {
3388
- value = select2.dropdown;
3389
- } else {
3390
- if (methodsMap[method]) method = methodsMap[method];
3391
-
3392
- value = select2[method].apply(select2, args.slice(1));
3393
- }
3394
- if (indexOf(args[0], valueMethods) >= 0
3395
- || (indexOf(args[0], propertyMethods) >= 0 && args.length == 1)) {
3396
- return false; // abort the iteration, ready to return first matched value
3397
- }
3398
- } else {
3399
- throw "Invalid arguments to select2 plugin: " + args;
3400
- }
3401
- });
3402
- return (value === undefined) ? this : value;
3403
- };
3404
-
3405
- // plugin defaults, accessible to users
3406
- $.fn.select2.defaults = {
3407
- width: "copy",
3408
- loadMorePadding: 0,
3409
- closeOnSelect: true,
3410
- openOnEnter: true,
3411
- containerCss: {},
3412
- dropdownCss: {},
3413
- containerCssClass: "",
3414
- dropdownCssClass: "",
3415
- formatResult: function(result, container, query, escapeMarkup) {
3416
- var markup=[];
3417
- markMatch(result.text, query.term, markup, escapeMarkup);
3418
- return markup.join("");
3419
- },
3420
- formatSelection: function (data, container, escapeMarkup) {
3421
- return data ? escapeMarkup(data.text) : undefined;
3422
- },
3423
- sortResults: function (results, container, query) {
3424
- return results;
3425
- },
3426
- formatResultCssClass: function(data) {return data.css;},
3427
- formatSelectionCssClass: function(data, container) {return undefined;},
3428
- minimumResultsForSearch: 0,
3429
- minimumInputLength: 0,
3430
- maximumInputLength: null,
3431
- maximumSelectionSize: 0,
3432
- id: function (e) { return e == undefined ? null : e.id; },
3433
- matcher: function(term, text) {
3434
- return stripDiacritics(''+text).toUpperCase().indexOf(stripDiacritics(''+term).toUpperCase()) >= 0;
3435
- },
3436
- separator: ",",
3437
- tokenSeparators: [],
3438
- tokenizer: defaultTokenizer,
3439
- escapeMarkup: defaultEscapeMarkup,
3440
- blurOnChange: false,
3441
- selectOnBlur: false,
3442
- adaptContainerCssClass: function(c) { return c; },
3443
- adaptDropdownCssClass: function(c) { return null; },
3444
- nextSearchTerm: function(selectedObject, currentSearchTerm) { return undefined; },
3445
- searchInputPlaceholder: '',
3446
- createSearchChoicePosition: 'top',
3447
- shouldFocusInput: function (instance) {
3448
- // Attempt to detect touch devices
3449
- var supportsTouchEvents = (('ontouchstart' in window) ||
3450
- (navigator.msMaxTouchPoints > 0));
3451
-
3452
- // Only devices which support touch events should be special cased
3453
- if (!supportsTouchEvents) {
3454
- return true;
3455
- }
3456
-
3457
- // Never focus the input if search is disabled
3458
- if (instance.opts.minimumResultsForSearch < 0) {
3459
- return false;
3460
- }
3461
-
3462
- return true;
3463
- }
3464
- };
3465
-
3466
- $.fn.select2.locales = [];
3467
-
3468
- $.fn.select2.locales['en'] = {
3469
- formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; },
3470
- formatNoMatches: function () { return "No matches found"; },
3471
- formatAjaxError: function (jqXHR, textStatus, errorThrown) { return "Loading failed"; },
3472
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); },
3473
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); },
3474
- formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },
3475
- formatLoadMore: function (pageNumber) { return "Loading more results…"; },
3476
- formatSearching: function () { return "Searching…"; },
3477
- };
3478
-
3479
- $.extend($.fn.select2.defaults, $.fn.select2.locales['en']);
3480
-
3481
- $.fn.select2.ajaxDefaults = {
3482
- transport: $.ajax,
3483
- params: {
3484
- type: "GET",
3485
- cache: false,
3486
- dataType: "json"
3487
- }
3488
- };
3489
-
3490
- // exports
3491
- window.Select2 = {
3492
- query: {
3493
- ajax: ajax,
3494
- local: local,
3495
- tags: tags
3496
- }, util: {
3497
- debounce: debounce,
3498
- markMatch: markMatch,
3499
- escapeMarkup: defaultEscapeMarkup,
3500
- stripDiacritics: stripDiacritics
3501
- }, "class": {
3502
- "abstract": AbstractSelect2,
3503
- "single": SingleSelect2,
3504
- "multi": MultiSelect2
3505
- }
3506
- };
3507
-
3508
- }(jQuery));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2.min.js DELETED
@@ -1,23 +0,0 @@
1
- /*
2
- Copyright 2014 Igor Vaynberg
3
-
4
- Version: 3.5.1 Timestamp: Tue Jul 22 18:58:56 EDT 2014
5
-
6
- This software is licensed under the Apache License, Version 2.0 (the "Apache License") or the GNU
7
- General Public License version 2 (the "GPL License"). You may choose either license to govern your
8
- use of this software only upon the condition that you accept all of the terms of either the Apache
9
- License or the GPL License.
10
-
11
- You may obtain a copy of the Apache License and the GPL License at:
12
-
13
- http://www.apache.org/licenses/LICENSE-2.0
14
- http://www.gnu.org/licenses/gpl-2.0.html
15
-
16
- Unless required by applicable law or agreed to in writing, software distributed under the Apache License
17
- or the GPL Licesnse is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
18
- either express or implied. See the Apache License and the GPL License for the specific language governing
19
- permissions and limitations under the Apache License and the GPL License.
20
- */
21
- !function(a){"undefined"==typeof a.fn.each2&&a.extend(a.fn,{each2:function(b){for(var c=a([0]),d=-1,e=this.length;++d<e&&(c.context=c[0]=this[d])&&b.call(c[0],d,c)!==!1;);return this}})}(jQuery),function(a,b){"use strict";function n(b){var c=a(document.createTextNode(""));b.before(c),c.before(b),c.remove()}function o(a){function b(a){return m[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function p(a,b){for(var c=0,d=b.length;d>c;c+=1)if(r(a,b[c]))return c;return-1}function q(){var b=a(l);b.appendTo("body");var c={width:b.width()-b[0].clientWidth,height:b.height()-b[0].clientHeight};return b.remove(),c}function r(a,c){return a===c?!0:a===b||c===b?!1:null===a||null===c?!1:a.constructor===String?a+""==c+"":c.constructor===String?c+""==a+"":!1}function s(b,c){var d,e,f;if(null===b||b.length<1)return[];for(d=b.split(c),e=0,f=d.length;f>e;e+=1)d[e]=a.trim(d[e]);return d}function t(a){return a.outerWidth(!1)-a.width()}function u(c){var d="keyup-change-value";c.on("keydown",function(){a.data(c,d)===b&&a.data(c,d,c.val())}),c.on("keyup",function(){var e=a.data(c,d);e!==b&&c.val()!==e&&(a.removeData(c,d),c.trigger("keyup-change"))})}function v(c){c.on("mousemove",function(c){var d=i;(d===b||d.x!==c.pageX||d.y!==c.pageY)&&a(c.target).trigger("mousemove-filtered",c)})}function w(a,c,d){d=d||b;var e;return function(){var b=arguments;window.clearTimeout(e),e=window.setTimeout(function(){c.apply(d,b)},a)}}function x(a,b){var c=w(a,function(a){b.trigger("scroll-debounced",a)});b.on("scroll",function(a){p(a.target,b.get())>=0&&c(a)})}function y(a){a[0]!==document.activeElement&&window.setTimeout(function(){var d,b=a[0],c=a.val().length;a.focus();var e=b.offsetWidth>0||b.offsetHeight>0;e&&b===document.activeElement&&(b.setSelectionRange?b.setSelectionRange(c,c):b.createTextRange&&(d=b.createTextRange(),d.collapse(!1),d.select()))},0)}function z(b){b=a(b)[0];var c=0,d=0;if("selectionStart"in b)c=b.selectionStart,d=b.selectionEnd-c;else if("selection"in document){b.focus();var e=document.selection.createRange();d=document.selection.createRange().text.length,e.moveStart("character",-b.value.length),c=e.text.length-d}return{offset:c,length:d}}function A(a){a.preventDefault(),a.stopPropagation()}function B(a){a.preventDefault(),a.stopImmediatePropagation()}function C(b){if(!h){var c=b[0].currentStyle||window.getComputedStyle(b[0],null);h=a(document.createElement("div")).css({position:"absolute",left:"-10000px",top:"-10000px",display:"none",fontSize:c.fontSize,fontFamily:c.fontFamily,fontStyle:c.fontStyle,fontWeight:c.fontWeight,letterSpacing:c.letterSpacing,textTransform:c.textTransform,whiteSpace:"nowrap"}),h.attr("class","select2-sizer"),a("body").append(h)}return h.text(b.val()),h.width()}function D(b,c,d){var e,g,f=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0===this.indexOf("select2-")&&f.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each2(function(){0!==this.indexOf("select2-")&&(g=d(this),g&&f.push(g))})),b.attr("class",f.join(" "))}function E(a,b,c,d){var e=o(a.toUpperCase()).indexOf(o(b.toUpperCase())),f=b.length;return 0>e?(c.push(d(a)),void 0):(c.push(d(a.substring(0,e))),c.push("<span class='select2-match'>"),c.push(d(a.substring(e,e+f))),c.push("</span>"),c.push(d(a.substring(e+f,a.length))),void 0)}function F(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})}function G(c){var d,e=null,f=c.quietMillis||100,g=c.url,h=this;return function(i){window.clearTimeout(d),d=window.setTimeout(function(){var d=c.data,f=g,j=c.transport||a.fn.select2.ajaxDefaults.transport,k={type:c.type||"GET",cache:c.cache||!1,jsonpCallback:c.jsonpCallback||b,dataType:c.dataType||"json"},l=a.extend({},a.fn.select2.ajaxDefaults.params,k);d=d?d.call(h,i.term,i.page,i.context):null,f="function"==typeof f?f.call(h,i.term,i.page,i.context):f,e&&"function"==typeof e.abort&&e.abort(),c.params&&(a.isFunction(c.params)?a.extend(l,c.params.call(h)):a.extend(l,c.params)),a.extend(l,{url:f,dataType:c.dataType,data:d,success:function(a){var b=c.results(a,i.page,i);i.callback(b)},error:function(a,b,c){var d={hasError:!0,jqXHR:a,textStatus:b,errorThrown:c};i.callback(d)}}),e=j.call(h,l)},f)}}function H(b){var d,e,c=b,f=function(a){return""+a.text};a.isArray(c)&&(e=c,c={results:e}),a.isFunction(c)===!1&&(e=c,c=function(){return e});var g=c();return g.text&&(f=g.text,a.isFunction(f)||(d=g.text,f=function(a){return a[d]})),function(b){var g,d=b.term,e={results:[]};return""===d?(b.callback(c()),void 0):(g=function(c,e){var h,i;if(c=c[0],c.children){h={};for(i in c)c.hasOwnProperty(i)&&(h[i]=c[i]);h.children=[],a(c.children).each2(function(a,b){g(b,h.children)}),(h.children.length||b.matcher(d,f(h),c))&&e.push(h)}else b.matcher(d,f(c),c)&&e.push(c)},a(c().results).each2(function(a,b){g(b,e.results)}),b.callback(e),void 0)}}function I(c){var d=a.isFunction(c);return function(e){var f=e.term,g={results:[]},h=d?c(e):c;a.isArray(h)&&(a(h).each(function(){var a=this.text!==b,c=a?this.text:this;(""===f||e.matcher(f,c))&&g.results.push(a?this:{id:this,text:this})}),e.callback(g))}}function J(b,c){if(a.isFunction(b))return!0;if(!b)return!1;if("string"==typeof b)return!0;throw new Error(c+" must be a string, function, or falsy value")}function K(b,c){if(a.isFunction(b)){var d=Array.prototype.slice.call(arguments,2);return b.apply(c,d)}return b}function L(b){var c=0;return a.each(b,function(a,b){b.children?c+=L(b.children):c++}),c}function M(a,c,d,e){var h,i,j,k,l,f=a,g=!1;if(!e.createSearchChoice||!e.tokenSeparators||e.tokenSeparators.length<1)return b;for(;;){for(i=-1,j=0,k=e.tokenSeparators.length;k>j&&(l=e.tokenSeparators[j],i=a.indexOf(l),!(i>=0));j++);if(0>i)break;if(h=a.substring(0,i),a=a.substring(i+l.length),h.length>0&&(h=e.createSearchChoice.call(this,h,c),h!==b&&null!==h&&e.id(h)!==b&&null!==e.id(h))){for(g=!1,j=0,k=c.length;k>j;j++)if(r(e.id(h),e.id(c[j]))){g=!0;break}g||d(h)}}return f!==a?a:void 0}function N(){var b=this;a.each(arguments,function(a,c){b[c].remove(),b[c]=null})}function O(b,c){var d=function(){};return d.prototype=new b,d.prototype.constructor=d,d.prototype.parent=b.prototype,d.prototype=a.extend(d.prototype,c),d}if(window.Select2===b){var c,d,e,f,g,h,j,k,i={x:0,y:0},c={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,isArrow:function(a){switch(a=a.which?a.which:a){case c.LEFT:case c.RIGHT:case c.UP:case c.DOWN:return!0}return!1},isControl:function(a){var b=a.which;switch(b){case c.SHIFT:case c.CTRL:case c.ALT:return!0}return a.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a}},l="<div class='select2-measure-scrollbar'></div>",m={"\u24b6":"A","\uff21":"A","\xc0":"A","\xc1":"A","\xc2":"A","\u1ea6":"A","\u1ea4":"A","\u1eaa":"A","\u1ea8":"A","\xc3":"A","\u0100":"A","\u0102":"A","\u1eb0":"A","\u1eae":"A","\u1eb4":"A","\u1eb2":"A","\u0226":"A","\u01e0":"A","\xc4":"A","\u01de":"A","\u1ea2":"A","\xc5":"A","\u01fa":"A","\u01cd":"A","\u0200":"A","\u0202":"A","\u1ea0":"A","\u1eac":"A","\u1eb6":"A","\u1e00":"A","\u0104":"A","\u023a":"A","\u2c6f":"A","\ua732":"AA","\xc6":"AE","\u01fc":"AE","\u01e2":"AE","\ua734":"AO","\ua736":"AU","\ua738":"AV","\ua73a":"AV","\ua73c":"AY","\u24b7":"B","\uff22":"B","\u1e02":"B","\u1e04":"B","\u1e06":"B","\u0243":"B","\u0182":"B","\u0181":"B","\u24b8":"C","\uff23":"C","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\xc7":"C","\u1e08":"C","\u0187":"C","\u023b":"C","\ua73e":"C","\u24b9":"D","\uff24":"D","\u1e0a":"D","\u010e":"D","\u1e0c":"D","\u1e10":"D","\u1e12":"D","\u1e0e":"D","\u0110":"D","\u018b":"D","\u018a":"D","\u0189":"D","\ua779":"D","\u01f1":"DZ","\u01c4":"DZ","\u01f2":"Dz","\u01c5":"Dz","\u24ba":"E","\uff25":"E","\xc8":"E","\xc9":"E","\xca":"E","\u1ec0":"E","\u1ebe":"E","\u1ec4":"E","\u1ec2":"E","\u1ebc":"E","\u0112":"E","\u1e14":"E","\u1e16":"E","\u0114":"E","\u0116":"E","\xcb":"E","\u1eba":"E","\u011a":"E","\u0204":"E","\u0206":"E","\u1eb8":"E","\u1ec6":"E","\u0228":"E","\u1e1c":"E","\u0118":"E","\u1e18":"E","\u1e1a":"E","\u0190":"E","\u018e":"E","\u24bb":"F","\uff26":"F","\u1e1e":"F","\u0191":"F","\ua77b":"F","\u24bc":"G","\uff27":"G","\u01f4":"G","\u011c":"G","\u1e20":"G","\u011e":"G","\u0120":"G","\u01e6":"G","\u0122":"G","\u01e4":"G","\u0193":"G","\ua7a0":"G","\ua77d":"G","\ua77e":"G","\u24bd":"H","\uff28":"H","\u0124":"H","\u1e22":"H","\u1e26":"H","\u021e":"H","\u1e24":"H","\u1e28":"H","\u1e2a":"H","\u0126":"H","\u2c67":"H","\u2c75":"H","\ua78d":"H","\u24be":"I","\uff29":"I","\xcc":"I","\xcd":"I","\xce":"I","\u0128":"I","\u012a":"I","\u012c":"I","\u0130":"I","\xcf":"I","\u1e2e":"I","\u1ec8":"I","\u01cf":"I","\u0208":"I","\u020a":"I","\u1eca":"I","\u012e":"I","\u1e2c":"I","\u0197":"I","\u24bf":"J","\uff2a":"J","\u0134":"J","\u0248":"J","\u24c0":"K","\uff2b":"K","\u1e30":"K","\u01e8":"K","\u1e32":"K","\u0136":"K","\u1e34":"K","\u0198":"K","\u2c69":"K","\ua740":"K","\ua742":"K","\ua744":"K","\ua7a2":"K","\u24c1":"L","\uff2c":"L","\u013f":"L","\u0139":"L","\u013d":"L","\u1e36":"L","\u1e38":"L","\u013b":"L","\u1e3c":"L","\u1e3a":"L","\u0141":"L","\u023d":"L","\u2c62":"L","\u2c60":"L","\ua748":"L","\ua746":"L","\ua780":"L","\u01c7":"LJ","\u01c8":"Lj","\u24c2":"M","\uff2d":"M","\u1e3e":"M","\u1e40":"M","\u1e42":"M","\u2c6e":"M","\u019c":"M","\u24c3":"N","\uff2e":"N","\u01f8":"N","\u0143":"N","\xd1":"N","\u1e44":"N","\u0147":"N","\u1e46":"N","\u0145":"N","\u1e4a":"N","\u1e48":"N","\u0220":"N","\u019d":"N","\ua790":"N","\ua7a4":"N","\u01ca":"NJ","\u01cb":"Nj","\u24c4":"O","\uff2f":"O","\xd2":"O","\xd3":"O","\xd4":"O","\u1ed2":"O","\u1ed0":"O","\u1ed6":"O","\u1ed4":"O","\xd5":"O","\u1e4c":"O","\u022c":"O","\u1e4e":"O","\u014c":"O","\u1e50":"O","\u1e52":"O","\u014e":"O","\u022e":"O","\u0230":"O","\xd6":"O","\u022a":"O","\u1ece":"O","\u0150":"O","\u01d1":"O","\u020c":"O","\u020e":"O","\u01a0":"O","\u1edc":"O","\u1eda":"O","\u1ee0":"O","\u1ede":"O","\u1ee2":"O","\u1ecc":"O","\u1ed8":"O","\u01ea":"O","\u01ec":"O","\xd8":"O","\u01fe":"O","\u0186":"O","\u019f":"O","\ua74a":"O","\ua74c":"O","\u01a2":"OI","\ua74e":"OO","\u0222":"OU","\u24c5":"P","\uff30":"P","\u1e54":"P","\u1e56":"P","\u01a4":"P","\u2c63":"P","\ua750":"P","\ua752":"P","\ua754":"P","\u24c6":"Q","\uff31":"Q","\ua756":"Q","\ua758":"Q","\u024a":"Q","\u24c7":"R","\uff32":"R","\u0154":"R","\u1e58":"R","\u0158":"R","\u0210":"R","\u0212":"R","\u1e5a":"R","\u1e5c":"R","\u0156":"R","\u1e5e":"R","\u024c":"R","\u2c64":"R","\ua75a":"R","\ua7a6":"R","\ua782":"R","\u24c8":"S","\uff33":"S","\u1e9e":"S","\u015a":"S","\u1e64":"S","\u015c":"S","\u1e60":"S","\u0160":"S","\u1e66":"S","\u1e62":"S","\u1e68":"S","\u0218":"S","\u015e":"S","\u2c7e":"S","\ua7a8":"S","\ua784":"S","\u24c9":"T","\uff34":"T","\u1e6a":"T","\u0164":"T","\u1e6c":"T","\u021a":"T","\u0162":"T","\u1e70":"T","\u1e6e":"T","\u0166":"T","\u01ac":"T","\u01ae":"T","\u023e":"T","\ua786":"T","\ua728":"TZ","\u24ca":"U","\uff35":"U","\xd9":"U","\xda":"U","\xdb":"U","\u0168":"U","\u1e78":"U","\u016a":"U","\u1e7a":"U","\u016c":"U","\xdc":"U","\u01db":"U","\u01d7":"U","\u01d5":"U","\u01d9":"U","\u1ee6":"U","\u016e":"U","\u0170":"U","\u01d3":"U","\u0214":"U","\u0216":"U","\u01af":"U","\u1eea":"U","\u1ee8":"U","\u1eee":"U","\u1eec":"U","\u1ef0":"U","\u1ee4":"U","\u1e72":"U","\u0172":"U","\u1e76":"U","\u1e74":"U","\u0244":"U","\u24cb":"V","\uff36":"V","\u1e7c":"V","\u1e7e":"V","\u01b2":"V","\ua75e":"V","\u0245":"V","\ua760":"VY","\u24cc":"W","\uff37":"W","\u1e80":"W","\u1e82":"W","\u0174":"W","\u1e86":"W","\u1e84":"W","\u1e88":"W","\u2c72":"W","\u24cd":"X","\uff38":"X","\u1e8a":"X","\u1e8c":"X","\u24ce":"Y","\uff39":"Y","\u1ef2":"Y","\xdd":"Y","\u0176":"Y","\u1ef8":"Y","\u0232":"Y","\u1e8e":"Y","\u0178":"Y","\u1ef6":"Y","\u1ef4":"Y","\u01b3":"Y","\u024e":"Y","\u1efe":"Y","\u24cf":"Z","\uff3a":"Z","\u0179":"Z","\u1e90":"Z","\u017b":"Z","\u017d":"Z","\u1e92":"Z","\u1e94":"Z","\u01b5":"Z","\u0224":"Z","\u2c7f":"Z","\u2c6b":"Z","\ua762":"Z","\u24d0":"a","\uff41":"a","\u1e9a":"a","\xe0":"a","\xe1":"a","\xe2":"a","\u1ea7":"a","\u1ea5":"a","\u1eab":"a","\u1ea9":"a","\xe3":"a","\u0101":"a","\u0103":"a","\u1eb1":"a","\u1eaf":"a","\u1eb5":"a","\u1eb3":"a","\u0227":"a","\u01e1":"a","\xe4":"a","\u01df":"a","\u1ea3":"a","\xe5":"a","\u01fb":"a","\u01ce":"a","\u0201":"a","\u0203":"a","\u1ea1":"a","\u1ead":"a","\u1eb7":"a","\u1e01":"a","\u0105":"a","\u2c65":"a","\u0250":"a","\ua733":"aa","\xe6":"ae","\u01fd":"ae","\u01e3":"ae","\ua735":"ao","\ua737":"au","\ua739":"av","\ua73b":"av","\ua73d":"ay","\u24d1":"b","\uff42":"b","\u1e03":"b","\u1e05":"b","\u1e07":"b","\u0180":"b","\u0183":"b","\u0253":"b","\u24d2":"c","\uff43":"c","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\xe7":"c","\u1e09":"c","\u0188":"c","\u023c":"c","\ua73f":"c","\u2184":"c","\u24d3":"d","\uff44":"d","\u1e0b":"d","\u010f":"d","\u1e0d":"d","\u1e11":"d","\u1e13":"d","\u1e0f":"d","\u0111":"d","\u018c":"d","\u0256":"d","\u0257":"d","\ua77a":"d","\u01f3":"dz","\u01c6":"dz","\u24d4":"e","\uff45":"e","\xe8":"e","\xe9":"e","\xea":"e","\u1ec1":"e","\u1ebf":"e","\u1ec5":"e","\u1ec3":"e","\u1ebd":"e","\u0113":"e","\u1e15":"e","\u1e17":"e","\u0115":"e","\u0117":"e","\xeb":"e","\u1ebb":"e","\u011b":"e","\u0205":"e","\u0207":"e","\u1eb9":"e","\u1ec7":"e","\u0229":"e","\u1e1d":"e","\u0119":"e","\u1e19":"e","\u1e1b":"e","\u0247":"e","\u025b":"e","\u01dd":"e","\u24d5":"f","\uff46":"f","\u1e1f":"f","\u0192":"f","\ua77c":"f","\u24d6":"g","\uff47":"g","\u01f5":"g","\u011d":"g","\u1e21":"g","\u011f":"g","\u0121":"g","\u01e7":"g","\u0123":"g","\u01e5":"g","\u0260":"g","\ua7a1":"g","\u1d79":"g","\ua77f":"g","\u24d7":"h","\uff48":"h","\u0125":"h","\u1e23":"h","\u1e27":"h","\u021f":"h","\u1e25":"h","\u1e29":"h","\u1e2b":"h","\u1e96":"h","\u0127":"h","\u2c68":"h","\u2c76":"h","\u0265":"h","\u0195":"hv","\u24d8":"i","\uff49":"i","\xec":"i","\xed":"i","\xee":"i","\u0129":"i","\u012b":"i","\u012d":"i","\xef":"i","\u1e2f":"i","\u1ec9":"i","\u01d0":"i","\u0209":"i","\u020b":"i","\u1ecb":"i","\u012f":"i","\u1e2d":"i","\u0268":"i","\u0131":"i","\u24d9":"j","\uff4a":"j","\u0135":"j","\u01f0":"j","\u0249":"j","\u24da":"k","\uff4b":"k","\u1e31":"k","\u01e9":"k","\u1e33":"k","\u0137":"k","\u1e35":"k","\u0199":"k","\u2c6a":"k","\ua741":"k","\ua743":"k","\ua745":"k","\ua7a3":"k","\u24db":"l","\uff4c":"l","\u0140":"l","\u013a":"l","\u013e":"l","\u1e37":"l","\u1e39":"l","\u013c":"l","\u1e3d":"l","\u1e3b":"l","\u017f":"l","\u0142":"l","\u019a":"l","\u026b":"l","\u2c61":"l","\ua749":"l","\ua781":"l","\ua747":"l","\u01c9":"lj","\u24dc":"m","\uff4d":"m","\u1e3f":"m","\u1e41":"m","\u1e43":"m","\u0271":"m","\u026f":"m","\u24dd":"n","\uff4e":"n","\u01f9":"n","\u0144":"n","\xf1":"n","\u1e45":"n","\u0148":"n","\u1e47":"n","\u0146":"n","\u1e4b":"n","\u1e49":"n","\u019e":"n","\u0272":"n","\u0149":"n","\ua791":"n","\ua7a5":"n","\u01cc":"nj","\u24de":"o","\uff4f":"o","\xf2":"o","\xf3":"o","\xf4":"o","\u1ed3":"o","\u1ed1":"o","\u1ed7":"o","\u1ed5":"o","\xf5":"o","\u1e4d":"o","\u022d":"o","\u1e4f":"o","\u014d":"o","\u1e51":"o","\u1e53":"o","\u014f":"o","\u022f":"o","\u0231":"o","\xf6":"o","\u022b":"o","\u1ecf":"o","\u0151":"o","\u01d2":"o","\u020d":"o","\u020f":"o","\u01a1":"o","\u1edd":"o","\u1edb":"o","\u1ee1":"o","\u1edf":"o","\u1ee3":"o","\u1ecd":"o","\u1ed9":"o","\u01eb":"o","\u01ed":"o","\xf8":"o","\u01ff":"o","\u0254":"o","\ua74b":"o","\ua74d":"o","\u0275":"o","\u01a3":"oi","\u0223":"ou","\ua74f":"oo","\u24df":"p","\uff50":"p","\u1e55":"p","\u1e57":"p","\u01a5":"p","\u1d7d":"p","\ua751":"p","\ua753":"p","\ua755":"p","\u24e0":"q","\uff51":"q","\u024b":"q","\ua757":"q","\ua759":"q","\u24e1":"r","\uff52":"r","\u0155":"r","\u1e59":"r","\u0159":"r","\u0211":"r","\u0213":"r","\u1e5b":"r","\u1e5d":"r","\u0157":"r","\u1e5f":"r","\u024d":"r","\u027d":"r","\ua75b":"r","\ua7a7":"r","\ua783":"r","\u24e2":"s","\uff53":"s","\xdf":"s","\u015b":"s","\u1e65":"s","\u015d":"s","\u1e61":"s","\u0161":"s","\u1e67":"s","\u1e63":"s","\u1e69":"s","\u0219":"s","\u015f":"s","\u023f":"s","\ua7a9":"s","\ua785":"s","\u1e9b":"s","\u24e3":"t","\uff54":"t","\u1e6b":"t","\u1e97":"t","\u0165":"t","\u1e6d":"t","\u021b":"t","\u0163":"t","\u1e71":"t","\u1e6f":"t","\u0167":"t","\u01ad":"t","\u0288":"t","\u2c66":"t","\ua787":"t","\ua729":"tz","\u24e4":"u","\uff55":"u","\xf9":"u","\xfa":"u","\xfb":"u","\u0169":"u","\u1e79":"u","\u016b":"u","\u1e7b":"u","\u016d":"u","\xfc":"u","\u01dc":"u","\u01d8":"u","\u01d6":"u","\u01da":"u","\u1ee7":"u","\u016f":"u","\u0171":"u","\u01d4":"u","\u0215":"u","\u0217":"u","\u01b0":"u","\u1eeb":"u","\u1ee9":"u","\u1eef":"u","\u1eed":"u","\u1ef1":"u","\u1ee5":"u","\u1e73":"u","\u0173":"u","\u1e77":"u","\u1e75":"u","\u0289":"u","\u24e5":"v","\uff56":"v","\u1e7d":"v","\u1e7f":"v","\u028b":"v","\ua75f":"v","\u028c":"v","\ua761":"vy","\u24e6":"w","\uff57":"w","\u1e81":"w","\u1e83":"w","\u0175":"w","\u1e87":"w","\u1e85":"w","\u1e98":"w","\u1e89":"w","\u2c73":"w","\u24e7":"x","\uff58":"x","\u1e8b":"x","\u1e8d":"x","\u24e8":"y","\uff59":"y","\u1ef3":"y","\xfd":"y","\u0177":"y","\u1ef9":"y","\u0233":"y","\u1e8f":"y","\xff":"y","\u1ef7":"y","\u1e99":"y","\u1ef5":"y","\u01b4":"y","\u024f":"y","\u1eff":"y","\u24e9":"z","\uff5a":"z","\u017a":"z","\u1e91":"z","\u017c":"z","\u017e":"z","\u1e93":"z","\u1e95":"z","\u01b6":"z","\u0225":"z","\u0240":"z","\u2c6c":"z","\ua763":"z","\u0386":"\u0391","\u0388":"\u0395","\u0389":"\u0397","\u038a":"\u0399","\u03aa":"\u0399","\u038c":"\u039f","\u038e":"\u03a5","\u03ab":"\u03a5","\u038f":"\u03a9","\u03ac":"\u03b1","\u03ad":"\u03b5","\u03ae":"\u03b7","\u03af":"\u03b9","\u03ca":"\u03b9","\u0390":"\u03b9","\u03cc":"\u03bf","\u03cd":"\u03c5","\u03cb":"\u03c5","\u03b0":"\u03c5","\u03c9":"\u03c9","\u03c2":"\u03c3"};j=a(document),g=function(){var a=1;return function(){return a++}}(),d=O(Object,{bind:function(a){var b=this;return function(){a.apply(b,arguments)}},init:function(c){var d,e,f=".select2-results";this.opts=c=this.prepareOpts(c),this.id=c.id,c.element.data("select2")!==b&&null!==c.element.data("select2")&&c.element.data("select2").destroy(),this.container=this.createContainer(),this.liveRegion=a("<span>",{role:"status","aria-live":"polite"}).addClass("select2-hidden-accessible").appendTo(document.body),this.containerId="s2id_"+(c.element.attr("id")||"autogen"+g()),this.containerEventName=this.containerId.replace(/([.])/g,"_").replace(/([;&,\-\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g,"\\$1"),this.container.attr("id",this.containerId),this.container.attr("title",c.element.attr("title")),this.body=a("body"),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.attr("style",c.element.attr("style")),this.container.css(K(c.containerCss,this.opts.element)),this.container.addClass(K(c.containerCssClass,this.opts.element)),this.elementTabIndex=this.opts.element.attr("tabindex"),this.opts.element.data("select2",this).attr("tabindex","-1").before(this.container).on("click.select2",A),this.container.data("select2",this),this.dropdown=this.container.find(".select2-drop"),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(c.dropdownCssClass,this.opts.element)),this.dropdown.data("select2",this),this.dropdown.on("click",A),this.results=d=this.container.find(f),this.search=e=this.container.find("input.select2-input"),this.queryCount=0,this.resultsPage=0,this.context=null,this.initContainer(),this.container.on("click",A),v(this.results),this.dropdown.on("mousemove-filtered",f,this.bind(this.highlightUnderEvent)),this.dropdown.on("touchstart touchmove touchend",f,this.bind(function(a){this._touchEvent=!0,this.highlightUnderEvent(a)})),this.dropdown.on("touchmove",f,this.bind(this.touchMoved)),this.dropdown.on("touchstart touchend",f,this.bind(this.clearTouchMoved)),this.dropdown.on("click",this.bind(function(){this._touchEvent&&(this._touchEvent=!1,this.selectHighlighted())})),x(80,this.results),this.dropdown.on("scroll-debounced",f,this.bind(this.loadMoreIfNeeded)),a(this.container).on("change",".select2-input",function(a){a.stopPropagation()}),a(this.dropdown).on("change",".select2-input",function(a){a.stopPropagation()}),a.fn.mousewheel&&d.mousewheel(function(a,b,c,e){var f=d.scrollTop();e>0&&0>=f-e?(d.scrollTop(0),A(a)):0>e&&d.get(0).scrollHeight-d.scrollTop()+e<=d.height()&&(d.scrollTop(d.get(0).scrollHeight-d.height()),A(a))}),u(e),e.on("keyup-change input paste",this.bind(this.updateResults)),e.on("focus",function(){e.addClass("select2-focused")}),e.on("blur",function(){e.removeClass("select2-focused")}),this.dropdown.on("mouseup",f,this.bind(function(b){a(b.target).closest(".select2-result-selectable").length>0&&(this.highlightUnderEvent(b),this.selectHighlighted(b))})),this.dropdown.on("click mouseup mousedown touchstart touchend focusin",function(a){a.stopPropagation()}),this.nextSearchTerm=b,a.isFunction(this.opts.initSelection)&&(this.initSelection(),this.monitorSource()),null!==c.maximumInputLength&&this.search.attr("maxlength",c.maximumInputLength);var h=c.element.prop("disabled");h===b&&(h=!1),this.enable(!h);var i=c.element.prop("readonly");i===b&&(i=!1),this.readonly(i),k=k||q(),this.autofocus=c.element.prop("autofocus"),c.element.prop("autofocus",!1),this.autofocus&&this.focus(),this.search.attr("placeholder",c.searchInputPlaceholder)},destroy:function(){var a=this.opts.element,c=a.data("select2"),d=this;this.close(),a.length&&a[0].detachEvent&&a.each(function(){this.detachEvent("onpropertychange",d._sync)}),this.propertyObserver&&(this.propertyObserver.disconnect(),this.propertyObserver=null),this._sync=null,c!==b&&(c.container.remove(),c.liveRegion.remove(),c.dropdown.remove(),a.removeClass("select2-offscreen").removeData("select2").off(".select2").prop("autofocus",this.autofocus||!1),this.elementTabIndex?a.attr({tabindex:this.elementTabIndex}):a.removeAttr("tabindex"),a.show()),N.call(this,"container","liveRegion","dropdown","results","search")},optionToData:function(a){return a.is("option")?{id:a.prop("value"),text:a.text(),element:a.get(),css:a.attr("class"),disabled:a.prop("disabled"),locked:r(a.attr("locked"),"locked")||r(a.data("locked"),!0)}:a.is("optgroup")?{text:a.attr("label"),children:[],element:a.get(),css:a.attr("class")}:void 0},prepareOpts:function(c){var d,e,f,h,i=this;if(d=c.element,"select"===d.get(0).tagName.toLowerCase()&&(this.select=e=c.element),e&&a.each(["id","multiple","ajax","query","createSearchChoice","initSelection","data","tags"],function(){if(this in c)throw new Error("Option '"+this+"' is not allowed for Select2 when attached to a <select> element.")}),c=a.extend({},{populateResults:function(d,e,f){var h,j=this.opts.id,k=this.liveRegion;h=function(d,e,l){var m,n,o,p,q,r,s,t,u,v;d=c.sortResults(d,e,f);var w=[];for(m=0,n=d.length;n>m;m+=1)o=d[m],q=o.disabled===!0,p=!q&&j(o)!==b,r=o.children&&o.children.length>0,s=a("<li></li>"),s.addClass("select2-results-dept-"+l),s.addClass("select2-result"),s.addClass(p?"select2-result-selectable":"select2-result-unselectable"),q&&s.addClass("select2-disabled"),r&&s.addClass("select2-result-with-children"),s.addClass(i.opts.formatResultCssClass(o)),s.attr("role","presentation"),t=a(document.createElement("div")),t.addClass("select2-result-label"),t.attr("id","select2-result-label-"+g()),t.attr("role","option"),v=c.formatResult(o,t,f,i.opts.escapeMarkup),v!==b&&(t.html(v),s.append(t)),r&&(u=a("<ul></ul>"),u.addClass("select2-result-sub"),h(o.children,u,l+1),s.append(u)),s.data("select2-data",o),w.push(s[0]);e.append(w),k.text(c.formatMatches(d.length))},h(e,d,0)}},a.fn.select2.defaults,c),"function"!=typeof c.id&&(f=c.id,c.id=function(a){return a[f]}),a.isArray(c.element.data("select2Tags"))){if("tags"in c)throw"tags specified as both an attribute 'data-select2-tags' and in options of Select2 "+c.element.attr("id");c.tags=c.element.data("select2Tags")}if(e?(c.query=this.bind(function(a){var f,g,h,c={results:[],more:!1},e=a.term;h=function(b,c){var d;b.is("option")?a.matcher(e,b.text(),b)&&c.push(i.optionToData(b)):b.is("optgroup")&&(d=i.optionToData(b),b.children().each2(function(a,b){h(b,d.children)}),d.children.length>0&&c.push(d))},f=d.children(),this.getPlaceholder()!==b&&f.length>0&&(g=this.getPlaceholderOption(),g&&(f=f.not(g))),f.each2(function(a,b){h(b,c.results)}),a.callback(c)}),c.id=function(a){return a.id}):"query"in c||("ajax"in c?(h=c.element.data("ajax-url"),h&&h.length>0&&(c.ajax.url=h),c.query=G.call(c.element,c.ajax)):"data"in c?c.query=H(c.data):"tags"in c&&(c.query=I(c.tags),c.createSearchChoice===b&&(c.createSearchChoice=function(b){return{id:a.trim(b),text:a.trim(b)}}),c.initSelection===b&&(c.initSelection=function(b,d){var e=[];a(s(b.val(),c.separator)).each(function(){var b={id:this,text:this},d=c.tags;a.isFunction(d)&&(d=d()),a(d).each(function(){return r(this.id,b.id)?(b=this,!1):void 0}),e.push(b)}),d(e)}))),"function"!=typeof c.query)throw"query function not defined for Select2 "+c.element.attr("id");if("top"===c.createSearchChoicePosition)c.createSearchChoicePosition=function(a,b){a.unshift(b)};else if("bottom"===c.createSearchChoicePosition)c.createSearchChoicePosition=function(a,b){a.push(b)};else if("function"!=typeof c.createSearchChoicePosition)throw"invalid createSearchChoicePosition option must be 'top', 'bottom' or a custom function";return c},monitorSource:function(){var d,c=this.opts.element,e=this;c.on("change.select2",this.bind(function(){this.opts.element.data("select2-change-triggered")!==!0&&this.initSelection()})),this._sync=this.bind(function(){var a=c.prop("disabled");a===b&&(a=!1),this.enable(!a);var d=c.prop("readonly");d===b&&(d=!1),this.readonly(d),D(this.container,this.opts.element,this.opts.adaptContainerCssClass),this.container.addClass(K(this.opts.containerCssClass,this.opts.element)),D(this.dropdown,this.opts.element,this.opts.adaptDropdownCssClass),this.dropdown.addClass(K(this.opts.dropdownCssClass,this.opts.element))}),c.length&&c[0].attachEvent&&c.each(function(){this.attachEvent("onpropertychange",e._sync)}),d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,d!==b&&(this.propertyObserver&&(delete this.propertyObserver,this.propertyObserver=null),this.propertyObserver=new d(function(b){a.each(b,e._sync)}),this.propertyObserver.observe(c.get(0),{attributes:!0,subtree:!1}))},triggerSelect:function(b){var c=a.Event("select2-selecting",{val:this.id(b),object:b,choice:b});return this.opts.element.trigger(c),!c.isDefaultPrevented()},triggerChange:function(b){b=b||{},b=a.extend({},b,{type:"change",val:this.val()}),this.opts.element.data("select2-change-triggered",!0),this.opts.element.trigger(b),this.opts.element.data("select2-change-triggered",!1),this.opts.element.click(),this.opts.blurOnChange&&this.opts.element.blur()},isInterfaceEnabled:function(){return this.enabledInterface===!0},enableInterface:function(){var a=this._enabled&&!this._readonly,b=!a;return a===this.enabledInterface?!1:(this.container.toggleClass("select2-container-disabled",b),this.close(),this.enabledInterface=a,!0)},enable:function(a){a===b&&(a=!0),this._enabled!==a&&(this._enabled=a,this.opts.element.prop("disabled",!a),this.enableInterface())},disable:function(){this.enable(!1)},readonly:function(a){a===b&&(a=!1),this._readonly!==a&&(this._readonly=a,this.opts.element.prop("readonly",a),this.enableInterface())},opened:function(){return this.container?this.container.hasClass("select2-dropdown-open"):!1},positionDropdown:function(){var t,u,v,w,x,b=this.dropdown,c=this.container.offset(),d=this.container.outerHeight(!1),e=this.container.outerWidth(!1),f=b.outerHeight(!1),g=a(window),h=g.width(),i=g.height(),j=g.scrollLeft()+h,l=g.scrollTop()+i,m=c.top+d,n=c.left,o=l>=m+f,p=c.top-f>=g.scrollTop(),q=b.outerWidth(!1),r=j>=n+q,s=b.hasClass("select2-drop-above");s?(u=!0,!p&&o&&(v=!0,u=!1)):(u=!1,!o&&p&&(v=!0,u=!0)),v&&(b.hide(),c=this.container.offset(),d=this.container.outerHeight(!1),e=this.container.outerWidth(!1),f=b.outerHeight(!1),j=g.scrollLeft()+h,l=g.scrollTop()+i,m=c.top+d,n=c.left,q=b.outerWidth(!1),r=j>=n+q,b.show(),this.focusSearch()),this.opts.dropdownAutoWidth?(x=a(".select2-results",b)[0],b.addClass("select2-drop-auto-width"),b.css("width",""),q=b.outerWidth(!1)+(x.scrollHeight===x.clientHeight?0:k.width),q>e?e=q:q=e,f=b.outerHeight(!1),r=j>=n+q):this.container.removeClass("select2-drop-auto-width"),"static"!==this.body.css("position")&&(t=this.body.offset(),m-=t.top,n-=t.left),r||(n=c.left+this.container.outerWidth(!1)-q),w={left:n,width:e},u?(w.top=c.top-f,w.bottom="auto",this.container.addClass("select2-drop-above"),b.addClass("select2-drop-above")):(w.top=m,w.bottom="auto",this.container.removeClass("select2-drop-above"),b.removeClass("select2-drop-above")),w=a.extend(w,K(this.opts.dropdownCss,this.opts.element)),b.css(w)},shouldOpen:function(){var b;return this.opened()?!1:this._enabled===!1||this._readonly===!0?!1:(b=a.Event("select2-opening"),this.opts.element.trigger(b),!b.isDefaultPrevented())},clearDropdownAlignmentPreference:function(){this.container.removeClass("select2-drop-above"),this.dropdown.removeClass("select2-drop-above")},open:function(){return this.shouldOpen()?(this.opening(),j.on("mousemove.select2Event",function(a){i.x=a.pageX,i.y=a.pageY}),!0):!1},opening:function(){var f,b=this.containerEventName,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.addClass("select2-dropdown-open").addClass("select2-container-active"),this.clearDropdownAlignmentPreference(),this.dropdown[0]!==this.body.children().last()[0]&&this.dropdown.detach().appendTo(this.body),f=a("#select2-drop-mask"),0==f.length&&(f=a(document.createElement("div")),f.attr("id","select2-drop-mask").attr("class","select2-drop-mask"),f.hide(),f.appendTo(this.body),f.on("mousedown touchstart click",function(b){n(f);var d,c=a("#select2-drop");c.length>0&&(d=c.data("select2"),d.opts.selectOnBlur&&d.selectHighlighted({noFocus:!0}),d.close(),b.preventDefault(),b.stopPropagation())})),this.dropdown.prev()[0]!==f[0]&&this.dropdown.before(f),a("#select2-drop").removeAttr("id"),this.dropdown.attr("id","select2-drop"),f.show(),this.positionDropdown(),this.dropdown.show(),this.positionDropdown(),this.dropdown.addClass("select2-drop-active");var g=this;this.container.parents().add(window).each(function(){a(this).on(d+" "+c+" "+e,function(){g.opened()&&g.positionDropdown()})})},close:function(){if(this.opened()){var b=this.containerEventName,c="scroll."+b,d="resize."+b,e="orientationchange."+b;this.container.parents().add(window).each(function(){a(this).off(c).off(d).off(e)}),this.clearDropdownAlignmentPreference(),a("#select2-drop-mask").hide(),this.dropdown.removeAttr("id"),this.dropdown.hide(),this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"),this.results.empty(),j.off("mousemove.select2Event"),this.clearSearch(),this.search.removeClass("select2-active"),this.opts.element.trigger(a.Event("select2-close"))}},externalSearch:function(a){this.open(),this.search.val(a),this.updateResults(!1)},clearSearch:function(){},getMaximumSelectionSize:function(){return K(this.opts.maximumSelectionSize,this.opts.element)},ensureHighlightVisible:function(){var c,d,e,f,g,h,i,j,b=this.results;if(d=this.highlight(),!(0>d)){if(0==d)return b.scrollTop(0),void 0;c=this.findHighlightableChoices().find(".select2-result-label"),e=a(c[d]),j=(e.offset()||{}).top||0,f=j+e.outerHeight(!0),d===c.length-1&&(i=b.find("li.select2-more-results"),i.length>0&&(f=i.offset().top+i.outerHeight(!0))),g=b.offset().top+b.outerHeight(!0),f>g&&b.scrollTop(b.scrollTop()+(f-g)),h=j-b.offset().top,0>h&&"none"!=e.css("display")&&b.scrollTop(b.scrollTop()+h)}},findHighlightableChoices:function(){return this.results.find(".select2-result-selectable:not(.select2-disabled):not(.select2-selected)")},moveHighlight:function(b){for(var c=this.findHighlightableChoices(),d=this.highlight();d>-1&&d<c.length;){d+=b;var e=a(c[d]);if(e.hasClass("select2-result-selectable")&&!e.hasClass("select2-disabled")&&!e.hasClass("select2-selected")){this.highlight(d);
22
- break}}},highlight:function(b){var d,e,c=this.findHighlightableChoices();return 0===arguments.length?p(c.filter(".select2-highlighted")[0],c.get()):(b>=c.length&&(b=c.length-1),0>b&&(b=0),this.removeHighlight(),d=a(c[b]),d.addClass("select2-highlighted"),this.search.attr("aria-activedescendant",d.find(".select2-result-label").attr("id")),this.ensureHighlightVisible(),this.liveRegion.text(d.text()),e=d.data("select2-data"),e&&this.opts.element.trigger({type:"select2-highlight",val:this.id(e),choice:e}),void 0)},removeHighlight:function(){this.results.find(".select2-highlighted").removeClass("select2-highlighted")},touchMoved:function(){this._touchMoved=!0},clearTouchMoved:function(){this._touchMoved=!1},countSelectableResults:function(){return this.findHighlightableChoices().length},highlightUnderEvent:function(b){var c=a(b.target).closest(".select2-result-selectable");if(c.length>0&&!c.is(".select2-highlighted")){var d=this.findHighlightableChoices();this.highlight(d.index(c))}else 0==c.length&&this.removeHighlight()},loadMoreIfNeeded:function(){var c,a=this.results,b=a.find("li.select2-more-results"),d=this.resultsPage+1,e=this,f=this.search.val(),g=this.context;0!==b.length&&(c=b.offset().top-a.offset().top-a.height(),c<=this.opts.loadMorePadding&&(b.addClass("select2-active"),this.opts.query({element:this.opts.element,term:f,page:d,context:g,matcher:this.opts.matcher,callback:this.bind(function(c){e.opened()&&(e.opts.populateResults.call(this,a,c.results,{term:f,page:d,context:g}),e.postprocessResults(c,!1,!1),c.more===!0?(b.detach().appendTo(a).text(K(e.opts.formatLoadMore,e.opts.element,d+1)),window.setTimeout(function(){e.loadMoreIfNeeded()},10)):b.remove(),e.positionDropdown(),e.resultsPage=d,e.context=c.context,this.opts.element.trigger({type:"select2-loaded",items:c}))})})))},tokenize:function(){},updateResults:function(c){function m(){d.removeClass("select2-active"),h.positionDropdown(),e.find(".select2-no-results,.select2-selection-limit,.select2-searching").length?h.liveRegion.text(e.text()):h.liveRegion.text(h.opts.formatMatches(e.find(".select2-result-selectable").length))}function n(a){e.html(a),m()}var g,i,l,d=this.search,e=this.results,f=this.opts,h=this,j=d.val(),k=a.data(this.container,"select2-last-term");if((c===!0||!k||!r(j,k))&&(a.data(this.container,"select2-last-term",j),c===!0||this.showSearchInput!==!1&&this.opened())){l=++this.queryCount;var o=this.getMaximumSelectionSize();if(o>=1&&(g=this.data(),a.isArray(g)&&g.length>=o&&J(f.formatSelectionTooBig,"formatSelectionTooBig")))return n("<li class='select2-selection-limit'>"+K(f.formatSelectionTooBig,f.element,o)+"</li>"),void 0;if(d.val().length<f.minimumInputLength)return J(f.formatInputTooShort,"formatInputTooShort")?n("<li class='select2-no-results'>"+K(f.formatInputTooShort,f.element,d.val(),f.minimumInputLength)+"</li>"):n(""),c&&this.showSearch&&this.showSearch(!0),void 0;if(f.maximumInputLength&&d.val().length>f.maximumInputLength)return J(f.formatInputTooLong,"formatInputTooLong")?n("<li class='select2-no-results'>"+K(f.formatInputTooLong,f.element,d.val(),f.maximumInputLength)+"</li>"):n(""),void 0;f.formatSearching&&0===this.findHighlightableChoices().length&&n("<li class='select2-searching'>"+K(f.formatSearching,f.element)+"</li>"),d.addClass("select2-active"),this.removeHighlight(),i=this.tokenize(),i!=b&&null!=i&&d.val(i),this.resultsPage=1,f.query({element:f.element,term:d.val(),page:this.resultsPage,context:null,matcher:f.matcher,callback:this.bind(function(g){var i;if(l==this.queryCount){if(!this.opened())return this.search.removeClass("select2-active"),void 0;if(g.hasError!==b&&J(f.formatAjaxError,"formatAjaxError"))return n("<li class='select2-ajax-error'>"+K(f.formatAjaxError,f.element,g.jqXHR,g.textStatus,g.errorThrown)+"</li>"),void 0;if(this.context=g.context===b?null:g.context,this.opts.createSearchChoice&&""!==d.val()&&(i=this.opts.createSearchChoice.call(h,d.val(),g.results),i!==b&&null!==i&&h.id(i)!==b&&null!==h.id(i)&&0===a(g.results).filter(function(){return r(h.id(this),h.id(i))}).length&&this.opts.createSearchChoicePosition(g.results,i)),0===g.results.length&&J(f.formatNoMatches,"formatNoMatches"))return n("<li class='select2-no-results'>"+K(f.formatNoMatches,f.element,d.val())+"</li>"),void 0;e.empty(),h.opts.populateResults.call(this,e,g.results,{term:d.val(),page:this.resultsPage,context:null}),g.more===!0&&J(f.formatLoadMore,"formatLoadMore")&&(e.append("<li class='select2-more-results'>"+f.escapeMarkup(K(f.formatLoadMore,f.element,this.resultsPage))+"</li>"),window.setTimeout(function(){h.loadMoreIfNeeded()},10)),this.postprocessResults(g,c),m(),this.opts.element.trigger({type:"select2-loaded",items:g})}})})}},cancel:function(){this.close()},blur:function(){this.opts.selectOnBlur&&this.selectHighlighted({noFocus:!0}),this.close(),this.container.removeClass("select2-container-active"),this.search[0]===document.activeElement&&this.search.blur(),this.clearSearch(),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus")},focusSearch:function(){y(this.search)},selectHighlighted:function(a){if(this._touchMoved)return this.clearTouchMoved(),void 0;var b=this.highlight(),c=this.results.find(".select2-highlighted"),d=c.closest(".select2-result").data("select2-data");d?(this.highlight(b),this.onSelect(d,a)):a&&a.noFocus&&this.close()},getPlaceholder:function(){var a;return this.opts.element.attr("placeholder")||this.opts.element.attr("data-placeholder")||this.opts.element.data("placeholder")||this.opts.placeholder||((a=this.getPlaceholderOption())!==b?a.text():b)},getPlaceholderOption:function(){if(this.select){var c=this.select.children("option").first();if(this.opts.placeholderOption!==b)return"first"===this.opts.placeholderOption&&c||"function"==typeof this.opts.placeholderOption&&this.opts.placeholderOption(this.select);if(""===a.trim(c.text())&&""===c.val())return c}},initContainerWidth:function(){function c(){var c,d,e,f,g,h;if("off"===this.opts.width)return null;if("element"===this.opts.width)return 0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px";if("copy"===this.opts.width||"resolve"===this.opts.width){if(c=this.opts.element.attr("style"),c!==b)for(d=c.split(";"),f=0,g=d.length;g>f;f+=1)if(h=d[f].replace(/\s/g,""),e=h.match(/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i),null!==e&&e.length>=1)return e[1];return"resolve"===this.opts.width?(c=this.opts.element.css("width"),c.indexOf("%")>0?c:0===this.opts.element.outerWidth(!1)?"auto":this.opts.element.outerWidth(!1)+"px"):null}return a.isFunction(this.opts.width)?this.opts.width():this.opts.width}var d=c.call(this);null!==d&&this.container.css("width",d)}}),e=O(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container"}).html(["<a href='javascript:void(0)' class='select2-choice' tabindex='-1'>"," <span class='select2-chosen'>&#160;</span><abbr class='select2-search-choice-close'></abbr>"," <span class='select2-arrow' role='presentation'><b role='presentation'></b></span>","</a>","<label for='' class='select2-offscreen'></label>","<input class='select2-focusser select2-offscreen' type='text' aria-haspopup='true' role='button' />","<div class='select2-drop select2-display-none'>"," <div class='select2-search'>"," <label for='' class='select2-offscreen'></label>"," <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input' role='combobox' aria-expanded='true'"," aria-autocomplete='list' />"," </div>"," <ul class='select2-results' role='listbox'>"," </ul>","</div>"].join(""));return b},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.focusser.prop("disabled",!this.isInterfaceEnabled())},opening:function(){var c,d,e;this.opts.minimumResultsForSearch>=0&&this.showSearch(!0),this.parent.opening.apply(this,arguments),this.showSearchInput!==!1&&this.search.val(this.focusser.val()),this.opts.shouldFocusInput(this)&&(this.search.focus(),c=this.search.get(0),c.createTextRange?(d=c.createTextRange(),d.collapse(!1),d.select()):c.setSelectionRange&&(e=this.search.val().length,c.setSelectionRange(e,e))),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.focusser.prop("disabled",!0).val(""),this.updateResults(!0),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&(this.parent.close.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},focus:function(){this.opened()?this.close():(this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus())},isFocused:function(){return this.container.hasClass("select2-container-active")},cancel:function(){this.parent.cancel.apply(this,arguments),this.focusser.prop("disabled",!1),this.opts.shouldFocusInput(this)&&this.focusser.focus()},destroy:function(){a("label[for='"+this.focusser.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"selection","focusser")},initContainer:function(){var b,h,d=this.container,e=this.dropdown,f=g();this.opts.minimumResultsForSearch<0?this.showSearch(!1):this.showSearch(!0),this.selection=b=d.find(".select2-choice"),this.focusser=d.find(".select2-focusser"),b.find(".select2-chosen").attr("id","select2-chosen-"+f),this.focusser.attr("aria-labelledby","select2-chosen-"+f),this.results.attr("id","select2-results-"+f),this.search.attr("aria-owns","select2-results-"+f),this.focusser.attr("id","s2id_autogen"+f),h=a("label[for='"+this.opts.element.attr("id")+"']"),this.focusser.prev().text(h.text()).attr("for",this.focusser.attr("id"));var i=this.opts.element.attr("title");this.opts.element.attr("title",i||h.text()),this.focusser.attr("tabindex",this.elementTabIndex),this.search.attr("id",this.focusser.attr("id")+"_search"),this.search.prev().text(a("label[for='"+this.focusser.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&229!=a.keyCode){if(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)return A(a),void 0;switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),A(a),void 0;case c.ENTER:return this.selectHighlighted(),A(a),void 0;case c.TAB:return this.selectHighlighted({noFocus:!0}),void 0;case c.ESC:return this.cancel(a),A(a),void 0}}})),this.search.on("blur",this.bind(function(){document.activeElement===this.body.get(0)&&window.setTimeout(this.bind(function(){this.opened()&&this.search.focus()}),0)})),this.focusser.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()&&a.which!==c.TAB&&!c.isControl(a)&&!c.isFunctionKey(a)&&a.which!==c.ESC){if(this.opts.openOnEnter===!1&&a.which===c.ENTER)return A(a),void 0;if(a.which==c.DOWN||a.which==c.UP||a.which==c.ENTER&&this.opts.openOnEnter){if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return;return this.open(),A(a),void 0}return a.which==c.DELETE||a.which==c.BACKSPACE?(this.opts.allowClear&&this.clear(),A(a),void 0):void 0}})),u(this.focusser),this.focusser.on("keyup-change input",this.bind(function(a){if(this.opts.minimumResultsForSearch>=0){if(a.stopPropagation(),this.opened())return;this.open()}})),b.on("mousedown touchstart","abbr",this.bind(function(a){this.isInterfaceEnabled()&&(this.clear(),B(a),this.close(),this.selection.focus())})),b.on("mousedown touchstart",this.bind(function(c){n(b),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.opened()?this.close():this.isInterfaceEnabled()&&this.open(),A(c)})),e.on("mousedown touchstart",this.bind(function(){this.opts.shouldFocusInput(this)&&this.search.focus()})),b.on("focus",this.bind(function(a){A(a)})),this.focusser.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})).on("blur",this.bind(function(){this.opened()||(this.container.removeClass("select2-container-active"),this.opts.element.trigger(a.Event("select2-blur")))})),this.search.on("focus",this.bind(function(){this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active")})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.setPlaceholder()},clear:function(b){var c=this.selection.data("select2-data");if(c){var d=a.Event("select2-clearing");if(this.opts.element.trigger(d),d.isDefaultPrevented())return;var e=this.getPlaceholderOption();this.opts.element.val(e?e.val():""),this.selection.find(".select2-chosen").empty(),this.selection.removeData("select2-data"),this.setPlaceholder(),b!==!1&&(this.opts.element.trigger({type:"select2-removed",val:this.id(c),choice:c}),this.triggerChange({removed:c}))}},initSelection:function(){if(this.isPlaceholderOptionSelected())this.updateSelection(null),this.close(),this.setPlaceholder();else{var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.setPlaceholder(),c.nextSearchTerm=c.opts.nextSearchTerm(a,c.search.val()))})}},isPlaceholderOptionSelected:function(){var a;return this.getPlaceholder()===b?!1:(a=this.getPlaceholderOption())!==b&&a.prop("selected")||""===this.opts.element.val()||this.opts.element.val()===b||null===this.opts.element.val()},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=a.find("option").filter(function(){return this.selected&&!this.disabled});b(c.optionToData(d))}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=c.val(),f=null;b.query({matcher:function(a,c,d){var g=r(e,b.id(d));return g&&(f=d),g},callback:a.isFunction(d)?function(){d(f)}:a.noop})}),b},getPlaceholder:function(){return this.select&&this.getPlaceholderOption()===b?b:this.parent.getPlaceholder.apply(this,arguments)},setPlaceholder:function(){var a=this.getPlaceholder();if(this.isPlaceholderOptionSelected()&&a!==b){if(this.select&&this.getPlaceholderOption()===b)return;this.selection.find(".select2-chosen").html(this.opts.escapeMarkup(a)),this.selection.addClass("select2-default"),this.container.removeClass("select2-allowclear")}},postprocessResults:function(a,b,c){var d=0,e=this;if(this.findHighlightableChoices().each2(function(a,b){return r(e.id(b.data("select2-data")),e.opts.element.val())?(d=a,!1):void 0}),c!==!1&&(b===!0&&d>=0?this.highlight(d):this.highlight(0)),b===!0){var g=this.opts.minimumResultsForSearch;g>=0&&this.showSearch(L(a.results)>=g)}},showSearch:function(b){this.showSearchInput!==b&&(this.showSearchInput=b,this.dropdown.find(".select2-search").toggleClass("select2-search-hidden",!b),this.dropdown.find(".select2-search").toggleClass("select2-offscreen",!b),a(this.dropdown,this.container).toggleClass("select2-with-searchbox",b))},onSelect:function(a,b){if(this.triggerSelect(a)){var c=this.opts.element.val(),d=this.data();this.opts.element.val(this.id(a)),this.updateSelection(a),this.opts.element.trigger({type:"select2-selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.close(),b&&b.noFocus||!this.opts.shouldFocusInput(this)||this.focusser.focus(),r(c,this.id(a))||this.triggerChange({added:a,removed:d})}},updateSelection:function(a){var d,e,c=this.selection.find(".select2-chosen");this.selection.data("select2-data",a),c.empty(),null!==a&&(d=this.opts.formatSelection(a,c,this.opts.escapeMarkup)),d!==b&&c.append(d),e=this.opts.formatSelectionCssClass(a,c),e!==b&&c.addClass(e),this.selection.removeClass("select2-default"),this.opts.allowClear&&this.getPlaceholder()!==b&&this.container.addClass("select2-allowclear")},val:function(){var a,c=!1,d=null,e=this,f=this.data();if(0===arguments.length)return this.opts.element.val();if(a=arguments[0],arguments.length>1&&(c=arguments[1]),this.select)this.select.val(a).find("option").filter(function(){return this.selected}).each2(function(a,b){return d=e.optionToData(b),!1}),this.updateSelection(d),this.setPlaceholder(),c&&this.triggerChange({added:d,removed:f});else{if(!a&&0!==a)return this.clear(c),void 0;if(this.opts.initSelection===b)throw new Error("cannot call val() if initSelection() is not defined");this.opts.element.val(a),this.opts.initSelection(this.opts.element,function(a){e.opts.element.val(a?e.id(a):""),e.updateSelection(a),e.setPlaceholder(),c&&e.triggerChange({added:a,removed:f})})}},clearSearch:function(){this.search.val(""),this.focusser.val("")},data:function(a){var c,d=!1;return 0===arguments.length?(c=this.selection.data("select2-data"),c==b&&(c=null),c):(arguments.length>1&&(d=arguments[1]),a?(c=this.data(),this.opts.element.val(a?this.id(a):""),this.updateSelection(a),d&&this.triggerChange({added:a,removed:c})):this.clear(d),void 0)}}),f=O(d,{createContainer:function(){var b=a(document.createElement("div")).attr({"class":"select2-container select2-container-multi"}).html(["<ul class='select2-choices'>"," <li class='select2-search-field'>"," <label for='' class='select2-offscreen'></label>"," <input type='text' autocomplete='off' autocorrect='off' autocapitalize='off' spellcheck='false' class='select2-input'>"," </li>","</ul>","<div class='select2-drop select2-drop-multi select2-display-none'>"," <ul class='select2-results'>"," </ul>","</div>"].join(""));return b},prepareOpts:function(){var b=this.parent.prepareOpts.apply(this,arguments),c=this;return"select"===b.element.get(0).tagName.toLowerCase()?b.initSelection=function(a,b){var d=[];a.find("option").filter(function(){return this.selected&&!this.disabled}).each2(function(a,b){d.push(c.optionToData(b))}),b(d)}:"data"in b&&(b.initSelection=b.initSelection||function(c,d){var e=s(c.val(),b.separator),f=[];b.query({matcher:function(c,d,g){var h=a.grep(e,function(a){return r(a,b.id(g))}).length;return h&&f.push(g),h},callback:a.isFunction(d)?function(){for(var a=[],c=0;c<e.length;c++)for(var g=e[c],h=0;h<f.length;h++){var i=f[h];if(r(g,b.id(i))){a.push(i),f.splice(h,1);break}}d(a)}:a.noop})}),b},selectChoice:function(a){var b=this.container.find(".select2-search-choice-focus");b.length&&a&&a[0]==b[0]||(b.length&&this.opts.element.trigger("choice-deselected",b),b.removeClass("select2-search-choice-focus"),a&&a.length&&(this.close(),a.addClass("select2-search-choice-focus"),this.opts.element.trigger("choice-selected",a)))},destroy:function(){a("label[for='"+this.search.attr("id")+"']").attr("for",this.opts.element.attr("id")),this.parent.destroy.apply(this,arguments),N.call(this,"searchContainer","selection")},initContainer:function(){var d,b=".select2-choices";this.searchContainer=this.container.find(".select2-search-field"),this.selection=d=this.container.find(b);var e=this;this.selection.on("click",".select2-search-choice:not(.select2-locked)",function(){e.search[0].focus(),e.selectChoice(a(this))}),this.search.attr("id","s2id_autogen"+g()),this.search.prev().text(a("label[for='"+this.opts.element.attr("id")+"']").text()).attr("for",this.search.attr("id")),this.search.on("input paste",this.bind(function(){this.search.attr("placeholder")&&0==this.search.val().length||this.isInterfaceEnabled()&&(this.opened()||this.open())})),this.search.attr("tabindex",this.elementTabIndex),this.keydowns=0,this.search.on("keydown",this.bind(function(a){if(this.isInterfaceEnabled()){++this.keydowns;var b=d.find(".select2-search-choice-focus"),e=b.prev(".select2-search-choice:not(.select2-locked)"),f=b.next(".select2-search-choice:not(.select2-locked)"),g=z(this.search);if(b.length&&(a.which==c.LEFT||a.which==c.RIGHT||a.which==c.BACKSPACE||a.which==c.DELETE||a.which==c.ENTER)){var h=b;return a.which==c.LEFT&&e.length?h=e:a.which==c.RIGHT?h=f.length?f:null:a.which===c.BACKSPACE?this.unselect(b.first())&&(this.search.width(10),h=e.length?e:f):a.which==c.DELETE?this.unselect(b.first())&&(this.search.width(10),h=f.length?f:null):a.which==c.ENTER&&(h=null),this.selectChoice(h),A(a),h&&h.length||this.open(),void 0}if((a.which===c.BACKSPACE&&1==this.keydowns||a.which==c.LEFT)&&0==g.offset&&!g.length)return this.selectChoice(d.find(".select2-search-choice:not(.select2-locked)").last()),A(a),void 0;if(this.selectChoice(null),this.opened())switch(a.which){case c.UP:case c.DOWN:return this.moveHighlight(a.which===c.UP?-1:1),A(a),void 0;case c.ENTER:return this.selectHighlighted(),A(a),void 0;case c.TAB:return this.selectHighlighted({noFocus:!0}),this.close(),void 0;case c.ESC:return this.cancel(a),A(a),void 0}if(a.which!==c.TAB&&!c.isControl(a)&&!c.isFunctionKey(a)&&a.which!==c.BACKSPACE&&a.which!==c.ESC){if(a.which===c.ENTER){if(this.opts.openOnEnter===!1)return;if(a.altKey||a.ctrlKey||a.shiftKey||a.metaKey)return}this.open(),(a.which===c.PAGE_UP||a.which===c.PAGE_DOWN)&&A(a),a.which===c.ENTER&&A(a)}}})),this.search.on("keyup",this.bind(function(){this.keydowns=0,this.resizeSearch()})),this.search.on("blur",this.bind(function(b){this.container.removeClass("select2-container-active"),this.search.removeClass("select2-focused"),this.selectChoice(null),this.opened()||this.clearSearch(),b.stopImmediatePropagation(),this.opts.element.trigger(a.Event("select2-blur"))})),this.container.on("click",b,this.bind(function(b){this.isInterfaceEnabled()&&(a(b.target).closest(".select2-search-choice").length>0||(this.selectChoice(null),this.clearPlaceholder(),this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.open(),this.focusSearch(),b.preventDefault()))})),this.container.on("focus",b,this.bind(function(){this.isInterfaceEnabled()&&(this.container.hasClass("select2-container-active")||this.opts.element.trigger(a.Event("select2-focus")),this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"),this.clearPlaceholder())})),this.initContainerWidth(),this.opts.element.addClass("select2-offscreen"),this.clearSearch()},enableInterface:function(){this.parent.enableInterface.apply(this,arguments)&&this.search.prop("disabled",!this.isInterfaceEnabled())},initSelection:function(){if(""===this.opts.element.val()&&""===this.opts.element.text()&&(this.updateSelection([]),this.close(),this.clearSearch()),this.select||""!==this.opts.element.val()){var c=this;this.opts.initSelection.call(null,this.opts.element,function(a){a!==b&&null!==a&&(c.updateSelection(a),c.close(),c.clearSearch())})}},clearSearch:function(){var a=this.getPlaceholder(),c=this.getMaxSearchWidth();a!==b&&0===this.getVal().length&&this.search.hasClass("select2-focused")===!1?(this.search.val(a).addClass("select2-default"),this.search.width(c>0?c:this.container.css("width"))):this.search.val("").width(10)},clearPlaceholder:function(){this.search.hasClass("select2-default")&&this.search.val("").removeClass("select2-default")},opening:function(){this.clearPlaceholder(),this.resizeSearch(),this.parent.opening.apply(this,arguments),this.focusSearch(),""===this.search.val()&&this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.search.select()),this.updateResults(!0),this.opts.shouldFocusInput(this)&&this.search.focus(),this.opts.element.trigger(a.Event("select2-open"))},close:function(){this.opened()&&this.parent.close.apply(this,arguments)},focus:function(){this.close(),this.search.focus()},isFocused:function(){return this.search.hasClass("select2-focused")},updateSelection:function(b){var c=[],d=[],e=this;a(b).each(function(){p(e.id(this),c)<0&&(c.push(e.id(this)),d.push(this))}),b=d,this.selection.find(".select2-search-choice").remove(),a(b).each(function(){e.addSelectedChoice(this)}),e.postprocessResults()},tokenize:function(){var a=this.search.val();a=this.opts.tokenizer.call(this,a,this.data(),this.bind(this.onSelect),this.opts),null!=a&&a!=b&&(this.search.val(a),a.length>0&&this.open())},onSelect:function(a,c){this.triggerSelect(a)&&""!==a.text&&(this.addSelectedChoice(a),this.opts.element.trigger({type:"selected",val:this.id(a),choice:a}),this.nextSearchTerm=this.opts.nextSearchTerm(a,this.search.val()),this.clearSearch(),this.updateResults(),(this.select||!this.opts.closeOnSelect)&&this.postprocessResults(a,!1,this.opts.closeOnSelect===!0),this.opts.closeOnSelect?(this.close(),this.search.width(10)):this.countSelectableResults()>0?(this.search.width(10),this.resizeSearch(),this.getMaximumSelectionSize()>0&&this.val().length>=this.getMaximumSelectionSize()?this.updateResults(!0):this.nextSearchTerm!=b&&(this.search.val(this.nextSearchTerm),this.updateResults(),this.search.select()),this.positionDropdown()):(this.close(),this.search.width(10)),this.triggerChange({added:a}),c&&c.noFocus||this.focusSearch())},cancel:function(){this.close(),this.focusSearch()},addSelectedChoice:function(c){var j,k,d=!c.locked,e=a("<li class='select2-search-choice'> <div></div> <a href='#' class='select2-search-choice-close' tabindex='-1'></a></li>"),f=a("<li class='select2-search-choice select2-locked'><div></div></li>"),g=d?e:f,h=this.id(c),i=this.getVal();j=this.opts.formatSelection(c,g.find("div"),this.opts.escapeMarkup),j!=b&&g.find("div").replaceWith("<div>"+j+"</div>"),k=this.opts.formatSelectionCssClass(c,g.find("div")),k!=b&&g.addClass(k),d&&g.find(".select2-search-choice-close").on("mousedown",A).on("click dblclick",this.bind(function(b){this.isInterfaceEnabled()&&(this.unselect(a(b.target)),this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"),A(b),this.close(),this.focusSearch())})).on("focus",this.bind(function(){this.isInterfaceEnabled()&&(this.container.addClass("select2-container-active"),this.dropdown.addClass("select2-drop-active"))})),g.data("select2-data",c),g.insertBefore(this.searchContainer),i.push(h),this.setVal(i)},unselect:function(b){var d,e,c=this.getVal();if(b=b.closest(".select2-search-choice"),0===b.length)throw"Invalid argument: "+b+". Must be .select2-search-choice";if(d=b.data("select2-data")){var f=a.Event("select2-removing");if(f.val=this.id(d),f.choice=d,this.opts.element.trigger(f),f.isDefaultPrevented())return!1;for(;(e=p(this.id(d),c))>=0;)c.splice(e,1),this.setVal(c),this.select&&this.postprocessResults();return b.remove(),this.opts.element.trigger({type:"select2-removed",val:this.id(d),choice:d}),this.triggerChange({removed:d}),!0}},postprocessResults:function(a,b,c){var d=this.getVal(),e=this.results.find(".select2-result"),f=this.results.find(".select2-result-with-children"),g=this;e.each2(function(a,b){var c=g.id(b.data("select2-data"));p(c,d)>=0&&(b.addClass("select2-selected"),b.find(".select2-result-selectable").addClass("select2-selected"))}),f.each2(function(a,b){b.is(".select2-result-selectable")||0!==b.find(".select2-result-selectable:not(.select2-selected)").length||b.addClass("select2-selected")}),-1==this.highlight()&&c!==!1&&g.highlight(0),!this.opts.createSearchChoice&&!e.filter(".select2-result:not(.select2-selected)").length>0&&(!a||a&&!a.more&&0===this.results.find(".select2-no-results").length)&&J(g.opts.formatNoMatches,"formatNoMatches")&&this.results.append("<li class='select2-no-results'>"+K(g.opts.formatNoMatches,g.opts.element,g.search.val())+"</li>")},getMaxSearchWidth:function(){return this.selection.width()-t(this.search)},resizeSearch:function(){var a,b,c,d,e,f=t(this.search);a=C(this.search)+10,b=this.search.offset().left,c=this.selection.width(),d=this.selection.offset().left,e=c-(b-d)-f,a>e&&(e=c-f),40>e&&(e=c-f),0>=e&&(e=a),this.search.width(Math.floor(e))},getVal:function(){var a;return this.select?(a=this.select.val(),null===a?[]:a):(a=this.opts.element.val(),s(a,this.opts.separator))},setVal:function(b){var c;this.select?this.select.val(b):(c=[],a(b).each(function(){p(this,c)<0&&c.push(this)}),this.opts.element.val(0===c.length?"":c.join(this.opts.separator)))},buildChangeDetails:function(a,b){for(var b=b.slice(0),a=a.slice(0),c=0;c<b.length;c++)for(var d=0;d<a.length;d++)r(this.opts.id(b[c]),this.opts.id(a[d]))&&(b.splice(c,1),c>0&&c--,a.splice(d,1),d--);return{added:b,removed:a}},val:function(c,d){var e,f=this;if(0===arguments.length)return this.getVal();if(e=this.data(),e.length||(e=[]),!c&&0!==c)return this.opts.element.val(""),this.updateSelection([]),this.clearSearch(),d&&this.triggerChange({added:this.data(),removed:e}),void 0;if(this.setVal(c),this.select)this.opts.initSelection(this.select,this.bind(this.updateSelection)),d&&this.triggerChange(this.buildChangeDetails(e,this.data()));else{if(this.opts.initSelection===b)throw new Error("val() cannot be called if initSelection() is not defined");this.opts.initSelection(this.opts.element,function(b){var c=a.map(b,f.id);f.setVal(c),f.updateSelection(b),f.clearSearch(),d&&f.triggerChange(f.buildChangeDetails(e,f.data()))})}this.clearSearch()},onSortStart:function(){if(this.select)throw new Error("Sorting of elements is not supported when attached to <select>. Attach to <input type='hidden'/> instead.");this.search.width(0),this.searchContainer.hide()},onSortEnd:function(){var b=[],c=this;this.searchContainer.show(),this.searchContainer.appendTo(this.searchContainer.parent()),this.resizeSearch(),this.selection.find(".select2-search-choice").each(function(){b.push(c.opts.id(a(this).data("select2-data")))}),this.setVal(b),this.triggerChange()},data:function(b,c){var e,f,d=this;return 0===arguments.length?this.selection.children(".select2-search-choice").map(function(){return a(this).data("select2-data")}).get():(f=this.data(),b||(b=[]),e=a.map(b,function(a){return d.opts.id(a)}),this.setVal(e),this.updateSelection(b),this.clearSearch(),c&&this.triggerChange(this.buildChangeDetails(f,this.data())),void 0)}}),a.fn.select2=function(){var d,e,f,g,h,c=Array.prototype.slice.call(arguments,0),i=["val","destroy","opened","open","close","focus","isFocused","container","dropdown","onSortStart","onSortEnd","enable","disable","readonly","positionDropdown","data","search"],j=["opened","isFocused","container","dropdown"],k=["val","data"],l={search:"externalSearch"};return this.each(function(){if(0===c.length||"object"==typeof c[0])d=0===c.length?{}:a.extend({},c[0]),d.element=a(this),"select"===d.element.get(0).tagName.toLowerCase()?h=d.element.prop("multiple"):(h=d.multiple||!1,"tags"in d&&(d.multiple=h=!0)),e=h?new window.Select2["class"].multi:new window.Select2["class"].single,e.init(d);else{if("string"!=typeof c[0])throw"Invalid arguments to select2 plugin: "+c;if(p(c[0],i)<0)throw"Unknown method: "+c[0];if(g=b,e=a(this).data("select2"),e===b)return;if(f=c[0],"container"===f?g=e.container:"dropdown"===f?g=e.dropdown:(l[f]&&(f=l[f]),g=e[f].apply(e,c.slice(1))),p(c[0],j)>=0||p(c[0],k)>=0&&1==c.length)return!1}}),g===b?this:g},a.fn.select2.defaults={width:"copy",loadMorePadding:0,closeOnSelect:!0,openOnEnter:!0,containerCss:{},dropdownCss:{},containerCssClass:"",dropdownCssClass:"",formatResult:function(a,b,c,d){var e=[];return E(a.text,c.term,e,d),e.join("")},formatSelection:function(a,c,d){return a?d(a.text):b},sortResults:function(a){return a},formatResultCssClass:function(a){return a.css},formatSelectionCssClass:function(){return b},minimumResultsForSearch:0,minimumInputLength:0,maximumInputLength:null,maximumSelectionSize:0,id:function(a){return a==b?null:a.id},matcher:function(a,b){return o(""+b).toUpperCase().indexOf(o(""+a).toUpperCase())>=0},separator:",",tokenSeparators:[],tokenizer:M,escapeMarkup:F,blurOnChange:!1,selectOnBlur:!1,adaptContainerCssClass:function(a){return a},adaptDropdownCssClass:function(){return null},nextSearchTerm:function(){return b},searchInputPlaceholder:"",createSearchChoicePosition:"top",shouldFocusInput:function(a){var b="ontouchstart"in window||navigator.msMaxTouchPoints>0;return b?a.opts.minimumResultsForSearch<0?!1:!0:!0}},a.fn.select2.locales=[],a.fn.select2.locales.en={formatMatches:function(a){return 1===a?"One result is available, press enter to select it.":a+" results are available, use up and down arrow keys to navigate."
23
- },formatNoMatches:function(){return"No matches found"},formatAjaxError:function(){return"Loading failed"},formatInputTooShort:function(a,b){var c=b-a.length;return"Please enter "+c+" or more character"+(1==c?"":"s")},formatInputTooLong:function(a,b){var c=a.length-b;return"Please delete "+c+" character"+(1==c?"":"s")},formatSelectionTooBig:function(a){return"You can only select "+a+" item"+(1==a?"":"s")},formatLoadMore:function(){return"Loading more results\u2026"},formatSearching:function(){return"Searching\u2026"}},a.extend(a.fn.select2.defaults,a.fn.select2.locales.en),a.fn.select2.ajaxDefaults={transport:a.ajax,params:{type:"GET",cache:!1,dataType:"json"}},window.Select2={query:{ajax:G,local:H,tags:I},util:{debounce:w,markMatch:E,escapeMarkup:F,stripDiacritics:o},"class":{"abstract":d,single:e,multi:f}}}}(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2.png DELETED
Binary file
drkfr/js/vendor/select2/select2_locale_ar.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Arabic translation.
3
- *
4
- * Author: Adel KEDJOUR <adel@kedjour.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['ar'] = {
10
- formatNoMatches: function () { return "لم يتم العثور على مطابقات"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; if (n == 1){ return "الرجاء إدخال حرف واحد على الأكثر"; } return n == 2 ? "الرجاء إدخال حرفين على الأكثر" : "الرجاء إدخال " + n + " على الأكثر"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; if (n == 1){ return "الرجاء إدخال حرف واحد على الأقل"; } return n == 2 ? "الرجاء إدخال حرفين على الأقل" : "الرجاء إدخال " + n + " على الأقل "; },
13
- formatSelectionTooBig: function (limit) { if (n == 1){ return "يمكنك أن تختار إختيار واحد فقط"; } return n == 2 ? "يمكنك أن تختار إختيارين فقط" : "يمكنك أن تختار " + n + " إختيارات فقط"; },
14
- formatLoadMore: function (pageNumber) { return "تحميل المزيد من النتائج…"; },
15
- formatSearching: function () { return "البحث…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ar']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_az.js DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * Select2 Azerbaijani translation.
3
- *
4
- * Author: Farhad Safarov <farhad.safarov@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['az'] = {
10
- formatMatches: function (matches) { return matches + " nəticə mövcuddur, hərəkət etdirmək üçün yuxarı və aşağı düymələrindən istifadə edin."; },
11
- formatNoMatches: function () { return "Nəticə tapılmadı"; },
12
- formatInputTooShort: function (input, min) { var n = min - input.length; return n + " simvol daxil edin"; },
13
- formatInputTooLong: function (input, max) { var n = input.length - max; return n + " simvol silin"; },
14
- formatSelectionTooBig: function (limit) { return "Sadəcə " + limit + " element seçə bilərsiniz"; },
15
- formatLoadMore: function (pageNumber) { return "Daha çox nəticə yüklənir…"; },
16
- formatSearching: function () { return "Axtarılır…"; }
17
- };
18
-
19
- $.extend($.fn.select2.defaults, $.fn.select2.locales['az']);
20
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_bg.js DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * Select2 Bulgarian translation.
3
- *
4
- * @author Lubomir Vikev <lubomirvikev@gmail.com>
5
- * @author Uriy Efremochkin <efremochkin@uriy.me>
6
- */
7
- (function ($) {
8
- "use strict";
9
-
10
- $.fn.select2.locales['bg'] = {
11
- formatNoMatches: function () { return "Няма намерени съвпадения"; },
12
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Моля въведете още " + n + " символ" + (n > 1 ? "а" : ""); },
13
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Моля въведете с " + n + " по-малко символ" + (n > 1 ? "а" : ""); },
14
- formatSelectionTooBig: function (limit) { return "Можете да направите до " + limit + (limit > 1 ? " избора" : " избор"); },
15
- formatLoadMore: function (pageNumber) { return "Зареждат се още…"; },
16
- formatSearching: function () { return "Търсене…"; }
17
- };
18
-
19
- $.extend($.fn.select2.defaults, $.fn.select2.locales['bg']);
20
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ca.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Catalan translation.
3
- *
4
- * Author: David Planella <david.planella@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['ca'] = {
10
- formatNoMatches: function () { return "No s'ha trobat cap coincidència"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduïu " + n + " caràcter" + (n == 1 ? "" : "s") + " més"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Introduïu " + n + " caràcter" + (n == 1? "" : "s") + "menys"; },
13
- formatSelectionTooBig: function (limit) { return "Només podeu seleccionar " + limit + " element" + (limit == 1 ? "" : "s"); },
14
- formatLoadMore: function (pageNumber) { return "S'estan carregant més resultats…"; },
15
- formatSearching: function () { return "S'està cercant…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ca']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_cs.js DELETED
@@ -1,51 +0,0 @@
1
- /**
2
- * Select2 Czech translation.
3
- *
4
- * Author: Michal Marek <ahoj@michal-marek.cz>
5
- * Author - sklonovani: David Vallner <david@vallner.net>
6
- */
7
- (function ($) {
8
- "use strict";
9
- // use text for the numbers 2 through 4
10
- var smallNumbers = {
11
- 2: function(masc) { return (masc ? "dva" : "dvě"); },
12
- 3: function() { return "tři"; },
13
- 4: function() { return "čtyři"; }
14
- }
15
- $.fn.select2.locales['cs'] = {
16
- formatNoMatches: function () { return "Nenalezeny žádné položky"; },
17
- formatInputTooShort: function (input, min) {
18
- var n = min - input.length;
19
- if (n == 1) {
20
- return "Prosím zadejte ještě jeden znak";
21
- } else if (n <= 4) {
22
- return "Prosím zadejte ještě další "+smallNumbers[n](true)+" znaky";
23
- } else {
24
- return "Prosím zadejte ještě dalších "+n+" znaků";
25
- }
26
- },
27
- formatInputTooLong: function (input, max) {
28
- var n = input.length - max;
29
- if (n == 1) {
30
- return "Prosím zadejte o jeden znak méně";
31
- } else if (n <= 4) {
32
- return "Prosím zadejte o "+smallNumbers[n](true)+" znaky méně";
33
- } else {
34
- return "Prosím zadejte o "+n+" znaků méně";
35
- }
36
- },
37
- formatSelectionTooBig: function (limit) {
38
- if (limit == 1) {
39
- return "Můžete zvolit jen jednu položku";
40
- } else if (limit <= 4) {
41
- return "Můžete zvolit maximálně "+smallNumbers[limit](false)+" položky";
42
- } else {
43
- return "Můžete zvolit maximálně "+limit+" položek";
44
- }
45
- },
46
- formatLoadMore: function (pageNumber) { return "Načítají se další výsledky…"; },
47
- formatSearching: function () { return "Vyhledávání…"; }
48
- };
49
-
50
- $.extend($.fn.select2.defaults, $.fn.select2.locales['cs']);
51
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_da.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Danish translation.
3
- *
4
- * Author: Anders Jenbo <anders@jenbo.dk>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['da'] = {
10
- formatNoMatches: function () { return "Ingen resultater fundet"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Angiv venligst " + n + " tegn mere"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Angiv venligst " + n + " tegn mindre"; },
13
- formatSelectionTooBig: function (limit) { return "Du kan kun vælge " + limit + " emne" + (limit === 1 ? "" : "r"); },
14
- formatLoadMore: function (pageNumber) { return "Indlæser flere resultater…"; },
15
- formatSearching: function () { return "Søger…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['da']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_de.js DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * Select2 German translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['de'] = {
8
- formatNoMatches: function () { return "Keine Übereinstimmungen gefunden"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Bitte " + n + " Zeichen mehr eingeben"; },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Bitte " + n + " Zeichen weniger eingeben"; },
11
- formatSelectionTooBig: function (limit) { return "Sie können nur " + limit + " Eintr" + (limit === 1 ? "ag" : "äge") + " auswählen"; },
12
- formatLoadMore: function (pageNumber) { return "Lade mehr Ergebnisse…"; },
13
- formatSearching: function () { return "Suche…"; },
14
- formatMatches: function (matches) { return matches + " Ergebnis " + (matches > 1 ? "se" : "") + " verfügbar, zum Navigieren die Hoch-/Runter-Pfeiltasten verwenden."; }
15
- };
16
-
17
- $.extend($.fn.select2.defaults, $.fn.select2.locales['de']);
18
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_el.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Greek translation.
3
- *
4
- * @author Uriy Efremochkin <efremochkin@uriy.me>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['el'] = {
10
- formatNoMatches: function () { return "Δεν βρέθηκαν αποτελέσματα"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Παρακαλούμε εισάγετε " + n + " περισσότερο" + (n > 1 ? "υς" : "") + " χαρακτήρ" + (n > 1 ? "ες" : "α"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Παρακαλούμε διαγράψτε " + n + " χαρακτήρ" + (n > 1 ? "ες" : "α"); },
13
- formatSelectionTooBig: function (limit) { return "Μπορείτε να επιλέξετε μόνο " + limit + " αντικείμεν" + (limit > 1 ? "α" : "ο"); },
14
- formatLoadMore: function (pageNumber) { return "Φόρτωση περισσότερων…"; },
15
- formatSearching: function () { return "Αναζήτηση…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['el']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_en.js.template DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * Select2 <Language> translation.
3
- *
4
- * Author: Your Name <your@email>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['en'] = {
10
- formatMatches: function (matches) { if (matches === 1) { return "One result is available, press enter to select it."; } return matches + " results are available, use up and down arrow keys to navigate."; },
11
- formatNoMatches: function () { return "No matches found"; },
12
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Please enter " + n + " or more character" + (n == 1 ? "" : "s"); },
13
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Please delete " + n + " character" + (n == 1 ? "" : "s"); },
14
- formatSelectionTooBig: function (limit) { return "You can only select " + limit + " item" + (limit == 1 ? "" : "s"); },
15
- formatLoadMore: function (pageNumber) { return "Loading more results…"; },
16
- formatSearching: function () { return "Searching…"; }
17
- };
18
-
19
- $.extend($.fn.select2.defaults, $.fn.select2.locales['en']);
20
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_es.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Spanish translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['es'] = {
8
- formatNoMatches: function () { return "No se encontraron resultados"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Por favor, introduzca " + n + " car" + (n == 1? "ácter" : "acteres"); },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Por favor, elimine " + n + " car" + (n == 1? "ácter" : "acteres"); },
11
- formatSelectionTooBig: function (limit) { return "Sólo puede seleccionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12
- formatLoadMore: function (pageNumber) { return "Cargando más resultados…"; },
13
- formatSearching: function () { return "Buscando…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['es']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_et.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Estonian translation.
3
- *
4
- * Author: Kuldar Kalvik <kuldar@kalvik.ee>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['et'] = {
10
- formatNoMatches: function () { return "Tulemused puuduvad"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Sisesta " + n + " täht" + (n == 1 ? "" : "e") + " rohkem"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Sisesta " + n + " täht" + (n == 1? "" : "e") + " vähem"; },
13
- formatSelectionTooBig: function (limit) { return "Saad vaid " + limit + " tulemus" + (limit == 1 ? "e" : "t") + " valida"; },
14
- formatLoadMore: function (pageNumber) { return "Laen tulemusi.."; },
15
- formatSearching: function () { return "Otsin.."; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['et']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_eu.js DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * Select2 Basque translation.
3
- *
4
- * Author: Julen Ruiz Aizpuru <julenx at gmail dot com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['eu'] = {
10
- formatNoMatches: function () {
11
- return "Ez da bat datorrenik aurkitu";
12
- },
13
- formatInputTooShort: function (input, min) {
14
- var n = min - input.length;
15
- if (n === 1) {
16
- return "Idatzi karaktere bat gehiago";
17
- } else {
18
- return "Idatzi " + n + " karaktere gehiago";
19
- }
20
- },
21
- formatInputTooLong: function (input, max) {
22
- var n = input.length - max;
23
- if (n === 1) {
24
- return "Idatzi karaktere bat gutxiago";
25
- } else {
26
- return "Idatzi " + n + " karaktere gutxiago";
27
- }
28
- },
29
- formatSelectionTooBig: function (limit) {
30
- if (limit === 1 ) {
31
- return "Elementu bakarra hauta dezakezu";
32
- } else {
33
- return limit + " elementu hauta ditzakezu soilik";
34
- }
35
- },
36
- formatLoadMore: function (pageNumber) {
37
- return "Emaitza gehiago kargatzen…";
38
- },
39
- formatSearching: function () {
40
- return "Bilatzen…";
41
- }
42
- };
43
-
44
- $.extend($.fn.select2.defaults, $.fn.select2.locales['eu']);
45
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_fa.js DELETED
@@ -1,21 +0,0 @@
1
- /**
2
- * Select2 Persian translation.
3
- *
4
- * Author: Ali Choopan <choopan@arsh.co>
5
- * Author: Ebrahim Byagowi <ebrahim@gnu.org>
6
- */
7
- (function ($) {
8
- "use strict";
9
-
10
- $.fn.select2.locales['fa'] = {
11
- formatMatches: function (matches) { return matches + " نتیجه موجود است، کلیدهای جهت بالا و پایین را برای گشتن استفاده کنید."; },
12
- formatNoMatches: function () { return "نتیجه‌ای یافت نشد."; },
13
- formatInputTooShort: function (input, min) { var n = min - input.length; return "لطفاً " + n + " نویسه بیشتر وارد نمایید"; },
14
- formatInputTooLong: function (input, max) { var n = input.length - max; return "لطفاً " + n + " نویسه را حذف کنید."; },
15
- formatSelectionTooBig: function (limit) { return "شما فقط می‌توانید " + limit + " مورد را انتخاب کنید"; },
16
- formatLoadMore: function (pageNumber) { return "در حال بارگیری موارد بیشتر…"; },
17
- formatSearching: function () { return "در حال جستجو…"; }
18
- };
19
-
20
- $.extend($.fn.select2.defaults, $.fn.select2.locales['fa']);
21
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_fi.js DELETED
@@ -1,30 +0,0 @@
1
- /**
2
- * Select2 Finnish translation
3
- */
4
- (function ($) {
5
- "use strict";
6
- $.fn.select2.locales['fi'] = {
7
- formatNoMatches: function () {
8
- return "Ei tuloksia";
9
- },
10
- formatInputTooShort: function (input, min) {
11
- var n = min - input.length;
12
- return "Ole hyvä ja anna " + n + " merkkiä lisää";
13
- },
14
- formatInputTooLong: function (input, max) {
15
- var n = input.length - max;
16
- return "Ole hyvä ja anna " + n + " merkkiä vähemmän";
17
- },
18
- formatSelectionTooBig: function (limit) {
19
- return "Voit valita ainoastaan " + limit + " kpl";
20
- },
21
- formatLoadMore: function (pageNumber) {
22
- return "Ladataan lisää tuloksia…";
23
- },
24
- formatSearching: function () {
25
- return "Etsitään…";
26
- }
27
- };
28
-
29
- $.extend($.fn.select2.defaults, $.fn.select2.locales['fi']);
30
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_fr.js DELETED
@@ -1,18 +0,0 @@
1
- /**
2
- * Select2 French translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['fr'] = {
8
- formatMatches: function (matches) { return matches + " résultats sont disponibles, utilisez les flèches haut et bas pour naviguer."; },
9
- formatNoMatches: function () { return "Aucun résultat trouvé"; },
10
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Saisissez " + n + " caractère" + (n == 1? "" : "s") + " supplémentaire" + (n == 1? "" : "s") ; },
11
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Supprimez " + n + " caractère" + (n == 1? "" : "s"); },
12
- formatSelectionTooBig: function (limit) { return "Vous pouvez seulement sélectionner " + limit + " élément" + (limit == 1 ? "" : "s"); },
13
- formatLoadMore: function (pageNumber) { return "Chargement de résultats supplémentaires…"; },
14
- formatSearching: function () { return "Recherche en cours…"; }
15
- };
16
-
17
- $.extend($.fn.select2.defaults, $.fn.select2.locales['fr']);
18
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_gl.js DELETED
@@ -1,45 +0,0 @@
1
- /**
2
- * Select2 Galician translation
3
- *
4
- * Author: Leandro Regueiro <leandro.regueiro@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['gl'] = {
10
- formatNoMatches: function () {
11
- return "Non se atoparon resultados";
12
- },
13
- formatInputTooShort: function (input, min) {
14
- var n = min - input.length;
15
- if (n === 1) {
16
- return "Engada un carácter";
17
- } else {
18
- return "Engada " + n + " caracteres";
19
- }
20
- },
21
- formatInputTooLong: function (input, max) {
22
- var n = input.length - max;
23
- if (n === 1) {
24
- return "Elimine un carácter";
25
- } else {
26
- return "Elimine " + n + " caracteres";
27
- }
28
- },
29
- formatSelectionTooBig: function (limit) {
30
- if (limit === 1 ) {
31
- return "Só pode seleccionar un elemento";
32
- } else {
33
- return "Só pode seleccionar " + limit + " elementos";
34
- }
35
- },
36
- formatLoadMore: function (pageNumber) {
37
- return "Cargando máis resultados…";
38
- },
39
- formatSearching: function () {
40
- return "Buscando…";
41
- }
42
- };
43
-
44
- $.extend($.fn.select2.defaults, $.fn.select2.locales['gl']);
45
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_he.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Hebrew translation.
3
- *
4
- * Author: Yakir Sitbon <http://www.yakirs.net/>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['he'] = {
10
- formatNoMatches: function () { return "לא נמצאו התאמות"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "נא להזין עוד " + n + " תווים נוספים"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "נא להזין פחות " + n + " תווים"; },
13
- formatSelectionTooBig: function (limit) { return "ניתן לבחור " + limit + " פריטים"; },
14
- formatLoadMore: function (pageNumber) { return "טוען תוצאות נוספות…"; },
15
- formatSearching: function () { return "מחפש…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['he']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_hr.js DELETED
@@ -1,24 +0,0 @@
1
- /**
2
- * Select2 Croatian translation.
3
- *
4
- * @author Edi Modrić <edi.modric@gmail.com>
5
- * @author Uriy Efremochkin <efremochkin@uriy.me>
6
- */
7
- (function ($) {
8
- "use strict";
9
-
10
- $.fn.select2.locales['hr'] = {
11
- formatNoMatches: function () { return "Nema rezultata"; },
12
- formatInputTooShort: function (input, min) { return "Unesite još" + character(min - input.length); },
13
- formatInputTooLong: function (input, max) { return "Unesite" + character(input.length - max) + " manje"; },
14
- formatSelectionTooBig: function (limit) { return "Maksimalan broj odabranih stavki je " + limit; },
15
- formatLoadMore: function (pageNumber) { return "Učitavanje rezultata…"; },
16
- formatSearching: function () { return "Pretraga…"; }
17
- };
18
-
19
- $.extend($.fn.select2.defaults, $.fn.select2.locales['hr']);
20
-
21
- function character (n) {
22
- return " " + n + " znak" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "a" : "" : "ova");
23
- }
24
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_hu.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Hungarian translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['hu'] = {
8
- formatNoMatches: function () { return "Nincs találat."; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Túl rövid. Még " + n + " karakter hiányzik."; },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Túl hosszú. " + n + " karakterrel több, mint kellene."; },
11
- formatSelectionTooBig: function (limit) { return "Csak " + limit + " elemet lehet kiválasztani."; },
12
- formatLoadMore: function (pageNumber) { return "Töltés…"; },
13
- formatSearching: function () { return "Keresés…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['hu']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_id.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Indonesian translation.
3
- *
4
- * Author: Ibrahim Yusuf <ibrahim7usuf@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['id'] = {
10
- formatNoMatches: function () { return "Tidak ada data yang sesuai"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Masukkan " + n + " huruf lagi" + (n == 1 ? "" : "s"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Hapus " + n + " huruf" + (n == 1 ? "" : "s"); },
13
- formatSelectionTooBig: function (limit) { return "Anda hanya dapat memilih " + limit + " pilihan" + (limit == 1 ? "" : "s"); },
14
- formatLoadMore: function (pageNumber) { return "Mengambil data…"; },
15
- formatSearching: function () { return "Mencari…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['id']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_is.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Icelandic translation.
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['is'] = {
8
- formatNoMatches: function () { return "Ekkert fannst"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Vinsamlegast skrifið " + n + " staf" + (n > 1 ? "i" : "") + " í viðbót"; },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Vinsamlegast styttið texta um " + n + " staf" + (n > 1 ? "i" : ""); },
11
- formatSelectionTooBig: function (limit) { return "Þú getur aðeins valið " + limit + " atriði"; },
12
- formatLoadMore: function (pageNumber) { return "Sæki fleiri niðurstöður…"; },
13
- formatSearching: function () { return "Leita…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['is']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_it.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Italian translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['it'] = {
8
- formatNoMatches: function () { return "Nessuna corrispondenza trovata"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Inserisci ancora " + n + " caratter" + (n == 1? "e" : "i"); },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Inserisci " + n + " caratter" + (n == 1? "e" : "i") + " in meno"; },
11
- formatSelectionTooBig: function (limit) { return "Puoi selezionare solo " + limit + " element" + (limit == 1 ? "o" : "i"); },
12
- formatLoadMore: function (pageNumber) { return "Caricamento in corso…"; },
13
- formatSearching: function () { return "Ricerca…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['it']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ja.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Japanese translation.
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['ja'] = {
8
- formatNoMatches: function () { return "該当なし"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "後" + n + "文字入れてください"; },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "検索文字列が" + n + "文字長すぎます"; },
11
- formatSelectionTooBig: function (limit) { return "最多で" + limit + "項目までしか選択できません"; },
12
- formatLoadMore: function (pageNumber) { return "読込中・・・"; },
13
- formatSearching: function () { return "検索中・・・"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ja']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ka.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Georgian (Kartuli) translation.
3
- *
4
- * Author: Dimitri Kurashvili dimakura@gmail.com
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['ka'] = {
10
- formatNoMatches: function () { return "ვერ მოიძებნა"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "გთხოვთ შეიყვანოთ კიდევ " + n + " სიმბოლო"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "გთხოვთ წაშალოთ " + n + " სიმბოლო"; },
13
- formatSelectionTooBig: function (limit) { return "თქვენ შეგიძლიათ მხოლოდ " + limit + " ჩანაწერის მონიშვნა"; },
14
- formatLoadMore: function (pageNumber) { return "შედეგის ჩატვირთვა…"; },
15
- formatSearching: function () { return "ძებნა…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ka']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ko.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Korean translation.
3
- *
4
- * @author Swen Mun <longfinfunnel@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['ko'] = {
10
- formatNoMatches: function () { return "결과 없음"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "너무 짧습니다. "+n+"글자 더 입력해주세요."; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "너무 깁니다. "+n+"글자 지워주세요."; },
13
- formatSelectionTooBig: function (limit) { return "최대 "+limit+"개까지만 선택하실 수 있습니다."; },
14
- formatLoadMore: function (pageNumber) { return "불러오는 중…"; },
15
- formatSearching: function () { return "검색 중…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ko']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_lt.js DELETED
@@ -1,26 +0,0 @@
1
- /**
2
- * Select2 Lithuanian translation.
3
- *
4
- * @author CRONUS Karmalakas <cronus dot karmalakas at gmail dot com>
5
- * @author Uriy Efremochkin <efremochkin@uriy.me>
6
- */
7
- (function ($) {
8
- "use strict";
9
-
10
- $.fn.select2.locales['lt'] = {
11
- formatNoMatches: function () { return "Atitikmenų nerasta"; },
12
- formatInputTooShort: function (input, min) { return "Įrašykite dar" + character(min - input.length); },
13
- formatInputTooLong: function (input, max) { return "Pašalinkite" + character(input.length - max); },
14
- formatSelectionTooBig: function (limit) {
15
- return "Jūs galite pasirinkti tik " + limit + " element" + ((limit%100 > 9 && limit%100 < 21) || limit%10 == 0 ? "ų" : limit%10 > 1 ? "us" : "ą");
16
- },
17
- formatLoadMore: function (pageNumber) { return "Kraunama daugiau rezultatų…"; },
18
- formatSearching: function () { return "Ieškoma…"; }
19
- };
20
-
21
- $.extend($.fn.select2.defaults, $.fn.select2.locales['lt']);
22
-
23
- function character (n) {
24
- return " " + n + " simbol" + ((n%100 > 9 && n%100 < 21) || n%10 == 0 ? "ių" : n%10 > 1 ? "ius" : "į");
25
- }
26
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_lv.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Latvian translation.
3
- *
4
- * @author Uriy Efremochkin <efremochkin@uriy.me>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['lv'] = {
10
- formatNoMatches: function () { return "Sakritību nav"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Lūdzu ievadiet vēl " + n + " simbol" + (n == 11 ? "us" : n%10 == 1 ? "u" : "us"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Lūdzu ievadiet par " + n + " simbol" + (n == 11 ? "iem" : n%10 == 1 ? "u" : "iem") + " mazāk"; },
13
- formatSelectionTooBig: function (limit) { return "Jūs varat izvēlēties ne vairāk kā " + limit + " element" + (limit == 11 ? "us" : limit%10 == 1 ? "u" : "us"); },
14
- formatLoadMore: function (pageNumber) { return "Datu ielāde…"; },
15
- formatSearching: function () { return "Meklēšana…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['lv']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_mk.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Macedonian translation.
3
- *
4
- * Author: Marko Aleksic <psybaron@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['mk'] = {
10
- formatNoMatches: function () { return "Нема пронајдено совпаѓања"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Ве молиме внесете уште " + n + " карактер" + (n == 1 ? "" : "и"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Ве молиме внесете " + n + " помалку карактер" + (n == 1? "" : "и"); },
13
- formatSelectionTooBig: function (limit) { return "Можете да изберете само " + limit + " ставк" + (limit == 1 ? "а" : "и"); },
14
- formatLoadMore: function (pageNumber) { return "Вчитување резултати…"; },
15
- formatSearching: function () { return "Пребарување…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['mk']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ms.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Malay translation.
3
- *
4
- * Author: Kepoweran <kepoweran@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['ms'] = {
10
- formatNoMatches: function () { return "Tiada padanan yang ditemui"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Sila masukkan " + n + " aksara lagi"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Sila hapuskan " + n + " aksara"; },
13
- formatSelectionTooBig: function (limit) { return "Anda hanya boleh memilih " + limit + " pilihan"; },
14
- formatLoadMore: function (pageNumber) { return "Sedang memuatkan keputusan…"; },
15
- formatSearching: function () { return "Mencari…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ms']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_nl.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Dutch translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['nl'] = {
8
- formatNoMatches: function () { return "Geen resultaten gevonden"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Vul nog " + n + " karakter" + (n == 1? "" : "s") + " in"; },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Haal " + n + " karakter" + (n == 1? "" : "s") + " weg"; },
11
- formatSelectionTooBig: function (limit) { return "Maximaal " + limit + " item" + (limit == 1 ? "" : "s") + " toegestaan"; },
12
- formatLoadMore: function (pageNumber) { return "Meer resultaten laden…"; },
13
- formatSearching: function () { return "Zoeken…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['nl']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_no.js DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * Select2 Norwegian translation.
3
- *
4
- * Author: Torgeir Veimo <torgeir.veimo@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['no'] = {
10
- formatNoMatches: function () { return "Ingen treff"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Vennligst skriv inn " + n + (n>1 ? " flere tegn" : " tegn til"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Vennligst fjern " + n + " tegn"; },
13
- formatSelectionTooBig: function (limit) { return "Du kan velge maks " + limit + " elementer"; },
14
- formatLoadMore: function (pageNumber) { return "Laster flere resultater…"; },
15
- formatSearching: function () { return "Søker…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['no']);
19
- })(jQuery);
20
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_pl.js DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * Select2 Polish translation.
3
- *
4
- * @author Jan Kondratowicz <jan@kondratowicz.pl>
5
- * @author Uriy Efremochkin <efremochkin@uriy.me>
6
- * @author Michał Połtyn <mike@poltyn.com>
7
- */
8
- (function ($) {
9
- "use strict";
10
-
11
- $.fn.select2.locales['pl'] = {
12
- formatNoMatches: function () { return "Brak wyników"; },
13
- formatInputTooShort: function (input, min) { return "Wpisz co najmniej" + character(min - input.length, "znak", "i"); },
14
- formatInputTooLong: function (input, max) { return "Wpisana fraza jest za długa o" + character(input.length - max, "znak", "i"); },
15
- formatSelectionTooBig: function (limit) { return "Możesz zaznaczyć najwyżej" + character(limit, "element", "y"); },
16
- formatLoadMore: function (pageNumber) { return "Ładowanie wyników…"; },
17
- formatSearching: function () { return "Szukanie…"; }
18
- };
19
-
20
- $.extend($.fn.select2.defaults, $.fn.select2.locales['pl']);
21
-
22
- function character (n, word, pluralSuffix) {
23
- return " " + n + " " + word + (n == 1 ? "" : n%10 < 5 && n%10 > 1 && (n%100 < 5 || n%100 > 20) ? pluralSuffix : "ów");
24
- }
25
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_pt-BR.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Brazilian Portuguese translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['pt-BR'] = {
8
- formatNoMatches: function () { return "Nenhum resultado encontrado"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Digite mais " + n + " caracter" + (n == 1? "" : "es"); },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " caracter" + (n == 1? "" : "es"); },
11
- formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12
- formatLoadMore: function (pageNumber) { return "Carregando mais resultados…"; },
13
- formatSearching: function () { return "Buscando…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['pt-BR']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_pt-PT.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Portuguese (Portugal) translation
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['pt-PT'] = {
8
- formatNoMatches: function () { return "Nenhum resultado encontrado"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Introduza " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Apague " + n + " car" + (n == 1 ? "ácter" : "acteres"); },
11
- formatSelectionTooBig: function (limit) { return "Só é possível selecionar " + limit + " elemento" + (limit == 1 ? "" : "s"); },
12
- formatLoadMore: function (pageNumber) { return "A carregar mais resultados…"; },
13
- formatSearching: function () { return "A pesquisar…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['pt-PT']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ro.js DELETED
@@ -1,17 +0,0 @@
1
- /**
2
- * Select2 Romanian translation.
3
- */
4
- (function ($) {
5
- "use strict";
6
-
7
- $.fn.select2.locales['ro'] = {
8
- formatNoMatches: function () { return "Nu a fost găsit nimic"; },
9
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Vă rugăm să introduceți incă " + n + " caracter" + (n == 1 ? "" : "e"); },
10
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Vă rugăm să introduceți mai puțin de " + n + " caracter" + (n == 1? "" : "e"); },
11
- formatSelectionTooBig: function (limit) { return "Aveți voie să selectați cel mult " + limit + " element" + (limit == 1 ? "" : "e"); },
12
- formatLoadMore: function (pageNumber) { return "Se încarcă…"; },
13
- formatSearching: function () { return "Căutare…"; }
14
- };
15
-
16
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ro']);
17
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_rs.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Serbian translation.
3
- *
4
- * @author Limon Monte <limon.monte@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['rs'] = {
10
- formatNoMatches: function () { return "Ništa nije pronađeno"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Ukucajte bar još " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Obrišite " + n + " simbol" + (n % 10 == 1 && n % 100 != 11 ? "" : "a"); },
13
- formatSelectionTooBig: function (limit) { return "Možete izabrati samo " + limit + " stavk" + (limit % 10 == 1 && limit % 100 != 11 ? "u" : (limit % 10 >= 2 && limit % 10 <= 4 && (limit % 100 < 12 || limit % 100 > 14)? "e" : "i")); },
14
- formatLoadMore: function (pageNumber) { return "Preuzimanje još rezultata…"; },
15
- formatSearching: function () { return "Pretraga…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['rs']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ru.js DELETED
@@ -1,23 +0,0 @@
1
- /**
2
- * Select2 Russian translation.
3
- *
4
- * @author Uriy Efremochkin <efremochkin@uriy.me>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['ru'] = {
10
- formatNoMatches: function () { return "Совпадений не найдено"; },
11
- formatInputTooShort: function (input, min) { return "Пожалуйста, введите еще хотя бы" + character(min - input.length); },
12
- formatInputTooLong: function (input, max) { return "Пожалуйста, введите на" + character(input.length - max) + " меньше"; },
13
- formatSelectionTooBig: function (limit) { return "Вы можете выбрать не более " + limit + " элемент" + (limit%10 == 1 && limit%100 != 11 ? "а" : "ов"); },
14
- formatLoadMore: function (pageNumber) { return "Загрузка данных…"; },
15
- formatSearching: function () { return "Поиск…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ru']);
19
-
20
- function character (n) {
21
- return " " + n + " символ" + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 20) ? n%10 > 1 ? "a" : "" : "ов");
22
- }
23
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_sk.js DELETED
@@ -1,50 +0,0 @@
1
- /**
2
- * Select2 Slovak translation.
3
- *
4
- * Author: David Vallner <david@vallner.net>
5
- */
6
- (function ($) {
7
- "use strict";
8
- // use text for the numbers 2 through 4
9
- var smallNumbers = {
10
- 2: function(masc) { return (masc ? "dva" : "dve"); },
11
- 3: function() { return "tri"; },
12
- 4: function() { return "štyri"; }
13
- };
14
- $.fn.select2.locales['sk'] = {
15
- formatNoMatches: function () { return "Nenašli sa žiadne položky"; },
16
- formatInputTooShort: function (input, min) {
17
- var n = min - input.length;
18
- if (n == 1) {
19
- return "Prosím, zadajte ešte jeden znak";
20
- } else if (n <= 4) {
21
- return "Prosím, zadajte ešte ďalšie "+smallNumbers[n](true)+" znaky";
22
- } else {
23
- return "Prosím, zadajte ešte ďalších "+n+" znakov";
24
- }
25
- },
26
- formatInputTooLong: function (input, max) {
27
- var n = input.length - max;
28
- if (n == 1) {
29
- return "Prosím, zadajte o jeden znak menej";
30
- } else if (n <= 4) {
31
- return "Prosím, zadajte o "+smallNumbers[n](true)+" znaky menej";
32
- } else {
33
- return "Prosím, zadajte o "+n+" znakov menej";
34
- }
35
- },
36
- formatSelectionTooBig: function (limit) {
37
- if (limit == 1) {
38
- return "Môžete zvoliť len jednu položku";
39
- } else if (limit <= 4) {
40
- return "Môžete zvoliť najviac "+smallNumbers[limit](false)+" položky";
41
- } else {
42
- return "Môžete zvoliť najviac "+limit+" položiek";
43
- }
44
- },
45
- formatLoadMore: function (pageNumber) { return "Načítavajú sa ďalšie výsledky…"; },
46
- formatSearching: function () { return "Vyhľadávanie…"; }
47
- };
48
-
49
- $.extend($.fn.select2.defaults, $.fn.select2.locales['sk']);
50
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_sv.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Swedish translation.
3
- *
4
- * Author: Jens Rantil <jens.rantil@telavox.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['sv'] = {
10
- formatNoMatches: function () { return "Inga träffar"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Var god skriv in " + n + (n>1 ? " till tecken" : " tecken till"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Var god sudda ut " + n + " tecken"; },
13
- formatSelectionTooBig: function (limit) { return "Du kan max välja " + limit + " element"; },
14
- formatLoadMore: function (pageNumber) { return "Laddar fler resultat…"; },
15
- formatSearching: function () { return "Söker…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['sv']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_th.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Thai translation.
3
- *
4
- * Author: Atsawin Chaowanakritsanakul <joke@nakhon.net>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['th'] = {
10
- formatNoMatches: function () { return "ไม่พบข้อมูล"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "โปรดพิมพ์เพิ่มอีก " + n + " ตัวอักษร"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "โปรดลบออก " + n + " ตัวอักษร"; },
13
- formatSelectionTooBig: function (limit) { return "คุณสามารถเลือกได้ไม่เกิน " + limit + " รายการ"; },
14
- formatLoadMore: function (pageNumber) { return "กำลังค้นข้อมูลเพิ่ม…"; },
15
- formatSearching: function () { return "กำลังค้นข้อมูล…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['th']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_tr.js DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Select2 Turkish translation.
3
- *
4
- * Author: Salim KAYABAŞI <salim.kayabasi@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['tr'] = {
10
- formatNoMatches: function () { return "Sonuç bulunamadı"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "En az " + n + " karakter daha girmelisiniz"; },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return n + " karakter azaltmalısınız"; },
13
- formatSelectionTooBig: function (limit) { return "Sadece " + limit + " seçim yapabilirsiniz"; },
14
- formatLoadMore: function (pageNumber) { return "Daha fazla…"; },
15
- formatSearching: function () { return "Aranıyor…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['tr']);
19
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_ug-CN.js DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * Select2 Uyghur translation
3
- */
4
- (function ($) {
5
- "use strict";
6
- $.fn.select2.locales['ug-CN'] = {
7
- formatNoMatches: function () { return "ماس كېلىدىغان ئۇچۇر تېپىلمىدى"; },
8
- formatInputTooShort: function (input, min) { var n = min - input.length; return "يەنە " + n + " ھەرپ كىرگۈزۈڭ";},
9
- formatInputTooLong: function (input, max) { var n = input.length - max; return "" + n + "ھەرپ ئۆچۈرۈڭ";},
10
- formatSelectionTooBig: function (limit) { return "ئەڭ كۆپ بولغاندا" + limit + " تال ئۇچۇر تاللىيالايسىز"; },
11
- formatLoadMore: function (pageNumber) { return "ئۇچۇرلار ئوقۇلىۋاتىدۇ…"; },
12
- formatSearching: function () { return "ئىزدەۋاتىدۇ…"; }
13
- };
14
-
15
- $.extend($.fn.select2.defaults, $.fn.select2.locales['ug-CN']);
16
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_uk.js DELETED
@@ -1,25 +0,0 @@
1
- /**
2
- * Select2 Ukrainian translation.
3
- *
4
- * @author bigmihail <bigmihail@bigmir.net>
5
- * @author Uriy Efremochkin <efremochkin@uriy.me>
6
- */
7
- (function ($) {
8
- "use strict";
9
-
10
- $.fn.select2.locales['uk'] = {
11
- formatMatches: function (matches) { return character(matches, "результат") + " знайдено, використовуйте клавіші зі стрілками вверх та вниз для навігації."; },
12
- formatNoMatches: function () { return "Нічого не знайдено"; },
13
- formatInputTooShort: function (input, min) { return "Введіть буль ласка ще " + character(min - input.length, "символ"); },
14
- formatInputTooLong: function (input, max) { return "Введіть буль ласка на " + character(input.length - max, "символ") + " менше"; },
15
- formatSelectionTooBig: function (limit) { return "Ви можете вибрати лише " + character(limit, "елемент"); },
16
- formatLoadMore: function (pageNumber) { return "Завантаження даних…"; },
17
- formatSearching: function () { return "Пошук…"; }
18
- };
19
-
20
- $.extend($.fn.select2.defaults, $.fn.select2.locales['uk']);
21
-
22
- function character (n, word) {
23
- return n + " " + word + (n%10 < 5 && n%10 > 0 && (n%100 < 5 || n%100 > 19) ? n%10 > 1 ? "и" : "" : "ів");
24
- }
25
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_vi.js DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * Select2 Vietnamese translation.
3
- *
4
- * Author: Long Nguyen <olragon@gmail.com>
5
- */
6
- (function ($) {
7
- "use strict";
8
-
9
- $.fn.select2.locales['vi'] = {
10
- formatNoMatches: function () { return "Không tìm thấy kết quả"; },
11
- formatInputTooShort: function (input, min) { var n = min - input.length; return "Vui lòng nhập nhiều hơn " + n + " ký tự" + (n == 1 ? "" : "s"); },
12
- formatInputTooLong: function (input, max) { var n = input.length - max; return "Vui lòng nhập ít hơn " + n + " ký tự" + (n == 1? "" : "s"); },
13
- formatSelectionTooBig: function (limit) { return "Chỉ có thể chọn được " + limit + " tùy chọn" + (limit == 1 ? "" : "s"); },
14
- formatLoadMore: function (pageNumber) { return "Đang lấy thêm kết quả…"; },
15
- formatSearching: function () { return "Đang tìm…"; }
16
- };
17
-
18
- $.extend($.fn.select2.defaults, $.fn.select2.locales['vi']);
19
- })(jQuery);
20
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_zh-CN.js DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * Select2 Chinese translation
3
- */
4
- (function ($) {
5
- "use strict";
6
- $.fn.select2.locales['zh-CN'] = {
7
- formatNoMatches: function () { return "没有找到匹配项"; },
8
- formatInputTooShort: function (input, min) { var n = min - input.length; return "请再输入" + n + "个字符";},
9
- formatInputTooLong: function (input, max) { var n = input.length - max; return "请删掉" + n + "个字符";},
10
- formatSelectionTooBig: function (limit) { return "你只能选择最多" + limit + "项"; },
11
- formatLoadMore: function (pageNumber) { return "加载结果中…"; },
12
- formatSearching: function () { return "搜索中…"; }
13
- };
14
-
15
- $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-CN']);
16
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2_locale_zh-TW.js DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * Select2 Traditional Chinese translation
3
- */
4
- (function ($) {
5
- "use strict";
6
- $.fn.select2.locales['zh-TW'] = {
7
- formatNoMatches: function () { return "沒有找到相符的項目"; },
8
- formatInputTooShort: function (input, min) { var n = min - input.length; return "請再輸入" + n + "個字元";},
9
- formatInputTooLong: function (input, max) { var n = input.length - max; return "請刪掉" + n + "個字元";},
10
- formatSelectionTooBig: function (limit) { return "你只能選擇最多" + limit + "項"; },
11
- formatLoadMore: function (pageNumber) { return "載入中…"; },
12
- formatSearching: function () { return "搜尋中…"; }
13
- };
14
-
15
- $.extend($.fn.select2.defaults, $.fn.select2.locales['zh-TW']);
16
- })(jQuery);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
drkfr/js/vendor/select2/select2x2.png DELETED
Binary file
drkfr/phpunit.xml DELETED
@@ -1,14 +0,0 @@
1
- <phpunit
2
- bootstrap="tests/bootstrap.php"
3
- backupGlobals="false"
4
- colors="true"
5
- convertErrorsToExceptions="true"
6
- convertNoticesToExceptions="true"
7
- convertWarningsToExceptions="true"
8
- >
9
- <testsuites>
10
- <testsuite>
11
- <directory prefix="test" suffix=".php">./tests/</directory>
12
- </testsuite>
13
- </testsuites>
14
- </phpunit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,5 +1,6 @@
1
  === Team Members ===
2
- Tags: team, my team, our team, grid, shortcode, responsive, members, staff, people, showcase, employees, simple, founders
 
3
  Requires at least: 3.6
4
  Tested up to: 4.1.1
5
  Stable tag: trunk
@@ -67,6 +68,18 @@ The [PRO version](http://wpdarko.com/items/team-members-pro/) gives you access t
67
  3. Creating members (admin view)
68
 
69
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
70
  = 1.3.1 =
71
  * SAFE UPDATE: No data loss for those upgrading from version 1.0 or higher
72
  * Added an email icon for member links
1
  === Team Members ===
2
+ Contributors: spwebguy
3
+ Tags: team, teams, my team, our team, grid, shortcode, responsive, members, staff, people, showcase, employees, simple, founders
4
  Requires at least: 3.6
5
  Tested up to: 4.1.1
6
  Stable tag: trunk
68
  3. Creating members (admin view)
69
 
70
  == Changelog ==
71
+ = 2.0.1 =
72
+ * SAFE UPDATE: No data loss for those upgrading from version 1.0 or higher
73
+ * Bug fix on update
74
+
75
+ = 2.0 =
76
+ * SAFE UPDATE: No data loss for those upgrading from version 1.0 or higher
77
+ * New admin interface (new framework)
78
+ * You can now force the plugin's original fonts (user request)
79
+ * Added docs and support forums links
80
+ * Added instructions
81
+ * Much cleaner code
82
+
83
  = 1.3.1 =
84
  * SAFE UPDATE: No data loss for those upgrading from version 1.0 or higher
85
  * Added an email icon for member links
tmm.php CHANGED
@@ -3,12 +3,75 @@
3
  Plugin Name: Team Members
4
  Plugin URI: http://wpdarko.com/support/documentation/get-started-team-members/
5
  Description: A responsive, simple and clean way to display your team. Create new members, add their positions, bios, social links and copy-paste the shortcode into any post/page. Find support and information on the <a href="http://wpdarko.com/team-members/">plugin's page</a>. This free version is NOT limited and does not contain any ad. Check out the <a href='http://wpdarko.com/items/team-members-pro/'>PRO version</a> for more great features.
6
- Version: 1.3.1
7
  Author: WP Darko
8
  Author URI: http://wpdarko.com
9
  License: GPL2
10
  */
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  function tmm_free_pro_check() {
13
  if (is_plugin_active('team-members-pro/tmm-pro.php')) {
14
 
@@ -25,12 +88,20 @@ function tmm_free_pro_check() {
25
 
26
  add_action( 'admin_init', 'tmm_free_pro_check' );
27
 
28
- /* adds stylesheet and script */
29
  add_action( 'wp_enqueue_scripts', 'add_tmm_scripts' );
30
  function add_tmm_scripts() {
31
  wp_enqueue_style( 'tmm', plugins_url('css/tmm_custom_style.min.css', __FILE__));
32
  }
33
 
 
 
 
 
 
 
 
 
34
  add_action( 'init', 'create_tmm_type' );
35
 
36
  function create_tmm_type() {
@@ -50,160 +121,410 @@ function create_tmm_type() {
50
  );
51
  }
52
 
53
- /**
54
- * Define the metabox and field configurations.
55
- *
56
- * @param array $meta_boxes
57
- * @return array
58
- */
59
- function tmm_metaboxes( array $meta_boxes ) {
60
- $fields = array(
61
- array( 'id' => 'tmm_content_head', 'name' => 'Staff details', 'type' => 'title' ),
62
- array( 'id' => 'tmm_firstname', 'name' => 'Firstname', 'type' => 'text', 'cols' => 4 ),
63
- array( 'id' => 'tmm_lastname', 'name' => 'Lastname', 'type' => 'text', 'cols' => 4),
64
- array( 'id' => 'tmm_job', 'name' => 'Job/role', 'type' => 'text', 'cols' => 4),
65
- array( 'id' => 'tmm_photo', 'name' => 'Photo', 'type' => 'image', 'cols' => 3),
66
- array( 'id' => 'tmm_desc', 'name' => 'Description/bio', 'type' => 'textarea', 'rows' => 8, 'cols' => 9),
67
- array( 'id' => 'tmm_links_head', 'name' => 'Links', 'type' => 'title' ),
68
- array(
69
- 'id' => 'tmm_sc_type1',
70
- 'type' => 'select',
71
- 'desc' => 'Icon',
72
- 'cols' => 3,
73
- 'options' => array(
74
- 'nada' => '-',
75
- 'twitter' => 'Twitter',
76
- 'linkedin' => 'LinkedIn',
77
- 'googleplus' => 'Google+',
78
- 'facebook' => 'Facebook',
79
- 'instagram' => 'Instagram',
80
- 'tumblr' => 'Tumblr',
81
- 'pinterest' => 'Pinterest',
82
- 'email' => 'Email',
83
- 'website' => 'Website',
84
- 'customlink' => 'Other links',
85
- )
86
- ),
87
- array( 'id' => 'tmm_sc_title1', 'desc' => 'Title', 'type' => 'text', 'cols' => 4),
88
- array( 'id' => 'tmm_sc_url1', 'default' => 'http://', 'desc' => 'URL', 'type' => 'text', 'cols' => 5),
89
- array(
90
- 'id' => 'tmm_sc_type2',
91
- 'type' => 'select',
92
- 'cols' => 3,
93
- 'options' => array(
94
- 'nada' => '-',
95
- 'twitter' => 'Twitter',
96
- 'linkedin' => 'LinkedIn',
97
- 'googleplus' => 'Google+',
98
- 'facebook' => 'Facebook',
99
- 'instagram' => 'Instagram',
100
- 'tumblr' => 'Tumblr',
101
- 'pinterest' => 'Pinterest',
102
- 'email' => 'Email',
103
- 'website' => 'Website',
104
- 'customlink' => 'Other links',
105
- )
106
- ),
107
- array( 'id' => 'tmm_sc_title2', 'type' => 'text', 'cols' => 4),
108
- array( 'id' => 'tmm_sc_url2', 'default' => 'http://', 'type' => 'text', 'cols' => 5),
109
- array(
110
- 'id' => 'tmm_sc_type3',
111
- 'type' => 'select',
112
- 'cols' => 3,
113
- 'options' => array(
114
- 'nada' => '-',
115
- 'twitter' => 'Twitter',
116
- 'linkedin' => 'LinkedIn',
117
- 'googleplus' => 'Google+',
118
- 'facebook' => 'Facebook',
119
- 'instagram' => 'Instagram',
120
- 'tumblr' => 'Tumblr',
121
- 'pinterest' => 'Pinterest',
122
- 'email' => 'Email',
123
- 'website' => 'Website',
124
- 'customlink' => 'Other links',
125
- )
126
- ),
127
- array( 'id' => 'tmm_sc_title3', 'type' => 'text', 'cols' => 4),
128
- array( 'id' => 'tmm_sc_url3', 'default' => 'http://', 'type' => 'text', 'cols' => 5),
129
- );
130
-
131
- $group_settings = array(
132
- array( 'id' => 'tmm_columns', 'name' => 'Number of columns', 'type' => 'text', 'desc' => 'Number of members to show per line.' ),
133
- array( 'id' => 'tmm_color', 'name' => 'Main color', 'type' => 'colorpicker', 'default' => '#57c9e0' ),
134
- array(
135
- 'id' => 'tmm_columns',
136
- 'type' => 'select',
137
- 'desc' => 'Number of members to show per line.',
138
  'options' => array(
139
- '2' => '2',
140
- '3' => '3',
141
- '4' => '4',
142
- )
143
- ),
144
- );
145
- // Example of repeatable group. Using all fields.
146
- // For this example, copy fields from $fields, update I
147
- $group_fields = $fields;
148
- foreach ( $group_fields as &$field ) {
149
- $field['id'] = str_replace( 'field', 'gfield', $field['id'] );
150
- }
151
- $meta_boxes[] = array(
152
- 'title' => 'Create/remove/sort team members',
153
- 'pages' => 'tmm',
154
- 'fields' => array(
155
- array(
156
- 'id' => 'tmm_head',
157
- 'type' => 'group',
158
- 'repeatable' => true,
159
  'sortable' => true,
160
- 'fields' => $group_fields,
161
- 'desc' => 'Create new members here and drag and drop to reorder.',
162
- )
163
- )
164
- );
165
- $meta_boxes[] = array(
166
- 'title' => 'Settings',
167
- 'pages' => 'tmm',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
168
  'context' => 'side',
169
  'priority' => 'high',
170
- 'fields' => array(
171
- array(
172
- 'id' => 'tmm_settings_head',
173
- 'type' => 'group',
174
- 'fields' => $group_settings,
175
- )
176
- )
177
- );
178
-
179
-
180
- function tmm_pro_side_meta() {
181
- return "<p style='font-size:14px; color:#333; font-style:normal;'>This free version is <strong>NOT</strong> limited and does <strong>not</strong> contain any ad. Check out the <a href='http://wpdarko.com/items/team-members-pro/'><span style='color:#61d1aa !important;'>PRO version</span></a> for more great features.</p>";
182
- }
 
 
 
183
 
184
- $meta_boxes[] = array(
185
- 'title' => 'Meet The Team PRO',
186
- 'pages' => 'tmm',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  'context' => 'side',
188
  'priority' => 'low',
189
- 'fields' => array(
190
- array(
191
- 'id' => 'tmm_pro_head',
192
- 'type' => 'group',
193
- 'desc' => tmm_pro_side_meta(),
194
- )
195
- )
196
- );
197
-
198
- return $meta_boxes;
199
- }
200
- add_filter( 'drkfr_meta_boxes', 'tmm_metaboxes' );
201
 
202
- if (!class_exists('drkfr_Meta_Box')) {
203
- require_once( 'drkfr/custom-meta-boxes.php' );
204
  }
205
 
206
- //shortcode columns
 
 
207
  add_action( 'manage_tmm_posts_custom_column' , 'dktmm_custom_columns', 10, 2 );
208
 
209
  function dktmm_custom_columns( $column, $post_id ) {
@@ -227,7 +548,7 @@ function add_tmm_columns($columns) {
227
  }
228
  add_filter('manage_tmm_posts_columns' , 'add_tmm_columns');
229
 
230
- //tmm shortcode
231
  function tmm_sc($atts) {
232
  extract(shortcode_atts(array(
233
  "name" => ''
@@ -238,13 +559,11 @@ function tmm_sc($atts) {
238
 
239
  global $post;
240
 
241
- $members = get_post_meta( get_the_id(), 'tmm_head', false );
242
- $options = get_post_meta( get_the_id(), 'tmm_settings_head', false );
243
-
244
- foreach ($options as $key => $option) {
245
- $tmm_columns = $option['tmm_columns'];
246
- $tmm_color = $option['tmm_color'];
247
- }
248
 
249
  $output .= '<div class="tmm tmm_'.$name.'">';
250
  $output .= '<div class="tmm_'.$tmm_columns.'_columns">';
@@ -267,48 +586,50 @@ function tmm_sc($atts) {
267
  }
268
 
269
  $output .= '<div class="tmm_member" style="border-top:'.$tmm_color.' solid 5px;">';
270
- $output .= wp_get_attachment_image( $member['tmm_photo'] );
 
 
271
  $output .= '<div class="tmm_textblock">';
272
  $output .= '<div class="tmm_names">';
273
- $output .= '<span class="tmm_fname">'.$member['tmm_firstname'].'</span>';
274
  $output .= '&nbsp;';
275
- $output .= '<span class="tmm_lname">'.$member['tmm_lastname'].'</span>';
276
  $output .= '</div>';
277
- $output .= '<div class="tmm_job">'.$member['tmm_job'].'</div>';
278
- $output .= '<div class="tmm_desc">'.$member['tmm_desc'].'</div>';
279
  $output .= '<div class="tmm_scblock">';
280
- if ($member['tmm_sc_type1'] != 'nada') {
281
- if ($member['tmm_sc_type1'] == 'email') {
282
- $output .= '<a class="tmm_sociallink" href="mailto:'.$member['tmm_sc_url1'].'" title="'.$member['tmm_sc_title1'].'">';
283
- $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['tmm_sc_type1'].'.png"/>';
284
  $output .= '</a>';
285
  } else {
286
- $output .= '<a class="tmm_sociallink" href="'.$member['tmm_sc_url1'].'" title="'.$member['tmm_sc_title1'].'">';
287
- $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['tmm_sc_type1'].'.png"/>';
288
  $output .= '</a>';
289
  }
290
  }
291
 
292
- if ($member['tmm_sc_type2'] != 'nada') {
293
- if ($member['tmm_sc_type2'] == 'email') {
294
- $output .= '<a class="tmm_sociallink" href="mailto:'.$member['tmm_sc_url2'].'" title="'.$member['tmm_sc_title2'].'">';
295
- $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['tmm_sc_type2'].'.png"/>';
296
  $output .= '</a>';
297
  } else {
298
- $output .= '<a class="tmm_sociallink" href="'.$member['tmm_sc_url2'].'" title="'.$member['tmm_sc_title2'].'">';
299
- $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['tmm_sc_type2'].'.png"/>';
300
  $output .= '</a>';
301
  }
302
  }
303
 
304
- if ($member['tmm_sc_type3'] != 'nada') {
305
- if ($member['tmm_sc_type3'] == 'email') {
306
- $output .= '<a class="tmm_sociallink" href="mailto:'.$member['tmm_sc_url3'].'" title="'.$member['tmm_sc_title3'].'">';
307
- $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['tmm_sc_type3'].'.png"/>';
308
  $output .= '</a>';
309
  } else {
310
- $output .= '<a class="tmm_sociallink" href="'.$member['tmm_sc_url3'].'" title="'.$member['tmm_sc_title3'].'">';
311
- $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['tmm_sc_type3'].'.png"/>';
312
  $output .= '</a>';
313
  }
314
  }
3
  Plugin Name: Team Members
4
  Plugin URI: http://wpdarko.com/support/documentation/get-started-team-members/
5
  Description: A responsive, simple and clean way to display your team. Create new members, add their positions, bios, social links and copy-paste the shortcode into any post/page. Find support and information on the <a href="http://wpdarko.com/team-members/">plugin's page</a>. This free version is NOT limited and does not contain any ad. Check out the <a href='http://wpdarko.com/items/team-members-pro/'>PRO version</a> for more great features.
6
+ Version: 2.0.1
7
  Author: WP Darko
8
  Author URI: http://wpdarko.com
9
  License: GPL2
10
  */
11
 
12
+ /* Recover old data if there is */
13
+ add_action( 'init', 'tmm_old_data' );
14
+
15
+ function tmm_old_data() {
16
+
17
+ if(!get_option('tmm_is_updated_yn9090')){
18
+
19
+ global $post;
20
+ $args = array(
21
+ 'post_type' => 'tmm',
22
+ 'posts_per_page' => 9999,
23
+ );
24
+
25
+ $get_old = get_posts( $args );
26
+ foreach ( $get_old as $post ) : setup_postdata( $post );
27
+
28
+ $current_id = get_the_id();
29
+ $old_data_teams = get_post_meta( $current_id, 'tmm_head', false );
30
+
31
+ foreach ($old_data_teams as $key => $odata) {
32
+
33
+ $test_man[$key]['_tmm_firstname'] = $odata['tmm_firstname'];
34
+ $test_man[$key]['_tmm_lastname'] = $odata['tmm_lastname'];
35
+ $test_man[$key]['_tmm_job'] = $odata['tmm_job'];
36
+ $test_man[$key]['_tmm_photo'] = wp_get_attachment_url($odata['tmm_photo']);
37
+ $test_man[$key]['_tmm_desc'] = $odata['tmm_desc'];
38
+ $test_man[$key]['_tmm_sc_type1'] = $odata['tmm_sc_type1'];
39
+ $test_man[$key]['_tmm_sc_title1'] = $odata['tmm_sc_title1'];
40
+ $test_man[$key]['_tmm_sc_url1'] = $odata['tmm_sc_url1'];
41
+ $test_man[$key]['_tmm_sc_type2'] = $odata['tmm_sc_type2'];
42
+ $test_man[$key]['_tmm_sc_title2'] = $odata['tmm_sc_title2'];
43
+ $test_man[$key]['_tmm_sc_url2'] = $odata['tmm_sc_url2'];
44
+ $test_man[$key]['_tmm_sc_type3'] = $odata['tmm_sc_type3'];
45
+ $test_man[$key]['_tmm_sc_title3'] = $odata['tmm_sc_title3'];
46
+ $test_man[$key]['_tmm_sc_url3'] = $odata['tmm_sc_url3'];
47
+
48
+ update_post_meta($current_id, '_tmm_head', $test_man);
49
+ wp_reset_postdata();
50
+
51
+ }
52
+
53
+ $test_man = '';
54
+ $old_data_settings = get_post_meta( $current_id, 'tmm_settings_head', false );
55
+
56
+ foreach ($old_data_settings as $key => $odata) {
57
+
58
+ $var1 = $odata['tmm_columns'];
59
+ $var2 = $odata['tmm_color'];
60
+
61
+ update_post_meta($current_id, '_tmm_columns', $var1);
62
+ update_post_meta($current_id, '_tmm_color', $var2);
63
+
64
+ }
65
+
66
+ endforeach;
67
+
68
+ update_option('tmm_is_updated_yn9090', 'old_data_recovered');
69
+
70
+ }
71
+
72
+ }
73
+
74
+ /* Check for the PRO version */
75
  function tmm_free_pro_check() {
76
  if (is_plugin_active('team-members-pro/tmm-pro.php')) {
77
 
88
 
89
  add_action( 'admin_init', 'tmm_free_pro_check' );
90
 
91
+ /* Enqueue styles & scripts */
92
  add_action( 'wp_enqueue_scripts', 'add_tmm_scripts' );
93
  function add_tmm_scripts() {
94
  wp_enqueue_style( 'tmm', plugins_url('css/tmm_custom_style.min.css', __FILE__));
95
  }
96
 
97
+ /* Enqueue admin styles */
98
+ add_action( 'admin_enqueue_scripts', 'add_admin_tmm_style' );
99
+
100
+ function add_admin_tmm_style() {
101
+ wp_enqueue_style( 'tmm', plugins_url('css/admin_de_style.min.css', __FILE__));
102
+ }
103
+
104
+ /* Create the Team post type */
105
  add_action( 'init', 'create_tmm_type' );
106
 
107
  function create_tmm_type() {
121
  );
122
  }
123
 
124
+ /* Hide View/Preview since it's a shortcode */
125
+ function tmm_admin_css() {
126
+ global $post_type;
127
+ $post_types = array(
128
+ 'tmm',
129
+ );
130
+ if(in_array($post_type, $post_types))
131
+ echo '<style type="text/css">#post-preview, #view-post-btn{display: none;}</style>';
132
+ }
133
+
134
+ function remove_view_link_tmm( $action ) {
135
+
136
+ unset ($action['view']);
137
+ return $action;
138
+ }
139
+
140
+ add_filter( 'post_row_actions', 'remove_view_link_tmm' );
141
+ add_action( 'admin_head-post-new.php', 'tmm_admin_css' );
142
+ add_action( 'admin_head-post.php', 'tmm_admin_css' );
143
+
144
+ // Adding the CMB2 Metabox class
145
+ if ( file_exists( dirname( __FILE__ ) . '/cmb2/init.php' ) ) {
146
+ require_once dirname( __FILE__ ) . '/cmb2/init.php';
147
+ } elseif ( file_exists( dirname( __FILE__ ) . '/CMB2/init.php' ) ) {
148
+ require_once dirname( __FILE__ ) . '/CMB2/init.php';
149
+ }
150
+
151
+ // Registering Teams metaboxes
152
+ function tmm_register_group_metabox() {
153
+
154
+ $prefix = '_tmm_';
155
+
156
+ // Tables group
157
+ $main_group = new_cmb2_box( array(
158
+ 'id' => $prefix . 'team_metabox',
159
+ 'title' => '<span class="dashicons dashicons-welcome-add-page"></span> Manage Members <span style="color:#8a7463; font-weight:400; float:right; padding-right:14px;"><span class="dashicons dashicons-lock"></span> Free version</span>',
160
+ 'object_types' => array( 'tmm' ),
161
+ ));
162
+
163
+ $tmm_group = $main_group->add_field( array(
164
+ 'id' => $prefix . 'head',
165
+ 'type' => 'group',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
  'options' => array(
167
+ 'group_title' => 'Member {#}',
168
+ 'add_button' => 'Add another member',
169
+ 'remove_button' => 'Remove member',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  'sortable' => true,
171
+ 'single' => false,
172
+ ),
173
+ ));
174
+
175
+ $main_group->add_group_field( $tmm_group, array(
176
+ 'name' => 'Member details',
177
+ 'id' => $prefix . 'member_header',
178
+ 'type' => 'title',
179
+ 'row_classes' => 'de_hundred de_heading',
180
+ ));
181
+
182
+
183
+ $main_group->add_group_field( $tmm_group, array(
184
+ 'name' => '<span class="dashicons dashicons-edit"></span> Firstname</span>',
185
+ 'id' => $prefix . 'firstname',
186
+ 'type' => 'text',
187
+ 'row_classes' => 'de_first de_twentyfive de_text de_input',
188
+ ));
189
+
190
+ $main_group->add_group_field( $tmm_group, array(
191
+ 'name' => '<span class="dashicons dashicons-edit"></span> Lastname</span>',
192
+ 'id' => $prefix . 'lastname',
193
+ 'type' => 'text',
194
+ 'row_classes' => 'de_twentyfive de_text de_input',
195
+ ));
196
+
197
+ $main_group->add_group_field( $tmm_group, array(
198
+ 'name' => '<span class="dashicons dashicons-edit"></span> Job/role</span>',
199
+ 'id' => $prefix . 'job',
200
+ 'type' => 'text',
201
+ 'row_classes' => 'de_fifty de_text de_input',
202
+ ));
203
+
204
+
205
+ $main_group->add_group_field( $tmm_group, array(
206
+ 'name' => '<span class="dashicons dashicons-format-image"></span> Photo',
207
+ 'id' => $prefix . 'photo',
208
+ 'type' => 'file',
209
+ 'attributes' => array(
210
+ 'placeholder' => 'recommended size: 500 x 500',
211
+ ),
212
+ 'row_classes' => 'de_first de_hundred de_upload de_input',
213
+ ));
214
+
215
+ $main_group->add_group_field( $tmm_group, array(
216
+ 'name' => '<span class="dashicons dashicons-edit"></span> Description/bio',
217
+ 'id' => $prefix . 'desc',
218
+ 'type' => 'textarea',
219
+ 'attributes' => array(
220
+ 'rows' => 6,
221
+ ),
222
+ 'row_classes' => 'de_first de_fifty de_textarea de_input',
223
+ ));
224
+
225
+ $main_group->add_group_field( $tmm_group, array(
226
+ 'name' => 'Tips & Tricks',
227
+ 'desc' => '<span class="dashicons dashicons-yes"></span> Add links<br/><span style="color:#bbb;">&lt;a href="http://you.com/member-page"&gt;View member page&lt;/a&gt;</span>',
228
+ 'id' => $prefix . 'desc_desc',
229
+ 'type' => 'title',
230
+ 'row_classes' => 'de_fifty de_info',
231
+ ));
232
+
233
+ $main_group->add_group_field( $tmm_group, array(
234
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Complementary info title</span>',
235
+ 'desc' => 'This adds a little link below the description/bio, it will reveal the complementary info text when a visitor hovers over it.',
236
+ 'id' => $prefix . 'comp_title',
237
+ 'type' => 'text',
238
+ 'row_classes' => 'de_first de_fifty de_text de_input',
239
+ ));
240
+
241
+ $main_group->add_group_field( $tmm_group, array(
242
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Complementary info text</span>',
243
+ 'id' => $prefix . 'comp_text',
244
+ 'type' => 'textarea',
245
+ 'attributes' => array(
246
+ 'rows' => 1,
247
+ ),
248
+ 'row_classes' => 'de_fifty de_text de_input',
249
+ ));
250
+
251
+ $main_group->add_group_field( $tmm_group, array(
252
+ 'name' => 'Member links',
253
+ 'id' => $prefix . 'member_links_header',
254
+ 'type' => 'title',
255
+ 'row_classes' => 'de_hundred de_heading',
256
+ ));
257
+
258
+ $main_group->add_group_field( $tmm_group, array(
259
+ 'name' => '<span class="dashicons dashicons-admin-generic"></span> Link type (icon)',
260
+ 'id' => $prefix . 'sc_type1',
261
+ 'type' => 'select',
262
+ 'options' => array(
263
+ 'nada' => '-',
264
+ 'twitter' => 'Twitter',
265
+ 'linkedin' => 'LinkedIn',
266
+ 'googleplus' => 'Google+',
267
+ 'facebook' => 'Facebook',
268
+ 'instagram' => 'Instagram',
269
+ 'tumblr' => 'Tumblr',
270
+ 'pinterest' => 'Pinterest',
271
+ 'email' => 'Email',
272
+ 'website' => 'Website',
273
+ 'customlink' => 'Other links',
274
+ ),
275
+ 'default' => 'nada',
276
+ 'row_classes' => 'de_first de_twentyfive de_select de_text de_input',
277
+ ));
278
+
279
+ $main_group->add_group_field( $tmm_group, array(
280
+ 'name' => '<span class="dashicons dashicons-edit"></span> Link title',
281
+ 'id' => $prefix . 'sc_title1',
282
+ 'type' => 'text',
283
+ 'row_classes' => 'de_twentyfive de_text de_input',
284
+ ));
285
+
286
+ $main_group->add_group_field( $tmm_group, array(
287
+ 'name' => '<span class="dashicons dashicons-edit"></span> Link URL',
288
+ 'id' => $prefix . 'sc_url1',
289
+ 'type' => 'text',
290
+ 'row_classes' => 'de_fifty de_text de_input',
291
+ ));
292
+
293
+ $main_group->add_group_field( $tmm_group, array(
294
+ 'name' => '',
295
+ 'id' => $prefix . 'sc_type2',
296
+ 'type' => 'select',
297
+ 'options' => array(
298
+ 'nada' => '-',
299
+ 'twitter' => 'Twitter',
300
+ 'linkedin' => 'LinkedIn',
301
+ 'googleplus' => 'Google+',
302
+ 'facebook' => 'Facebook',
303
+ 'instagram' => 'Instagram',
304
+ 'tumblr' => 'Tumblr',
305
+ 'pinterest' => 'Pinterest',
306
+ 'email' => 'Email',
307
+ 'website' => 'Website',
308
+ 'customlink' => 'Other links',
309
+ ),
310
+ 'default' => 'nada',
311
+ 'row_classes' => 'de_first de_twentyfive de_select de_text de_input de_nomtop',
312
+ ));
313
+
314
+ $main_group->add_group_field( $tmm_group, array(
315
+ 'name' => '',
316
+ 'id' => $prefix . 'sc_title2',
317
+ 'type' => 'text',
318
+ 'row_classes' => 'de_twentyfive de_text de_input de_nomtop',
319
+ ));
320
+
321
+ $main_group->add_group_field( $tmm_group, array(
322
+ 'name' => '',
323
+ 'id' => $prefix . 'sc_url2',
324
+ 'type' => 'text',
325
+ 'row_classes' => 'de_fifty de_text de_input de_nomtop',
326
+ ));
327
+
328
+ $main_group->add_group_field( $tmm_group, array(
329
+ 'name' => '',
330
+ 'id' => $prefix . 'sc_type3',
331
+ 'type' => 'select',
332
+ 'options' => array(
333
+ 'nada' => '-',
334
+ 'twitter' => 'Twitter',
335
+ 'linkedin' => 'LinkedIn',
336
+ 'googleplus' => 'Google+',
337
+ 'facebook' => 'Facebook',
338
+ 'instagram' => 'Instagram',
339
+ 'tumblr' => 'Tumblr',
340
+ 'pinterest' => 'Pinterest',
341
+ 'email' => 'Email',
342
+ 'website' => 'Website',
343
+ 'customlink' => 'Other links',
344
+ ),
345
+ 'default' => 'nada',
346
+ 'row_classes' => 'de_first de_twentyfive de_select de_text de_input de_nomtop',
347
+ ));
348
+
349
+ $main_group->add_group_field( $tmm_group, array(
350
+ 'name' => '',
351
+ 'id' => $prefix . 'sc_title3',
352
+ 'type' => 'text',
353
+ 'row_classes' => 'de_twentyfive de_text de_input de_nomtop',
354
+ ));
355
+
356
+ $main_group->add_group_field( $tmm_group, array(
357
+ 'name' => '',
358
+ 'id' => $prefix . 'sc_url3',
359
+ 'type' => 'text',
360
+ 'row_classes' => 'de_fifty de_text de_input de_nomtop',
361
+ ));
362
+
363
+ $main_group->add_group_field( $tmm_group, array(
364
+ 'name' => 'Member styling',
365
+ 'id' => $prefix . 'member_styling_header',
366
+ 'type' => 'title',
367
+ 'row_classes' => 'de_hundred de_heading',
368
+ ));
369
+
370
+ $main_group->add_group_field( $tmm_group, array(
371
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Color (per member)</span>',
372
+ 'id' => $prefix . 'freecolor',
373
+ 'type' => 'colorpicker',
374
+ 'row_classes' => 'de_first de_hundred de_color de_input',
375
+ ));
376
+
377
+ // Settings group
378
+ $side_group = new_cmb2_box( array(
379
+ 'id' => $prefix . 'settings_head',
380
+ 'title' => '<span class="dashicons dashicons-admin-tools"></span> Team Settings',
381
+ 'object_types' => array( 'tmm' ),
382
  'context' => 'side',
383
  'priority' => 'high',
384
+ 'closed' => true,
385
+ ));
386
+
387
+ $side_group->add_field( array(
388
+ 'name' => 'General settings',
389
+ 'id' => $prefix . 'other_settings_desc',
390
+ 'type' => 'title',
391
+ 'row_classes' => 'de_hundred_side de_heading_side',
392
+ ));
393
+
394
+ $side_group->add_field( array(
395
+ 'name' => '<span class="dashicons dashicons-admin-appearance"></span> Main Color</span>',
396
+ 'id' => $prefix . 'color',
397
+ 'type' => 'colorpicker',
398
+ 'row_classes' => 'de_first de_hundred de_color de_input',
399
+ ));
400
 
401
+ $side_group->add_field( array(
402
+ 'name' => '<span class="dashicons dashicons-arrow-down"></span> Members to show per line',
403
+ 'id' => $prefix . 'columns',
404
+ 'type' => 'select',
405
+ 'options' => array(
406
+ '2' => 'Two members per line',
407
+ '3' => 'Three members per line',
408
+ '4' => 'Four members per line',
409
+ ),
410
+ 'default' => '3',
411
+ 'row_classes' => 'de_hundred_side de_text_side',
412
+ ));
413
+
414
+ $side_group->add_field( array(
415
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Pictures\' shape</span>',
416
+ 'id' => $prefix . 'picture_shape',
417
+ 'type' => 'select',
418
+ 'options' => array(
419
+ '-' => 'Rounded or Squared',
420
+ ),
421
+ 'default' => '-',
422
+ 'row_classes' => 'de_hundred_side de_text_side',
423
+ ));
424
+
425
+ $side_group->add_field( array(
426
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Pictures\' borders</span>',
427
+ 'id' => $prefix . 'picture_border',
428
+ 'type' => 'select',
429
+ 'options' => array(
430
+ '-' => 'Yes or No',
431
+ ),
432
+ 'default' => '-',
433
+ 'row_classes' => 'de_hundred_side de_text_side',
434
+ ));
435
+
436
+ $side_group->add_field( array(
437
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Pictures\' position</span>',
438
+ 'id' => $prefix . 'picture_position',
439
+ 'type' => 'select',
440
+ 'options' => array(
441
+ '-' => 'Floating or Inside the box',
442
+ ),
443
+ 'default' => '-',
444
+ 'row_classes' => 'de_hundred_side de_text_side',
445
+ ));
446
+
447
+ $side_group->add_field( array(
448
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Pictures\' filter</span>',
449
+ 'id' => $prefix . 'picture_filter',
450
+ 'type' => 'select',
451
+ 'options' => array(
452
+ '-' => 'Choose among 4 filters',
453
+ ),
454
+ 'default' => '-',
455
+ 'row_classes' => 'de_hundred_side de_text_side',
456
+ ));
457
+
458
+ $side_group->add_field( array(
459
+ 'name' => '<span style="color:#8a7463;"><span class="dashicons dashicons-lock"></span> PRO Top border\'s size</span>',
460
+ 'desc' => 'In pixels, without the "px".',
461
+ 'id' => $prefix . 'tp_border_size',
462
+ 'type' => 'text',
463
+ 'row_classes' => 'de_hundred_side de_text_side de_input',
464
+ ));
465
+
466
+ // Help group
467
+ $help_group = new_cmb2_box( array(
468
+ 'id' => $prefix . 'help_metabox',
469
+ 'title' => '<span class="dashicons dashicons-sos"></span> Help & Support',
470
+ 'object_types' => array( 'tmm' ),
471
+ 'context' => 'side',
472
+ 'priority' => 'high',
473
+ 'closed' => true,
474
+ 'row_classes' => 'de_hundred de_heading',
475
+ ));
476
+
477
+ $help_group->add_field( array(
478
+ 'name' => '',
479
+ 'desc' => 'Find help at WPdarko.com<br/><br/><a target="_blank" href="http://wpdarko.com/support/forum/plugins/team-members/"><span class="dashicons dashicons-arrow-right-alt2"></span> Support forum</a><br/><a target="_blank" href="http://wpdarko.com/support/documentation/get-started-team-members/"><span class="dashicons dashicons-arrow-right-alt2"></span> Documentation</a>',
480
+ 'id' => $prefix . 'help_desc',
481
+ 'type' => 'title',
482
+ 'row_classes' => 'de_hundred de_info de_info_side',
483
+ ));
484
+
485
+ // PRO group
486
+ $pro_group = new_cmb2_box( array(
487
+ 'id' => $prefix . 'pro_metabox',
488
+ 'title' => '<span class="dashicons dashicons-awards"></span> PRO version',
489
+ 'object_types' => array( 'tmm' ),
490
+ 'context' => 'side',
491
+ 'priority' => 'high',
492
+ 'closed' => true,
493
+ 'row_classes' => 'de_hundred de_heading',
494
+ ));
495
+
496
+ $pro_group->add_field( array(
497
+ 'name' => '',
498
+ 'desc' => 'This free version is <strong>not</strong> limited and does <strong>not</strong> contain any ad. Check out the PRO version for more great features.<br/><br/><a target="_blank" href="http://wpdarko.com/items/team-members-pro"><span class="dashicons dashicons-arrow-right-alt2"></span> See plugin\'s page</a><br/><br/><span style="font-size:13px; color:#88acbc;">Coupon code <strong>7884661</strong> (20% OFF).</span>',
499
+ 'id' => $prefix . 'pro_desc',
500
+ 'type' => 'title',
501
+ 'row_classes' => 'de_hundred de_info de_info_side',
502
+ ));
503
+
504
+ // Shortcode group
505
+ $show_group = new_cmb2_box( array(
506
+ 'id' => $prefix . 'shortcode_metabox',
507
+ 'title' => '<span class="dashicons dashicons-visibility"></span> Display my Team',
508
+ 'object_types' => array( 'tmm' ),
509
  'context' => 'side',
510
  'priority' => 'low',
511
+ 'closed' => false,
512
+ 'row_classes' => 'de_hundred de_heading',
513
+ ));
514
+
515
+ $show_group->add_field( array(
516
+ 'name' => '',
517
+ 'desc' => 'To display your Team on your site, copy-paste the Team\'s [Shortcode] in your post/page. <br/><br/>You can find this shortcode by clicking on the "Teams" tab in the menu on the left.',
518
+ 'id' => $prefix . 'short_desc',
519
+ 'type' => 'title',
520
+ 'row_classes' => 'de_hundred de_info de_info_side',
521
+ ));
 
522
 
 
 
523
  }
524
 
525
+ add_action( 'cmb2_init', 'tmm_register_group_metabox' );
526
+
527
+ //Shortcode columns
528
  add_action( 'manage_tmm_posts_custom_column' , 'dktmm_custom_columns', 10, 2 );
529
 
530
  function dktmm_custom_columns( $column, $post_id ) {
548
  }
549
  add_filter('manage_tmm_posts_columns' , 'add_tmm_columns');
550
 
551
+ //Tmm shortcode
552
  function tmm_sc($atts) {
553
  extract(shortcode_atts(array(
554
  "name" => ''
559
 
560
  global $post;
561
 
562
+ $members = get_post_meta( get_the_id(), '_tmm_head', true );
563
+ $options = get_post_meta( get_the_id(), '_tmm_settings_head', true );
564
+
565
+ $tmm_columns = get_post_meta( $post->ID, '_tmm_columns', true );
566
+ $tmm_color = get_post_meta( $post->ID, '_tmm_color', true );
 
 
567
 
568
  $output .= '<div class="tmm tmm_'.$name.'">';
569
  $output .= '<div class="tmm_'.$tmm_columns.'_columns">';
586
  }
587
 
588
  $output .= '<div class="tmm_member" style="border-top:'.$tmm_color.' solid 5px;">';
589
+
590
+ $output .= '<img src="'.$member['_tmm_photo'].'"/>';
591
+
592
  $output .= '<div class="tmm_textblock">';
593
  $output .= '<div class="tmm_names">';
594
+ $output .= '<span class="tmm_fname">'.$member['_tmm_firstname'].'</span>';
595
  $output .= '&nbsp;';
596
+ $output .= '<span class="tmm_lname">'.$member['_tmm_lastname'].'</span>';
597
  $output .= '</div>';
598
+ $output .= '<div class="tmm_job">'.$member['_tmm_job'].'</div>';
599
+ $output .= '<div class="tmm_desc">'.$member['_tmm_desc'].'</div>';
600
  $output .= '<div class="tmm_scblock">';
601
+ if ($member['_tmm_sc_type1'] != 'nada') {
602
+ if ($member['_tmm_sc_type1'] == 'email') {
603
+ $output .= '<a class="tmm_sociallink" href="mailto:'.$member['_tmm_sc_url1'].'" title="'.$member['_tmm_sc_title1'].'">';
604
+ $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['_tmm_sc_type1'].'.png"/>';
605
  $output .= '</a>';
606
  } else {
607
+ $output .= '<a class="tmm_sociallink" href="'.$member['_tmm_sc_url1'].'" title="'.$member['_tmm_sc_title1'].'">';
608
+ $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['_tmm_sc_type1'].'.png"/>';
609
  $output .= '</a>';
610
  }
611
  }
612
 
613
+ if ($member['_tmm_sc_type2'] != 'nada') {
614
+ if ($member['_tmm_sc_type2'] == 'email') {
615
+ $output .= '<a class="tmm_sociallink" href="mailto:'.$member['_tmm_sc_url2'].'" title="'.$member['_tmm_sc_title2'].'">';
616
+ $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['_tmm_sc_type2'].'.png"/>';
617
  $output .= '</a>';
618
  } else {
619
+ $output .= '<a class="tmm_sociallink" href="'.$member['_tmm_sc_url2'].'" title="'.$member['_tmm_sc_title2'].'">';
620
+ $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['_tmm_sc_type2'].'.png"/>';
621
  $output .= '</a>';
622
  }
623
  }
624
 
625
+ if ($member['_tmm_sc_type3'] != 'nada') {
626
+ if ($member['_tmm_sc_type3'] == 'email') {
627
+ $output .= '<a class="tmm_sociallink" href="mailto:'.$member['_tmm_sc_url3'].'" title="'.$member['_tmm_sc_title3'].'">';
628
+ $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['_tmm_sc_type3'].'.png"/>';
629
  $output .= '</a>';
630
  } else {
631
+ $output .= '<a class="tmm_sociallink" href="'.$member['_tmm_sc_url3'].'" title="'.$member['_tmm_sc_title3'].'">';
632
+ $output .= '<img src="'.plugins_url('img/links/', __FILE__).$member['_tmm_sc_type3'].'.png"/>';
633
  $output .= '</a>';
634
  }
635
  }