The Events Calendar - Version 5.0.0

Version Description

Download this release

Release Info

Developer zbtirrell
Plugin Icon The Events Calendar
Version 5.0.0
Comparing to
See all releases

Code changes from version 4.9.14 to 5.0.0

Files changed (208) hide show
  1. common/lang/tribe-common.pot +12 -14
  2. common/src/Tribe/Assets.php +82 -39
  3. common/src/Tribe/Cache.php +114 -30
  4. common/src/Tribe/Cache_Listener.php +41 -7
  5. common/src/Tribe/Container.php +46 -0
  6. common/src/Tribe/Customizer.php +3 -117
  7. common/src/Tribe/Data.php +9 -9
  8. common/src/Tribe/Date_Utils.php +64 -22
  9. common/src/Tribe/Main.php +2 -2
  10. common/src/Tribe/Post_Transient.php +11 -10
  11. common/src/Tribe/Repository.php +31 -11
  12. common/src/Tribe/Rewrite.php +70 -21
  13. common/src/Tribe/Settings_Manager.php +45 -13
  14. common/src/Tribe/Template.php +340 -90
  15. common/src/Tribe/Traits/Cache_User.php +17 -0
  16. common/src/Tribe/Utils/Collection_Trait.php +15 -2
  17. common/src/Tribe/Utils/Date_I18n.php +48 -0
  18. common/src/Tribe/Utils/Date_I18n_Immutable.php +48 -0
  19. common/src/Tribe/Utils/Post_Thumbnail.php +45 -29
  20. common/src/Tribe/View_Helpers.php +13 -5
  21. common/src/admin-views/tribe-options-display.php +7 -7
  22. common/src/functions/template-tags/date.php +38 -18
  23. common/src/functions/template-tags/general.php +9 -1
  24. common/src/functions/template-tags/post.php +29 -0
  25. common/src/resources/css/common-full.css +182 -173
  26. common/src/resources/css/common-full.min.css +1 -1
  27. common/src/resources/css/common-skeleton.css +86 -77
  28. common/src/resources/css/common-skeleton.min.css +1 -1
  29. common/src/resources/images/mascot.png +0 -0
  30. common/src/resources/postcss/README.md +25 -21
  31. common/src/resources/postcss/base/full/forms/_text.pcss +7 -7
  32. common/src/resources/postcss/base/full/typography/_body.pcss +9 -6
  33. common/src/resources/postcss/base/full/typography/_headings.pcss +41 -46
  34. common/src/resources/postcss/base/skeleton/_layouts.pcss +1 -1
  35. common/src/resources/postcss/base/skeleton/forms/_text.pcss +4 -4
  36. common/src/resources/postcss/base/skeleton/grid/_rows.pcss +14 -17
  37. common/src/resources/postcss/components/full/buttons/_border.pcss +1 -1
  38. common/src/resources/postcss/components/full/buttons/_solid.pcss +6 -1
  39. common/src/resources/postcss/components/skeleton/_loader.pcss +1 -1
  40. common/src/resources/postcss/components/skeleton/buttons/_border.pcss +1 -1
  41. common/src/resources/postcss/components/skeleton/buttons/_solid.pcss +1 -1
  42. common/src/resources/postcss/resets/skeleton/_twentyseventeen.pcss +7 -2
  43. common/src/resources/postcss/utilities/icons/arrow.svg +0 -1
  44. common/src/resources/postcss/utilities/icons/error.svg +0 -1
  45. common/src/resources/postcss/utilities/icons/link.svg +1 -0
  46. common/src/resources/postcss/utilities/icons/list.svg +1 -1
  47. common/src/resources/postcss/utilities/icons/mail.svg +1 -0
  48. common/src/resources/postcss/utilities/icons/map-pin.svg +1 -0
  49. common/src/resources/postcss/utilities/icons/map.svg +1 -1
  50. common/src/resources/postcss/utilities/icons/messages-not-found.svg +1 -0
  51. common/src/resources/postcss/utilities/icons/no-map.svg +1 -0
  52. common/src/resources/postcss/utilities/icons/phone.svg +1 -0
  53. common/src/resources/postcss/utilities/icons/photo.svg +1 -1
  54. common/src/resources/postcss/utilities/icons/remove.svg +0 -1
  55. common/src/resources/postcss/utilities/mixins/_buttons.pcss +0 -19
  56. common/src/resources/postcss/utilities/variables/_box-shadows.pcss +1 -1
  57. common/src/resources/postcss/utilities/variables/_colors.pcss +3 -2
  58. common/src/resources/postcss/utilities/variables/_svgs.pcss +60 -39
  59. common/src/resources/postcss/utilities/variables/_z-index.pcss +1 -0
  60. common/vendor/autoload.php +1 -1
  61. common/vendor/autoload_52.php +1 -1
  62. common/vendor/composer/autoload_classmap.php +2 -0
  63. common/vendor/composer/autoload_real.php +4 -4
  64. common/vendor/composer/autoload_real_52.php +3 -3
  65. common/vendor/composer/autoload_static.php +7 -5
  66. lang/the-events-calendar-zh_TW.mo +0 -0
  67. lang/the-events-calendar.pot +193 -179
  68. readme.txt +39 -14
  69. src/Tribe/Aggregator/Record/Queue.php +2 -0
  70. src/Tribe/Collections/Lazy_Post_Collection.php +89 -0
  71. src/Tribe/Customizer/Global_Elements.php +10 -2
  72. src/Tribe/Front_Page_View.php +1 -1
  73. src/Tribe/Main.php +69 -27
  74. src/Tribe/Models/Post_Types/Event.php +57 -34
  75. src/Tribe/Organizer.php +6 -1
  76. src/Tribe/Plugin_Register.php +3 -3
  77. src/Tribe/REST/V1/Post_Repository.php +0 -1
  78. src/Tribe/Repositories/Event.php +4 -0
  79. src/Tribe/Rewrite.php +4 -4
  80. src/Tribe/Service_Providers/Context.php +25 -2
  81. src/Tribe/Template_Factory.php +41 -0
  82. src/Tribe/Timezones.php +16 -2
  83. src/Tribe/Venue.php +6 -1
  84. src/Tribe/Views/V2/Assets.php +40 -0
  85. src/Tribe/Views/V2/Hooks.php +132 -16
  86. src/Tribe/Views/V2/Index.php +1 -1
  87. src/Tribe/Views/V2/Kitchen_Sink.php +1 -2
  88. src/Tribe/Views/V2/Manager.php +125 -3
  89. src/Tribe/Views/V2/Repository/Event_Period.php +6 -8
  90. src/Tribe/Views/V2/Repository/Events_Result_Set.php +80 -5
  91. src/Tribe/Views/V2/Rewrite.php +125 -0
  92. src/Tribe/Views/V2/Service_Provider.php +0 -4
  93. src/Tribe/Views/V2/Template.php +13 -0
  94. src/Tribe/Views/V2/Template/Event.php +155 -1
  95. src/Tribe/Views/V2/Template/Excerpt.php +46 -8
  96. src/Tribe/Views/V2/Template/Page.php +10 -0
  97. src/Tribe/Views/V2/Template_Bootstrap.php +98 -10
  98. src/Tribe/Views/V2/Url.php +2 -2
  99. src/Tribe/Views/V2/Utils/View.php +20 -0
  100. src/Tribe/Views/V2/View.php +433 -140
  101. src/Tribe/Views/V2/Views/By_Day_View.php +171 -28
  102. src/Tribe/Views/V2/Views/Day_View.php +18 -2
  103. src/Tribe/Views/V2/Views/List_View.php +41 -14
  104. src/Tribe/Views/V2/Views/Month_View.php +35 -18
  105. src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php +89 -0
  106. src/Tribe/Views/V2/Views/Traits/HTML_Cache.php +351 -0
  107. src/Tribe/Views/V2/Views/{List_Behavior.php → Traits/List_Behavior.php} +45 -12
  108. src/Tribe/iCal.php +4 -4
  109. src/admin-views/tribe-options-general.php +3 -3
  110. src/admin-views/tribe-options-upgrade.php +3 -1
  111. src/functions/template-tags/event.php +36 -1
  112. src/functions/template-tags/general.php +138 -106
  113. src/resources/css/events-admin.css +17 -134
  114. src/resources/css/events-admin.min.css +1 -1
  115. src/resources/css/views-full.css +176 -173
  116. src/resources/css/views-full.min.css +1 -1
  117. src/resources/css/views-skeleton.css +620 -621
  118. src/resources/css/views-skeleton.min.css +1 -1
  119. src/resources/js/views/README.md +93 -0
  120. src/resources/js/views/accordion.js +2 -1
  121. src/resources/js/views/breakpoints.js +214 -0
  122. src/resources/js/views/datepicker.js +50 -18
  123. src/resources/js/views/events-bar-inputs.js +2 -1
  124. src/resources/js/views/events-bar.js +15 -13
  125. src/resources/js/views/manager.js +50 -19
  126. src/resources/js/views/month-grid.js +5 -5
  127. src/resources/js/views/month-mobile-events.js +18 -9
  128. src/resources/js/views/multiday-events.js +3 -5
  129. src/resources/js/views/tooltip.js +3 -6
  130. src/resources/js/views/view-selector.js +10 -7
  131. src/resources/js/views/viewport.js +55 -20
  132. src/resources/postcss/README.md +17 -58
  133. src/resources/postcss/base/skeleton/_layouts.pcss +3 -1
  134. src/resources/postcss/components/full/_breadcrumbs.pcss +1 -1
  135. src/resources/postcss/components/full/_datepicker.pcss +3 -3
  136. src/resources/postcss/components/full/_events-bar.pcss +4 -2
  137. src/resources/postcss/components/full/_messages.pcss +2 -1
  138. src/resources/postcss/components/full/_navigation.pcss +13 -6
  139. src/resources/postcss/components/full/_search.pcss +8 -6
  140. src/resources/postcss/components/full/_top-bar.pcss +1 -1
  141. src/resources/postcss/components/full/_view-selector.pcss +17 -9
  142. src/resources/postcss/components/skeleton/_breadcrumbs.pcss +2 -2
  143. src/resources/postcss/components/skeleton/_datepicker.pcss +5 -4
  144. src/resources/postcss/components/skeleton/_events-bar.pcss +12 -9
  145. src/resources/postcss/components/skeleton/_messages.pcss +1 -1
  146. src/resources/postcss/components/skeleton/_navigation.pcss +4 -4
  147. src/resources/postcss/components/skeleton/_search.pcss +13 -13
  148. src/resources/postcss/components/skeleton/_top-bar.pcss +21 -11
  149. src/resources/postcss/components/skeleton/_view-selector.pcss +26 -18
  150. src/resources/postcss/events-admin.pcss +19 -0
  151. src/resources/postcss/views/full/day/_event.pcss +3 -2
  152. src/resources/postcss/views/full/list/_event.pcss +3 -2
  153. src/resources/postcss/views/full/month/_calendar-header.pcss +1 -1
  154. src/resources/postcss/views/full/month/_day.pcss +5 -3
  155. src/resources/postcss/views/skeleton/_header.pcss +10 -7
  156. src/resources/postcss/views/skeleton/day/_event.pcss +31 -25
  157. src/resources/postcss/views/skeleton/day/_nav.pcss +1 -1
  158. src/resources/postcss/views/skeleton/list/_event.pcss +18 -17
  159. src/resources/postcss/views/skeleton/list/_nav.pcss +1 -1
  160. src/resources/postcss/views/skeleton/month/_calendar-body.pcss +3 -2
  161. src/resources/postcss/views/skeleton/month/_calendar-event.pcss +4 -0
  162. src/resources/postcss/views/skeleton/month/_calendar-header.pcss +8 -2
  163. src/resources/postcss/views/skeleton/month/_calendar.pcss +1 -1
  164. src/resources/postcss/views/skeleton/month/_day.pcss +7 -4
  165. src/resources/postcss/views/skeleton/month/_mobile-events.pcss +6 -1
  166. src/resources/postcss/views/skeleton/month/_multiday-event.pcss +5 -1
  167. src/resources/postcss/views/skeleton/month/_nav.pcss +1 -1
  168. src/views/v2/components/breakpoints.php +26 -0
  169. src/views/v2/components/data.php +29 -6
  170. src/views/v2/components/events-bar/views.php +6 -12
  171. src/views/v2/components/events-bar/views/list.php +7 -3
  172. src/views/v2/components/events-bar/views/list/item.php +9 -29
  173. src/views/v2/components/top-bar/actions.php +2 -2
  174. src/views/v2/day.php +8 -1
  175. src/views/v2/day/event.php +2 -2
  176. src/views/v2/day/event/description.php +2 -2
  177. src/views/v2/day/event/featured-image.php +2 -2
  178. src/views/v2/day/event/title.php +6 -3
  179. src/views/v2/day/top-bar/datepicker.php +8 -2
  180. src/views/v2/default-template.php +19 -0
  181. src/views/v2/index.php +0 -5
  182. src/views/v2/list.php +7 -1
  183. src/views/v2/list/event.php +2 -2
  184. src/views/v2/list/event/date-tag.php +3 -3
  185. src/views/v2/list/event/description.php +2 -2
  186. src/views/v2/list/event/featured-image.php +2 -2
  187. src/views/v2/list/event/title.php +6 -3
  188. src/views/v2/list/month-separator.php +2 -2
  189. src/views/v2/list/nav/next-disabled.php +11 -9
  190. src/views/v2/list/nav/next.php +11 -9
  191. src/views/v2/list/nav/prev-disabled.php +11 -9
  192. src/views/v2/list/nav/prev.php +11 -9
  193. src/views/v2/list/top-bar/datepicker.php +17 -10
  194. src/views/v2/month.php +7 -1
  195. src/views/v2/month/calendar-body/day/calendar-events/calendar-event.php +2 -2
  196. src/views/v2/month/calendar-body/day/calendar-events/calendar-event/featured-image.php +2 -2
  197. src/views/v2/month/calendar-body/day/calendar-events/calendar-event/title.php +6 -3
  198. src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/featured-image.php +2 -2
  199. src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/title.php +6 -3
  200. src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php +10 -6
  201. src/views/v2/month/mobile-events/mobile-day/mobile-event.php +2 -2
  202. src/views/v2/month/mobile-events/mobile-day/mobile-event/title.php +6 -3
  203. src/views/v2/month/top-bar/datepicker.php +17 -9
  204. the-events-calendar.php +1 -1
  205. vendor/autoload.php +1 -1
  206. vendor/composer/autoload_classmap.php +7 -2
  207. vendor/composer/autoload_real.php +4 -4
  208. vendor/composer/autoload_static.php +11 -6
common/lang/tribe-common.pot CHANGED
@@ -1,16 +1,14 @@
1
- # Copyright (C) 2019 Modern Tribe
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
-
6
- "Project-Id-Version: Tribe Common 4.10.2\n"
7
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
8
- "POT-Creation-Date: 2019-12-10 00:34:42+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2019-12-10 00:34\n"
13
-
14
  "Last-Translator: \n"
15
  "Language-Team: \n"
16
 
@@ -42,7 +40,7 @@ msgstr ""
42
  msgid "Press \"Cmd + C\" to copy"
43
  msgstr ""
44
 
45
- #: src/Tribe/Admin/Help_Page.php:79 src/Tribe/Customizer.php:642
46
  #: src/Tribe/Plugins_API.php:25
47
  msgid "The Events Calendar"
48
  msgstr ""
@@ -253,7 +251,7 @@ msgstr ""
253
  msgid "Rate %1$sEvent Tickets%2$s %3$s"
254
  msgstr ""
255
 
256
- #: src/Tribe/Customizer.php:643
257
  msgid ""
258
  "Use the following panel of your customizer to change the styling of your "
259
  "Calendar and Event pages."
@@ -2125,24 +2123,24 @@ msgstr[1] ""
2125
  msgid "Settings saved."
2126
  msgstr ""
2127
 
2128
- #: src/Tribe/Settings_Manager.php:57
2129
  msgid "General"
2130
  msgstr ""
2131
 
2132
- #: src/Tribe/Settings_Manager.php:58
2133
  msgid "Display"
2134
  msgstr ""
2135
 
2136
- #: src/Tribe/Settings_Manager.php:222
2137
  msgid "Network"
2138
  msgstr ""
2139
 
2140
- #: src/Tribe/Settings_Manager.php:256
2141
  #: src/admin-views/tribe-options-licenses.php:57
2142
  msgid "Licenses"
2143
  msgstr ""
2144
 
2145
- #: src/Tribe/Settings_Manager.php:286
2146
  msgid "Help"
2147
  msgstr ""
2148
 
@@ -2327,7 +2325,7 @@ msgstr ""
2327
  msgid "%s must be an email address."
2328
  msgstr ""
2329
 
2330
- #: src/Tribe/View_Helpers.php:51
2331
  msgid "Select a Country:"
2332
  msgstr ""
2333
 
1
+ # Copyright (C) 2020 Modern Tribe
2
  # This file is distributed under the same license as the Tribe Common package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Tribe Common 4.11.0\n"
 
6
  "Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
7
+ "POT-Creation-Date: 2020-01-23 20:33:04+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2020-01-23 20:33\n"
 
12
  "Last-Translator: \n"
13
  "Language-Team: \n"
14
 
40
  msgid "Press \"Cmd + C\" to copy"
41
  msgstr ""
42
 
43
+ #: src/Tribe/Admin/Help_Page.php:79 src/Tribe/Customizer.php:563
44
  #: src/Tribe/Plugins_API.php:25
45
  msgid "The Events Calendar"
46
  msgstr ""
251
  msgid "Rate %1$sEvent Tickets%2$s %3$s"
252
  msgstr ""
253
 
254
+ #: src/Tribe/Customizer.php:564
255
  msgid ""
256
  "Use the following panel of your customizer to change the styling of your "
257
  "Calendar and Event pages."
2123
  msgid "Settings saved."
2124
  msgstr ""
2125
 
2126
+ #: src/Tribe/Settings_Manager.php:80
2127
  msgid "General"
2128
  msgstr ""
2129
 
2130
+ #: src/Tribe/Settings_Manager.php:81
2131
  msgid "Display"
2132
  msgstr ""
2133
 
2134
+ #: src/Tribe/Settings_Manager.php:254
2135
  msgid "Network"
2136
  msgstr ""
2137
 
2138
+ #: src/Tribe/Settings_Manager.php:288
2139
  #: src/admin-views/tribe-options-licenses.php:57
2140
  msgid "Licenses"
2141
  msgstr ""
2142
 
2143
+ #: src/Tribe/Settings_Manager.php:318
2144
  msgid "Help"
2145
  msgstr ""
2146
 
2325
  msgid "%s must be an email address."
2326
  msgstr ""
2327
 
2328
+ #: src/Tribe/View_Helpers.php:59
2329
  msgid "Select a Country:"
2330
  msgstr ""
2331
 
common/src/Tribe/Assets.php CHANGED
@@ -49,15 +49,13 @@ class Tribe__Assets {
49
  */
50
  public function register_in_wp( $assets = null ) {
51
  if ( is_null( $assets ) ) {
52
- $assets = $this->assets;
53
  }
54
 
55
  if ( ! is_array( $assets ) ) {
56
  $assets = [ $assets ];
57
  }
58
 
59
- uasort( $assets, [ $this, 'order_by_priority' ] );
60
-
61
  foreach ( $assets as $asset ) {
62
  // Asset is already registered.
63
  if ( $asset->is_registered ) {
@@ -97,7 +95,7 @@ class Tribe__Assets {
97
  if ( did_action( $action ) > 0 ) {
98
  $this->enqueue();
99
  } else {
100
- add_action( $action, [ $this, 'enqueue' ], $asset->priority );
101
  }
102
  }
103
  }
@@ -113,7 +111,7 @@ class Tribe__Assets {
113
  * @param string|array $groups Which groups will be enqueued.
114
  */
115
  public function enqueue_group( $groups ) {
116
- $assets = $this->get();
117
  $enqueue = [];
118
 
119
  foreach ( $assets as $asset ) {
@@ -126,7 +124,6 @@ class Tribe__Assets {
126
  if ( empty( $intersect ) ) {
127
  continue;
128
  }
129
-
130
  $enqueue[] = $asset->slug;
131
  }
132
 
@@ -148,7 +145,11 @@ class Tribe__Assets {
148
  */
149
  public function enqueue( $forcibly_enqueue = null ) {
150
  $forcibly_enqueue = array_filter( (array) $forcibly_enqueue );
151
- $assets = $this->get();
 
 
 
 
152
 
153
  foreach ( $assets as $asset ) {
154
  // Should this asset be enqueued regardless of the current filter/any conditional requirements?
@@ -274,26 +275,49 @@ class Tribe__Assets {
274
  * @return string|false The url to the minified version or false, if file not found.
275
  */
276
  public static function maybe_get_min_file( $url ) {
277
- $urls = [];
278
- $wpmu_plugin_url = set_url_scheme( WPMU_PLUGIN_URL );
279
- $wp_plugin_url = set_url_scheme( WP_PLUGIN_URL );
280
- $wp_content_url = set_url_scheme( WP_CONTENT_URL );
281
- $plugins_url = plugins_url();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
 
283
  if ( 0 === strpos( $url, $wpmu_plugin_url ) ) {
284
  // URL inside WPMU plugin dir.
285
- $base_dir = wp_normalize_path( WPMU_PLUGIN_DIR );
286
  $base_url = $wpmu_plugin_url;
287
  } elseif ( 0 === strpos( $url, $wp_plugin_url ) ) {
288
  // URL inside WP plugin dir.
289
- $base_dir = wp_normalize_path( WP_PLUGIN_DIR );
290
  $base_url = $wp_plugin_url;
291
  } elseif ( 0 === strpos( $url, $wp_content_url ) ) {
292
  // URL inside WP content dir.
293
- $base_dir = wp_normalize_path( WP_CONTENT_DIR );
294
  $base_url = $wp_content_url;
295
  } elseif ( 0 === strpos( $url, $plugins_url ) ) {
296
- $base_dir = wp_normalize_path( WP_PLUGIN_DIR );
297
  $base_url = $plugins_url;
298
  } else {
299
  // Resource needs to be inside wp-content or a plugins dir.
@@ -320,7 +344,7 @@ class Tribe__Assets {
320
  // Check for all Urls added to the array.
321
  foreach ( $urls as $partial_path ) {
322
  $file_path = wp_normalize_path( $base_dir . $partial_path );
323
- $file_url = plugins_url( basename( $file_path ), $file_path );
324
 
325
  if ( file_exists( $file_path ) ) {
326
  return $file_url;
@@ -514,9 +538,6 @@ class Tribe__Assets {
514
  // Set the Asset on the array of notices.
515
  $this->assets[ $slug ] = $asset;
516
 
517
- // Sorts by priority.
518
- uasort( $this->assets, [ $this, 'order_by_priority' ] );
519
-
520
  // Return the Slug because it might be modified.
521
  return $asset;
522
  }
@@ -578,19 +599,55 @@ class Tribe__Assets {
578
  * Get the Asset Object configuration.
579
  *
580
  * @since 4.3
 
581
  *
582
- * @param string $slug Slug of the Asset.
 
583
  *
584
  * @return array|object|null Array of asset objects, single asset object, or null if looking for a single asset but
585
  * it was not in the array of objects.
586
  */
587
- public function get( $slug = null ) {
588
- uasort( $this->assets, [ $this, 'order_by_priority' ] );
589
-
590
  if ( is_null( $slug ) ) {
 
 
 
 
 
 
 
 
 
 
 
591
  return $this->assets;
592
  }
593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
594
  // Prevent weird stuff here.
595
  $slug = sanitize_title_with_dashes( $slug );
596
 
@@ -601,24 +658,10 @@ class Tribe__Assets {
601
  return null;
602
  }
603
 
604
- /**
605
- * Add the Priority ordering, which was causing an issue of not respecting which order stuff was registered.
606
- *
607
- * @since 4.7
608
- *
609
- * @param object $a First Subject to compare.
610
- * @param object $b Second subject to compare.
611
- *
612
- * @return boolean
613
- */
614
- public function order_by_priority( $a, $b ) {
615
- return (int) $a->priority === (int) $b->priority ? 0 : (int) $a->priority > (int) $b->priority;
616
- }
617
-
618
  /**
619
  * Checks if an Asset exists.
620
  *
621
- * @param string $slug Slug of the Asset.
622
  *
623
  * @return bool
624
  */
49
  */
50
  public function register_in_wp( $assets = null ) {
51
  if ( is_null( $assets ) ) {
52
+ $assets = $this->get();
53
  }
54
 
55
  if ( ! is_array( $assets ) ) {
56
  $assets = [ $assets ];
57
  }
58
 
 
 
59
  foreach ( $assets as $asset ) {
60
  // Asset is already registered.
61
  if ( $asset->is_registered ) {
95
  if ( did_action( $action ) > 0 ) {
96
  $this->enqueue();
97
  } else {
98
+ add_action( $action, [ $this, 'enqueue' ], $asset->priority, 0 );
99
  }
100
  }
101
  }
111
  * @param string|array $groups Which groups will be enqueued.
112
  */
113
  public function enqueue_group( $groups ) {
114
+ $assets = $this->get( null, false );
115
  $enqueue = [];
116
 
117
  foreach ( $assets as $asset ) {
124
  if ( empty( $intersect ) ) {
125
  continue;
126
  }
 
127
  $enqueue[] = $asset->slug;
128
  }
129
 
145
  */
146
  public function enqueue( $forcibly_enqueue = null ) {
147
  $forcibly_enqueue = array_filter( (array) $forcibly_enqueue );
148
+ if ( ! empty( $forcibly_enqueue ) ) {
149
+ $assets = (array) $this->get( $forcibly_enqueue );
150
+ } else {
151
+ $assets = $this->get();
152
+ }
153
 
154
  foreach ( $assets as $asset ) {
155
  // Should this asset be enqueued regardless of the current filter/any conditional requirements?
275
  * @return string|false The url to the minified version or false, if file not found.
276
  */
277
  public static function maybe_get_min_file( $url ) {
278
+ static $wpmu_plugin_url;
279
+ static $wp_plugin_url;
280
+ static $wp_content_url;
281
+ static $plugins_url;
282
+ static $base_dirs;
283
+
284
+ $urls = [];
285
+ if ( ! isset( $wpmu_plugin_url ) ) {
286
+ $wpmu_plugin_url = set_url_scheme( WPMU_PLUGIN_URL );
287
+ }
288
+
289
+ if ( ! isset( $wp_plugin_url ) ) {
290
+ $wp_plugin_url = set_url_scheme( WP_PLUGIN_URL );
291
+ }
292
+
293
+ if ( ! isset( $wp_content_url ) ) {
294
+ $wp_content_url = set_url_scheme( WP_CONTENT_URL );
295
+ }
296
+
297
+ if ( ! isset( $plugins_url ) ) {
298
+ $plugins_url = plugins_url();
299
+ }
300
+
301
+ if ( ! isset( $base_dirs ) ) {
302
+ $base_dirs[ WPMU_PLUGIN_DIR ] = wp_normalize_path( WPMU_PLUGIN_DIR );
303
+ $base_dirs[ WP_PLUGIN_DIR ] = wp_normalize_path( WP_PLUGIN_DIR );
304
+ $base_dirs[ WP_CONTENT_DIR ] = wp_normalize_path( WP_CONTENT_DIR );
305
+ }
306
 
307
  if ( 0 === strpos( $url, $wpmu_plugin_url ) ) {
308
  // URL inside WPMU plugin dir.
309
+ $base_dir = $base_dirs[ WPMU_PLUGIN_DIR ];
310
  $base_url = $wpmu_plugin_url;
311
  } elseif ( 0 === strpos( $url, $wp_plugin_url ) ) {
312
  // URL inside WP plugin dir.
313
+ $base_dir = $base_dirs[ WP_PLUGIN_DIR ];
314
  $base_url = $wp_plugin_url;
315
  } elseif ( 0 === strpos( $url, $wp_content_url ) ) {
316
  // URL inside WP content dir.
317
+ $base_dir = $base_dirs[ WP_CONTENT_DIR ];
318
  $base_url = $wp_content_url;
319
  } elseif ( 0 === strpos( $url, $plugins_url ) ) {
320
+ $base_dir = $base_dirs[ WP_PLUGIN_DIR ];
321
  $base_url = $plugins_url;
322
  } else {
323
  // Resource needs to be inside wp-content or a plugins dir.
344
  // Check for all Urls added to the array.
345
  foreach ( $urls as $partial_path ) {
346
  $file_path = wp_normalize_path( $base_dir . $partial_path );
347
+ $file_url = $base_url . $partial_path;
348
 
349
  if ( file_exists( $file_path ) ) {
350
  return $file_url;
538
  // Set the Asset on the array of notices.
539
  $this->assets[ $slug ] = $asset;
540
 
 
 
 
541
  // Return the Slug because it might be modified.
542
  return $asset;
543
  }
599
  * Get the Asset Object configuration.
600
  *
601
  * @since 4.3
602
+ * @since 4.11.0 Added $sort param.
603
  *
604
+ * @param string|array $slug Slug of the Asset.
605
+ * @param boolean $sort If we should do any sorting before returning.
606
  *
607
  * @return array|object|null Array of asset objects, single asset object, or null if looking for a single asset but
608
  * it was not in the array of objects.
609
  */
610
+ public function get( $slug = null, $sort = true ) {
 
 
611
  if ( is_null( $slug ) ) {
612
+ if ( $sort ) {
613
+ $cache_key_count = __METHOD__ . ':count';
614
+ // Sorts by priority.
615
+ $cache_count = tribe_get_var( $cache_key_count, 0 );
616
+ $count = count( $this->assets );
617
+
618
+ if ( $count !== $cache_count ) {
619
+ uasort( $this->assets, 'tribe_sort_by_priority' );
620
+ tribe_set_var( $cache_key_count, $count );
621
+ }
622
+ }
623
  return $this->assets;
624
  }
625
 
626
+ // If slug is an array we return all of those.
627
+ if ( is_array( $slug ) ) {
628
+ $assets = [];
629
+ foreach ( $slug as $asset_slug ) {
630
+ $asset_slug = sanitize_title_with_dashes( $asset_slug );
631
+ // Skip empty assets.
632
+ if ( empty( $this->assets[ $asset_slug ] ) ) {
633
+ continue;
634
+ }
635
+
636
+ $assets[ $asset_slug ] = $this->assets[ $asset_slug ];
637
+ }
638
+
639
+ if ( empty( $assets ) ) {
640
+ return null;
641
+ }
642
+
643
+ if ( $sort ) {
644
+ // Sorts by priority.
645
+ uasort( $assets, 'tribe_sort_by_priority' );
646
+ }
647
+
648
+ return $assets;
649
+ }
650
+
651
  // Prevent weird stuff here.
652
  $slug = sanitize_title_with_dashes( $slug );
653
 
658
  return null;
659
  }
660
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
661
  /**
662
  * Checks if an Asset exists.
663
  *
664
+ * @param string|array $slug Slug of the Asset.
665
  *
666
  * @return bool
667
  */
common/src/Tribe/Cache.php CHANGED
@@ -10,6 +10,7 @@
10
  * When used in its ArrayAccess API the cache will provide non persistent storage.
11
  */
12
  class Tribe__Cache implements ArrayAccess {
 
13
  const NO_EXPIRATION = 0;
14
  const NON_PERSISTENT = - 1;
15
 
@@ -18,15 +19,28 @@ class Tribe__Cache implements ArrayAccess {
18
  */
19
  protected $non_persistent_keys = array();
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  public static function setup() {
22
  wp_cache_add_non_persistent_groups( array( 'tribe-events-non-persistent' ) );
23
  }
24
 
25
  /**
26
- * @param string $id
27
- * @param mixed $value
28
- * @param int $expiration
29
- * @param string $expiration_trigger
30
  *
31
  * @return bool
32
  */
@@ -37,11 +51,11 @@ class Tribe__Cache implements ArrayAccess {
37
  * Filters the expiration for cache objects to provide the ability
38
  * to make non-persistent objects be treated as persistent.
39
  *
40
- * @param int $expiration Cache expiration time.
41
- * @param string $id Cache ID.
42
- * @param mixed $value Cache value.
43
- * @param string $expiration_trigger Action that triggers automatic expiration.
44
- * @param string $key Unique cache key based on Cache ID and expiration trigger last run time.
45
  *
46
  * @since 4.8
47
  */
@@ -61,10 +75,10 @@ class Tribe__Cache implements ArrayAccess {
61
  }
62
 
63
  /**
64
- * @param $id
65
- * @param $value
66
- * @param int $expiration
67
- * @param string $expiration_trigger
68
  *
69
  * @return bool
70
  */
@@ -77,11 +91,11 @@ class Tribe__Cache implements ArrayAccess {
77
  *
78
  * Note: When a default value or callback is specified, this value gets set in the cache.
79
  *
80
- * @param string $id The key for the cached value.
81
- * @param string $expiration_trigger Optional. Hook to trigger cache invalidation.
82
- * @param mixed $default Optional. A default value or callback that returns a default value.
83
- * @param int $expiration Optional. When the default value expires, if it gets set.
84
- * @param mixed $args Optional. Args passed to callback.
85
  *
86
  * @return mixed
87
  */
@@ -112,7 +126,7 @@ class Tribe__Cache implements ArrayAccess {
112
 
113
  /**
114
  * @param string $id
115
- * @param string $expiration_trigger
116
  *
117
  * @return mixed
118
  */
@@ -122,7 +136,7 @@ class Tribe__Cache implements ArrayAccess {
122
 
123
  /**
124
  * @param string $id
125
- * @param string $expiration_trigger
126
  *
127
  * @return bool
128
  */
@@ -132,7 +146,7 @@ class Tribe__Cache implements ArrayAccess {
132
 
133
  /**
134
  * @param string $id
135
- * @param string $expiration_trigger
136
  *
137
  * @return bool
138
  */
@@ -140,17 +154,65 @@ class Tribe__Cache implements ArrayAccess {
140
  return delete_transient( $this->get_id( $id, $expiration_trigger ) );
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  /**
144
  * @param string $key
145
- * @param string $expiration_trigger
146
  *
147
  * @return string
148
  */
149
  public function get_id( $key, $expiration_trigger = '' ) {
150
- $last = empty( $expiration_trigger ) ? '' : $this->get_last_occurrence( $expiration_trigger );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  $id = $key . $last;
152
- if ( strlen( $id ) > 40 ) {
153
- $id = md5( $id );
154
  }
155
 
156
  return $id;
@@ -166,7 +228,27 @@ class Tribe__Cache implements ArrayAccess {
166
  * @return float The time (microtime) an action last occurred, or the current microtime if it never occurred.
167
  */
168
  public function get_last_occurrence( $action ) {
169
- return (float) get_option( 'tribe_last_' . $action, microtime( true ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  }
171
 
172
  /**
@@ -182,6 +264,8 @@ class Tribe__Cache implements ArrayAccess {
182
  $timestamp = microtime( true );
183
  }
184
  update_option( 'tribe_last_' . $action, (float) $timestamp );
 
 
185
  }
186
 
187
  /**
@@ -222,7 +306,7 @@ class Tribe__Cache implements ArrayAccess {
222
  * </p>
223
  * <p>
224
  * The return value will be casted to boolean if non-boolean was returned.
225
- * @since 5.0.0
226
  */
227
  public function offsetExists( $offset ) {
228
  return in_array( $offset, $this->non_persistent_keys );
@@ -236,7 +320,7 @@ class Tribe__Cache implements ArrayAccess {
236
  * The offset to retrieve.
237
  * </p>
238
  * @return mixed Can return all value types.
239
- * @since 5.0.0
240
  */
241
  public function offsetGet( $offset ) {
242
  return $this->get( $offset );
@@ -253,7 +337,7 @@ class Tribe__Cache implements ArrayAccess {
253
  * The value to set.
254
  * </p>
255
  * @return void
256
- * @since 5.0.0
257
  */
258
  public function offsetSet( $offset, $value ) {
259
  $this->set( $offset, $value, self::NON_PERSISTENT );
@@ -267,7 +351,7 @@ class Tribe__Cache implements ArrayAccess {
267
  * The offset to unset.
268
  * </p>
269
  * @return void
270
- * @since 5.0.0
271
  */
272
  public function offsetUnset( $offset ) {
273
  $this->delete( $offset );
10
  * When used in its ArrayAccess API the cache will provide non persistent storage.
11
  */
12
  class Tribe__Cache implements ArrayAccess {
13
+ const SCHEDULED_EVENT_DELETE_TRANSIENT = 'tribe_schedule_transient_purge';
14
  const NO_EXPIRATION = 0;
15
  const NON_PERSISTENT = - 1;
16
 
19
  */
20
  protected $non_persistent_keys = array();
21
 
22
+ /**
23
+ * Bootstrap hook
24
+ *
25
+ * @since 4.11.0
26
+ */
27
+ public function hook() {
28
+ if ( ! wp_next_scheduled( self::SCHEDULED_EVENT_DELETE_TRANSIENT ) ) {
29
+ wp_schedule_event( time(), 'twicedaily', self::SCHEDULED_EVENT_DELETE_TRANSIENT );
30
+ }
31
+
32
+ add_action( self::SCHEDULED_EVENT_DELETE_TRANSIENT, [ $this, 'delete_expired_transients' ] );
33
+ }
34
+
35
  public static function setup() {
36
  wp_cache_add_non_persistent_groups( array( 'tribe-events-non-persistent' ) );
37
  }
38
 
39
  /**
40
+ * @param string $id
41
+ * @param mixed $value
42
+ * @param int $expiration
43
+ * @param string|array $expiration_trigger
44
  *
45
  * @return bool
46
  */
51
  * Filters the expiration for cache objects to provide the ability
52
  * to make non-persistent objects be treated as persistent.
53
  *
54
+ * @param int $expiration Cache expiration time.
55
+ * @param string $id Cache ID.
56
+ * @param mixed $value Cache value.
57
+ * @param string|array $expiration_trigger Action that triggers automatic expiration.
58
+ * @param string $key Unique cache key based on Cache ID and expiration trigger last run time.
59
  *
60
  * @since 4.8
61
  */
75
  }
76
 
77
  /**
78
+ * @param $id
79
+ * @param $value
80
+ * @param int $expiration
81
+ * @param string|array $expiration_trigger
82
  *
83
  * @return bool
84
  */
91
  *
92
  * Note: When a default value or callback is specified, this value gets set in the cache.
93
  *
94
+ * @param string $id The key for the cached value.
95
+ * @param string|array $expiration_trigger Optional. Hook to trigger cache invalidation.
96
+ * @param mixed $default Optional. A default value or callback that returns a default value.
97
+ * @param int $expiration Optional. When the default value expires, if it gets set.
98
+ * @param mixed $args Optional. Args passed to callback.
99
  *
100
  * @return mixed
101
  */
126
 
127
  /**
128
  * @param string $id
129
+ * @param string|array $expiration_trigger
130
  *
131
  * @return mixed
132
  */
136
 
137
  /**
138
  * @param string $id
139
+ * @param string|array $expiration_trigger
140
  *
141
  * @return bool
142
  */
146
 
147
  /**
148
  * @param string $id
149
+ * @param string|array $expiration_trigger
150
  *
151
  * @return bool
152
  */
154
  return delete_transient( $this->get_id( $id, $expiration_trigger ) );
155
  }
156
 
157
+ /**
158
+ * Purge all expired tribe_ transients.
159
+ *
160
+ * This uses a modification of the the query from https://core.trac.wordpress.org/ticket/20316
161
+ *
162
+ * @since 4.11.0
163
+ */
164
+ public function delete_expired_transients() {
165
+ global $wpdb;
166
+
167
+ $time = time();
168
+
169
+ $sql = "
170
+ DELETE
171
+ a,
172
+ b
173
+ FROM
174
+ {$wpdb->options} a
175
+ INNER JOIN {$wpdb->options} b
176
+ ON b.option_name = CONCAT( '_transient_timeout_tribe_', SUBSTRING( a.option_name, 12 ) )
177
+ AND b.option_value < {$time}
178
+ WHERE
179
+ a.option_name LIKE '\_transient_tribe\_%'
180
+ AND a.option_name NOT LIKE '\_transient\_timeout_tribe\_%'
181
+ ";
182
+ $wpdb->query( $sql );
183
+ }
184
+
185
  /**
186
  * @param string $key
187
+ * @param string|array $expiration_trigger
188
  *
189
  * @return string
190
  */
191
  public function get_id( $key, $expiration_trigger = '' ) {
192
+ if ( is_array( $expiration_trigger ) ) {
193
+ $triggers = $expiration_trigger;
194
+ } else {
195
+ $triggers = array_filter( explode( '|', $expiration_trigger ) );
196
+ }
197
+
198
+ $last = 0;
199
+ foreach ( $triggers as $trigger ) {
200
+ // Bail on empty trigger otherwise it creates a `tribe_last_` opt on the DB.
201
+ if ( empty( $trigger ) ) {
202
+ continue;
203
+ }
204
+
205
+ $occurrence = $this->get_last_occurrence( $trigger );
206
+
207
+ if ( $occurrence > $last ) {
208
+ $last = $occurrence;
209
+ }
210
+ }
211
+
212
+ $last = empty( $last ) ? '' : $last;
213
  $id = $key . $last;
214
+ if ( strlen( $id ) > 80 ) {
215
+ $id = 'tribe_' . md5( $id );
216
  }
217
 
218
  return $id;
228
  * @return float The time (microtime) an action last occurred, or the current microtime if it never occurred.
229
  */
230
  public function get_last_occurrence( $action ) {
231
+ static $cache_var_name = __METHOD__;
232
+
233
+ $cache_last_actions = tribe_get_var( $cache_var_name, [] );
234
+
235
+ if ( isset( $cache_last_actions[ $action ] ) ) {
236
+ return $cache_last_actions[ $action ];
237
+ }
238
+
239
+ $last_action = (float) get_option( 'tribe_last_' . $action, null );
240
+
241
+ if ( ! $last_action ) {
242
+ $last_action = microtime( true );
243
+
244
+ update_option( 'tribe_last_' . $action, $last_action );
245
+ }
246
+
247
+ $cache_last_actions[ $action ] = (float) $last_action;
248
+
249
+ tribe_set_var( $cache_var_name, $cache_last_actions );
250
+
251
+ return $cache_last_actions[ $action ];
252
  }
253
 
254
  /**
264
  $timestamp = microtime( true );
265
  }
266
  update_option( 'tribe_last_' . $action, (float) $timestamp );
267
+
268
+ $this->delete_expired_transients();
269
  }
270
 
271
  /**
306
  * </p>
307
  * <p>
308
  * The return value will be casted to boolean if non-boolean was returned.
309
+ * @since 4.11.0
310
  */
311
  public function offsetExists( $offset ) {
312
  return in_array( $offset, $this->non_persistent_keys );
320
  * The offset to retrieve.
321
  * </p>
322
  * @return mixed Can return all value types.
323
+ * @since 4.11.0
324
  */
325
  public function offsetGet( $offset ) {
326
  return $this->get( $offset );
337
  * The value to set.
338
  * </p>
339
  * @return void
340
+ * @since 4.11.0
341
  */
342
  public function offsetSet( $offset, $value ) {
343
  $this->set( $offset, $value, self::NON_PERSISTENT );
351
  * The offset to unset.
352
  * </p>
353
  * @return void
354
+ * @since 4.11.0
355
  */
356
  public function offsetUnset( $offset ) {
357
  $this->delete( $offset );
common/src/Tribe/Cache_Listener.php CHANGED
@@ -14,6 +14,11 @@
14
  */
15
  const TRIGGER_SAVE_POST = 'save_post';
16
 
 
 
 
 
 
17
  /**
18
  * The singleton instance of the class.
19
  *
@@ -53,6 +58,7 @@
53
  */
54
  private function add_hooks() {
55
  add_action( 'save_post', [ $this, 'save_post' ], 0, 2 );
 
56
  add_action( 'updated_option', [ $this, 'update_last_save_post' ], 10, 3 );
57
  add_action( 'generate_rewrite_rules', [ $this, 'generate_rewrite_rules' ] );
58
  }
@@ -79,17 +85,45 @@
79
  * @param mixed $value The new option value.
80
  */
81
  public function update_last_save_post( $option_name, $old_value, $value ) {
82
- $triggers = array(
83
- 'tribe_events_calendar_options',
84
- 'permalink_structure',
85
- 'rewrite_rules',
86
- 'start_of_week',
87
- );
88
- if ( in_array( $option_name, $triggers, true ) ) {
89
  $this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
90
  }
91
  }
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  /**
94
  * For any hook that doesn't need any additional filtering
95
  *
14
  */
15
  const TRIGGER_SAVE_POST = 'save_post';
16
 
17
+ /**
18
+ * The name of the trigger that will be fired when an option is updated
19
+ */
20
+ const TRIGGER_UPDATED_OPTION = 'updated_option';
21
+
22
  /**
23
  * The singleton instance of the class.
24
  *
58
  */
59
  private function add_hooks() {
60
  add_action( 'save_post', [ $this, 'save_post' ], 0, 2 );
61
+ add_action( 'updated_option', [ $this, 'update_last_updated_option' ], 10, 3 );
62
  add_action( 'updated_option', [ $this, 'update_last_save_post' ], 10, 3 );
63
  add_action( 'generate_rewrite_rules', [ $this, 'generate_rewrite_rules' ] );
64
  }
85
  * @param mixed $value The new option value.
86
  */
87
  public function update_last_save_post( $option_name, $old_value, $value ) {
88
+ $triggers = [
89
+ 'tribe_events_calendar_options' => true,
90
+ 'permalink_structure' => true,
91
+ 'rewrite_rules' => true,
92
+ 'start_of_week' => true,
93
+ ];
94
+ if ( ! empty( $triggers[ $option_name ] ) ) {
95
  $this->cache->set_last_occurrence( self::TRIGGER_SAVE_POST );
96
  }
97
  }
98
 
99
+ /**
100
+ * Run the caching functionality that is executed on saving tribe calendar options.
101
+ *
102
+ * @see 'updated_option'
103
+ *
104
+ * @since 4.11.0
105
+ *
106
+ * @param string $option_name Name of the updated option.
107
+ * @param mixed $old_value The old option value.
108
+ * @param mixed $value The new option value.
109
+ */
110
+ public function update_last_updated_option( $option_name, $old_value, $value ) {
111
+ $triggers = [
112
+ 'active_plugins' => true,
113
+ 'tribe_events_calendar_options' => true,
114
+ 'permalink_structure' => true,
115
+ 'rewrite_rules' => true,
116
+ 'start_of_week' => true,
117
+ 'sidebars_widgets' => true,
118
+ 'stylesheet' => true,
119
+ 'template' => true,
120
+ ];
121
+
122
+ if ( ! empty( $triggers[ $option_name ] ) ) {
123
+ $this->cache->set_last_occurrence( self::TRIGGER_UPDATED_OPTION );
124
+ }
125
+ }
126
+
127
  /**
128
  * For any hook that doesn't need any additional filtering
129
  *
common/src/Tribe/Container.php CHANGED
@@ -224,6 +224,52 @@ if ( ! function_exists( 'tribe_get_var' ) ) {
224
  }
225
  }
226
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  if ( ! function_exists( 'tribe_register_provider' ) ) {
228
  /**
229
  * Registers a service provider in the container.
224
  }
225
  }
226
 
227
+ if ( ! function_exists( 'tribe_unset_var' ) ) {
228
+ /**
229
+ * Returns the value of a registered variable.
230
+ *
231
+ * Example use:
232
+ *
233
+ * tribe_set_var( 'tec.url', 'http://example.com' );
234
+ *
235
+ * tribe_unset_var( 'tec.url' );
236
+ *
237
+ * @since 4.11.0
238
+ *
239
+ * @param string $slug The slug of the variable registered using `tribe_unset_var`.
240
+ *
241
+ * @return void
242
+ */
243
+ function tribe_unset_var( $slug ) {
244
+ $container = Tribe__Container::init();
245
+ try {
246
+ $container->offsetUnset( $slug );
247
+ } catch ( Exception $e ) {}
248
+ }
249
+ }
250
+
251
+ if ( ! function_exists( 'tribe_isset_var' ) ) {
252
+ /**
253
+ * Returns the value of a registered variable.
254
+ *
255
+ * Example use:
256
+ *
257
+ * tribe_set_var( 'tec.url', 'http://example.com' );
258
+ *
259
+ * tribe_isset_var( 'tec.url' );
260
+ *
261
+ * @since 4.11.0
262
+ *
263
+ * @param string $slug The slug of the variable checked using `tribe_isset_var`.
264
+ *
265
+ * @return boolean Either a the given slug exists.
266
+ */
267
+ function tribe_isset_var( $slug ) {
268
+ $container = Tribe__Container::init();
269
+ return $container->offsetExists( $slug );
270
+ }
271
+ }
272
+
273
  if ( ! function_exists( 'tribe_register_provider' ) ) {
274
  /**
275
  * Registers a service provider in the container.
common/src/Tribe/Customizer.php CHANGED
@@ -104,17 +104,6 @@ final class Tribe__Customizer {
104
  return;
105
  }
106
 
107
- /**
108
- * Filters the Panel ID, which is also the `wp_option` name for the Customizer settings
109
- *
110
- * @deprecated
111
- * @since 4.0
112
- *
113
- * @param string $ID
114
- * @param self $customizer
115
- */
116
- $this->ID = apply_filters( 'tribe_events_pro_customizer_panel_id', 'tribe_customizer', $this );
117
-
118
  /**
119
  * Filters the Panel ID, which is also the `wp_option` name for the Customizer settings
120
  *
@@ -327,18 +316,6 @@ final class Tribe__Customizer {
327
  $option = $sections;
328
  }
329
 
330
- /**
331
- * Apply Filters After finding the variable
332
- *
333
- * @deprecated
334
- * @since 4.0
335
- *
336
- * @param mixed $option
337
- * @param array $search
338
- * @param array $sections
339
- */
340
- $option = apply_filters( 'tribe_events_pro_customizer_get_option', $option, $search, $sections );
341
-
342
  /**
343
  * Apply Filters After finding the variable
344
  *
@@ -393,18 +370,6 @@ final class Tribe__Customizer {
393
  return false;
394
  }
395
 
396
- /**
397
- * Use this filter to add more CSS, using Underscore Template style
398
- *
399
- * @deprecated
400
- * @since 4.0
401
- *
402
- * @link http://underscorejs.org/#template
403
- *
404
- * @param string $template
405
- */
406
- $css_template = trim( apply_filters( 'tribe_events_pro_customizer_css_template', '' ) );
407
-
408
  /**
409
  * Use this filter to add more CSS, using Underscore Template style
410
  *
@@ -414,7 +379,7 @@ final class Tribe__Customizer {
414
  *
415
  * @param string $template
416
  */
417
- $css_template = trim( apply_filters( 'tribe_customizer_css_template', $css_template ) );
418
 
419
  // If we don't have anything on the customizer don't print empty styles
420
  // On Customize Page, we don't care we need this
@@ -531,17 +496,6 @@ final class Tribe__Customizer {
531
  // Set the Cutomizer on a class variable
532
  $this->manager = $customizer;
533
 
534
- /**
535
- * Allow users to filter the Panel
536
- *
537
- * @deprecated
538
- * @since 4.0
539
- *
540
- * @param WP_Customize_Panel $panel
541
- * @param Tribe__Customizer $customizer
542
- */
543
- $this->panel = apply_filters( 'tribe_events_pro_customizer_panel', $this->register_panel(), $this );
544
-
545
  /**
546
  * Allow users to filter the Panel
547
  *
@@ -550,18 +504,7 @@ final class Tribe__Customizer {
550
  * @param WP_Customize_Panel $panel
551
  * @param Tribe__Customizer $customizer
552
  */
553
- $this->panel = apply_filters( 'tribe_customizer_panel', $this->panel, $this );
554
-
555
- /**
556
- * Filter the Sections within our Panel before they are added to the Cutomize Manager
557
- *
558
- * @deprecated
559
- * @since 4.0
560
- *
561
- * @param array $sections
562
- * @param Tribe__Customizer $customizer
563
- */
564
- $this->sections = apply_filters( 'tribe_events_pro_customizer_pre_sections', $this->sections, $this );
565
 
566
  /**
567
  * Filter the Sections within our Panel before they are added to the Cutomize Manager
@@ -576,17 +519,6 @@ final class Tribe__Customizer {
576
  foreach ( $this->sections as $id => $section ) {
577
  $this->sections[ $id ] = $this->register_section( $id, $section );
578
 
579
- /**
580
- * Allows people to Register and de-register the method to register more Fields
581
- *
582
- * @deprecated
583
- * @since 4.0
584
- *
585
- * @param array $section
586
- * @param WP_Customize_Manager $manager
587
- */
588
- do_action( "tribe_events_pro_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager );
589
-
590
  /**
591
  * Allows people to Register and de-register the method to register more Fields
592
  *
@@ -598,17 +530,6 @@ final class Tribe__Customizer {
598
  do_action( "tribe_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager );
599
  }
600
 
601
- /**
602
- * Filter the Sections within our Panel, now using the actual WP_Customize_Section
603
- *
604
- * @deprecated
605
- * @since 4.0
606
- *
607
- * @param array $sections
608
- * @param Tribe__Customizer $customizer
609
- */
610
- $this->sections = apply_filters( 'tribe_events_pro_customizer_sections', $this->sections, $this );
611
-
612
  /**
613
  * Filter the Sections within our Panel, now using the actual WP_Customize_Section
614
  *
@@ -646,18 +567,6 @@ final class Tribe__Customizer {
646
  'priority' => 125,
647
  );
648
 
649
- /**
650
- * Filter the Panel Arguments for WP Customize
651
- *
652
- * @deprecated
653
- * @since 4.0
654
- *
655
- * @param array $args
656
- * @param string $ID
657
- * @param Tribe__Customizer $customizer
658
- */
659
- $panel_args = apply_filters( 'tribe_events_pro_customizer_panel_args', $panel_args, $this->ID, $this );
660
-
661
  /**
662
  * Filter the Panel Arguments for WP Customize
663
  *
@@ -689,17 +598,6 @@ final class Tribe__Customizer {
689
  * @return WP_Customize_Section
690
  */
691
  public function register_section( $id, $args ) {
692
- /**
693
- * Filter the Section ID
694
- *
695
- * @deprecated
696
- * @since 4.0
697
- *
698
- * @param string $section_id
699
- * @param Tribe__Customizer $customizer
700
- */
701
- $section_id = apply_filters( 'tribe_events_pro_customizer_section_id', $id, $this );
702
-
703
  /**
704
  * Filter the Section ID
705
  *
@@ -708,7 +606,7 @@ final class Tribe__Customizer {
708
  * @param string $section_id
709
  * @param Tribe__Customizer $customizer
710
  */
711
- $section_id = apply_filters( 'tribe_customizer_section_id', $section_id, $this );
712
 
713
  // Tries to fetch the section
714
  $section = $this->manager->get_section( $section_id );
@@ -718,18 +616,6 @@ final class Tribe__Customizer {
718
  return $section;
719
  }
720
 
721
- /**
722
- * Filter the Section arguments, so that developers can filter arguments based on $section_id
723
- *
724
- * @deprecated
725
- * @since 4.0
726
- *
727
- * @param array $args
728
- * @param string $section_id
729
- * @param Tribe__Customizer $customizer
730
- */
731
- $section_args = apply_filters( 'tribe_events_pro_customizer_section_args', $args, $section_id, $this );
732
-
733
  /**
734
  * Filter the Section arguments, so that developers can filter arguments based on $section_id
735
  *
104
  return;
105
  }
106
 
 
 
 
 
 
 
 
 
 
 
 
107
  /**
108
  * Filters the Panel ID, which is also the `wp_option` name for the Customizer settings
109
  *
316
  $option = $sections;
317
  }
318
 
 
 
 
 
 
 
 
 
 
 
 
 
319
  /**
320
  * Apply Filters After finding the variable
321
  *
370
  return false;
371
  }
372
 
 
 
 
 
 
 
 
 
 
 
 
 
373
  /**
374
  * Use this filter to add more CSS, using Underscore Template style
375
  *
379
  *
380
  * @param string $template
381
  */
382
+ $css_template = trim( apply_filters( 'tribe_customizer_css_template', '' ) );
383
 
384
  // If we don't have anything on the customizer don't print empty styles
385
  // On Customize Page, we don't care we need this
496
  // Set the Cutomizer on a class variable
497
  $this->manager = $customizer;
498
 
 
 
 
 
 
 
 
 
 
 
 
499
  /**
500
  * Allow users to filter the Panel
501
  *
504
  * @param WP_Customize_Panel $panel
505
  * @param Tribe__Customizer $customizer
506
  */
507
+ $this->panel = apply_filters( 'tribe_customizer_panel', $this->register_panel(), $this );
 
 
 
 
 
 
 
 
 
 
 
508
 
509
  /**
510
  * Filter the Sections within our Panel before they are added to the Cutomize Manager
519
  foreach ( $this->sections as $id => $section ) {
520
  $this->sections[ $id ] = $this->register_section( $id, $section );
521
 
 
 
 
 
 
 
 
 
 
 
 
522
  /**
523
  * Allows people to Register and de-register the method to register more Fields
524
  *
530
  do_action( "tribe_customizer_register_{$id}_settings", $this->sections[ $id ], $this->manager );
531
  }
532
 
 
 
 
 
 
 
 
 
 
 
 
533
  /**
534
  * Filter the Sections within our Panel, now using the actual WP_Customize_Section
535
  *
567
  'priority' => 125,
568
  );
569
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  /**
571
  * Filter the Panel Arguments for WP Customize
572
  *
598
  * @return WP_Customize_Section
599
  */
600
  public function register_section( $id, $args ) {
 
 
 
 
 
 
 
 
 
 
 
601
  /**
602
  * Filter the Section ID
603
  *
606
  * @param string $section_id
607
  * @param Tribe__Customizer $customizer
608
  */
609
+ $section_id = apply_filters( 'tribe_customizer_section_id', $id, $this );
610
 
611
  // Tries to fetch the section
612
  $section = $this->manager->get_section( $section_id );
616
  return $section;
617
  }
618
 
 
 
 
 
 
 
 
 
 
 
 
 
619
  /**
620
  * Filter the Section arguments, so that developers can filter arguments based on $section_id
621
  *
common/src/Tribe/Data.php CHANGED
@@ -65,7 +65,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
65
  * </p>
66
  * <p>
67
  * The return value will be casted to boolean if non-boolean was returned.
68
- * @since 5.0.0
69
  */
70
  public function offsetExists( $offset ) {
71
  return isset( $this->data[ $offset ] );
@@ -79,7 +79,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
79
  * The offset to retrieve.
80
  * </p>
81
  * @return mixed Can return all value types.
82
- * @since 5.0.0
83
  */
84
  public function offsetGet( $offset ) {
85
  return isset( $this->data[ $offset ] )
@@ -98,7 +98,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
98
  * The value to set.
99
  * </p>
100
  * @return void
101
- * @since 5.0.0
102
  */
103
  public function offsetSet( $offset, $value ) {
104
  $this->data[ $offset ] = $value;
@@ -112,7 +112,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
112
  * The offset to unset.
113
  * </p>
114
  * @return void
115
- * @since 5.0.0
116
  */
117
  public function offsetUnset( $offset ) {
118
  unset( $this->data[ $offset ] );
@@ -159,7 +159,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
159
  *
160
  * @link http://php.net/manual/en/iterator.current.php
161
  * @return mixed Can return any type.
162
- * @since 5.0.0
163
  */
164
  public function current() {
165
  $keys = array_keys( $this->data );
@@ -172,7 +172,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
172
  *
173
  * @link http://php.net/manual/en/iterator.next.php
174
  * @return void Any returned value is ignored.
175
- * @since 5.0.0
176
  */
177
  public function next() {
178
  $keys = array_keys( $this->data );
@@ -189,7 +189,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
189
  *
190
  * @link http://php.net/manual/en/iterator.key.php
191
  * @return mixed scalar on success, or null on failure.
192
- * @since 5.0.0
193
  */
194
  public function key() {
195
  $keys = array_keys( $this->data );
@@ -203,7 +203,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
203
  * @link http://php.net/manual/en/iterator.valid.php
204
  * @return boolean The return value will be casted to boolean and then evaluated.
205
  * Returns true on success or false on failure.
206
- * @since 5.0.0
207
  */
208
  public function valid() {
209
  $keys = array_keys( $this->data );
@@ -216,7 +216,7 @@ class Tribe__Data implements ArrayAccess, Iterator {
216
  *
217
  * @link http://php.net/manual/en/iterator.rewind.php
218
  * @return void Any returned value is ignored.
219
- * @since 5.0.0
220
  */
221
  public function rewind() {
222
  $this->index = 0;
65
  * </p>
66
  * <p>
67
  * The return value will be casted to boolean if non-boolean was returned.
68
+ * @since 4.11.0
69
  */
70
  public function offsetExists( $offset ) {
71
  return isset( $this->data[ $offset ] );
79
  * The offset to retrieve.
80
  * </p>
81
  * @return mixed Can return all value types.
82
+ * @since 4.11.0
83
  */
84
  public function offsetGet( $offset ) {
85
  return isset( $this->data[ $offset ] )
98
  * The value to set.
99
  * </p>
100
  * @return void
101
+ * @since 4.11.0
102
  */
103
  public function offsetSet( $offset, $value ) {
104
  $this->data[ $offset ] = $value;
112
  * The offset to unset.
113
  * </p>
114
  * @return void
115
+ * @since 4.11.0
116
  */
117
  public function offsetUnset( $offset ) {
118
  unset( $this->data[ $offset ] );
159
  *
160
  * @link http://php.net/manual/en/iterator.current.php
161
  * @return mixed Can return any type.
162
+ * @since 4.11.0
163
  */
164
  public function current() {
165
  $keys = array_keys( $this->data );
172
  *
173
  * @link http://php.net/manual/en/iterator.next.php
174
  * @return void Any returned value is ignored.
175
+ * @since 4.11.0
176
  */
177
  public function next() {
178
  $keys = array_keys( $this->data );
189
  *
190
  * @link http://php.net/manual/en/iterator.key.php
191
  * @return mixed scalar on success, or null on failure.
192
+ * @since 4.11.0
193
  */
194
  public function key() {
195
  $keys = array_keys( $this->data );
203
  * @link http://php.net/manual/en/iterator.valid.php
204
  * @return boolean The return value will be casted to boolean and then evaluated.
205
  * Returns true on success or false on failure.
206
+ * @since 4.11.0
207
  */
208
  public function valid() {
209
  $keys = array_keys( $this->data );
216
  *
217
  * @link http://php.net/manual/en/iterator.rewind.php
218
  * @return void Any returned value is ignored.
219
+ * @since 4.11.0
220
  */
221
  public function rewind() {
222
  $this->index = 0;
common/src/Tribe/Date_Utils.php CHANGED
@@ -3,6 +3,9 @@
3
  * Date utility functions used throughout TEC + Addons
4
  */
5
 
 
 
 
6
  // Don't load directly
7
 
8
  if ( ! defined( 'ABSPATH' ) ) {
@@ -46,7 +49,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
46
  $datepicker = self::datepicker_formats( $datepicker );
47
  }
48
 
49
- $default_datepicker = self::datepicker_formats( 0 );
50
 
51
  // If the current datepicker is the default we don't care
52
  if ( $datepicker === $default_datepicker ) {
@@ -96,7 +99,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
96
  return $formats;
97
  }
98
 
99
- return isset( $formats[ $translate ] ) ? $formats[ $translate ] : $formats[0];
100
  }
101
 
102
  /**
@@ -1219,13 +1222,13 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1219
  return clone $datetime;
1220
  }
1221
 
1222
- if ( class_exists('DateTimeImmutable') && $datetime instanceof DateTimeImmutable ) {
1223
  // Return the mutable version of the date.
1224
- return new DateTime( $datetime->format( 'Y-m-d H:i:s' ), $datetime->getTimezone() );
1225
  }
1226
 
1227
  $timezone_object = null;
1228
- $datetime = empty($datetime) ? 'now' : $datetime;
1229
 
1230
  try {
1231
  // PHP 5.2 will not throw an exception but will generate an error.
@@ -1233,23 +1236,24 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1233
  $timezone_object = Tribe__Timezones::build_timezone_object( $timezone );
1234
 
1235
  if ( self::is_timestamp( $datetime ) ) {
1236
- // Timestamps timezone is always UTC.
1237
- $date = new DateTime( '@' . $datetime, $utc );
1238
 
1239
- // If we have a timezone, then set it.
1240
- return $timezone ? $date->setTimezone( $timezone_object ) : $date;
1241
  }
1242
 
1243
  set_error_handler( 'tribe_catch_and_throw' );
1244
- $date = new DateTime( $datetime, $timezone_object );
1245
  restore_error_handler();
1246
  } catch ( Exception $e ) {
 
 
 
1247
  if ( $timezone_object === null ) {
1248
  $timezone_object = Tribe__Timezones::build_timezone_object( $timezone );
1249
  }
1250
 
1251
  return $with_fallback
1252
- ? new DateTime( 'now', $timezone_object )
1253
  : false;
1254
  }
1255
 
@@ -1267,7 +1271,19 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1267
  * like `strtotime`, or not.
1268
  */
1269
  public static function is_valid_date( $date ) {
1270
- return self::build_date_object( $date, null, false ) instanceof DateTime;
 
 
 
 
 
 
 
 
 
 
 
 
1271
  }
1272
 
1273
  /**
@@ -1285,15 +1301,28 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1285
  * `23:59:59`.
1286
  */
1287
  public static function get_week_start_end( $date, $start_of_week = null ) {
1288
- $week_start = static::build_date_object( $date );
1289
- $week_start->setTime( 0, 0, 0 );
 
 
 
 
 
 
 
1290
  // `0` (for Sunday) through `6` (for Saturday), the way WP handles the `start_of_week` option.
1291
  $week_start_day = null !== $start_of_week
1292
  ? (int) $start_of_week
1293
  : (int) get_option( 'start_of_week', 0 );
1294
 
 
 
 
 
 
 
1295
  $cache_key = md5(
1296
- __METHOD__ . serialize( [ $week_start->format( static::DBDATEFORMAT ), $week_start_day ] )
1297
  );
1298
  $cache = tribe( 'cache' );
1299
 
@@ -1302,10 +1331,20 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1302
  }
1303
 
1304
  // `0` (for Sunday) through `6` (for Saturday), the way WP handles the `start_of_week` option.
1305
- $date_day = (int) $week_start->format( 'w' );
 
 
 
 
 
 
 
 
 
 
 
1306
 
1307
- // If the current date is before the start of the week, move back a week.
1308
- $week_offset = $date_day < $week_start_day ? - 1 : 0;
1309
 
1310
  /*
1311
  * From the PHP docs, the `W` format stands for:
@@ -1325,7 +1364,10 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1325
  $week_start = static::immutable( $week_start );
1326
  $week_end = static::immutable( $week_end );
1327
 
1328
- $cache[ $cache_key ] = [ $week_start, $week_end ];
 
 
 
1329
 
1330
  return [ $week_start, $week_end ];
1331
  }
@@ -1375,7 +1417,7 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1375
  }
1376
 
1377
  if ( $datetime instanceof DateTime ) {
1378
- return DateTimeImmutable::createFromMutable( $datetime );
1379
  }
1380
 
1381
  $mutable = static::build_date_object( $datetime, $timezone, $with_fallback );
@@ -1384,14 +1426,14 @@ if ( ! class_exists( 'Tribe__Date_Utils' ) ) {
1384
  return false;
1385
  }
1386
 
1387
- $cache_key = md5( ( __METHOD__ . $mutable->getTimestamp() ) );
1388
  $cache = tribe( 'cache' );
1389
 
1390
  if ( false !== $cached = $cache[ $cache_key ] ) {
1391
  return $cached;
1392
  }
1393
 
1394
- $immutable = DateTimeImmutable::createFromMutable( $mutable );
1395
 
1396
  $cache[ $cache_key ] = $immutable;
1397
 
3
  * Date utility functions used throughout TEC + Addons
4
  */
5
 
6
+ use Tribe\Utils\Date_I18n;
7
+ use Tribe\Utils\Date_I18n_Immutable;
8
+
9
  // Don't load directly
10
 
11
  if ( ! defined( 'ABSPATH' ) ) {
49
  $datepicker = self::datepicker_formats( $datepicker );
50
  }
51
 
52
+ $default_datepicker = self::datepicker_formats( 1 );
53
 
54
  // If the current datepicker is the default we don't care
55
  if ( $datepicker === $default_datepicker ) {
99
  return $formats;
100
  }
101
 
102
+ return isset( $formats[ $translate ] ) ? $formats[ $translate ] : $formats[1];
103
  }
104
 
105
  /**
1222
  return clone $datetime;
1223
  }
1224
 
1225
+ if ( class_exists( 'DateTimeImmutable' ) && $datetime instanceof DateTimeImmutable ) {
1226
  // Return the mutable version of the date.
1227
+ return Date_I18n::createFromImmutable( $datetime );
1228
  }
1229
 
1230
  $timezone_object = null;
1231
+ $datetime = empty( $datetime ) ? 'now' : $datetime;
1232
 
1233
  try {
1234
  // PHP 5.2 will not throw an exception but will generate an error.
1236
  $timezone_object = Tribe__Timezones::build_timezone_object( $timezone );
1237
 
1238
  if ( self::is_timestamp( $datetime ) ) {
1239
+ $timestamp_timezone = $timezone ? $timezone_object : $utc;
 
1240
 
1241
+ return new Date_I18n( '@' . $datetime, $timestamp_timezone );
 
1242
  }
1243
 
1244
  set_error_handler( 'tribe_catch_and_throw' );
1245
+ $date = new Date_I18n( $datetime, $timezone_object );
1246
  restore_error_handler();
1247
  } catch ( Exception $e ) {
1248
+ // If we encounter an error, we need to restore after catching.
1249
+ restore_error_handler();
1250
+
1251
  if ( $timezone_object === null ) {
1252
  $timezone_object = Tribe__Timezones::build_timezone_object( $timezone );
1253
  }
1254
 
1255
  return $with_fallback
1256
+ ? new Date_I18n( 'now', $timezone_object )
1257
  : false;
1258
  }
1259
 
1271
  * like `strtotime`, or not.
1272
  */
1273
  public static function is_valid_date( $date ) {
1274
+ static $cache_var_name = __FUNCTION__;
1275
+
1276
+ $cache_date_check = tribe_get_var( $cache_var_name, [] );
1277
+
1278
+ if ( isset( $cache_date_check[ $date ] ) ) {
1279
+ return $cache_date_check[ $date ];
1280
+ }
1281
+
1282
+ $cache_date_check[ $date ] = self::build_date_object( $date, null, false ) instanceof DateTimeInterface;
1283
+
1284
+ tribe_set_var( $cache_var_name, $cache_date_check );
1285
+
1286
+ return $cache_date_check[ $date ];
1287
  }
1288
 
1289
  /**
1301
  * `23:59:59`.
1302
  */
1303
  public static function get_week_start_end( $date, $start_of_week = null ) {
1304
+ static $cache_var_name = __FUNCTION__;
1305
+
1306
+ $cache_week_start_end = tribe_get_var( $cache_var_name, [] );
1307
+
1308
+ $date_obj = static::build_date_object( $date );
1309
+ $date_obj->setTime( 0, 0, 0 );
1310
+
1311
+ $date_string = $date_obj->format( static::DBDATEFORMAT );
1312
+
1313
  // `0` (for Sunday) through `6` (for Saturday), the way WP handles the `start_of_week` option.
1314
  $week_start_day = null !== $start_of_week
1315
  ? (int) $start_of_week
1316
  : (int) get_option( 'start_of_week', 0 );
1317
 
1318
+ $memory_cache_key = "{$date_string}:{$week_start_day}";
1319
+
1320
+ if ( isset( $cache_week_start_end[ $memory_cache_key ] ) ) {
1321
+ return $cache_week_start_end[ $memory_cache_key ];
1322
+ }
1323
+
1324
  $cache_key = md5(
1325
+ __METHOD__ . serialize( [ $date_obj->format( static::DBDATEFORMAT ), $week_start_day ] )
1326
  );
1327
  $cache = tribe( 'cache' );
1328
 
1331
  }
1332
 
1333
  // `0` (for Sunday) through `6` (for Saturday), the way WP handles the `start_of_week` option.
1334
+ $date_day = (int) $date_obj->format( 'w' );
1335
+
1336
+ $week_offset = 0;
1337
+ if ( 0 === $date_day && 0 !== $week_start_day ) {
1338
+ $week_offset = 0;
1339
+ } elseif ( $date_day < $week_start_day ) {
1340
+ // If the current date of the week is before the start of the week, move back a week.
1341
+ $week_offset = -1;
1342
+ } elseif ( 0 === $date_day ) {
1343
+ // When start of the week is on a sunday we add a week.
1344
+ $week_offset = 1;
1345
+ }
1346
 
1347
+ $week_start = clone $date_obj;
 
1348
 
1349
  /*
1350
  * From the PHP docs, the `W` format stands for:
1364
  $week_start = static::immutable( $week_start );
1365
  $week_end = static::immutable( $week_end );
1366
 
1367
+ $cache[ $cache_key ] = [ $week_start, $week_end ];
1368
+ $cache_week_start_end[ $memory_cache_key ] = [ $week_start, $week_end ];
1369
+
1370
+ tribe_set_var( $cache_var_name, $cache_week_start_end );
1371
 
1372
  return [ $week_start, $week_end ];
1373
  }
1417
  }
1418
 
1419
  if ( $datetime instanceof DateTime ) {
1420
+ return Date_I18n_Immutable::createFromMutable( $datetime );
1421
  }
1422
 
1423
  $mutable = static::build_date_object( $datetime, $timezone, $with_fallback );
1426
  return false;
1427
  }
1428
 
1429
+ $cache_key = md5( ( __METHOD__ . $mutable->getTimezone()->getName() . $mutable->getTimestamp() ) );
1430
  $cache = tribe( 'cache' );
1431
 
1432
  if ( false !== $cached = $cache[ $cache_key ] ) {
1433
  return $cached;
1434
  }
1435
 
1436
+ $immutable = Date_I18n_Immutable::createFromMutable( $mutable );
1437
 
1438
  $cache[ $cache_key ] = $immutable;
1439
 
common/src/Tribe/Main.php CHANGED
@@ -17,7 +17,7 @@ class Tribe__Main {
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
- const VERSION = '4.10.3';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
@@ -559,7 +559,7 @@ class Tribe__Main {
559
  tribe_singleton( 'admin.helpers', 'Tribe__Admin__Helpers' );
560
  tribe_singleton( 'tracker', 'Tribe__Tracker', array( 'hook' ) );
561
  tribe_singleton( 'chunker', 'Tribe__Meta__Chunker', array( 'set_post_types', 'hook' ) );
562
- tribe_singleton( 'cache', 'Tribe__Cache' );
563
  tribe_singleton( 'languages.locations', 'Tribe__Languages__Locations' );
564
  tribe_singleton( 'plugins.api', new Tribe__Plugins_API );
565
  tribe_singleton( 'logger', 'Tribe__Log' );
17
  const OPTIONNAME = 'tribe_events_calendar_options';
18
  const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
19
 
20
+ const VERSION = '4.11.0';
21
 
22
  const FEED_URL = 'https://theeventscalendar.com/feed/';
23
 
559
  tribe_singleton( 'admin.helpers', 'Tribe__Admin__Helpers' );
560
  tribe_singleton( 'tracker', 'Tribe__Tracker', array( 'hook' ) );
561
  tribe_singleton( 'chunker', 'Tribe__Meta__Chunker', array( 'set_post_types', 'hook' ) );
562
+ tribe_singleton( 'cache', 'Tribe__Cache', [ 'hook' ] );
563
  tribe_singleton( 'languages.locations', 'Tribe__Languages__Locations' );
564
  tribe_singleton( 'plugins.api', new Tribe__Plugins_API );
565
  tribe_singleton( 'logger', 'Tribe__Log' );
common/src/Tribe/Post_Transient.php CHANGED
@@ -29,6 +29,7 @@ class Tribe__Post_Transient {
29
  * @param int $post_id The Post ID, can also be a WP_Post
30
  * @param string $transient Post Meta to Fetch
31
  *
 
32
  */
33
  public function get( $post_id, $transient ) {
34
  global $_wp_using_ext_object_cache;
@@ -97,10 +98,11 @@ class Tribe__Post_Transient {
97
  *
98
  * @since 4.1
99
  *
100
- * @param int $post_id The Post ID, can also be a WP_Post
101
- * @param string $transient Post Meta to Delete
102
- * @param string $value Only delete if the value Matches
103
  *
 
104
  */
105
  public function delete( $post_id, $transient, $value = null ) {
106
  global $_wp_using_ext_object_cache;
@@ -149,15 +151,16 @@ class Tribe__Post_Transient {
149
  }
150
 
151
  /**
152
- * Sets a new value for the Transient
153
  *
154
  * @since 4.1
155
  *
156
- * @param int $post_id The Post ID, can also be a WP_Post
157
- * @param string $transient Post Meta to set
158
- * @param string $value Only delete if the value Matches
159
- * @param int $expiration How long this transient will be valid, in seconds
160
  *
 
161
  */
162
  public function set( $post_id, $transient, $value, $expiration = 0 ) {
163
  global $_wp_using_ext_object_cache;
@@ -208,6 +211,4 @@ class Tribe__Post_Transient {
208
 
209
  return $result;
210
  }
211
-
212
-
213
  }
29
  * @param int $post_id The Post ID, can also be a WP_Post
30
  * @param string $transient Post Meta to Fetch
31
  *
32
+ * @return mixed Value stored on the Post Transient.
33
  */
34
  public function get( $post_id, $transient ) {
35
  global $_wp_using_ext_object_cache;
98
  *
99
  * @since 4.1
100
  *
101
+ * @param int $post_id The Post ID, can also be a WP_Post.
102
+ * @param string $transient Post Meta to Delete.
103
+ * @param string $value Only delete if the value Matches.
104
  *
105
+ * @return boolean If we were able to delete the transient.
106
  */
107
  public function delete( $post_id, $transient, $value = null ) {
108
  global $_wp_using_ext_object_cache;
151
  }
152
 
153
  /**
154
+ * Sets a new value for the Transient.
155
  *
156
  * @since 4.1
157
  *
158
+ * @param int $post_id The Post ID, can also be a WP_Post.
159
+ * @param string $transient Post Meta to set.
160
+ * @param string $value Only delete if the value Matches.
161
+ * @param int $expiration How long this transient will be valid, in seconds.
162
  *
163
+ * @return int|false Meta ID on success, false on failure.
164
  */
165
  public function set( $post_id, $transient, $value, $expiration = 0 ) {
166
  global $_wp_using_ext_object_cache;
211
 
212
  return $result;
213
  }
 
 
214
  }
common/src/Tribe/Repository.php CHANGED
@@ -5,6 +5,8 @@ use Tribe__Utils__Array as Arr;
5
  abstract class Tribe__Repository
6
  implements Tribe__Repository__Interface {
7
 
 
 
8
  /**
9
  * @var array An array of keys that cannot be updated on this repository.
10
  */
@@ -3167,20 +3169,38 @@ abstract class Tribe__Repository
3167
  */
3168
  $query_args = apply_filters( "tribe_repository_{$this->filter_name}_query_args", $query_args, $query, $this );
3169
 
3170
- if ( isset( $query_args['offset'] ) ) {
3171
- $offset = absint( $query_args['offset'] );
 
 
 
 
 
 
 
 
 
 
 
3172
  $per_page = (int) Tribe__Utils__Array::get( $query_args, 'posts_per_page', get_option( 'posts_per_page' ) );
3173
- $page = (int) Tribe__Utils__Array::get( $query_args, 'paged', 1 );
3174
 
3175
- $real_offset = $per_page === - 1 ? $offset : ( $per_page * ( $page - 1 ) ) + $offset;
3176
- $query_args['offset'] = $real_offset;
3177
- $query_args['posts_per_page'] = $per_page === - 1 ? 99999999999 : $per_page;
 
 
3178
 
3179
- /**
3180
- * Unset the `offset` query argument to avoid applying it multiple times when this method
3181
- * is used, on the same repository, more than once.
3182
- */
3183
- unset( $this->query_args['offset'] );
 
 
 
 
 
 
3184
  }
3185
 
3186
  foreach ( $query_args as $key => $value ) {
5
  abstract class Tribe__Repository
6
  implements Tribe__Repository__Interface {
7
 
8
+ const MAX_NUMBER_OF_POSTS_PER_PAGE = 99999999999;
9
+
10
  /**
11
  * @var array An array of keys that cannot be updated on this repository.
12
  */
3169
  */
3170
  $query_args = apply_filters( "tribe_repository_{$this->filter_name}_query_args", $query_args, $query, $this );
3171
 
3172
+ /**
3173
+ * Provides a last-ditch effort to override the filtered offset.
3174
+ *
3175
+ * This should only be used if doing creating pagination for performance purposes.
3176
+ *
3177
+ * @since 4.11.0
3178
+ *
3179
+ * @param null|int $filtered_offset Offset parameter setting.
3180
+ * @param array $query_args List of query arguments.
3181
+ */
3182
+ $filtered_offset = apply_filters( 'tribe_repository_query_arg_offset_override', null, $query_args );
3183
+
3184
+ if ( $filtered_offset || isset( $query_args['offset'] ) ) {
3185
  $per_page = (int) Tribe__Utils__Array::get( $query_args, 'posts_per_page', get_option( 'posts_per_page' ) );
 
3186
 
3187
+ if ( $filtered_offset ) {
3188
+ $query_args['offset'] = $filtered_offset;
3189
+ } elseif ( isset( $query_args['offset'] ) ) {
3190
+ $offset = absint( $query_args['offset'] );
3191
+ $page = (int) Tribe__Utils__Array::get( $query_args, 'paged', 1 );
3192
 
3193
+ $real_offset = $per_page === -1 ? $offset : ( $per_page * ( $page - 1 ) ) + $offset;
3194
+ $query_args['offset'] = $real_offset;
3195
+
3196
+ /**
3197
+ * Unset the `offset` query argument to avoid applying it multiple times when this method
3198
+ * is used, on the same repository, more than once.
3199
+ */
3200
+ unset( $this->query_args['offset'] );
3201
+ }
3202
+
3203
+ $query_args['posts_per_page'] = $per_page === -1 ? self::MAX_NUMBER_OF_POSTS_PER_PAGE : $per_page;
3204
  }
3205
 
3206
  foreach ( $query_args as $key => $value ) {
common/src/Tribe/Rewrite.php CHANGED
@@ -407,8 +407,8 @@ class Tribe__Rewrite {
407
  $query = (string) parse_url( $url, PHP_URL_QUERY );
408
  wp_parse_str( $query, $query_vars );
409
 
410
- // Remove the `paged` query var if it's 1.
411
  if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
 
412
  unset( $query_vars['paged'] );
413
  }
414
 
@@ -416,10 +416,16 @@ class Tribe__Rewrite {
416
 
417
  $our_rules = $this->get_handled_rewrite_rules();
418
  $handled_query_vars = $this->get_rules_query_vars( $our_rules );
 
419
 
420
  if (
 
421
  empty( $our_rules )
422
- || ! in_array( Arr::get( $query_vars, 'post_type', 'post' ), $this->get_post_types(), true )
 
 
 
 
423
  ) {
424
  $wp_canonical = redirect_canonical( $canonical_url, false );
425
  if ( empty( $wp_canonical ) ) {
@@ -550,20 +556,29 @@ class Tribe__Rewrite {
550
  * @return array An array of rewrite rules handled by the implementation in the shape `[ <regex> => <path> ]`.
551
  */
552
  protected function get_handled_rewrite_rules() {
 
 
 
 
553
  // We need to make sure we are have WP_Rewrite setup
554
  if ( ! $this->rewrite ) {
555
  $this->setup();
556
  }
557
 
558
- // While this is specific to The Events Calendar we're handling a small enough post type base to keep it here.
559
- $pattern = '/post_type=tribe_(events|venue|organizer)/';
560
- // Reverse the rules to try and match the most complex first.
561
- $rules = isset( $this->rewrite->rules ) ? (array) $this->rewrite->rules : [];
562
- $our_rules = array_filter( $rules,
563
- static function ( $rule_query_string ) use ( $pattern ) {
564
- return preg_match( $pattern, $rule_query_string );
565
- }
566
- );
 
 
 
 
 
567
 
568
  /**
569
  * Filters the list of rewrite rules handled by our code to add or remove some as required.
@@ -573,8 +588,11 @@ class Tribe__Rewrite {
573
  * @param array $our_rules An array of rewrite rules handled by our code, in the shape
574
  * `[ <rewrite_rule_regex_pattern> => <query_string> ]`.
575
  * E.g. `[ '(?:events)/(?:list)/?$' => 'index.php?post_type=tribe_events&eventDisplay=list' ]`.
 
 
 
576
  */
577
- $our_rules = apply_filters( 'tribe_rewrite_handled_rewrite_rules', $our_rules );
578
 
579
  return $our_rules;
580
  }
@@ -587,11 +605,18 @@ class Tribe__Rewrite {
587
  * @return array A map of localized regex matchers in the shape `[ <localized_regex> => <query_var> ]`.
588
  */
589
  protected function get_localized_matchers() {
 
 
590
  $bases = (array) $this->get_bases();
591
  $query_var_map = $this->get_matcher_to_query_var_map();
592
 
593
- $localized_matchers = [];
 
594
  foreach ( $bases as $base => $localized_matcher ) {
 
 
 
 
595
  if ( isset( $query_var_map[ $base ] ) ) {
596
  $localized_matchers[ $localized_matcher ] = [
597
  'query_var' => $query_var_map[ $base ],
@@ -616,11 +641,13 @@ class Tribe__Rewrite {
616
  }
617
  }
618
 
 
 
619
  return $localized_matchers;
620
  }
621
 
622
  /**
623
- * Returns a map relating localize matcher slugs to the corresponding query var.
624
  *
625
  * @since 4.9.11
626
  *
@@ -642,13 +669,33 @@ class Tribe__Rewrite {
642
  * @return array A list of all the query vars handled in the rules.
643
  */
644
  protected function get_rules_query_vars( array $rules ) {
645
- return array_unique( array_filter( array_merge( [], ...
646
- array_values( array_map( static function ( $rule_string ) {
647
- wp_parse_str( parse_url( $rule_string, PHP_URL_QUERY ), $vars );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
648
 
649
- return array_keys( $vars );
650
- }, $rules ) ) ) )
651
- );
 
652
  }
653
 
654
  /**
@@ -713,6 +760,8 @@ class Tribe__Rewrite {
713
  * Returns a list of post types supported by the implementation.
714
  *
715
  * @since 4.9.11
 
 
716
  */
717
  protected function get_post_types() {
718
  throw new BadMethodCallException( 'Method get_post_types should be implemented by extending classes.' );
@@ -975,7 +1024,7 @@ class Tribe__Rewrite {
975
  return home_url();
976
  }
977
 
978
- $clean = $this->get_canonical_url( add_query_arg( $parsed_vars, home_url() ), $force );
979
 
980
  $this->clean_url_cache[ $url ] = $clean;
981
 
407
  $query = (string) parse_url( $url, PHP_URL_QUERY );
408
  wp_parse_str( $query, $query_vars );
409
 
 
410
  if ( isset( $query_vars['paged'] ) && 1 === (int) $query_vars['paged'] ) {
411
+ // Remove the `paged` query var if it's 1.
412
  unset( $query_vars['paged'] );
413
  }
414
 
416
 
417
  $our_rules = $this->get_handled_rewrite_rules();
418
  $handled_query_vars = $this->get_rules_query_vars( $our_rules );
419
+ $handled_post_types = $this->get_post_types();
420
 
421
  if (
422
+ // The rules we handle should not be empty.
423
  empty( $our_rules )
424
+ || ! (
425
+ // Supported post types should be either keys or values, of the `post_type` argument, in the query vars.
426
+ count( array_intersect_key( array_flip( $handled_post_types ), $query_vars ) )
427
+ || in_array( Arr::get( $query_vars, 'post_type', 'post' ), $handled_post_types, true )
428
+ )
429
  ) {
430
  $wp_canonical = redirect_canonical( $canonical_url, false );
431
  if ( empty( $wp_canonical ) ) {
556
  * @return array An array of rewrite rules handled by the implementation in the shape `[ <regex> => <path> ]`.
557
  */
558
  protected function get_handled_rewrite_rules() {
559
+ static $cache_var_name = __METHOD__;
560
+
561
+ $our_rules = tribe_get_var( $cache_var_name, null );
562
+
563
  // We need to make sure we are have WP_Rewrite setup
564
  if ( ! $this->rewrite ) {
565
  $this->setup();
566
  }
567
 
568
+ $all_rules = isset( $this->rewrite->rules ) ? (array) $this->rewrite->rules : [];
569
+
570
+ if ( null === $our_rules ) {
571
+ // While this is specific to The Events Calendar we're handling a small enough post type base to keep it here.
572
+ $pattern = '/post_type=tribe_(events|venue|organizer)/';
573
+ // Reverse the rules to try and match the most complex first.
574
+ $our_rules = array_filter( $all_rules,
575
+ static function ( $rule_query_string ) use ( $pattern ) {
576
+ return preg_match( $pattern, $rule_query_string );
577
+ }
578
+ );
579
+
580
+ tribe_set_var( $cache_var_name, $our_rules );
581
+ }
582
 
583
  /**
584
  * Filters the list of rewrite rules handled by our code to add or remove some as required.
588
  * @param array $our_rules An array of rewrite rules handled by our code, in the shape
589
  * `[ <rewrite_rule_regex_pattern> => <query_string> ]`.
590
  * E.g. `[ '(?:events)/(?:list)/?$' => 'index.php?post_type=tribe_events&eventDisplay=list' ]`.
591
+ * @param array<string,string> All the current rewrite rules, before any filtering is applied; these have the
592
+ * same `<pattern => rewrite >` format as the previous argument, which is the
593
+ * format used by WordPress rewrite rules.
594
  */
595
+ $our_rules = apply_filters( 'tribe_rewrite_handled_rewrite_rules', $our_rules, $all_rules );
596
 
597
  return $our_rules;
598
  }
605
  * @return array A map of localized regex matchers in the shape `[ <localized_regex> => <query_var> ]`.
606
  */
607
  protected function get_localized_matchers() {
608
+ static $cache_var_name = __METHOD__;
609
+
610
  $bases = (array) $this->get_bases();
611
  $query_var_map = $this->get_matcher_to_query_var_map();
612
 
613
+ $localized_matchers = tribe_get_var( $cache_var_name, [] );
614
+
615
  foreach ( $bases as $base => $localized_matcher ) {
616
+ if ( isset( $localized_matchers[ $localized_matcher ] ) ) {
617
+ continue;
618
+ }
619
+
620
  if ( isset( $query_var_map[ $base ] ) ) {
621
  $localized_matchers[ $localized_matcher ] = [
622
  'query_var' => $query_var_map[ $base ],
641
  }
642
  }
643
 
644
+ tribe_set_var( $cache_var_name, $localized_matchers );
645
+
646
  return $localized_matchers;
647
  }
648
 
649
  /**
650
+ * Returns a map relating localized matcher slugs to the corresponding query var.
651
  *
652
  * @since 4.9.11
653
  *
669
  * @return array A list of all the query vars handled in the rules.
670
  */
671
  protected function get_rules_query_vars( array $rules ) {
672
+ static $cache_var_name = __METHOD__;
673
+
674
+ $cached_rules = tribe_get_var( $cache_var_name, [] );
675
+ $cache_key = md5( json_encode( $rules ) );
676
+
677
+ if ( ! isset( $cached_rules[ $cache_key ] ) ) {
678
+ $cached_rules[ $cache_key ] = array_unique(
679
+ array_filter(
680
+ array_merge(
681
+ [],
682
+ ...array_values(
683
+ array_map(
684
+ static function ( $rule_string ) {
685
+ wp_parse_str( parse_url( $rule_string, PHP_URL_QUERY ), $vars );
686
+ return array_keys( $vars );
687
+ },
688
+ $rules
689
+ )
690
+ )
691
+ )
692
+ )
693
+ );
694
 
695
+ tribe_set_var( $cache_var_name, $cached_rules );
696
+ }
697
+
698
+ return $cached_rules[ $cache_key ];
699
  }
700
 
701
  /**
760
  * Returns a list of post types supported by the implementation.
761
  *
762
  * @since 4.9.11
763
+ *
764
+ * @return array<string> An array of post types supported and handled by the rewrite implementation.
765
  */
766
  protected function get_post_types() {
767
  throw new BadMethodCallException( 'Method get_post_types should be implemented by extending classes.' );
1024
  return home_url();
1025
  }
1026
 
1027
+ $clean = $this->get_canonical_url( add_query_arg( $parsed_vars, home_url( '/' ) ), $force );
1028
 
1029
  $this->clean_url_cache[ $url ] = $clean;
1030
 
common/src/Tribe/Settings_Manager.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
-
3
  class Tribe__Settings_Manager {
 
 
4
  protected static $network_options;
5
  public static $tribe_events_mu_defaults;
6
 
@@ -29,6 +30,28 @@ class Tribe__Settings_Manager {
29
  add_action( 'tribe_settings_do_tabs', array( $this, 'do_setting_tabs' ) );
30
  add_action( 'tribe_settings_do_tabs', array( $this, 'do_network_settings_tab' ), 400 );
31
  add_action( 'tribe_settings_validate_tab_network', array( $this, 'save_all_tabs_hidden' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
  }
33
 
34
  /**
@@ -66,11 +89,14 @@ class Tribe__Settings_Manager {
66
  * @return array of options
67
  */
68
  public static function get_options() {
69
- $options = (array) get_option( Tribe__Main::OPTIONNAME, array() );
70
- if ( has_filter( 'tribe_get_options' ) ) {
71
- _deprecated_function( 'tribe_get_options', '3.10', 'option_' . Tribe__Main::OPTIONNAME );
72
- $options = apply_filters( 'tribe_get_options', $options );
73
- }
 
 
 
74
  return $options;
75
  }
76
 
@@ -86,7 +112,7 @@ class Tribe__Settings_Manager {
86
  if ( ! $option_name ) {
87
  return null;
88
  }
89
- $options = self::get_options();
90
 
91
  $option = $default;
92
  if ( array_key_exists( $option_name, $options ) ) {
@@ -110,10 +136,16 @@ class Tribe__Settings_Manager {
110
  if ( ! is_array( $options ) ) {
111
  return false;
112
  }
113
- if ( $apply_filters == true ) {
114
  $options = apply_filters( 'tribe-events-save-options', $options );
115
  }
116
- return update_option( Tribe__Main::OPTIONNAME, $options );
 
 
 
 
 
 
117
  }
118
 
119
  /**
@@ -125,10 +157,10 @@ class Tribe__Settings_Manager {
125
  * @return bool
126
  */
127
  public static function set_option( $name, $value ) {
128
- $newOption = array();
129
- $newOption[ $name ] = $value;
130
  $options = self::get_options();
131
- return self::set_options( wp_parse_args( $newOption, $options ) );
 
 
132
  }
133
 
134
  /**
@@ -139,7 +171,7 @@ class Tribe__Settings_Manager {
139
  */
140
  public static function get_network_options() {
141
  if ( ! isset( self::$network_options ) ) {
142
- $options = get_site_option( Tribe__Main::OPTIONNAMENETWORK, array() );
143
  self::$network_options = apply_filters( 'tribe_get_network_options', $options );
144
  }
145
 
1
  <?php
 
2
  class Tribe__Settings_Manager {
3
+ const OPTION_CACHE_VAR_NAME = 'Tribe__Settings_Manager:option_cache';
4
+
5
  protected static $network_options;
6
  public static $tribe_events_mu_defaults;
7
 
30
  add_action( 'tribe_settings_do_tabs', array( $this, 'do_setting_tabs' ) );
31
  add_action( 'tribe_settings_do_tabs', array( $this, 'do_network_settings_tab' ), 400 );
32
  add_action( 'tribe_settings_validate_tab_network', array( $this, 'save_all_tabs_hidden' ) );
33
+ add_action( 'updated_option', [ $this, 'update_options_cache' ], 10, 3 );
34
+ }
35
+
36
+ /**
37
+ * For performance reasons our options are saved in memory, but we need to make sure we update it when WordPress
38
+ * updates the variable directly.
39
+ *
40
+ * @since 4.11.0
41
+ *
42
+ * @param string $option Name of the updated option.
43
+ * @param mixed $old_value The old option value.
44
+ * @param mixed $value The new option value.
45
+ *
46
+ * @return void
47
+ */
48
+ public function update_options_cache( $option, $old_value, $value ) {
49
+ // Bail when no our option.
50
+ if ( Tribe__Main::OPTIONNAME !== $option ) {
51
+ return;
52
+ }
53
+
54
+ tribe_set_var( self::OPTION_CACHE_VAR_NAME, $value );
55
  }
56
 
57
  /**
89
  * @return array of options
90
  */
91
  public static function get_options() {
92
+ $options = tribe_get_var( self::OPTION_CACHE_VAR_NAME, [] );
93
+
94
+ if ( empty( $options ) ) {
95
+ $options = (array) get_option( Tribe__Main::OPTIONNAME, [] );
96
+
97
+ tribe_set_var( self::OPTION_CACHE_VAR_NAME, $options );
98
+ }
99
+
100
  return $options;
101
  }
102
 
112
  if ( ! $option_name ) {
113
  return null;
114
  }
115
+ $options = static::get_options();
116
 
117
  $option = $default;
118
  if ( array_key_exists( $option_name, $options ) ) {
136
  if ( ! is_array( $options ) ) {
137
  return false;
138
  }
139
+ if ( true === $apply_filters ) {
140
  $options = apply_filters( 'tribe-events-save-options', $options );
141
  }
142
+ $updated = update_option( Tribe__Main::OPTIONNAME, $options );
143
+
144
+ if ( $updated ) {
145
+ tribe_set_var( self::OPTION_CACHE_VAR_NAME, $options );
146
+ }
147
+
148
+ return $updated;
149
  }
150
 
151
  /**
157
  * @return bool
158
  */
159
  public static function set_option( $name, $value ) {
 
 
160
  $options = self::get_options();
161
+ $options[ $name ] = $value;
162
+
163
+ return self::set_options( $options );
164
  }
165
 
166
  /**
171
  */
172
  public static function get_network_options() {
173
  if ( ! isset( self::$network_options ) ) {
174
+ $options = get_site_option( Tribe__Main::OPTIONNAMENETWORK, array() );
175
  self::$network_options = apply_filters( 'tribe_get_network_options', $options );
176
  }
177
 
common/src/Tribe/Template.php CHANGED
@@ -47,7 +47,7 @@ class Tribe__Template {
47
  protected $template_origin_base_folder = [ 'src', 'views' ];
48
 
49
  /**
50
- * Allow chaing if class will extract data from the local context
51
  *
52
  * @since 4.6.2
53
  *
@@ -73,6 +73,15 @@ class Tribe__Template {
73
  */
74
  protected $template_folder_lookup = false;
75
 
 
 
 
 
 
 
 
 
 
76
  /**
77
  * Configures the class origin plugin path
78
  *
@@ -134,12 +143,23 @@ class Tribe__Template {
134
  return $this;
135
  }
136
 
 
 
 
 
 
 
 
 
 
 
 
137
  /**
138
  * Configures the class with the base folder in relation to the Origin
139
  *
140
  * @since 4.7.20
141
  *
142
- * @param mixed $use Should we look for template files in the list of folders
143
  *
144
  * @return self
145
  */
@@ -263,14 +283,14 @@ class Tribe__Template {
263
  *
264
  * @return array
265
  */
266
- public function merge_context( $context = array(), $file = null, $name = null ) {
267
  // Allow for simple null usage as well as array() for nothing
268
  if ( is_null( $context ) ) {
269
- $context = array();
270
  }
271
 
272
- // Applies local context on top of Global one
273
- $context = wp_parse_args( (array) $context, $this->global );
274
 
275
  /**
276
  * Allows filtering the Local context
@@ -317,15 +337,20 @@ class Tribe__Template {
317
  * in the theme's directory.
318
  *
319
  * @since 4.7.20
 
320
  *
321
- * @return array
 
 
322
  */
323
- protected function get_template_public_namespace() {
324
- $namespace = array(
325
  'tribe',
326
- );
327
 
328
- if ( ! empty( $this->origin->template_namespace ) ) {
 
 
329
  $namespace[] = $this->origin->template_namespace;
330
  }
331
 
@@ -360,18 +385,20 @@ class Tribe__Template {
360
  }
361
 
362
  /**
363
- * Fetches the path for locating files given a base folder normally theme related
364
  *
365
  * @since 4.7.20
 
366
  *
367
- * @param mixed $base Base path to look into
 
368
  *
369
- * @return string
370
  */
371
- protected function get_template_public_path( $base ) {
372
 
373
  // Craft the plugin Path
374
- $path = array_merge( (array) $base, (array) $this->get_template_public_namespace() );
375
 
376
  // Pick up if the folder needs to be aded to the public template path.
377
  $folder = array_diff( $this->folder, $this->get_template_origin_base_folder() );
@@ -402,27 +429,13 @@ class Tribe__Template {
402
  * @return array
403
  */
404
  protected function get_template_path_list() {
405
- $folders = array();
406
-
407
- // Only look into public folders if we tell to use folders
408
- if ( $this->template_folder_lookup ) {
409
- $folders[] = array(
410
- 'id' => 'child-theme',
411
- 'priority' => 10,
412
- 'path' => $this->get_template_public_path( STYLESHEETPATH ),
413
- );
414
- $folders[] = array(
415
- 'id' => 'parent-theme',
416
- 'priority' => 15,
417
- 'path' => $this->get_template_public_path( TEMPLATEPATH ),
418
- );
419
- }
420
 
421
- $folders[] = array(
422
- 'id' => 'plugin',
423
- 'priority' => 20,
424
- 'path' => $this->get_template_plugin_path(),
425
- );
426
 
427
  /**
428
  * Allows filtering of the list of folders in which we will look for the
@@ -433,7 +446,46 @@ class Tribe__Template {
433
  * @param array $folders Complete path to include the base public folder
434
  * @param self $template Current instance of the Tribe__Template
435
  */
436
- $folders = apply_filters( 'tribe_template_path_list', $folders, $this );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
437
 
438
  uasort( $folders, 'tribe_sort_by_priority' );
439
 
@@ -456,11 +508,12 @@ class Tribe__Template {
456
  $name = (array) explode( '/', $name );
457
  }
458
 
459
- $folders = $this->get_template_path_list();
 
 
460
 
461
  foreach ( $folders as $folder ) {
462
- $folder['path'] = trim( $folder['path'] );
463
- if ( ! $folder['path'] ) {
464
  continue;
465
  }
466
 
@@ -472,20 +525,47 @@ class Tribe__Template {
472
 
473
  // Skip non-existent files
474
  if ( file_exists( $file ) ) {
475
- /**
476
- * A more Specific Filter that will include the template name
477
- *
478
- * @since 4.6.2
479
- * @since 4.7.20 The $name param no longers contains the extension
480
- *
481
- * @param string $file Complete path to include the PHP File
482
- * @param array $name Template name
483
- * @param self $template Current instance of the Tribe__Template
484
- */
485
- return apply_filters( 'tribe_template_file', $file, $name, $this );
 
 
 
 
 
 
 
 
 
 
 
 
 
486
  }
487
  }
488
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
489
  // Couldn't find a template on the Stack
490
  return false;
491
  }
@@ -501,35 +581,98 @@ class Tribe__Template {
501
  *
502
  * @return string|false Either the final content HTML or `false` if no template could be found.
503
  */
504
- public function template( $name, $context = array(), $echo = true ) {
505
- // If name is String make it an Array
506
- if ( is_string( $name ) ) {
507
- $name = (array) explode( '/', $name );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
508
  }
509
 
510
- // Clean this Variable
511
- $name = array_map( 'sanitize_title_with_dashes', $name );
 
 
 
 
 
 
 
 
 
 
 
 
512
 
513
- if ( ! empty( $this->origin->template_namespace ) ) {
514
- $namespace = array_merge( (array) $this->origin->template_namespace, $name );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  } else {
516
- $namespace = $name;
 
517
  }
518
 
519
  // Setup the Hook name
520
- $hook_name = implode( '/', $namespace );
 
521
 
522
- // Check if the file exists
523
- $file = $this->get_template_file( $name );
 
 
 
 
 
 
 
 
 
524
 
525
- // Check if it's a valid variable
526
- if ( ! $file ) {
527
- return false;
528
- }
 
 
 
 
 
 
 
 
 
 
 
 
529
 
530
- // Before we load the file we check if it exists
531
- if ( ! file_exists( $file ) ) {
532
- return false;
533
  }
534
 
535
  ob_start();
@@ -541,7 +684,7 @@ class Tribe__Template {
541
  * Fires an Action before including the template file
542
  *
543
  * @since 4.6.2
544
- * @since 4.7.20 The $name param no longers contains the extension
545
  *
546
  * @param string $file Complete path to include the PHP File
547
  * @param array $name Template name
@@ -557,37 +700,38 @@ class Tribe__Template {
557
  * `tribe_template_before_include:events/embed`
558
  * `tribe_template_before_include:tickets/login-to-purchase`
559
  *
 
560
  * @since 4.7.20
561
  *
562
  * @param string $file Complete path to include the PHP File
563
  * @param array $name Template name
564
  * @param self $template Current instance of the Tribe__Template
565
  */
566
- do_action( "tribe_template_before_include:$hook_name", $file, $name, $this );
567
 
568
- // Only do this if really needed (by default it wont).
569
- if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
570
- // We don't allow Extrating of a variable called $name
571
- if ( isset( $this->context['name'] ) ) {
572
- unset( $this->context['name'] );
573
- }
574
-
575
- // We don't allow the extraction of a variable called `$file`.
576
- if ( isset( $this->context['file'] ) ) {
577
- unset( $this->context['file'] );
578
- }
579
-
580
- // Make any provided variables available in the template variable scope.
581
- extract( $this->context ); // @codingStandardsIgnoreLine
582
- }
583
 
584
- include $file;
585
 
586
  /**
587
  * Fires an Action after including the template file
588
  *
589
  * @since 4.6.2
590
- * @since 4.7.20 The $name param no longers contains the extension
591
  *
592
  * @param string $file Complete path to include the PHP File
593
  * @param array $name Template name
@@ -595,6 +739,23 @@ class Tribe__Template {
595
  */
596
  do_action( 'tribe_template_after_include', $file, $name, $this );
597
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  /**
599
  * Fires an Action for a given template name after including the template file
600
  *
@@ -618,7 +779,7 @@ class Tribe__Template {
618
  * Allow users to filter the final HTML
619
  *
620
  * @since 4.6.2
621
- * @since 4.7.20 The $name param no longers contains the extension
622
  *
623
  * @param string $html The final HTML
624
  * @param string $file Complete path to include the PHP File
@@ -627,6 +788,24 @@ class Tribe__Template {
627
  */
628
  $html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
629
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
  /**
631
  * Allow users to filter the final HTML by the name
632
  *
@@ -651,6 +830,77 @@ class Tribe__Template {
651
  return $html;
652
  }
653
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
654
  /**
655
  * Sets a number of values at the same time.
656
  *
47
  protected $template_origin_base_folder = [ 'src', 'views' ];
48
 
49
  /**
50
+ * Allow changing if class will extract data from the local context
51
  *
52
  * @since 4.6.2
53
  *
73
  */
74
  protected $template_folder_lookup = false;
75
 
76
+ /**
77
+ * Create a class variable for the include path, to avoid conflicting with extract.
78
+ *
79
+ * @since 4.11.0
80
+ *
81
+ * @var string
82
+ */
83
+ protected $template_current_file_path;
84
+
85
  /**
86
  * Configures the class origin plugin path
87
  *
143
  return $this;
144
  }
145
 
146
+ /**
147
+ * Returns the array for which folder this template instance is looking into.
148
+ *
149
+ * @since 4.11.0
150
+ *
151
+ * @return array Current folder we are looking for templates.
152
+ */
153
+ public function get_template_folder() {
154
+ return $this->folder;
155
+ }
156
+
157
  /**
158
  * Configures the class with the base folder in relation to the Origin
159
  *
160
  * @since 4.7.20
161
  *
162
+ * @param mixed $value Should we look for template files in the list of folders.
163
  *
164
  * @return self
165
  */
283
  *
284
  * @return array
285
  */
286
+ public function merge_context( $context = [], $file = null, $name = null ) {
287
  // Allow for simple null usage as well as array() for nothing
288
  if ( is_null( $context ) ) {
289
+ $context = [];
290
  }
291
 
292
+ // Applies new local context on top of Global + Previous local.
293
+ $context = wp_parse_args( (array) $context, $this->get_values() );
294
 
295
  /**
296
  * Allows filtering the Local context
337
  * in the theme's directory.
338
  *
339
  * @since 4.7.20
340
+ * @since 4.11.0 Added param $plugin_namespace.
341
  *
342
+ * @param string $plugin_namespace Overwrite the origin namespace with a given one.
343
+ *
344
+ * @return array Namespace where we to look for templates.
345
  */
346
+ protected function get_template_public_namespace( $plugin_namespace ) {
347
+ $namespace = [
348
  'tribe',
349
+ ];
350
 
351
+ if ( ! empty( $plugin_namespace ) ) {
352
+ $namespace[] = $plugin_namespace;
353
+ } elseif ( ! empty( $this->origin->template_namespace ) ) {
354
  $namespace[] = $this->origin->template_namespace;
355
  }
356
 
385
  }
386
 
387
  /**
388
+ * Fetches the path for locating files given a base folder normally theme related.
389
  *
390
  * @since 4.7.20
391
+ * @since 4.11.0 Added the param $namespace.
392
  *
393
+ * @param mixed $base Base path to look into.
394
+ * @param string $namespace Adds the plugin namespace to the path returned.
395
  *
396
+ * @return string The public path for a given base.˙˙
397
  */
398
+ protected function get_template_public_path( $base, $namespace ) {
399
 
400
  // Craft the plugin Path
401
+ $path = array_merge( (array) $base, (array) $this->get_template_public_namespace( $namespace ) );
402
 
403
  // Pick up if the folder needs to be aded to the public template path.
404
  $folder = array_diff( $this->folder, $this->get_template_origin_base_folder() );
429
  * @return array
430
  */
431
  protected function get_template_path_list() {
432
+ $folders = [];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
433
 
434
+ $folders['plugin'] = [
435
+ 'id' => 'plugin',
436
+ 'priority' => 20,
437
+ 'path' => $this->get_template_plugin_path(),
438
+ ];
439
 
440
  /**
441
  * Allows filtering of the list of folders in which we will look for the
446
  * @param array $folders Complete path to include the base public folder
447
  * @param self $template Current instance of the Tribe__Template
448
  */
449
+ $folders = (array) apply_filters( 'tribe_template_path_list', $folders, $this );
450
+
451
+ uasort( $folders, 'tribe_sort_by_priority' );
452
+
453
+ return $folders;
454
+ }
455
+
456
+ /**
457
+ * Get the list of theme related folders we will look up for the template.
458
+ *
459
+ * @since 4.11.0
460
+ *
461
+ * @param string $namespace Which plugin namespace we are looking for.
462
+ *
463
+ * @return array
464
+ */
465
+ protected function get_template_theme_path_list( $namespace ) {
466
+ $folders = [];
467
+
468
+ $folders['child-theme'] = [
469
+ 'id' => 'child-theme',
470
+ 'priority' => 10,
471
+ 'path' => $this->get_template_public_path( STYLESHEETPATH, $namespace ),
472
+ ];
473
+ $folders['parent-theme'] = [
474
+ 'id' => 'parent-theme',
475
+ 'priority' => 15,
476
+ 'path' => $this->get_template_public_path( TEMPLATEPATH, $namespace ),
477
+ ];
478
+
479
+ /**
480
+ * Allows filtering of the list of theme folders in which we will look for the template.
481
+ *
482
+ * @since 4.11.0
483
+ *
484
+ * @param array $folders Complete path to include the base public folder.
485
+ * @param string $namespace Loads the files from a specified folder from the themes.
486
+ * @param self $template Current instance of the Tribe__Template.
487
+ */
488
+ $folders = (array) apply_filters( 'tribe_template_theme_path_list', $folders, $namespace, $this );
489
 
490
  uasort( $folders, 'tribe_sort_by_priority' );
491
 
508
  $name = (array) explode( '/', $name );
509
  }
510
 
511
+ $folders = $this->get_template_path_list();
512
+ $found_file = false;
513
+ $namespace = false;
514
 
515
  foreach ( $folders as $folder ) {
516
+ if ( empty( $folder['path'] ) ) {
 
517
  continue;
518
  }
519
 
525
 
526
  // Skip non-existent files
527
  if ( file_exists( $file ) ) {
528
+ $found_file = $file;
529
+ $namespace = ! empty( $folder['namespace'] ) ? $folder['namespace'] : false;
530
+ break;
531
+ }
532
+ }
533
+
534
+ if ( $this->template_folder_lookup ) {
535
+ $theme_folders = $this->get_template_theme_path_list( $namespace );
536
+
537
+ foreach ( $theme_folders as $folder ) {
538
+ if ( empty( $folder['path'] ) ) {
539
+ continue;
540
+ }
541
+
542
+ // Build the File Path
543
+ $file = implode( DIRECTORY_SEPARATOR, array_merge( (array) $folder['path'], $name ) );
544
+
545
+ // Append the Extension to the file path
546
+ $file .= '.php';
547
+
548
+ // Skip non-existent files
549
+ if ( file_exists( $file ) ) {
550
+ $found_file = $file;
551
+ }
552
  }
553
  }
554
 
555
+ if ( $found_file ) {
556
+ /**
557
+ * A more Specific Filter that will include the template name
558
+ *
559
+ * @since 4.6.2
560
+ * @since 4.7.20 The $name param no longer contains the extension
561
+ *
562
+ * @param string $file Complete path to include the PHP File
563
+ * @param array $name Template name
564
+ * @param self $template Current instance of the Tribe__Template
565
+ */
566
+ return apply_filters( 'tribe_template_file', $found_file, $name, $this );
567
+ }
568
+
569
  // Couldn't find a template on the Stack
570
  return false;
571
  }
581
  *
582
  * @return string|false Either the final content HTML or `false` if no template could be found.
583
  */
584
+ public function template( $name, $context = [], $echo = true ) {
585
+ static $file_exists = [];
586
+ static $files = [];
587
+ static $template_names = [];
588
+
589
+ // Key we'll use for in-memory caching of expensive operations.
590
+ $cache_name_key = is_array( $name ) ? implode( '/', $name ) : $name;
591
+
592
+ // Cache template name massaging so we don't have to repeat these actions.
593
+ if ( ! isset( $template_names[ $cache_name_key ] ) ) {
594
+ // If name is String make it an Array
595
+ if ( is_string( $name ) ) {
596
+ $name = (array) explode( '/', $name );
597
+ }
598
+
599
+ // Clean this Variable
600
+ $name = array_map( 'sanitize_title_with_dashes', $name );
601
+
602
+ $template_names[ $cache_name_key ] = $name;
603
  }
604
 
605
+ // Cache file location and existence.
606
+ if ( ! isset( $file_exists[ $cache_name_key ] ) || ! isset( $files[ $cache_name_key ] ) ) {
607
+ // Check if the file exists
608
+ $files[ $cache_name_key ] = $file = $this->get_template_file( $name );
609
+
610
+ // Check if it's a valid variable
611
+ if ( ! $file ) {
612
+ return $file_exists[ $cache_name_key ] = false;
613
+ }
614
+
615
+ // Before we load the file we check if it exists
616
+ if ( ! file_exists( $file ) ) {
617
+ return $file_exists[ $cache_name_key ] = false;
618
+ }
619
 
620
+ $file_exists[ $cache_name_key ] = true;
621
+ }
622
+
623
+ // If the file doesn't exist, bail.
624
+ if ( ! $file_exists[ $cache_name_key ] ) {
625
+ return false;
626
+ }
627
+
628
+ // Use filename stored in cache.
629
+ $file = $files[ $cache_name_key ];
630
+ $name = $template_names[ $cache_name_key ];
631
+ $origin_folder_appendix = array_diff( $this->folder, $this->template_origin_base_folder );
632
+
633
+ if ( $origin_namespace = $this->template_get_origin_namespace( $file ) ) {
634
+ $legacy_namespace = array_merge( (array) $origin_namespace, $name );
635
+ $namespace = array_merge( (array) $origin_namespace, $origin_folder_appendix, $name );
636
  } else {
637
+ $legacy_namespace = $name;
638
+ $namespace = array_merge( $origin_folder_appendix, $legacy_namespace );
639
  }
640
 
641
  // Setup the Hook name
642
+ $legacy_hook_name = implode( '/', $legacy_namespace );
643
+ $hook_name = implode( '/', $namespace );
644
 
645
+ /**
646
+ * Allow users to filter the HTML before rendering
647
+ *
648
+ * @since 4.11.0
649
+ *
650
+ * @param string $html The initial HTML
651
+ * @param string $file Complete path to include the PHP File
652
+ * @param array $name Template name
653
+ * @param self $template Current instance of the Tribe__Template
654
+ */
655
+ $pre_html = apply_filters( 'tribe_template_pre_html', null, $file, $name, $this );
656
 
657
+ /**
658
+ * Allow users to filter the HTML by the name before rendering
659
+ *
660
+ * E.g.:
661
+ * `tribe_template_pre_html:events/blocks/parts/details`
662
+ * `tribe_template_pre_html:events/embed`
663
+ * `tribe_template_pre_html:tickets/login-to-purchase`
664
+ *
665
+ * @since 4.11.0
666
+ *
667
+ * @param string $html The initial HTML
668
+ * @param string $file Complete path to include the PHP File
669
+ * @param array $name Template name
670
+ * @param self $template Current instance of the Tribe__Template
671
+ */
672
+ $pre_html = apply_filters( "tribe_template_pre_html:$hook_name", $pre_html, $file, $name, $this );
673
 
674
+ if ( null !== $pre_html ) {
675
+ return $pre_html;
 
676
  }
677
 
678
  ob_start();
684
  * Fires an Action before including the template file
685
  *
686
  * @since 4.6.2
687
+ * @since 4.7.20 The $name param no longer contains the extension
688
  *
689
  * @param string $file Complete path to include the PHP File
690
  * @param array $name Template name
700
  * `tribe_template_before_include:events/embed`
701
  * `tribe_template_before_include:tickets/login-to-purchase`
702
  *
703
+ * @deprecated 4.11.0
704
  * @since 4.7.20
705
  *
706
  * @param string $file Complete path to include the PHP File
707
  * @param array $name Template name
708
  * @param self $template Current instance of the Tribe__Template
709
  */
710
+ do_action( "tribe_template_before_include:$legacy_hook_name", $file, $name, $this );
711
 
712
+ /**
713
+ * Fires an Action for a given template name before including the template file
714
+ *
715
+ * E.g.:
716
+ * `tribe_template_before_include:events/blocks/parts/details`
717
+ * `tribe_template_before_include:events/embed`
718
+ * `tribe_template_before_include:tickets/login-to-purchase`
719
+ *
720
+ * @since 4.7.20
721
+ *
722
+ * @param string $file Complete path to include the PHP File
723
+ * @param array $name Template name
724
+ * @param self $template Current instance of the Tribe__Template
725
+ */
726
+ do_action( "tribe_template_before_include:$hook_name", $file, $name, $this );
727
 
728
+ $this->template_safe_include( $file );
729
 
730
  /**
731
  * Fires an Action after including the template file
732
  *
733
  * @since 4.6.2
734
+ * @since 4.7.20 The $name param no longer contains the extension
735
  *
736
  * @param string $file Complete path to include the PHP File
737
  * @param array $name Template name
739
  */
740
  do_action( 'tribe_template_after_include', $file, $name, $this );
741
 
742
+ /**
743
+ * Fires an Action for a given template name after including the template file
744
+ *
745
+ * E.g.:
746
+ * `tribe_template_after_include:events/blocks/parts/details`
747
+ * `tribe_template_after_include:events/embed`
748
+ * `tribe_template_after_include:tickets/login-to-purchase`
749
+ *
750
+ * @deprecated 4.11.0
751
+ * @since 4.7.20
752
+ *
753
+ * @param string $file Complete path to include the PHP File
754
+ * @param array $name Template name
755
+ * @param self $template Current instance of the Tribe__Template
756
+ */
757
+ do_action( "tribe_template_after_include:$legacy_hook_name", $file, $name, $this );
758
+
759
  /**
760
  * Fires an Action for a given template name after including the template file
761
  *
779
  * Allow users to filter the final HTML
780
  *
781
  * @since 4.6.2
782
+ * @since 4.7.20 The $name param no longer contains the extension
783
  *
784
  * @param string $html The final HTML
785
  * @param string $file Complete path to include the PHP File
788
  */
789
  $html = apply_filters( 'tribe_template_html', $html, $file, $name, $this );
790
 
791
+ /**
792
+ * Allow users to filter the final HTML by the name
793
+ *
794
+ * E.g.:
795
+ * `tribe_template_html:events/blocks/parts/details`
796
+ * `tribe_template_html:events/embed`
797
+ * `tribe_template_html:tickets/login-to-purchase`
798
+ *
799
+ * @deprecated 4.11.0
800
+ * @since 4.7.20
801
+ *
802
+ * @param string $html The final HTML
803
+ * @param string $file Complete path to include the PHP File
804
+ * @param array $name Template name
805
+ * @param self $template Current instance of the Tribe__Template
806
+ */
807
+ $html = apply_filters( "tribe_template_html:$legacy_hook_name", $html, $file, $name, $this );
808
+
809
  /**
810
  * Allow users to filter the final HTML by the name
811
  *
830
  return $html;
831
  }
832
 
833
+ /**
834
+ * Based on a path it determines what is the namespace that should be used.
835
+ *
836
+ * @since 4.11.0
837
+ *
838
+ * @param string $path Which file we are going to load.
839
+ *
840
+ * @return string|false The found namespace for that path or false.
841
+ */
842
+ public function template_get_origin_namespace( $path ) {
843
+ $matching_namespace = false;
844
+ /**
845
+ * Allows more namespaces to be added based on the path of the file we are loading.
846
+ *
847
+ * @since 4.11.0
848
+ *
849
+ * @param array $namespace_map Indexed array containing the namespace as the key and path to `strpos`.
850
+ * @param string $path Path we will do the `strpos` to validate a given namespace.
851
+ * @param self $template Current instance of the template class.
852
+ */
853
+ $namespace_map = (array) apply_filters( 'tribe_template_origin_namespace_map', [], $path, $this );
854
+
855
+ foreach ( $namespace_map as $namespace => $contains_string ) {
856
+ // Skip when we dont have the namespace path.
857
+ if ( false === strpos( $path, $contains_string ) ) {
858
+ continue;
859
+ }
860
+
861
+ $matching_namespace = $namespace;
862
+
863
+ // Once the first namespace is found it breaks out.
864
+ break;
865
+ }
866
+
867
+ if ( empty( $matching_namespace ) && ! empty( $this->origin->template_namespace ) ) {
868
+ $matching_namespace = $this->origin->template_namespace;
869
+ }
870
+
871
+ return $matching_namespace;
872
+ }
873
+
874
+ /**
875
+ * Includes a give PHP inside of a safe context.
876
+ *
877
+ * This method is required to prevent template files messing with local variables used inside of the
878
+ * `self::template` method. Also shelters the template loading from any possible variables that could
879
+ * be overwritten by the context.
880
+ *
881
+ * @since 4.11.0
882
+ *
883
+ * @param string $file Which file will be included with safe context.
884
+ *
885
+ * @return void
886
+ */
887
+ public function template_safe_include( $file ) {
888
+ // We use this instance variable to prevent collisions.
889
+ $this->template_current_file_path = $file;
890
+ unset( $file );
891
+
892
+ // Only do this if really needed (by default it wont).
893
+ if ( true === $this->template_context_extract && ! empty( $this->context ) ) {
894
+ // Make any provided variables available in the template variable scope.
895
+ extract( $this->context ); // @phpcs:ignore
896
+ }
897
+
898
+ include $this->template_current_file_path;
899
+
900
+ // After the include we reset the variable.
901
+ unset( $this->template_current_file_path );
902
+ }
903
+
904
  /**
905
  * Sets a number of values at the same time.
906
  *
common/src/Tribe/Traits/Cache_User.php CHANGED
@@ -125,4 +125,21 @@ trait Cache_User {
125
  }
126
  }
127
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
  }
125
  }
126
  }
127
  }
128
+
129
+ /**
130
+ * Resets the instance caches for the this instance.
131
+ *
132
+ * @since 4.11.0
133
+ *
134
+ * @return string[] A list of the emptied cache properties.
135
+ */
136
+ public function reset_caches() {
137
+ $emptied = [];
138
+ foreach ( array_keys( $this->caches ) as $key ) {
139
+ $emptied[] = $key;
140
+ $this->{"{$key}_cache"} = [];
141
+ }
142
+
143
+ return $emptied;
144
+ }
145
  }
common/src/Tribe/Utils/Collection_Trait.php CHANGED
@@ -152,14 +152,27 @@ trait Collection_Trait {
152
  * {@inheritDoc}
153
  */
154
  public function serialize() {
155
- return serialize( $this->all() );
 
 
 
 
 
 
156
  }
157
 
158
  /**
159
  * {@inheritDoc}
160
  */
161
  public function unserialize( $serialized ) {
162
- $this->items = unserialize( $serialized );
 
 
 
 
 
 
 
163
  }
164
 
165
  /**
152
  * {@inheritDoc}
153
  */
154
  public function serialize() {
155
+ $to_serialize = $this->all();
156
+
157
+ if ( method_exists( $this, 'before_serialize' ) ) {
158
+ $to_serialize = $this->before_serialize( $this->all() );
159
+ }
160
+
161
+ return serialize( $to_serialize );
162
  }
163
 
164
  /**
165
  * {@inheritDoc}
166
  */
167
  public function unserialize( $serialized ) {
168
+ $to_unserialize = $serialized;
169
+
170
+ if ( method_exists( $this, 'custom_unserialize' ) ) {
171
+ $this->items = $this->custom_unserialize( $to_unserialize );
172
+ return;
173
+ }
174
+
175
+ $this->items = unserialize( $to_unserialize );
176
  }
177
 
178
  /**
common/src/Tribe/Utils/Date_I18n.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Extends DateTime and includes translation capabilities.
4
+ *
5
+ * @package Tribe\Utils
6
+ * @since 4.11.0
7
+ */
8
+ namespace Tribe\Utils;
9
+
10
+ use Tribe__Date_Utils as Dates;
11
+ use DateTime;
12
+ use DateTimeImmutable;
13
+
14
+ /**
15
+ * Class Date i18n
16
+ *
17
+ * @package Tribe\Utils
18
+ * @since 4.11.0
19
+ */
20
+ class Date_I18n extends DateTime {
21
+ /**
22
+ * {@inheritDoc}
23
+ *
24
+ * @return Date_I18n Localizable variation of DateTime.
25
+ */
26
+ public static function createFromImmutable( $datetime ) {
27
+ $date_object = new self;
28
+ $date_object->setTimestamp( $datetime->getTimestamp() );
29
+ $date_object->setTimezone( $datetime->getTimezone() );
30
+ return $date_object;
31
+ }
32
+
33
+ /**
34
+ * Returns a translated string using the params from this DateTime instance.
35
+ *
36
+ * @since 4.11.0
37
+ *
38
+ * @param string $date_format Format to be used in the translation.
39
+ *
40
+ * @return string Translated date.
41
+ */
42
+ public function format_i18n( $date_format ) {
43
+ $unix_with_tz = $this->getTimestamp() + $this->getOffset();
44
+ $translated = date_i18n( $date_format, $unix_with_tz );
45
+
46
+ return $translated;
47
+ }
48
+ }
common/src/Tribe/Utils/Date_I18n_Immutable.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Extends DateTimeImmutable and includes translation capabilities.
4
+ *
5
+ * @since 4.11.0
6
+ * @package Tribe\Utils
7
+ */
8
+
9
+ namespace Tribe\Utils;
10
+
11
+ use DateTimeImmutable;
12
+
13
+ /**
14
+ * Class Date i18n Immutable
15
+ *
16
+ * @since 4.11.0
17
+ * @package Tribe\Utils
18
+ */
19
+ class Date_I18n_Immutable extends DateTimeImmutable {
20
+ /**
21
+ * {@inheritDoc}
22
+ *
23
+ * @return Date_I18n_Immutable Localizable variation of DateTimeImmutable.
24
+ */
25
+ public static function createFromMutable( $datetime ) {
26
+ $date_object = new self;
27
+ $date_object = $date_object->setTimestamp( $datetime->getTimestamp() );
28
+ $date_object = $date_object->setTimezone( $datetime->getTimezone() );
29
+
30
+ return $date_object;
31
+ }
32
+
33
+ /**
34
+ * Returns a translated string using the params from this Immutable DateTime instance.
35
+ *
36
+ * @since 4.11.0
37
+ *
38
+ * @param string $date_format Format to be used in the translation.
39
+ *
40
+ * @return string Translated date.
41
+ */
42
+ public function format_i18n( $date_format ) {
43
+ $unix_with_tz = $this->getTimestamp() + $this->getOffset();
44
+ $translated = date_i18n( $date_format, $unix_with_tz );
45
+
46
+ return $translated;
47
+ }
48
+ }
common/src/Tribe/Utils/Post_Thumbnail.php CHANGED
@@ -147,6 +147,8 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
147
  * @return array An array of objects containing the post thumbnail data.
148
  */
149
  public function fetch_data() {
 
 
150
  if ( ! $this->exists() ) {
151
  return [];
152
  }
@@ -155,44 +157,58 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
155
  return $this->data;
156
  }
157
 
158
- $post_id = $this->post_id;
159
  $image_sizes = $this->get_image_sizes();
160
  $thumbnail_id = $this->thumbnail_id;
161
 
162
- $thumbnail_data = array_combine(
163
- $image_sizes,
164
- array_map(
165
- static function ( $size ) use ( $thumbnail_id ) {
166
- $size_data = wp_get_attachment_image_src( $thumbnail_id, $size );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
167
 
168
- if ( false === $size_data ) {
169
  return (object) [
170
- 'url' => '',
171
- 'width' => '',
172
- 'height' => '',
173
- 'is_intermediate' => false,
174
  ];
175
- }
 
 
 
176
 
177
- return (object) [
178
- 'url' => Arr::get( $size_data, 0, '' ),
179
- 'width' => Arr::get( $size_data, 1, '' ),
180
- 'heigth' => Arr::get( $size_data, 2, '' ),
181
- 'is_intermediate' => (bool) Arr::get( $size_data, 3, false ),
182
- ];
183
- },
184
- $image_sizes
185
- )
186
- );
187
 
188
- $srcset = wp_get_attachment_image_srcset( $thumbnail_id );
189
- $thumbnail_data['srcset'] = ! empty( $srcset ) ? $srcset : false;
190
 
191
- $title = get_the_title( $thumbnail_id );
192
- $thumbnail_data['title'] = ! empty( $title ) ? $title : false;
193
 
194
- $alt = trim( strip_tags( get_post_meta( $thumbnail_id, '_wp_attachment_image_alt', true ) ) );
195
- $thumbnail_data['alt'] = ! empty( $alt ) ? $alt : false;
196
 
197
  /**
198
  * Filters the post thumbnail data and information that will be returned for a specific post.
@@ -204,7 +220,7 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
204
  * @param array $thumbnail_data The thumbnail data for the post.
205
  * @param int $post_id The ID of the post the data is for.
206
  */
207
- $thumbnail_data = apply_filters( 'tribe_post_thumbnail_data', $thumbnail_data, $post_id );
208
 
209
  $this->resolved();
210
 
147
  * @return array An array of objects containing the post thumbnail data.
148
  */
149
  public function fetch_data() {
150
+ static $cache_thumbnail = [];
151
+
152
  if ( ! $this->exists() ) {
153
  return [];
154
  }
157
  return $this->data;
158
  }
159
 
 
160
  $image_sizes = $this->get_image_sizes();
161
  $thumbnail_id = $this->thumbnail_id;
162
 
163
+ $cache_key = empty( $thumbnail_id ) ? -1 : $thumbnail_id;
164
+
165
+ if ( empty( $cache_thumbnail[ $cache_key ] ) ) {
166
+ $thumbnail_data = array_combine(
167
+ $image_sizes,
168
+ array_map(
169
+ static function( $size ) use ( $thumbnail_id ) {
170
+ static $cache_size_data = [];
171
+
172
+ $size_data_cache_key = empty( $thumbnail_id ) ? -1 : $thumbnail_id;
173
+ $size_data_cache_key = "{$size_data_cache_key}:{$size}";
174
+
175
+ if ( ! isset( $cache_size_data[ $size_data_cache_key ] ) ) {
176
+ $cache_size_data[ $size_data_cache_key ] = wp_get_attachment_image_src( $thumbnail_id, $size );
177
+ }
178
+
179
+ $size_data = $cache_size_data[ $size_data_cache_key ];
180
+
181
+ if ( false === $size_data ) {
182
+ return (object) [
183
+ 'url' => '',
184
+ 'width' => '',
185
+ 'height' => '',
186
+ 'is_intermediate' => false,
187
+ ];
188
+ }
189
 
 
190
  return (object) [
191
+ 'url' => Arr::get( $size_data, 0, '' ),
192
+ 'width' => Arr::get( $size_data, 1, '' ),
193
+ 'height' => Arr::get( $size_data, 2, '' ),
194
+ 'is_intermediate' => (bool) Arr::get( $size_data, 3, false ),
195
  ];
196
+ },
197
+ $image_sizes
198
+ )
199
+ );
200
 
201
+ $srcset = wp_get_attachment_image_srcset( $thumbnail_id );
202
+ $thumbnail_data['srcset'] = ! empty( $srcset ) ? $srcset : false;
 
 
 
 
 
 
 
 
203
 
204
+ $title = get_the_title( $thumbnail_id );
205
+ $thumbnail_data['title'] = ! empty( $title ) ? $title : false;
206
 
207
+ $alt = trim( strip_tags( get_post_meta( $thumbnail_id, '_wp_attachment_image_alt', true ) ) );
208
+ $thumbnail_data['alt'] = ! empty( $alt ) ? $alt : false;
209
 
210
+ $cache_thumbnail[ $cache_key ] = $thumbnail_data;
211
+ }
212
 
213
  /**
214
  * Filters the post thumbnail data and information that will be returned for a specific post.
220
  * @param array $thumbnail_data The thumbnail data for the post.
221
  * @param int $post_id The ID of the post the data is for.
222
  */
223
+ $thumbnail_data = apply_filters( 'tribe_post_thumbnail_data', $cache_thumbnail[ $cache_key ], $this->post_id );
224
 
225
  $this->resolved();
226
 
common/src/Tribe/View_Helpers.php CHANGED
@@ -20,10 +20,18 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
20
  * @return array The countries array.
21
  */
22
  public static function constructCountries( $postId = '', $useDefault = true ) {
 
 
 
 
 
 
 
 
23
  $eventCountries = tribe_get_option( 'tribeEventsCountries' );
24
 
25
  if ( $eventCountries != '' ) {
26
- $countries = array();
27
 
28
  $country_rows = explode( "\n", $eventCountries );
29
  foreach ( $country_rows as $crow ) {
@@ -65,11 +73,11 @@ if ( ! class_exists( 'Tribe__View_Helpers' ) ) {
65
  $countries = array( '' => $selectCountry ) + $countries;
66
  array_unique( $countries );
67
  }
68
-
69
- return $countries;
70
- } else {
71
- return $countries;
72
  }
 
 
 
 
73
  }
74
 
75
  /**
20
  * @return array The countries array.
21
  */
22
  public static function constructCountries( $postId = '', $useDefault = true ) {
23
+ static $cache_var_name = __METHOD__;
24
+
25
+ $countries = tribe_get_var( $cache_var_name, null );
26
+
27
+ if ( $countries ) {
28
+ return $countries;
29
+ }
30
+
31
  $eventCountries = tribe_get_option( 'tribeEventsCountries' );
32
 
33
  if ( $eventCountries != '' ) {
34
+ $countries = [];
35
 
36
  $country_rows = explode( "\n", $eventCountries );
37
  foreach ( $country_rows as $crow ) {
73
  $countries = array( '' => $selectCountry ) + $countries;
74
  array_unique( $countries );
75
  }
 
 
 
 
76
  }
77
+
78
+ tribe_set_var( $cache_var_name, $countries );
79
+
80
+ return $countries;
81
  }
82
 
83
  /**
common/src/admin-views/tribe-options-display.php CHANGED
@@ -31,12 +31,12 @@ $displayTab = array(
31
  )
32
  . '</p>',
33
  ),
34
- 'datepickerFormat' => array(
35
  'type' => 'dropdown',
36
  'label' => esc_html__( 'Compact Date Format', 'tribe-common' ),
37
  'tooltip' => esc_html__( 'Select the date format used for elements with minimal space, such as in datepickers.', 'tribe-common' ),
38
- 'default' => 'Y-m-d',
39
- 'options' => array(
40
  '0' => date( 'Y-m-d', $sample_date ),
41
  '1' => date( 'n/j/Y', $sample_date ),
42
  '2' => date( 'm/d/Y', $sample_date ),
@@ -49,13 +49,13 @@ $displayTab = array(
49
  '9' => date( 'Y.m.d', $sample_date ),
50
  '10' => date( 'm.d.Y', $sample_date ),
51
  '11' => date( 'd.m.Y', $sample_date ),
52
- ),
53
  'validation_type' => 'options',
54
- ),
55
- 'tribe-form-content-end' => array(
56
  'type' => 'html',
57
  'html' => '</div>',
58
- ),
59
  )
60
  ),
61
  );
31
  )
32
  . '</p>',
33
  ),
34
+ 'datepickerFormat' => [
35
  'type' => 'dropdown',
36
  'label' => esc_html__( 'Compact Date Format', 'tribe-common' ),
37
  'tooltip' => esc_html__( 'Select the date format used for elements with minimal space, such as in datepickers.', 'tribe-common' ),
38
+ 'default' => 1,
39
+ 'options' => [
40
  '0' => date( 'Y-m-d', $sample_date ),
41
  '1' => date( 'n/j/Y', $sample_date ),
42
  '2' => date( 'm/d/Y', $sample_date ),
49
  '9' => date( 'Y.m.d', $sample_date ),
50
  '10' => date( 'm.d.Y', $sample_date ),
51
  '11' => date( 'd.m.Y', $sample_date ),
52
+ ],
53
  'validation_type' => 'options',
54
+ ],
55
+ 'tribe-form-content-end' => [
56
  'type' => 'html',
57
  'html' => '</div>',
58
+ ],
59
  )
60
  ),
61
  );
common/src/functions/template-tags/date.php CHANGED
@@ -277,6 +277,8 @@ if ( ! function_exists( 'tribe_get_start_date' ) ) {
277
  * @return string|null Date
278
  */
279
  function tribe_get_start_date( $event = null, $display_time = true, $date_format = '', $timezone = null ) {
 
 
280
  if ( is_null( $event ) ) {
281
  global $post;
282
  $event = $post;
@@ -290,15 +292,23 @@ if ( ! function_exists( 'tribe_get_start_date' ) ) {
290
  return '';
291
  }
292
 
293
- if ( Tribe__Date_Utils::is_all_day( get_post_meta( $event->ID, '_EventAllDay', true ) ) ) {
294
- $display_time = false;
295
- }
296
 
297
- // @todo move timezones to Common
298
- if ( class_exists( 'Tribe__Events__Timezones' ) ) {
299
- $start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
300
- } else {
301
- return null;
 
 
 
 
 
 
 
 
 
302
  }
303
 
304
  /**
@@ -307,7 +317,7 @@ if ( ! function_exists( 'tribe_get_start_date' ) ) {
307
  * @param string $start_date
308
  * @param WP_Post $event
309
  */
310
- return apply_filters( 'tribe_get_start_date', tribe_format_date( $start_date, $display_time, $date_format ), $event );
311
  }
312
  }
313
 
@@ -329,6 +339,8 @@ if ( ! function_exists( 'tribe_get_end_date' ) ) {
329
  * @return string|null Date
330
  */
331
  function tribe_get_end_date( $event = null, $display_time = true, $date_format = '', $timezone = null ) {
 
 
332
  if ( is_null( $event ) ) {
333
  global $post;
334
  $event = $post;
@@ -342,15 +354,23 @@ if ( ! function_exists( 'tribe_get_end_date' ) ) {
342
  return '';
343
  }
344
 
345
- if ( Tribe__Date_Utils::is_all_day( get_post_meta( $event->ID, '_EventAllDay', true ) ) ) {
346
- $display_time = false;
347
- }
348
 
349
- // @todo move timezones to Common
350
- if ( class_exists( 'Tribe__Events__Timezones' ) ) {
351
- $end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID );
352
- } else {
353
- return null;
 
 
 
 
 
 
 
 
 
354
  }
355
 
356
  /**
@@ -359,7 +379,7 @@ if ( ! function_exists( 'tribe_get_end_date' ) ) {
359
  * @param string $end_date
360
  * @param WP_Post $event
361
  */
362
- return apply_filters( 'tribe_get_end_date', tribe_format_date( $end_date, $display_time, $date_format ), $event );
363
  }
364
  }
365
 
277
  * @return string|null Date
278
  */
279
  function tribe_get_start_date( $event = null, $display_time = true, $date_format = '', $timezone = null ) {
280
+ static $cache_var_name = __FUNCTION__;
281
+
282
  if ( is_null( $event ) ) {
283
  global $post;
284
  $event = $post;
292
  return '';
293
  }
294
 
295
+ $start_dates = tribe_get_var( $cache_var_name, [] );
296
+ $cache_key = "{$event->ID}:{$display_time}:{$date_format}:{$timezone}";
 
297
 
298
+ if ( ! isset( $start_dates[ $cache_key ] ) ) {
299
+ if ( Tribe__Date_Utils::is_all_day( get_post_meta( $event->ID, '_EventAllDay', true ) ) ) {
300
+ $display_time = false;
301
+ }
302
+
303
+ // @todo move timezones to Common
304
+ if ( class_exists( 'Tribe__Events__Timezones' ) ) {
305
+ $start_date = Tribe__Events__Timezones::event_start_timestamp( $event->ID, $timezone );
306
+ } else {
307
+ return null;
308
+ }
309
+
310
+ $start_dates[ $cache_key ] = tribe_format_date( $start_date, $display_time, $date_format );
311
+ tribe_set_var( $cache_var_name, $start_dates );
312
  }
313
 
314
  /**
317
  * @param string $start_date
318
  * @param WP_Post $event
319
  */
320
+ return apply_filters( 'tribe_get_start_date', $start_dates[ $cache_key ], $event );
321
  }
322
  }
323
 
339
  * @return string|null Date
340
  */
341
  function tribe_get_end_date( $event = null, $display_time = true, $date_format = '', $timezone = null ) {
342
+ static $cache_var_name = __FUNCTION__;
343
+
344
  if ( is_null( $event ) ) {
345
  global $post;
346
  $event = $post;
354
  return '';
355
  }
356
 
357
+ $end_dates = tribe_get_var( $cache_var_name, [] );
358
+ $cache_key = "{$event->ID}:{$display_time}:{$date_format}:{$timezone}";
 
359
 
360
+ if ( ! isset( $end_dates[ $cache_key ] ) ) {
361
+ if ( Tribe__Date_Utils::is_all_day( get_post_meta( $event->ID, '_EventAllDay', true ) ) ) {
362
+ $display_time = false;
363
+ }
364
+
365
+ // @todo move timezones to Common
366
+ if ( class_exists( 'Tribe__Events__Timezones' ) ) {
367
+ $end_date = Tribe__Events__Timezones::event_end_timestamp( $event->ID );
368
+ } else {
369
+ return null;
370
+ }
371
+
372
+ $end_dates[ $cache_key ] = tribe_format_date( $end_date, $display_time, $date_format );
373
+ tribe_set_var( $cache_var_name, $end_dates );
374
  }
375
 
376
  /**
379
  * @param string $end_date
380
  * @param WP_Post $event
381
  */
382
+ return apply_filters( 'tribe_get_end_date', $end_dates[ $cache_key ], $event );
383
  }
384
  }
385
 
common/src/functions/template-tags/general.php CHANGED
@@ -215,7 +215,15 @@ if ( ! function_exists( 'tribe_get_time_format' ) ) {
215
  * @return mixed|void
216
  */
217
  function tribe_get_time_format( ) {
218
- $format = get_option( 'time_format' );
 
 
 
 
 
 
 
 
219
  return apply_filters( 'tribe_time_format', $format );
220
  }
221
  }//end if
215
  * @return mixed|void
216
  */
217
  function tribe_get_time_format( ) {
218
+ static $cache_var_name = __FUNCTION__;
219
+
220
+ $format = tribe_get_var( $cache_var_name, null );
221
+
222
+ if ( ! $format ) {
223
+ $format = get_option( 'time_format' );
224
+ tribe_set_var( $cache_var_name, $format );
225
+ }
226
+
227
  return apply_filters( 'tribe_time_format', $format );
228
  }
229
  }//end if
common/src/functions/template-tags/post.php CHANGED
@@ -63,3 +63,32 @@ function tribe_the_content( $more_link_text = null, $strip_teaser = false, $post
63
  echo tribe_get_the_content( $more_link_text, $strip_teaser, $post_id );
64
  }
65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  echo tribe_get_the_content( $more_link_text, $strip_teaser, $post_id );
64
  }
65
 
66
+ /**
67
+ * Wrapper for post_class function that allows us to in-memory cache
68
+ *
69
+ * @since 4.11.0
70
+ *
71
+ * @param string|string[] $class Space-separated string or array of class names to add to the class list.
72
+ * @param int|WP_Post $post_id Optional. Post ID or post object.
73
+ *
74
+ * @return string[] Array of class names.
75
+ */
76
+ function tribe_get_post_class( $class, $post ) {
77
+ static $post_classes = [];
78
+
79
+ if ( is_numeric( $post ) ) {
80
+ $post_id = $post;
81
+ } else {
82
+ $post_id = $post->ID;
83
+ }
84
+
85
+ if ( ! isset( $post_classes[ $post_id ] ) ) {
86
+ $post_classes[ $post_id ] = get_post_class( [], $post );
87
+ }
88
+
89
+ if ( ! is_array( $class ) ) {
90
+ $class = explode( ' ', $class );
91
+ }
92
+
93
+ return array_merge( $class, $post_classes[ $post_id ] );
94
+ }
common/src/resources/css/common-full.css CHANGED
@@ -339,10 +339,6 @@
339
  * SVG - Arrow Right
340
  * ----------------------------------------------------------------------------- */
341
 
342
- /* -----------------------------------------------------------------------------
343
- * SVG - Arrow (light, left)
344
- * ----------------------------------------------------------------------------- */
345
-
346
  /* -----------------------------------------------------------------------------
347
  * SVG - Caret Down
348
  * ----------------------------------------------------------------------------- */
@@ -376,15 +372,15 @@
376
  * ----------------------------------------------------------------------------- */
377
 
378
  /* -----------------------------------------------------------------------------
379
- * SVG - Error
380
  * ----------------------------------------------------------------------------- */
381
 
382
  /* -----------------------------------------------------------------------------
383
- * SVG - Featured
384
  * ----------------------------------------------------------------------------- */
385
 
386
  /* -----------------------------------------------------------------------------
387
- * SVG - Filters
388
  * ----------------------------------------------------------------------------- */
389
 
390
  /* -----------------------------------------------------------------------------
@@ -395,24 +391,40 @@
395
  * SVG - Location
396
  * ----------------------------------------------------------------------------- */
397
 
 
 
 
 
398
  /* -----------------------------------------------------------------------------
399
  * SVG - Map
400
  * ----------------------------------------------------------------------------- */
401
 
 
 
 
 
 
 
 
 
402
  /* -----------------------------------------------------------------------------
403
  * SVG - Month
404
  * ----------------------------------------------------------------------------- */
405
 
406
  /* -----------------------------------------------------------------------------
407
- * SVG - Photo
408
  * ----------------------------------------------------------------------------- */
409
 
410
  /* -----------------------------------------------------------------------------
411
- * SVG - Recurring
 
 
 
 
412
  * ----------------------------------------------------------------------------- */
413
 
414
  /* -----------------------------------------------------------------------------
415
- * SVG - Remove
416
  * ----------------------------------------------------------------------------- */
417
 
418
  /* -----------------------------------------------------------------------------
@@ -545,10 +557,6 @@
545
  * Button - Solid
546
  * ----------------------------------------------------------------------------- */
547
 
548
- /* -----------------------------------------------------------------------------
549
- * Button - Link
550
- * ----------------------------------------------------------------------------- */
551
-
552
  /* -----------------------------------------------------------------------------
553
  * Button - Border
554
  * ----------------------------------------------------------------------------- */
@@ -990,6 +998,16 @@
990
  border-bottom: 1px solid #D5D5D5;
991
  }
992
 
 
 
 
 
 
 
 
 
 
 
993
  .tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder {
994
  color: #727272;
995
  font-style: normal;
@@ -1056,6 +1074,16 @@
1056
  box-shadow: none;
1057
  }
1058
 
 
 
 
 
 
 
 
 
 
 
1059
  .tribe-common {
1060
 
1061
  /* -----------------------------------------------------------------------------
@@ -1316,6 +1344,11 @@
1316
  line-height: 1.62;
1317
  }
1318
 
 
 
 
 
 
1319
  /* -------------------------------------------------------------------------
1320
  *
1321
  * Body
@@ -1341,6 +1374,11 @@
1341
  line-height: 1.38;
1342
  }
1343
 
 
 
 
 
 
1344
  .tribe-common .tribe-common-b2--bold {
1345
  font-weight: 700;
1346
  }
@@ -1357,6 +1395,11 @@
1357
  line-height: 1.5;
1358
  }
1359
 
 
 
 
 
 
1360
  .tribe-common .tribe-common-b3--bold {
1361
  font-weight: 700;
1362
  }
@@ -1365,14 +1408,29 @@
1365
  * Body 1 for --viewport-medium
1366
  * ------------------------------------------------------------------------- */
1367
 
 
 
 
 
 
1368
  /* -------------------------------------------------------------------------
1369
  * Body 2 for --viewport-medium
1370
  * ------------------------------------------------------------------------- */
1371
 
 
 
 
 
 
1372
  /* -------------------------------------------------------------------------
1373
  * Body 3 for --viewport-medium
1374
  * ------------------------------------------------------------------------- */
1375
 
 
 
 
 
 
1376
  .tribe-common {
1377
 
1378
  /* -------------------------------------------------------------------------
@@ -1478,6 +1536,11 @@
1478
  line-height: 1.42;
1479
  }
1480
 
 
 
 
 
 
1481
  /* -------------------------------------------------------------------------
1482
  * Heading: h2
1483
  * ------------------------------------------------------------------------- */
@@ -1490,6 +1553,11 @@
1490
  line-height: 1.42;
1491
  }
1492
 
 
 
 
 
 
1493
  /* -------------------------------------------------------------------------
1494
  * Heading: h3
1495
  * ------------------------------------------------------------------------- */
@@ -1502,6 +1570,11 @@
1502
  line-height: 1.5;
1503
  }
1504
 
 
 
 
 
 
1505
  /* -------------------------------------------------------------------------
1506
  * Heading: h4
1507
  * ------------------------------------------------------------------------- */
@@ -1514,6 +1587,11 @@
1514
  line-height: 1.42;
1515
  }
1516
 
 
 
 
 
 
1517
  /* -------------------------------------------------------------------------
1518
  * Heading: h5
1519
  * ------------------------------------------------------------------------- */
@@ -1538,6 +1616,11 @@
1538
  line-height: 1.5;
1539
  }
1540
 
 
 
 
 
 
1541
  /* -------------------------------------------------------------------------
1542
  * Heading: h7
1543
  * ------------------------------------------------------------------------- */
@@ -1566,22 +1649,47 @@
1566
  * Heading: h3 for --viewport-medium
1567
  * ------------------------------------------------------------------------- */
1568
 
 
 
 
 
 
1569
  /* -------------------------------------------------------------------------
1570
  * Heading: h4 for --viewport-medium
1571
  * ------------------------------------------------------------------------- */
1572
 
 
 
 
 
 
1573
  /* -------------------------------------------------------------------------
1574
  * Heading: h5 for --viewport-medium
1575
  * ------------------------------------------------------------------------- */
1576
 
 
 
 
 
 
1577
  /* -------------------------------------------------------------------------
1578
  * Heading: h6 for --viewport-medium
1579
  * ------------------------------------------------------------------------- */
1580
 
 
 
 
 
 
1581
  /* -------------------------------------------------------------------------
1582
  * Heading: h7 for --viewport-medium
1583
  * ------------------------------------------------------------------------- */
1584
 
 
 
 
 
 
1585
  /* -------------------------------------------------------------------------
1586
  * Heading: alt style
1587
  * ------------------------------------------------------------------------- */
@@ -1606,6 +1714,11 @@
1606
  line-height: 1.42;
1607
  }
1608
 
 
 
 
 
 
1609
  /* -------------------------------------------------------------------------
1610
  * Heading: h2
1611
  * ------------------------------------------------------------------------- */
@@ -1618,6 +1731,11 @@
1618
  line-height: 1.42;
1619
  }
1620
 
 
 
 
 
 
1621
  /* -------------------------------------------------------------------------
1622
  * Heading: h3
1623
  * ------------------------------------------------------------------------- */
@@ -1630,6 +1748,11 @@
1630
  line-height: 1.5;
1631
  }
1632
 
 
 
 
 
 
1633
  /* -------------------------------------------------------------------------
1634
  * Heading: h4
1635
  * ------------------------------------------------------------------------- */
@@ -1642,6 +1765,11 @@
1642
  line-height: 1.42;
1643
  }
1644
 
 
 
 
 
 
1645
  /* -------------------------------------------------------------------------
1646
  * Heading: h5
1647
  * ------------------------------------------------------------------------- */
@@ -1666,6 +1794,11 @@
1666
  line-height: 1.5;
1667
  }
1668
 
 
 
 
 
 
1669
  /* -------------------------------------------------------------------------
1670
  * Heading: h7
1671
  * ------------------------------------------------------------------------- */
@@ -1694,22 +1827,47 @@
1694
  * Heading: h3 for --viewport-medium
1695
  * ------------------------------------------------------------------------- */
1696
 
 
 
 
 
 
1697
  /* -------------------------------------------------------------------------
1698
  * Heading: h4 for --viewport-medium
1699
  * ------------------------------------------------------------------------- */
1700
 
 
 
 
 
 
1701
  /* -------------------------------------------------------------------------
1702
  * Heading: h5 for --viewport-medium
1703
  * ------------------------------------------------------------------------- */
1704
 
 
 
 
 
 
1705
  /* -------------------------------------------------------------------------
1706
  * Heading: h6 for --viewport-medium
1707
  * ------------------------------------------------------------------------- */
1708
 
 
 
 
 
 
1709
  /* -------------------------------------------------------------------------
1710
  * Heading: h7 for --viewport-medium
1711
  * ------------------------------------------------------------------------- */
1712
 
 
 
 
 
 
1713
  /* -------------------------------------------------------------------------
1714
  * Heading: alt style
1715
  * ------------------------------------------------------------------------- */
@@ -1876,6 +2034,10 @@
1876
  border-color: #141827;
1877
  }
1878
 
 
 
 
 
1879
  .tribe-common .tribe-common-c-btn-border:active,
1880
  .tribe-common .tribe-common-c-btn-border:focus,
1881
  .tribe-common .tribe-common-c-btn-border:hover,
@@ -2024,10 +2186,15 @@
2024
  -webkit-transition: background-color 0.2s ease;
2025
  transition: background-color 0.2s ease;
2026
 
2027
- padding: 11px 20px 11px;
2028
  background-color: #334AFF;
 
 
2029
  }
2030
 
 
 
 
 
2031
  .tribe-common .tribe-common-c-btn:focus,
2032
  .tribe-common .tribe-common-c-btn:hover,
2033
  .tribe-common a.tribe-common-c-btn:focus,
@@ -2140,161 +2307,3 @@
2140
 
2141
  100% {}
2142
  }
2143
-
2144
- @media (min-width: 768px) {
2145
-
2146
- .tribe-common .tribe-common-form-control-text__input {
2147
- color: #141827;
2148
- font-family: "Helvetica Neue", Helvetica, -apple-system, BlinkMacSystemFont, Roboto, Arial, sans-serif;
2149
- font-size: 14px;
2150
- line-height: 1.62;
2151
- font-weight: 400;
2152
-
2153
- border: 0
2154
- }
2155
-
2156
- #top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input {
2157
- color: #141827;
2158
- font-family: "Helvetica Neue", Helvetica, -apple-system, BlinkMacSystemFont, Roboto, Arial, sans-serif;
2159
- font-size: 14px;
2160
- line-height: 1.62;
2161
- font-weight: 400;
2162
-
2163
- border: 0
2164
- }
2165
-
2166
- .tribe-common .tribe-common-b1 {
2167
- font-size: 16px;
2168
- line-height: 1.62
2169
- }
2170
-
2171
- .tribe-common .tribe-common-b2 {
2172
- font-size: 14px;
2173
- line-height: 1.62
2174
- }
2175
-
2176
- .tribe-common .tribe-common-b3 {
2177
- font-size: 12px;
2178
- line-height: 1.38
2179
- }
2180
-
2181
- .tribe-common .tribe-common-b1--min-medium {
2182
- font-size: 16px;
2183
- line-height: 1.62
2184
- }
2185
-
2186
- .tribe-common .tribe-common-b2--min-medium {
2187
- font-size: 14px;
2188
- line-height: 1.62
2189
- }
2190
-
2191
- .tribe-common .tribe-common-b3--min-medium {
2192
- font-size: 12px;
2193
- line-height: 1.38
2194
- }
2195
-
2196
- .tribe-common .tribe-common-h1 {
2197
- font-size: 42px;
2198
- line-height: 1.38
2199
- }
2200
-
2201
- .tribe-common .tribe-common-h2 {
2202
- font-size: 32px;
2203
- line-height: 1.38
2204
- }
2205
-
2206
- .tribe-common .tribe-common-h3 {
2207
- font-size: 28px;
2208
- line-height: 1.42
2209
- }
2210
-
2211
- .tribe-common .tribe-common-h4 {
2212
- font-size: 24px;
2213
- line-height: 1.42
2214
- }
2215
-
2216
- .tribe-common .tribe-common-h6 {
2217
- font-size: 16px;
2218
- line-height: 1.62
2219
- }
2220
-
2221
- .tribe-common .tribe-common-h3--min-medium {
2222
- font-size: 28px;
2223
- line-height: 1.42
2224
- }
2225
-
2226
- .tribe-common .tribe-common-h4--min-medium {
2227
- font-size: 24px;
2228
- line-height: 1.42
2229
- }
2230
-
2231
- .tribe-common .tribe-common-h5--min-medium {
2232
- font-size: 18px;
2233
- line-height: 1.5
2234
- }
2235
-
2236
- .tribe-common .tribe-common-h6--min-medium {
2237
- font-size: 16px;
2238
- line-height: 1.62
2239
- }
2240
-
2241
- .tribe-common .tribe-common-h7--min-medium {
2242
- font-size: 14px;
2243
- line-height: 1.62
2244
- }
2245
-
2246
- .tribe-theme-avada #main .tribe-common .tribe-common-h1 {
2247
- font-size: 42px;
2248
- line-height: 1.38
2249
- }
2250
-
2251
- .tribe-theme-avada #main .tribe-common .tribe-common-h2 {
2252
- font-size: 32px;
2253
- line-height: 1.38
2254
- }
2255
-
2256
- .tribe-theme-avada #main .tribe-common .tribe-common-h3 {
2257
- font-size: 28px;
2258
- line-height: 1.42
2259
- }
2260
-
2261
- .tribe-theme-avada #main .tribe-common .tribe-common-h4 {
2262
- font-size: 24px;
2263
- line-height: 1.42
2264
- }
2265
-
2266
- .tribe-theme-avada #main .tribe-common .tribe-common-h6 {
2267
- font-size: 16px;
2268
- line-height: 1.62
2269
- }
2270
-
2271
- .tribe-theme-avada #main .tribe-common .tribe-common-h3--min-medium {
2272
- font-size: 28px;
2273
- line-height: 1.42
2274
- }
2275
-
2276
- .tribe-theme-avada #main .tribe-common .tribe-common-h4--min-medium {
2277
- font-size: 24px;
2278
- line-height: 1.42
2279
- }
2280
-
2281
- .tribe-theme-avada #main .tribe-common .tribe-common-h5--min-medium {
2282
- font-size: 18px;
2283
- line-height: 1.5
2284
- }
2285
-
2286
- .tribe-theme-avada #main .tribe-common .tribe-common-h6--min-medium {
2287
- font-size: 16px;
2288
- line-height: 1.62
2289
- }
2290
-
2291
- .tribe-theme-avada #main .tribe-common .tribe-common-h7--min-medium {
2292
- font-size: 14px;
2293
- line-height: 1.62
2294
- }
2295
-
2296
- .tribe-common .tribe-common-c-btn-border,
2297
- .tribe-common a.tribe-common-c-btn-border {
2298
- padding: 6px 15px
2299
- }
2300
- }
339
  * SVG - Arrow Right
340
  * ----------------------------------------------------------------------------- */
341
 
 
 
 
 
342
  /* -----------------------------------------------------------------------------
343
  * SVG - Caret Down
344
  * ----------------------------------------------------------------------------- */
372
  * ----------------------------------------------------------------------------- */
373
 
374
  /* -----------------------------------------------------------------------------
375
+ * SVG - Featured
376
  * ----------------------------------------------------------------------------- */
377
 
378
  /* -----------------------------------------------------------------------------
379
+ * SVG - Filters
380
  * ----------------------------------------------------------------------------- */
381
 
382
  /* -----------------------------------------------------------------------------
383
+ * SVG - Link
384
  * ----------------------------------------------------------------------------- */
385
 
386
  /* -----------------------------------------------------------------------------
391
  * SVG - Location
392
  * ----------------------------------------------------------------------------- */
393
 
394
+ /* -----------------------------------------------------------------------------
395
+ * SVG - Mail
396
+ * ----------------------------------------------------------------------------- */
397
+
398
  /* -----------------------------------------------------------------------------
399
  * SVG - Map
400
  * ----------------------------------------------------------------------------- */
401
 
402
+ /* -----------------------------------------------------------------------------
403
+ * SVG - Map pin
404
+ * ----------------------------------------------------------------------------- */
405
+
406
+ /* -----------------------------------------------------------------------------
407
+ * SVG - Messages
408
+ * ----------------------------------------------------------------------------- */
409
+
410
  /* -----------------------------------------------------------------------------
411
  * SVG - Month
412
  * ----------------------------------------------------------------------------- */
413
 
414
  /* -----------------------------------------------------------------------------
415
+ * SVG - No Map
416
  * ----------------------------------------------------------------------------- */
417
 
418
  /* -----------------------------------------------------------------------------
419
+ * SVG - Phone
420
+ * ----------------------------------------------------------------------------- */
421
+
422
+ /* -----------------------------------------------------------------------------
423
+ * SVG - Photo
424
  * ----------------------------------------------------------------------------- */
425
 
426
  /* -----------------------------------------------------------------------------
427
+ * SVG - Recurring
428
  * ----------------------------------------------------------------------------- */
429
 
430
  /* -----------------------------------------------------------------------------
557
  * Button - Solid
558
  * ----------------------------------------------------------------------------- */
559
 
 
 
 
 
560
  /* -----------------------------------------------------------------------------
561
  * Button - Border
562
  * ----------------------------------------------------------------------------- */
998
  border-bottom: 1px solid #D5D5D5;
999
  }
1000
 
1001
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input {
1002
+ color: #141827;
1003
+ font-family: "Helvetica Neue", Helvetica, -apple-system, BlinkMacSystemFont, Roboto, Arial, sans-serif;
1004
+ font-size: 14px;
1005
+ line-height: 1.62;
1006
+ font-weight: 400;
1007
+
1008
+ border: 0;
1009
+ }
1010
+
1011
  .tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder {
1012
  color: #727272;
1013
  font-style: normal;
1074
  box-shadow: none;
1075
  }
1076
 
1077
+ #top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input {
1078
+ color: #141827;
1079
+ font-family: "Helvetica Neue", Helvetica, -apple-system, BlinkMacSystemFont, Roboto, Arial, sans-serif;
1080
+ font-size: 14px;
1081
+ line-height: 1.62;
1082
+ font-weight: 400;
1083
+
1084
+ border: 0;
1085
+ }
1086
+
1087
  .tribe-common {
1088
 
1089
  /* -----------------------------------------------------------------------------
1344
  line-height: 1.62;
1345
  }
1346
 
1347
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-b1 {
1348
+ font-size: 16px;
1349
+ line-height: 1.62;
1350
+ }
1351
+
1352
  /* -------------------------------------------------------------------------
1353
  *
1354
  * Body
1374
  line-height: 1.38;
1375
  }
1376
 
1377
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-b2 {
1378
+ font-size: 14px;
1379
+ line-height: 1.62;
1380
+ }
1381
+
1382
  .tribe-common .tribe-common-b2--bold {
1383
  font-weight: 700;
1384
  }
1395
  line-height: 1.5;
1396
  }
1397
 
1398
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-b3 {
1399
+ font-size: 12px;
1400
+ line-height: 1.38;
1401
+ }
1402
+
1403
  .tribe-common .tribe-common-b3--bold {
1404
  font-weight: 700;
1405
  }
1408
  * Body 1 for --viewport-medium
1409
  * ------------------------------------------------------------------------- */
1410
 
1411
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-b1--min-medium {
1412
+ font-size: 16px;
1413
+ line-height: 1.62;
1414
+ }
1415
+
1416
  /* -------------------------------------------------------------------------
1417
  * Body 2 for --viewport-medium
1418
  * ------------------------------------------------------------------------- */
1419
 
1420
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-b2--min-medium {
1421
+ font-size: 14px;
1422
+ line-height: 1.62;
1423
+ }
1424
+
1425
  /* -------------------------------------------------------------------------
1426
  * Body 3 for --viewport-medium
1427
  * ------------------------------------------------------------------------- */
1428
 
1429
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-b3--min-medium {
1430
+ font-size: 12px;
1431
+ line-height: 1.38;
1432
+ }
1433
+
1434
  .tribe-common {
1435
 
1436
  /* -------------------------------------------------------------------------
1536
  line-height: 1.42;
1537
  }
1538
 
1539
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h1 {
1540
+ font-size: 42px;
1541
+ line-height: 1.38;
1542
+ }
1543
+
1544
  /* -------------------------------------------------------------------------
1545
  * Heading: h2
1546
  * ------------------------------------------------------------------------- */
1553
  line-height: 1.42;
1554
  }
1555
 
1556
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h2 {
1557
+ font-size: 32px;
1558
+ line-height: 1.38;
1559
+ }
1560
+
1561
  /* -------------------------------------------------------------------------
1562
  * Heading: h3
1563
  * ------------------------------------------------------------------------- */
1570
  line-height: 1.5;
1571
  }
1572
 
1573
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h3 {
1574
+ font-size: 28px;
1575
+ line-height: 1.42;
1576
+ }
1577
+
1578
  /* -------------------------------------------------------------------------
1579
  * Heading: h4
1580
  * ------------------------------------------------------------------------- */
1587
  line-height: 1.42;
1588
  }
1589
 
1590
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h4 {
1591
+ font-size: 24px;
1592
+ line-height: 1.42;
1593
+ }
1594
+
1595
  /* -------------------------------------------------------------------------
1596
  * Heading: h5
1597
  * ------------------------------------------------------------------------- */
1616
  line-height: 1.5;
1617
  }
1618
 
1619
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h6 {
1620
+ font-size: 16px;
1621
+ line-height: 1.62;
1622
+ }
1623
+
1624
  /* -------------------------------------------------------------------------
1625
  * Heading: h7
1626
  * ------------------------------------------------------------------------- */
1649
  * Heading: h3 for --viewport-medium
1650
  * ------------------------------------------------------------------------- */
1651
 
1652
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h3--min-medium {
1653
+ font-size: 28px;
1654
+ line-height: 1.42;
1655
+ }
1656
+
1657
  /* -------------------------------------------------------------------------
1658
  * Heading: h4 for --viewport-medium
1659
  * ------------------------------------------------------------------------- */
1660
 
1661
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h4--min-medium {
1662
+ font-size: 24px;
1663
+ line-height: 1.42;
1664
+ }
1665
+
1666
  /* -------------------------------------------------------------------------
1667
  * Heading: h5 for --viewport-medium
1668
  * ------------------------------------------------------------------------- */
1669
 
1670
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h5--min-medium {
1671
+ font-size: 18px;
1672
+ line-height: 1.5;
1673
+ }
1674
+
1675
  /* -------------------------------------------------------------------------
1676
  * Heading: h6 for --viewport-medium
1677
  * ------------------------------------------------------------------------- */
1678
 
1679
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h6--min-medium {
1680
+ font-size: 16px;
1681
+ line-height: 1.62;
1682
+ }
1683
+
1684
  /* -------------------------------------------------------------------------
1685
  * Heading: h7 for --viewport-medium
1686
  * ------------------------------------------------------------------------- */
1687
 
1688
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-h7--min-medium {
1689
+ font-size: 14px;
1690
+ line-height: 1.62;
1691
+ }
1692
+
1693
  /* -------------------------------------------------------------------------
1694
  * Heading: alt style
1695
  * ------------------------------------------------------------------------- */
1714
  line-height: 1.42;
1715
  }
1716
 
1717
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h1 {
1718
+ font-size: 42px;
1719
+ line-height: 1.38;
1720
+ }
1721
+
1722
  /* -------------------------------------------------------------------------
1723
  * Heading: h2
1724
  * ------------------------------------------------------------------------- */
1731
  line-height: 1.42;
1732
  }
1733
 
1734
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h2 {
1735
+ font-size: 32px;
1736
+ line-height: 1.38;
1737
+ }
1738
+
1739
  /* -------------------------------------------------------------------------
1740
  * Heading: h3
1741
  * ------------------------------------------------------------------------- */
1748
  line-height: 1.5;
1749
  }
1750
 
1751
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3 {
1752
+ font-size: 28px;
1753
+ line-height: 1.42;
1754
+ }
1755
+
1756
  /* -------------------------------------------------------------------------
1757
  * Heading: h4
1758
  * ------------------------------------------------------------------------- */
1765
  line-height: 1.42;
1766
  }
1767
 
1768
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4 {
1769
+ font-size: 24px;
1770
+ line-height: 1.42;
1771
+ }
1772
+
1773
  /* -------------------------------------------------------------------------
1774
  * Heading: h5
1775
  * ------------------------------------------------------------------------- */
1794
  line-height: 1.5;
1795
  }
1796
 
1797
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6 {
1798
+ font-size: 16px;
1799
+ line-height: 1.62;
1800
+ }
1801
+
1802
  /* -------------------------------------------------------------------------
1803
  * Heading: h7
1804
  * ------------------------------------------------------------------------- */
1827
  * Heading: h3 for --viewport-medium
1828
  * ------------------------------------------------------------------------- */
1829
 
1830
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3--min-medium {
1831
+ font-size: 28px;
1832
+ line-height: 1.42;
1833
+ }
1834
+
1835
  /* -------------------------------------------------------------------------
1836
  * Heading: h4 for --viewport-medium
1837
  * ------------------------------------------------------------------------- */
1838
 
1839
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4--min-medium {
1840
+ font-size: 24px;
1841
+ line-height: 1.42;
1842
+ }
1843
+
1844
  /* -------------------------------------------------------------------------
1845
  * Heading: h5 for --viewport-medium
1846
  * ------------------------------------------------------------------------- */
1847
 
1848
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h5--min-medium {
1849
+ font-size: 18px;
1850
+ line-height: 1.5;
1851
+ }
1852
+
1853
  /* -------------------------------------------------------------------------
1854
  * Heading: h6 for --viewport-medium
1855
  * ------------------------------------------------------------------------- */
1856
 
1857
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6--min-medium {
1858
+ font-size: 16px;
1859
+ line-height: 1.62;
1860
+ }
1861
+
1862
  /* -------------------------------------------------------------------------
1863
  * Heading: h7 for --viewport-medium
1864
  * ------------------------------------------------------------------------- */
1865
 
1866
+ .tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h7--min-medium {
1867
+ font-size: 14px;
1868
+ line-height: 1.62;
1869
+ }
1870
+
1871
  /* -------------------------------------------------------------------------
1872
  * Heading: alt style
1873
  * ------------------------------------------------------------------------- */
2034
  border-color: #141827;
2035
  }
2036
 
2037
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border, .tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border {
2038
+ padding: 6px 15px;
2039
+ }
2040
+
2041
  .tribe-common .tribe-common-c-btn-border:active,
2042
  .tribe-common .tribe-common-c-btn-border:focus,
2043
  .tribe-common .tribe-common-c-btn-border:hover,
2186
  -webkit-transition: background-color 0.2s ease;
2187
  transition: background-color 0.2s ease;
2188
 
 
2189
  background-color: #334AFF;
2190
+ padding: 11px 20px 11px;
2191
+ width: 100%;
2192
  }
2193
 
2194
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn, .tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn {
2195
+ width: auto;
2196
+ }
2197
+
2198
  .tribe-common .tribe-common-c-btn:focus,
2199
  .tribe-common .tribe-common-c-btn:hover,
2200
  .tribe-common a.tribe-common-c-btn:focus,
2307
 
2308
  100% {}
2309
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/resources/css/common-full.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}.tribe-theme-twentynineteen .tribe-common h1:before,.tribe-theme-twentynineteen .tribe-common h2:before{content:none}.tribe-theme-twentynineteen .tribe-common button,.tribe-theme-twentynineteen .tribe-common input[type=button],.tribe-theme-twentynineteen .tribe-common input[type=reset],.tribe-theme-twentynineteen .tribe-common input[type=submit]{outline:none}.tribe-theme-twentynineteen .tribe-common td,.tribe-theme-twentynineteen .tribe-common th{word-break:normal}.tribe-theme-twentyseventeen .tribe-common h5{letter-spacing:normal;text-transform:none}.tribe-theme-twentyseventeen .tribe-common input[type=text]{border-radius:0}.tribe-theme-twentytwenty .tribe-common{background-color:#fff;letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common input,.tribe-theme-twentytwenty .tribe-common textarea{letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common *{word-break:normal}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;color:#727272}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;height:20px;position:relative;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border:1px solid #141827}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23FFF'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input::-moz-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-text__input{line-height:inherit}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}.tribe-common .tribe-common-form-control-toggle{line-height:0}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d5d5d5;width:40px}.tribe-common .tribe-common-form-control-toggle__input:after{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:-5px;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked:after{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.tribe-theme-twentyseventeen .tribe-common a{box-shadow:none}.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a,.tribe-theme-twentynineteen .tribe-common a{text-decoration:none}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover{color:#334aff}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{font-size:28px}.tribe-common .tribe-common-h1,.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.42}.tribe-common .tribe-common-h2{font-size:24px}.tribe-common .tribe-common-h3{font-size:22px;line-height:1.5}.tribe-common .tribe-common-h3,.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h4{font-size:20px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{font-size:28px}.tribe-theme-avada #main .tribe-common .tribe-common-h1,.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h2{font-size:24px}.tribe-theme-avada #main .tribe-common .tribe-common-h3{font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h3,.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h4{font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-common button{border:none}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-theme-twentytwenty .tribe-common button{background-color:transparent;text-transform:inherit}.tribe-theme-twentytwenty .tribe-common button:focus,.tribe-theme-twentytwenty .tribe-common button:hover{text-decoration:none}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease;color:#727272;padding:14px 20px}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{border-color:#141827}.tribe-common .tribe-common-c-btn-border:active,.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#141827}.tribe-common .tribe-common-c-btn-border:disabled,.tribe-common a.tribe-common-c-btn-border:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon--border{background-color:#fff;border:1px solid #d5d5d5;align-items:center;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;padding:11px 20px;background-color:#334aff}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn{background-color:#334aff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-common .tribe-common-c-loader__dot{animation-name:a;animation-duration:2.24s;animation-iteration-count:infinite;animation-direction:normal}.tribe-common .tribe-common-c-loader__dot--first{animation-delay:.45s}.tribe-common .tribe-common-c-loader__dot--second{animation-delay:1.05s}.tribe-common .tribe-common-c-loader__dot--third{animation-delay:1.35s}@keyframes a{50%{background-color:#334aff}}@media (min-width:768px){#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0}.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:6px 15px}}
1
+ .tribe-common figure{line-height:0}.tribe-common figcaption{line-height:normal}.tribe-common a{background-color:transparent;-webkit-text-decoration-skip:objects}.tribe-common abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tribe-common code,.tribe-common kbd,.tribe-common pre,.tribe-common samp{font-family:monospace;font-size:1em}.tribe-common b,.tribe-common strong{font-weight:inherit;font-weight:bolder}.tribe-common dfn{font-style:italic}.tribe-common mark{background-color:#ff0;color:#000}.tribe-common small{font-size:80%}.tribe-common sub,.tribe-common sup{font-size:75%;line-height:0}.tribe-common hr{border:0;height:0}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=email],.tribe-common input[type=password],.tribe-common input[type=reset],.tribe-common input[type=search],.tribe-common input[type=submit],.tribe-common input[type=text],.tribe-common input[type=url],.tribe-common textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none}.tribe-common button,.tribe-common input,.tribe-common optgroup,.tribe-common select,.tribe-common textarea{color:inherit;font:inherit;line-height:normal;-webkit-font-smoothing:antialiased}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{outline:0;border-radius:0}.tribe-common select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000}.tribe-common optgroup{font-weight:700}.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common p{font-weight:400;text-rendering:optimizeLegibility}.tribe-theme-twentynineteen .tribe-common h1:before,.tribe-theme-twentynineteen .tribe-common h2:before{content:none}.tribe-theme-twentynineteen .tribe-common button,.tribe-theme-twentynineteen .tribe-common input[type=button],.tribe-theme-twentynineteen .tribe-common input[type=reset],.tribe-theme-twentynineteen .tribe-common input[type=submit]{outline:none}.tribe-theme-twentynineteen .tribe-common td,.tribe-theme-twentynineteen .tribe-common th{word-break:normal}.tribe-theme-twentyseventeen .tribe-common h5{letter-spacing:normal;text-transform:none}.tribe-theme-twentyseventeen .tribe-common input[type=text]{border-radius:0}.tribe-theme-twentytwenty .tribe-common{background-color:#fff;letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common input,.tribe-theme-twentytwenty .tribe-common textarea{letter-spacing:normal}.tribe-theme-twentytwenty .tribe-common *{word-break:normal}.tribe-common .tribe-common-form-control-checkbox,.tribe-common .tribe-common-form-control-radio{line-height:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;color:#727272}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border:1px solid #141827;height:20px;position:relative;width:20px}.tribe-common .tribe-common-form-control-checkbox__input:active,.tribe-common .tribe-common-form-control-checkbox__input:focus,.tribe-common .tribe-common-form-control-checkbox__input:hover,.tribe-common .tribe-common-form-control-radio__input:active,.tribe-common .tribe-common-form-control-radio__input:focus,.tribe-common .tribe-common-form-control-radio__input:hover{border:1px solid #141827}.tribe-common .tribe-common-form-control-checkbox__input:checked,.tribe-common .tribe-common-form-control-radio__input:checked{background-color:#141827}.tribe-common .tribe-common-form-control-checkbox__input:checked:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='9' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M10.6.1L3.9 6.8 1.4 4.3c-.1-.1-.3-.1-.4 0l-.8.8c-.1.1-.1.3 0 .4l3.4 3.4c.2.1.4.1.5 0l7.7-7.7c.1-.1.1-.3 0-.4L11 .1c-.1-.1-.3-.1-.4 0z' fill='%23FFF'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;height:9px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:12px}.tribe-common .tribe-common-form-control-radio__input{border-radius:50%}.tribe-common .tribe-common-form-control-radio__input:checked:before{background-color:#fff;border-radius:50%;content:"";display:block;height:8px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:8px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__label,#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-radio__label{font-weight:400;font-size:14px}.tribe-common .tribe-common-form-control-slider{line-height:0}.tribe-common .tribe-common-form-control-slider__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-runnable-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-moz-range-track{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;background-color:#334aff}.tribe-common .tribe-common-form-control-slider__input::-ms-track{background-color:transparent;border-color:transparent;border-width:5px 0;color:transparent;height:10px}.tribe-common .tribe-common-form-control-slider__input::-ms-fill-lower,.tribe-common .tribe-common-form-control-slider__input::-ms-fill-upper{background-color:#334aff;border-radius:10px}.tribe-common .tribe-common-form-control-slider__input::-webkit-slider-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;-webkit-appearance:none;appearance:none}.tribe-common .tribe-common-form-control-slider__input::-moz-range-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px}.tribe-common .tribe-common-form-control-slider__input::-ms-thumb{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;margin-top:-5px;box-shadow:none;margin-top:-1px}.tribe-common .tribe-common-form-control-slider__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-slider__label{font-weight:400;font-size:12px}.tribe-common .tribe-common-form-control-text__input{font-size:16px;border:0;border-bottom:1px solid #d5d5d5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;line-height:1.62;font-weight:400}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{font-size:14px;border:0}.tribe-common .tribe-common-form-control-text__input::-webkit-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input::-moz-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:-ms-input-placeholder,.tribe-common .tribe-common-form-control-text__input::-ms-input-placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input::placeholder{color:#727272;font-style:normal}.tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;outline:0}.tribe-theme-twentyseventeen .tribe-common .tribe-common-form-control-text__input{color:#141827}.tribe-theme-twentytwenty .tribe-common .tribe-common-form-control-text__input{line-height:inherit}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400;border:0;border-bottom:1px solid #d5d5d5}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input:focus{border-bottom-color:#141827;box-shadow:none}#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;border:0}.tribe-common .tribe-common-form-control-toggle{line-height:0}.tribe-common .tribe-common-form-control-toggle__input{border:none;border-radius:5px;height:10px;margin:5px 0;padding:0;position:relative;transition:background-color .2s ease;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#d5d5d5;width:40px}.tribe-common .tribe-common-form-control-toggle__input:after{background-color:#fff;border:1px solid #d5d5d5;border-radius:50%;box-shadow:0 2px 5px 0 rgba(0,0,0,.14);height:20px;width:20px;content:"";left:0;position:absolute;top:-5px;transition:transform .2s ease}.tribe-common .tribe-common-form-control-toggle__input:checked{background-color:#334aff}.tribe-common .tribe-common-form-control-toggle__input:checked:after{transform:translateX(20px)}.tribe-common .tribe-common-form-control-toggle__label{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;color:#727272}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__label{font-weight:400;font-size:12px}.tribe-common a,.tribe-common a:active,.tribe-common a:focus,.tribe-common a:hover,.tribe-common a:visited{color:#141827;outline:0;text-decoration:none}.tribe-theme-twentyseventeen .tribe-common a{box-shadow:none}.tribe-theme-twentyseventeen .tribe-common a:focus,.tribe-theme-twentyseventeen .tribe-common a:hover{box-shadow:none;color:#141827}.tribe-theme-twentynineteen .entry .tribe-common a,.tribe-theme-twentynineteen .tribe-common a{text-decoration:none}.tribe-common .tribe-common-anchor{border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor:active,.tribe-common .tribe-common-anchor:focus,.tribe-common .tribe-common-anchor:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-anchor-alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-anchor-alt:active,.tribe-common .tribe-common-anchor-alt:focus,.tribe-common .tribe-common-anchor-alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-anchor-thin{border-bottom:1px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-anchor-thin:active,.tribe-common .tribe-common-anchor-thin:focus,.tribe-common .tribe-common-anchor-thin:hover{border-bottom:1px solid #141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-anchor-alt:hover{color:#334aff}.tribe-common .tribe-common-b1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;font-weight:400;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1{font-size:16px;line-height:1.62}.tribe-common .tribe-common-b1--bold{font-weight:700}.tribe-common .tribe-common-b2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2{font-size:14px;line-height:1.62}.tribe-common .tribe-common-b2--bold{font-weight:700}.tribe-common .tribe-common-b3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3{font-size:12px;line-height:1.38}.tribe-common .tribe-common-b3--bold{font-weight:700}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b1--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b2--min-medium{font-size:14px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-b3--min-medium{font-size:12px;line-height:1.38}.tribe-common .tribe-common-cta{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;font-weight:700;border-bottom:2px solid transparent;transition:border-color .2s ease}.tribe-common .tribe-common-cta:active,.tribe-common .tribe-common-cta:focus,.tribe-common .tribe-common-cta:hover{border-bottom:2px solid #141827}.tribe-common .tribe-common-cta--alt{border-bottom:2px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--alt:active,.tribe-common .tribe-common-cta--alt:focus,.tribe-common .tribe-common-cta--alt:hover{border-bottom:2px solid #334aff;color:#334aff}.tribe-common .tribe-common-cta--thin-alt{border-bottom:1px solid #334aff;color:#141827;transition:color .2s ease}.tribe-common .tribe-common-cta--thin-alt:active,.tribe-common .tribe-common-cta--thin-alt:focus,.tribe-common .tribe-common-cta--thin-alt:hover{border-bottom:1px solid #334aff;color:#334aff}.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--alt:hover,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-cta--thin-alt:hover{color:#334aff}.tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-common .tribe-common-h5{font-size:18px}.tribe-common .tribe-common-h5,.tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-common .tribe-common-h6{font-size:16px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h7,.tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-common--breakpoint-medium.tribe-common .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-common .tribe-common-h--alt{font-weight:400}.tribe-theme-avada #main .tribe-common .tribe-common-h1{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h1{font-size:42px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h2{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h2{font-size:32px;line-height:1.38}.tribe-theme-avada #main .tribe-common .tribe-common-h3{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:22px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h4{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;font-size:20px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common .tribe-common-h5{font-size:18px}.tribe-theme-avada #main .tribe-common .tribe-common-h5,.tribe-theme-avada #main .tribe-common .tribe-common-h6{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700;line-height:1.5}.tribe-theme-avada #main .tribe-common .tribe-common-h6{font-size:16px}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h7,.tribe-theme-avada #main .tribe-common .tribe-common-h8{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:700}.tribe-theme-avada #main .tribe-common .tribe-common-h8{font-size:12px;line-height:1.38}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h3--min-medium{font-size:28px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h4--min-medium{font-size:24px;line-height:1.42}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h5--min-medium{font-size:18px;line-height:1.5}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h6--min-medium{font-size:16px;line-height:1.62}.tribe-theme-avada #main .tribe-common.tribe-common--breakpoint-medium .tribe-common-h7--min-medium{font-size:14px;line-height:1.62}.tribe-theme-avada #main .tribe-common .tribe-common-h--alt{font-weight:400}.tribe-common button{border:none}.tribe-common button,.tribe-common button:focus,.tribe-common button:hover,.tribe-theme-twentyseventeen .tribe-common button:focus,.tribe-theme-twentyseventeen .tribe-common button:hover{background-color:transparent}.tribe-theme-twentytwenty .tribe-common button{background-color:transparent;text-transform:inherit}.tribe-theme-twentytwenty .tribe-common button:focus,.tribe-theme-twentytwenty .tribe-common button:hover{text-decoration:none}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-theme-enfold .tribe-common th{letter-spacing:0;text-transform:none}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;text-align:center;transition:color .2s ease,border-color .2s ease;color:#727272;padding:14px 20px}.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:active{border-color:#141827}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{padding:6px 15px}.tribe-common .tribe-common-c-btn-border:active,.tribe-common .tribe-common-c-btn-border:focus,.tribe-common .tribe-common-c-btn-border:hover,.tribe-common a.tribe-common-c-btn-border:active,.tribe-common a.tribe-common-c-btn-border:focus,.tribe-common a.tribe-common-c-btn-border:hover{color:#141827}.tribe-common .tribe-common-c-btn-border:disabled,.tribe-common a.tribe-common-c-btn-border:disabled{color:#d5d5d5}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon{border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto}.tribe-common .tribe-common-c-btn-icon--border{background-color:#fff;border:1px solid #d5d5d5;align-items:center;display:inline-flex;height:56px;justify-content:center;transition:none;width:56px}.tribe-common .tribe-common-c-btn-icon--border:focus,.tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn-icon--border:active{border-color:#141827}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn-icon--border:hover{background-color:#fff}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700;border:0;cursor:pointer;display:inline-block;height:auto;padding:0;text-decoration:none;width:auto;border-radius:4px;color:#fff;text-align:center;transition:background-color .2s ease;background-color:#334aff;padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-btn:focus,.tribe-common .tribe-common-c-btn:hover,.tribe-common a.tribe-common-c-btn:focus,.tribe-common a.tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8)}.tribe-common .tribe-common-c-btn:active,.tribe-common a.tribe-common-c-btn:active{background-color:rgba(51,74,255,.9)}.tribe-common .tribe-common-c-btn:disabled,.tribe-common a.tribe-common-c-btn:disabled{background-color:rgba(51,74,255,.07)}.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentyseventeen .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn{background-color:#334aff}.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:focus,.tribe-theme-twentytwenty .tribe-common .tribe-common-c-btn:hover{background-color:rgba(51,74,255,.8);color:#fff}.tribe-common .tribe-common-c-loader__dot{animation-name:a;animation-duration:2.24s;animation-iteration-count:infinite;animation-direction:normal}.tribe-common .tribe-common-c-loader__dot--first{animation-delay:.45s}.tribe-common .tribe-common-c-loader__dot--second{animation-delay:1.05s}.tribe-common .tribe-common-c-loader__dot--third{animation-delay:1.35s}@keyframes a{50%{background-color:#334aff}}
common/src/resources/css/common-skeleton.css CHANGED
@@ -326,13 +326,19 @@
326
 
327
  /* } */
328
 
329
- /* .tribe-theme-twentyseventeen .tribe-common { */
330
 
331
- /* -------------------------------------------------------------------------
332
  * Reset Skeleton Theme Overrides - Twenty Seventeen
333
  * ------------------------------------------------------------------------- */
334
 
335
- /* } */
 
 
 
 
 
 
336
 
337
  /* .tribe-theme-twentytwenty .tribe-common { */
338
 
@@ -440,10 +446,6 @@
440
  * SVG - Arrow Right
441
  * ----------------------------------------------------------------------------- */
442
 
443
- /* -----------------------------------------------------------------------------
444
- * SVG - Arrow (light, left)
445
- * ----------------------------------------------------------------------------- */
446
-
447
  /* -----------------------------------------------------------------------------
448
  * SVG - Caret Down
449
  * ----------------------------------------------------------------------------- */
@@ -477,15 +479,15 @@
477
  * ----------------------------------------------------------------------------- */
478
 
479
  /* -----------------------------------------------------------------------------
480
- * SVG - Error
481
  * ----------------------------------------------------------------------------- */
482
 
483
  /* -----------------------------------------------------------------------------
484
- * SVG - Featured
485
  * ----------------------------------------------------------------------------- */
486
 
487
  /* -----------------------------------------------------------------------------
488
- * SVG - Filters
489
  * ----------------------------------------------------------------------------- */
490
 
491
  /* -----------------------------------------------------------------------------
@@ -496,24 +498,40 @@
496
  * SVG - Location
497
  * ----------------------------------------------------------------------------- */
498
 
 
 
 
 
499
  /* -----------------------------------------------------------------------------
500
  * SVG - Map
501
  * ----------------------------------------------------------------------------- */
502
 
 
 
 
 
 
 
 
 
503
  /* -----------------------------------------------------------------------------
504
  * SVG - Month
505
  * ----------------------------------------------------------------------------- */
506
 
507
  /* -----------------------------------------------------------------------------
508
- * SVG - Photo
509
  * ----------------------------------------------------------------------------- */
510
 
511
  /* -----------------------------------------------------------------------------
512
- * SVG - Recurring
513
  * ----------------------------------------------------------------------------- */
514
 
515
  /* -----------------------------------------------------------------------------
516
- * SVG - Remove
 
 
 
 
517
  * ----------------------------------------------------------------------------- */
518
 
519
  /* -----------------------------------------------------------------------------
@@ -646,10 +664,6 @@
646
  * Button - Solid
647
  * ----------------------------------------------------------------------------- */
648
 
649
- /* -----------------------------------------------------------------------------
650
- * Button - Link
651
- * ----------------------------------------------------------------------------- */
652
-
653
  /* -----------------------------------------------------------------------------
654
  * Button - Border
655
  * ----------------------------------------------------------------------------- */
@@ -947,6 +961,10 @@
947
  width: 100%;
948
  }
949
 
 
 
 
 
950
  /* -------------------------------------------------------------------------
951
  * Theme Overrides - Enfold
952
  * ------------------------------------------------------------------------- */
@@ -956,6 +974,10 @@
956
  width: 100%;
957
  }
958
 
 
 
 
 
959
  .tribe-common {
960
 
961
  /* -----------------------------------------------------------------------------
@@ -1066,11 +1088,21 @@
1066
  margin-right: -21px;
1067
  }
1068
 
 
 
 
 
 
1069
  .tribe-common .tribe-common-g-row--gutters > .tribe-common-g-col {
1070
  padding-left: 21px;
1071
  padding-right: 21px;
1072
  }
1073
 
 
 
 
 
 
1074
  /* -----------------------------------------------------------------------------
1075
  * Theme Overrides - Twenty Nineteen
1076
  * ----------------------------------------------------------------------------- */
@@ -1081,11 +1113,21 @@
1081
  padding: 0;
1082
  }
1083
 
 
 
 
 
 
1084
  .tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters > .entry.tribe-common-g-col {
1085
- margin: 0;
1086
- padding-left: 21px;
1087
- padding-right: 21px;
1088
- }
 
 
 
 
 
1089
 
1090
  /* Typography */
1091
 
@@ -1307,6 +1349,11 @@
1307
  width: 100%;
1308
  }
1309
 
 
 
 
 
 
1310
  /* -------------------------------------------------------------------------
1311
  * SVG Icons
1312
  * ------------------------------------------------------------------------- */
@@ -1333,11 +1380,11 @@
1333
  }
1334
 
1335
  .tribe-common .tribe-common-svgicon--list {
1336
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='18' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827' fill-rule='nonzero'%3E%3Cpath d='M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zM1.838 4.207a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zM1.838 10.916a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z' fill='%23141827'/%3E%3Cg%3E%3Cpath d='M19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zM1.838 17.624a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z' fill='%23141827'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1337
  }
1338
 
1339
  .tribe-common .tribe-common-svgicon--map {
1340
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath stroke='%23141827' stroke-linejoin='round' d='M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016'/%3E%3Cpath d='M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z' stroke='%23141827' stroke-width='.4' fill='%23141827' fill-rule='nonzero'/%3E%3Cpath d='M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z' stroke='%23141827' stroke-width='.7' fill='%23000' fill-rule='nonzero'/%3E%3C/g%3E%3C/svg%3E");
1341
  }
1342
 
1343
  .tribe-common .tribe-common-svgicon--month {
@@ -1345,11 +1392,11 @@
1345
  }
1346
 
1347
  .tribe-common .tribe-common-svgicon--no-map {
1348
- background-image: svg-inline(no-map);
1349
  }
1350
 
1351
  .tribe-common .tribe-common-svgicon--photo {
1352
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827' fill-rule='nonzero'%3E%3Cpath d='M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714c.29 0 .52-.224.52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z' fill='%23141827'/%3E%3Cpath d='M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z' fill='%23141827'/%3E%3C/g%3E%3C/svg%3E");
1353
  }
1354
 
1355
  .tribe-common .tribe-common-svgicon--search {
@@ -1367,7 +1414,7 @@
1367
  }
1368
 
1369
  .tribe-common .tribe-common-svgicon--recurring {
1370
- background-image: svg-inline(recurring-active);
1371
  height: 10px;
1372
  width: 10px;
1373
  }
@@ -1486,6 +1533,11 @@
1486
  width: 100%;
1487
  }
1488
 
 
 
 
 
 
1489
  .tribe-common {
1490
 
1491
  /* -----------------------------------------------------------------------------
@@ -1619,6 +1671,10 @@
1619
  width: 100%;
1620
  }
1621
 
 
 
 
 
1622
  /* -----------------------------------------------------------------------------
1623
  *
1624
  * Component: Image
@@ -1677,6 +1733,10 @@
1677
  padding-top: 192px;
1678
  }
1679
 
 
 
 
 
1680
  .tribe-common .tribe-common-c-loader__dot {
1681
  background-color: rgba(51,74,255, 0.07);
1682
  height: 15px;
@@ -1687,54 +1747,3 @@
1687
  .tribe-common .tribe-common-c-loader__dot:not(:first-of-type) {
1688
  margin-left: 8px;
1689
  }
1690
-
1691
- @media (min-width: 768px) {
1692
-
1693
- .tribe-common .tribe-common-form-control-text__input {
1694
- padding: 20px 20px 20px 40px
1695
- }
1696
-
1697
- #top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input {
1698
- padding: 20px 20px 20px 40px
1699
- }
1700
-
1701
- .tribe-common .tribe-common-g-row--gutters {
1702
- margin-left: -24px;
1703
- margin-right: -24px
1704
- }
1705
-
1706
- .tribe-common .tribe-common-g-row--gutters > .tribe-common-g-col {
1707
- padding-left: 24px;
1708
- padding-right: 24px
1709
- }
1710
-
1711
- .tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters {
1712
- margin-left: -24px;
1713
- margin-right: -24px
1714
- }
1715
-
1716
- .tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters > .entry.tribe-common-g-col {
1717
- padding-left: 24px;
1718
- padding-right: 24px
1719
- }
1720
-
1721
- .tribe-common .tribe-common-l-container {
1722
- padding-left: 42px;
1723
- padding-right: 42px
1724
- }
1725
-
1726
- .tribe-common .tribe-common-c-btn-border,
1727
- .tribe-common a.tribe-common-c-btn-border {
1728
- padding: 6px 15px;
1729
- width: auto
1730
- }
1731
-
1732
- .tribe-common .tribe-common-c-btn,
1733
- .tribe-common a.tribe-common-c-btn {
1734
- width: auto
1735
- }
1736
-
1737
- .tribe-common .tribe-common-c-loader {
1738
- padding-top: 288px
1739
- }
1740
- }
326
 
327
  /* } */
328
 
329
+ .tribe-theme-twentyseventeen .tribe-common {
330
 
331
+ /* -------------------------------------------------------------------------
332
  * Reset Skeleton Theme Overrides - Twenty Seventeen
333
  * ------------------------------------------------------------------------- */
334
 
335
+ }
336
+
337
+ /* dialogs are set to z-index of 1 by default. Twentyseventeen .site-branding (in page header) is set to 3. */
338
+
339
+ .tribe-theme-twentyseventeen .tribe-common div.tribe-dialog {
340
+ z-index: 5 !important;
341
+ }
342
 
343
  /* .tribe-theme-twentytwenty .tribe-common { */
344
 
446
  * SVG - Arrow Right
447
  * ----------------------------------------------------------------------------- */
448
 
 
 
 
 
449
  /* -----------------------------------------------------------------------------
450
  * SVG - Caret Down
451
  * ----------------------------------------------------------------------------- */
479
  * ----------------------------------------------------------------------------- */
480
 
481
  /* -----------------------------------------------------------------------------
482
+ * SVG - Featured
483
  * ----------------------------------------------------------------------------- */
484
 
485
  /* -----------------------------------------------------------------------------
486
+ * SVG - Filters
487
  * ----------------------------------------------------------------------------- */
488
 
489
  /* -----------------------------------------------------------------------------
490
+ * SVG - Link
491
  * ----------------------------------------------------------------------------- */
492
 
493
  /* -----------------------------------------------------------------------------
498
  * SVG - Location
499
  * ----------------------------------------------------------------------------- */
500
 
501
+ /* -----------------------------------------------------------------------------
502
+ * SVG - Mail
503
+ * ----------------------------------------------------------------------------- */
504
+
505
  /* -----------------------------------------------------------------------------
506
  * SVG - Map
507
  * ----------------------------------------------------------------------------- */
508
 
509
+ /* -----------------------------------------------------------------------------
510
+ * SVG - Map pin
511
+ * ----------------------------------------------------------------------------- */
512
+
513
+ /* -----------------------------------------------------------------------------
514
+ * SVG - Messages
515
+ * ----------------------------------------------------------------------------- */
516
+
517
  /* -----------------------------------------------------------------------------
518
  * SVG - Month
519
  * ----------------------------------------------------------------------------- */
520
 
521
  /* -----------------------------------------------------------------------------
522
+ * SVG - No Map
523
  * ----------------------------------------------------------------------------- */
524
 
525
  /* -----------------------------------------------------------------------------
526
+ * SVG - Phone
527
  * ----------------------------------------------------------------------------- */
528
 
529
  /* -----------------------------------------------------------------------------
530
+ * SVG - Photo
531
+ * ----------------------------------------------------------------------------- */
532
+
533
+ /* -----------------------------------------------------------------------------
534
+ * SVG - Recurring
535
  * ----------------------------------------------------------------------------- */
536
 
537
  /* -----------------------------------------------------------------------------
664
  * Button - Solid
665
  * ----------------------------------------------------------------------------- */
666
 
 
 
 
 
667
  /* -----------------------------------------------------------------------------
668
  * Button - Border
669
  * ----------------------------------------------------------------------------- */
961
  width: 100%;
962
  }
963
 
964
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input {
965
+ padding: 20px 20px 20px 40px;
966
+ }
967
+
968
  /* -------------------------------------------------------------------------
969
  * Theme Overrides - Enfold
970
  * ------------------------------------------------------------------------- */
974
  width: 100%;
975
  }
976
 
977
+ #top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input {
978
+ padding: 20px 20px 20px 40px;
979
+ }
980
+
981
  .tribe-common {
982
 
983
  /* -----------------------------------------------------------------------------
1088
  margin-right: -21px;
1089
  }
1090
 
1091
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters {
1092
+ margin-left: -24px;
1093
+ margin-right: -24px;
1094
+ }
1095
+
1096
  .tribe-common .tribe-common-g-row--gutters > .tribe-common-g-col {
1097
  padding-left: 21px;
1098
  padding-right: 21px;
1099
  }
1100
 
1101
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters > .tribe-common-g-col {
1102
+ padding-left: 24px;
1103
+ padding-right: 24px;
1104
+ }
1105
+
1106
  /* -----------------------------------------------------------------------------
1107
  * Theme Overrides - Twenty Nineteen
1108
  * ----------------------------------------------------------------------------- */
1113
  padding: 0;
1114
  }
1115
 
1116
+ .tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters {
1117
+ margin-left: -24px;
1118
+ margin-right: -24px;
1119
+ }
1120
+
1121
  .tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters > .entry.tribe-common-g-col {
1122
+ margin: 0;
1123
+ padding-left: 21px;
1124
+ padding-right: 21px;
1125
+ }
1126
+
1127
+ .tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .tribe-common-g-row--gutters > .entry.tribe-common-g-col {
1128
+ padding-left: 24px;
1129
+ padding-right: 24px;
1130
+ }
1131
 
1132
  /* Typography */
1133
 
1349
  width: 100%;
1350
  }
1351
 
1352
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-l-container {
1353
+ padding-left: 42px;
1354
+ padding-right: 42px;
1355
+ }
1356
+
1357
  /* -------------------------------------------------------------------------
1358
  * SVG Icons
1359
  * ------------------------------------------------------------------------- */
1380
  }
1381
 
1382
  .tribe-common .tribe-common-svgicon--list {
1383
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cdefs/%3E%3Cg fill='%23141827' fill-rule='evenodd'%3E%3Cpath fill-rule='nonzero' d='M0 .50378788V20.5332919c0 .278234.19022354.5037879.42487547.5037879H20.6133064c.2346519 0 .4248754-.2255539.4248754-.5037879V.50378788C21.0381818.22555389 20.8479583 0 20.6133064 0H.42487547C.19022355 0 0 .2255539 0 .50378788zm1.1580346.94435628h18.6945206v2.70490149H1.1580346V1.44814416zm0 2.70490796h18.6945206V19.5845078H1.1580346V4.15305212z' fill='%23141827'/%3E%3Cpath d='M13.38928235 5.73125033V7.860417c0 .58795234.48212125 1.06458333 1.07684605 1.06458333h2.1536922c.5947248 0 1.0768461-.47663099 1.0768461-1.06458333V5.73125033c0-.58795234-.4821213-1.06458333-1.0768461-1.06458333h-2.1536922c-.5947248 0-1.07684605.476631-1.07684605 1.06458333z' fill='%23141827'/%3E%3Cpath fill-rule='nonzero' d='M8.83943685 8.936667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092h-4.8185522C3.7343981 7.466667 3.5 7.70188614 3.5 7.9893762v.4245816c0 .28749006.2343981.5227092.52088465.5227092h4.8185522zM10.9041036 6.136667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092H4.02088465C3.7343981 4.666667 3.5 4.90188614 3.5 5.1893762v.4245816c0 .28749006.2343981.5227092.52088465.5227092h6.88321895z' fill='%23141827'/%3E%3Cg%3E%3Cpath d='M13.38928235 12.73125033V14.860417c0 .58795234.48212125 1.06458333 1.07684605 1.06458333h2.1536922c.5947248 0 1.0768461-.47663099 1.0768461-1.06458333v-2.12916667c0-.58795234-.4821213-1.06458333-1.0768461-1.06458333h-2.1536922c-.5947248 0-1.07684605.476631-1.07684605 1.06458333z' fill='%23141827'/%3E%3Cpath fill-rule='nonzero' d='M8.83943685 15.936667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092h-4.8185522c-.28648655 0-.52088465.23521914-.52088465.5227092v.4245816c0 .28749006.2343981.5227092.52088465.5227092h4.8185522zM10.9041036 13.136667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092H4.02088465c-.28648655 0-.52088465.23521914-.52088465.5227092v.4245816c0 .28749006.2343981.5227092.52088465.5227092h6.88321895z' fill='%23141827'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1384
  }
1385
 
1386
  .tribe-common .tribe-common-svgicon--map {
1387
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cdefs/%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill-rule='nonzero' stroke-width='.7'%3E%3Cpath fill='%23141827' stroke='%23141827' d='M10.66992557 17.2092094c.18208949-.2244634 4.46052505-5.52626362 4.46052505-8.17980983 0-2.72724863-2.08535521-4.94606657-4.64855882-4.94606657-2.56320359 0-4.6485588 2.21881794-4.6485588 4.94606657 0 2.65354618 4.27843556 7.95534643 4.46052504 8.17980983.04719041.0580842.11585307.0915149.18803376.0915149.0721807 0 .14084336-.0334307.18803377-.0915149zM6.33022741 9.02939957c0-2.43579482 1.86238353-4.41737092 4.15166439-4.41737092 2.28928088 0 4.15166441 1.9815761 4.15166441 4.41737092 0 2.15995923-3.31788627 6.53241163-4.15166441 7.59703123-.83377813-1.0644905-4.15166439-5.43616846-4.15166439-7.59703123z'/%3E%3Cpath fill='%23141827' stroke='%23000' d='M12.05539077 9.03985474c0-.91098834-.70589102-1.65217392-1.57349897-1.65217392-.86760794 0-1.57349896.74118558-1.57349896 1.65217392 0 .91098834.70589102 1.65217392 1.57349896 1.65217392.86760795 0 1.57349897-.74118558 1.57349897-1.65217392zm-2.85036002 0c0-.73928452.57278056-1.34070411 1.27686105-1.34070411.70408051 0 1.27686107.60141959 1.27686107 1.34070411 0 .73928452-.57278056 1.34070411-1.27686107 1.34070411-.70408049 0-1.27686105-.60141959-1.27686105-1.34070411z'/%3E%3C/g%3E%3Cpath fill='%23141827' fill-rule='nonzero' d='M0 .50378788V20.5332919c0 .278234.19022354.5037879.42487547.5037879H20.6133064c.2346519 0 .4248754-.2255539.4248754-.5037879V.50378788C21.0381818.22555389 20.8479583 0 20.6133064 0H.42487547C.19022355 0 0 .2255539 0 .50378788zm1.1580346.94435628h18.6945206v2.70490796H1.1580346V1.44814416zm0 2.70490796h18.6945206V19.5845078H1.1580346V4.15305212z'/%3E%3C/g%3E%3C/svg%3E");
1388
  }
1389
 
1390
  .tribe-common .tribe-common-svgicon--month {
1392
  }
1393
 
1394
  .tribe-common .tribe-common-svgicon--no-map {
1395
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='92' height='92' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill-rule='nonzero' fill='none'%3E%3Cg stroke='%23141827' stroke-width='2.5' transform='translate(2 2)'%3E%3Cpath d='M32.219 88S0 58.674 0 32.281C-.011 15.598 12.685 1.66 29.278.136c16.593-1.523 31.608 9.873 34.627 26.28M32.733 88s2.96-2.693 7.083-7.181' stroke-linecap='round'/%3E%3Ccircle cx='33' cy='33' r='8.905'/%3E%3Ccircle cx='65.127' cy='59.016' r='23.571'/%3E%3C/g%3E%3Cg transform='translate(64.857 47.048)'%3E%3Ccircle fill='%23111' cx='2.839' cy='26.495' r='2.839'/%3E%3Cpath d='M2.642 0v18.925' stroke='%23141827' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
1396
  }
1397
 
1398
  .tribe-common .tribe-common-svgicon--photo {
1399
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 21'%3E%3Cdefs/%3E%3Cg fill='%23141827' fill-rule='nonzero'%3E%3Cpath d='M20.4070967 0H.57757675C.25413377 0 0 .24803922 0 .5637255v19.872549C0 20.7519607.25413377 21 .57757676 21H20.4070967c.323443 0 .5775767-.2480393.5775767-.5637255V.5637255C20.9846734.24803921 20.7305397 0 20.4070967 0zm-.6006799 1.15v14.8679567l-2.2249804-3.4274509c-.6468859-.6764706-1.8482455-.6764706-2.4951316 0l-1.5479057 1.6460784-4.48199558-5.02843135c-.34654605-.38333333-.83171053-.58627451-1.36308114-.58627451-.50826755 0-1.01653509.22549021-1.33997808.60882354L1.17825658 14.9807019V1.15H19.8064168zM1.17825658 19.8499999v-3.1330235l6.0530044-6.76470589c.11551535-.13529412.27723684-.20294118.4620614-.20294118.16172149 0 .36964912.06764706.48516448.20294118l4.92095394 5.52450979c.1155153.1127452.2772369.2029412.4389583.2029412.1848246.022549.3234431-.067647.4389583-.1803922l1.9868641-2.1196078c.1848246-.2029412.5544737-.2029412.7624013 0l3.1028972 4.3519608v2.1408666H1.17825658v-.022549z' fill='%23141827'/%3E%3Cpath d='M14.9552083 9.04117648c1.159375 0 2.121875-.96960785 2.121875-2.18725491 0-1.21764705-.940625-2.1872549-2.121875-2.1872549-1.18125 0-2.121875.96960785-2.121875 2.1872549 0 1.21764706.9625 2.18725491 2.121875 2.18725491zm0-3.22450981c.546875 0 1.00625.47352941 1.00625 1.0372549 0 .5637255-.459375 1.03725491-1.00625 1.03725491-.546875 0-1.00625-.47352941-1.00625-1.03725491 0-.56372549.459375-1.0372549 1.00625-1.0372549z' fill='%23141827'/%3E%3C/g%3E%3C/svg%3E");
1400
  }
1401
 
1402
  .tribe-common .tribe-common-svgicon--search {
1414
  }
1415
 
1416
  .tribe-common .tribe-common-svgicon--recurring {
1417
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3C3.753 4.717 1.66 7 1.66 9.827c0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913c.099.109.158.239.198.37 0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23141827'/%3E%3C/svg%3E");
1418
  height: 10px;
1419
  width: 10px;
1420
  }
1533
  width: 100%;
1534
  }
1535
 
1536
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border, .tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border {
1537
+ padding: 6px 15px;
1538
+ width: auto;
1539
+ }
1540
+
1541
  .tribe-common {
1542
 
1543
  /* -----------------------------------------------------------------------------
1671
  width: 100%;
1672
  }
1673
 
1674
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn, .tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn {
1675
+ width: auto;
1676
+ }
1677
+
1678
  /* -----------------------------------------------------------------------------
1679
  *
1680
  * Component: Image
1733
  padding-top: 192px;
1734
  }
1735
 
1736
+ .tribe-common--breakpoint-medium.tribe-common .tribe-common-c-loader {
1737
+ padding-top: 288px;
1738
+ }
1739
+
1740
  .tribe-common .tribe-common-c-loader__dot {
1741
  background-color: rgba(51,74,255, 0.07);
1742
  height: 15px;
1747
  .tribe-common .tribe-common-c-loader__dot:not(:first-of-type) {
1748
  margin-left: 8px;
1749
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
common/src/resources/css/common-skeleton.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-common{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased}.tribe-common *{box-sizing:border-box}.tribe-common article,.tribe-common aside,.tribe-common details,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common header,.tribe-common main,.tribe-common menu,.tribe-common nav,.tribe-common section,.tribe-common summary{display:block}.tribe-common svg:not(:root){overflow:hidden}.tribe-common audio,.tribe-common canvas,.tribe-common progress,.tribe-common video{display:inline-block}.tribe-common audio:not([controls]){display:none;height:0}.tribe-common progress{vertical-align:baseline}.tribe-common [hidden],.tribe-common template{display:none}.tribe-common pre{overflow:auto}.tribe-common sub,.tribe-common sup{position:relative;vertical-align:baseline}.tribe-common sup{top:-.5em}.tribe-common sub{bottom:-.25em}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{box-sizing:border-box;margin:0}.tribe-common input[type=number]::-webkit-inner-spin-button,.tribe-common input[type=number]::-webkit-outer-spin-button{height:auto}.tribe-common legend{color:inherit;display:table;max-width:100%;white-space:normal}.tribe-common textarea{resize:none;overflow:auto}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=reset],.tribe-common input[type=submit]{cursor:pointer;overflow:visible}.tribe-common button[disabled],.tribe-common input[disabled]{cursor:default}.tribe-common button::-moz-focus-inner,.tribe-common input::-moz-focus-inner{border:0;padding:0}.tribe-common a,.tribe-common abbr,.tribe-common acronym,.tribe-common address,.tribe-common applet,.tribe-common article,.tribe-common aside,.tribe-common audio,.tribe-common b,.tribe-common big,.tribe-common blockquote,.tribe-common canvas,.tribe-common caption,.tribe-common center,.tribe-common cite,.tribe-common code,.tribe-common dd,.tribe-common del,.tribe-common details,.tribe-common dfn,.tribe-common div,.tribe-common dl,.tribe-common dt,.tribe-common em,.tribe-common embed,.tribe-common fieldset,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common form,.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common header,.tribe-common i,.tribe-common iframe,.tribe-common img,.tribe-common ins,.tribe-common kbd,.tribe-common label,.tribe-common legend,.tribe-common li,.tribe-common main,.tribe-common mark,.tribe-common menu,.tribe-common nav,.tribe-common object,.tribe-common ol,.tribe-common output,.tribe-common p,.tribe-common pre,.tribe-common q,.tribe-common ruby,.tribe-common s,.tribe-common samp,.tribe-common section,.tribe-common small,.tribe-common span,.tribe-common strike,.tribe-common strong,.tribe-common sub,.tribe-common summary,.tribe-common sup,.tribe-common table,.tribe-common tbody,.tribe-common td,.tribe-common tfoot,.tribe-common th,.tribe-common thead,.tribe-common time,.tribe-common tr,.tribe-common tt,.tribe-common u,.tribe-common ul,.tribe-common var,.tribe-common video{margin:0;padding:0;border:0}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common img{-ms-interpolation-mode:bicubic;height:auto;max-width:100%;border-style:none}.tribe-common embed,.tribe-common iframe,.tribe-common video{max-width:100%;max-height:100%}.tribe-theme-avada input[type=text]{margin:0}.tribe-theme-divi .entry-content .tribe-common table,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common table{border:0;margin:0}.tribe-theme-divi .entry-content .tribe-common td,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common td{border:0}.tribe-theme-divi #content-area .tribe-common td,.tribe-theme-divi #content-area .tribe-common th,.tribe-theme-divi #content-area .tribe-common tr{padding:0}#top.tribe-theme-enfold .tribe-common form,#top.tribe-theme-enfold .tribe-common input{margin:0}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{cursor:pointer;display:inline-block;margin:0;vertical-align:middle}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{display:inline-block}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider__input{cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{height:auto;padding:12px 28px 12px 0;width:100%}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{padding:12px 28px 12px 0;width:100%}.tribe-common .tribe-common-form-control-toggle__input,.tribe-common .tribe-common-form-control-toggle__label{cursor:pointer;display:inline-block;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle__label{margin-left:11px}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px;padding:0}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{margin:0;padding-left:21px;padding-right:21px}.tribe-common a{cursor:pointer}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.tribe-common button{padding:0}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common .tribe-common-svgicon{background-repeat:no-repeat;background-size:contain}.tribe-common .tribe-common-svgicon--close-secondary{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23BABABA' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--day{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zM14.18 14.53v1.747c0 .482.39.874.873.874H16.8a.873.873 0 0 0 .873-.874V14.53a.873.873 0 0 0-.873-.873h-1.747a.873.873 0 0 0-.873.873z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--list{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='18' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827'%3E%3Cpath d='M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zm-18.045.936a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zm-18.045.935a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827'%3E%3Cpath stroke-linejoin='round' d='M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016'/%3E%3Cpath d='M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z' stroke-width='.4' fill='%23141827' fill-rule='nonzero'/%3E%3Cpath d='M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z' stroke-width='.7' fill='%23000' fill-rule='nonzero'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--month{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='22' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.637 1.063v19.879c0 .276.189.5.422.5h20.037c.232 0 .421-.224.421-.5V1.062c0-.275-.189-.5-.421-.5H1.059c-.233 0-.422.225-.422.5zM1.787 2H20.34v2.685H1.787V2zm0 4H20.34v14H1.787V6zM8 8.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-8 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-12 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm0 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--no-map{background-image:svg-inline(no-map)}.tribe-common .tribe-common-svgicon--photo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='17' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23141827'%3E%3Cpath d='M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714a.51.51 0 0 0 .52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z'/%3E%3Cpath d='M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--week{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zm6.25 6.537v1.006c0 .278.224.503.502.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H7.908a.503.503 0 0 0-.503.502zm4.022 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H11.93a.503.503 0 0 0-.503.502zm4.023 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502h-1.006a.503.503 0 0 0-.503.502zm-12.069 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H3.885a.503.503 0 0 0-.503.502z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:8px}.tribe-common .tribe-common-svgicon--recurring{background-image:svg-inline(recurring-active);height:10px;width:10px}.tribe-common .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23727272' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide,.tribe-common .tribe-common-a11y-visual-show{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:14px 20px;width:100%}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--caret-left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-left:active:before,.tribe-common .tribe-common-c-btn-icon--caret-left:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-left:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-right:active:before,.tribe-common .tribe-common-c-btn-icon--caret-right:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-right:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");height:20px;width:24px}.tribe-common .tribe-common-c-btn-icon--filters:active:before,.tribe-common .tribe-common-c-btn-icon--filters:focus:before,.tribe-common .tribe-common-c-btn-icon--filters:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23D5D5D5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");height:20px;width:20px}.tribe-common .tribe-common-c-btn-icon--search:active:before,.tribe-common .tribe-common-c-btn-icon--search:focus:before,.tribe-common .tribe-common-c-btn-icon--search:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{padding:11px 20px;width:100%}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.tribe-common .tribe-common-c-loader{display:flex;padding-top:192px}.tribe-common .tribe-common-c-loader__dot{background-color:rgba(51,74,255,.07);height:15px;width:15px;border-radius:50%}.tribe-common .tribe-common-c-loader__dot:not(:first-of-type){margin-left:8px}@media (min-width:768px){#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input,.tribe-common .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-loader{padding-top:288px}}
1
+ .tribe-common{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased}.tribe-common *{box-sizing:border-box}.tribe-common article,.tribe-common aside,.tribe-common details,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common header,.tribe-common main,.tribe-common menu,.tribe-common nav,.tribe-common section,.tribe-common summary{display:block}.tribe-common svg:not(:root){overflow:hidden}.tribe-common audio,.tribe-common canvas,.tribe-common progress,.tribe-common video{display:inline-block}.tribe-common audio:not([controls]){display:none;height:0}.tribe-common progress{vertical-align:baseline}.tribe-common [hidden],.tribe-common template{display:none}.tribe-common pre{overflow:auto}.tribe-common sub,.tribe-common sup{position:relative;vertical-align:baseline}.tribe-common sup{top:-.5em}.tribe-common sub{bottom:-.25em}.tribe-common button,.tribe-common input,.tribe-common select,.tribe-common textarea{box-sizing:border-box;margin:0}.tribe-common input[type=number]::-webkit-inner-spin-button,.tribe-common input[type=number]::-webkit-outer-spin-button{height:auto}.tribe-common legend{color:inherit;display:table;max-width:100%;white-space:normal}.tribe-common textarea{resize:none;overflow:auto}.tribe-common button,.tribe-common input[type=button],.tribe-common input[type=reset],.tribe-common input[type=submit]{cursor:pointer;overflow:visible}.tribe-common button[disabled],.tribe-common input[disabled]{cursor:default}.tribe-common button::-moz-focus-inner,.tribe-common input::-moz-focus-inner{border:0;padding:0}.tribe-common a,.tribe-common abbr,.tribe-common acronym,.tribe-common address,.tribe-common applet,.tribe-common article,.tribe-common aside,.tribe-common audio,.tribe-common b,.tribe-common big,.tribe-common blockquote,.tribe-common canvas,.tribe-common caption,.tribe-common center,.tribe-common cite,.tribe-common code,.tribe-common dd,.tribe-common del,.tribe-common details,.tribe-common dfn,.tribe-common div,.tribe-common dl,.tribe-common dt,.tribe-common em,.tribe-common embed,.tribe-common fieldset,.tribe-common figcaption,.tribe-common figure,.tribe-common footer,.tribe-common form,.tribe-common h1,.tribe-common h2,.tribe-common h3,.tribe-common h4,.tribe-common h5,.tribe-common h6,.tribe-common header,.tribe-common i,.tribe-common iframe,.tribe-common img,.tribe-common ins,.tribe-common kbd,.tribe-common label,.tribe-common legend,.tribe-common li,.tribe-common main,.tribe-common mark,.tribe-common menu,.tribe-common nav,.tribe-common object,.tribe-common ol,.tribe-common output,.tribe-common p,.tribe-common pre,.tribe-common q,.tribe-common ruby,.tribe-common s,.tribe-common samp,.tribe-common section,.tribe-common small,.tribe-common span,.tribe-common strike,.tribe-common strong,.tribe-common sub,.tribe-common summary,.tribe-common sup,.tribe-common table,.tribe-common tbody,.tribe-common td,.tribe-common tfoot,.tribe-common th,.tribe-common thead,.tribe-common time,.tribe-common tr,.tribe-common tt,.tribe-common u,.tribe-common ul,.tribe-common var,.tribe-common video{margin:0;padding:0;border:0}.tribe-common ol,.tribe-common ul{list-style:none}.tribe-common img{-ms-interpolation-mode:bicubic;height:auto;max-width:100%;border-style:none}.tribe-common embed,.tribe-common iframe,.tribe-common video{max-width:100%;max-height:100%}.tribe-theme-avada input[type=text]{margin:0}.tribe-theme-divi .entry-content .tribe-common table,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common table{border:0;margin:0}.tribe-theme-divi .entry-content .tribe-common td,.tribe-theme-divibody.et-pb-preview #main-content .container .tribe-common td{border:0}.tribe-theme-divi #content-area .tribe-common td,.tribe-theme-divi #content-area .tribe-common th,.tribe-theme-divi #content-area .tribe-common tr{padding:0}#top.tribe-theme-enfold .tribe-common form,#top.tribe-theme-enfold .tribe-common input{margin:0}.tribe-theme-twentyseventeen .tribe-common div.tribe-dialog{z-index:5!important}.tribe-common .tribe-common-form-control-checkbox__label,.tribe-common .tribe-common-form-control-radio__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-checkbox__input,.tribe-common .tribe-common-form-control-radio__input{cursor:pointer;display:inline-block;margin:0;vertical-align:middle}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-checkbox__input{display:inline-block}.tribe-common .tribe-common-form-control-checkbox-radio-group>*{margin-bottom:15px}.tribe-common .tribe-common-form-control-checkbox-radio-group>:last-child{margin-bottom:0}.tribe-common .tribe-common-form-control-slider__input{cursor:pointer;display:inline-block;margin:0;padding:0;width:120px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider__label{cursor:pointer;display:inline-block;margin-left:11px;vertical-align:middle}.tribe-common .tribe-common-form-control-slider--vertical .tribe-common-form-control-slider__label{display:block;margin:0 0 6px}.tribe-common .tribe-common-form-control-text__label{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-form-control-text__input{height:auto;padding:12px 28px 12px 0;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-text__input{padding:12px 28px 12px 0;width:100%}#top.tribe-theme-enfold .tribe-common.tribe-common--breakpoint-medium .tribe-common-form-control-text__input{padding:20px 20px 20px 40px}.tribe-common .tribe-common-form-control-toggle__input,.tribe-common .tribe-common-form-control-toggle__label{cursor:pointer;display:inline-block;vertical-align:middle}.tribe-common .tribe-common-form-control-toggle__label{margin-left:11px}.tribe-common .tribe-common-form-control-toggle--vertical .tribe-common-form-control-toggle__label{display:block;margin:0 0 6px}#top.tribe-theme-enfold .tribe-common .tribe-common-form-control-toggle__input{display:inline-block;margin:5px 0}.tribe-common .tribe-common-g-col{min-width:0;width:100%}.tribe-common .tribe-common-g-row{display:flex;flex-wrap:wrap}.tribe-common .tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:21px;padding-right:21px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-g-row--gutters>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-theme-twentynineteen .tribe-common .entry.tribe-common-g-row--gutters{margin-left:-21px;margin-right:-21px;padding:0}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters{margin-left:-24px;margin-right:-24px}.tribe-theme-twentynineteen .tribe-common .tribe-common-g-row--gutters>.entry.tribe-common-g-col{margin:0;padding-left:21px;padding-right:21px}.tribe-theme-twentynineteen .tribe-common.tribe-common--breakpoint-medium .tribe-common-g-row--gutters>.entry.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-common a{cursor:pointer}.tribe-theme-divi #left-area .tribe-common ul,.tribe-theme-divi .entry-content .tribe-common ul,body.et-pb-preview.tribe-theme-divi #main-content .container .tribe-common ul{list-style-type:none;padding:0}.tribe-common button{padding:0}.tribe-common .tribe-common-l-container{max-width:1260px;margin-left:auto;margin-right:auto;padding-left:19.5px;padding-right:19.5px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-l-container{padding-left:42px;padding-right:42px}.tribe-common .tribe-common-svgicon{background-repeat:no-repeat;background-size:contain}.tribe-common .tribe-common-svgicon--close-secondary{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23BABABA' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--day{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zM14.18 14.53v1.747c0 .482.39.874.873.874H16.8a.873.873 0 0 0 .873-.874V14.53a.873.873 0 0 0-.873-.873h-1.747a.873.873 0 0 0-.873.873z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--list{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cg fill='%23141827' fill-rule='evenodd'%3E%3Cpath fill-rule='nonzero' d='M0 .504v20.03c0 .278.19.503.425.503h20.188c.235 0 .425-.225.425-.504V.503c0-.277-.19-.503-.425-.503H.425C.19 0 0 .226 0 .504zm1.158.944h18.695v2.705H1.158V1.448zm0 2.705h18.695v15.432H1.158V4.153z'/%3E%3Cpath d='M13.39 5.731v2.13a1.07 1.07 0 0 0 1.076 1.064h2.154a1.07 1.07 0 0 0 1.077-1.065V5.731a1.07 1.07 0 0 0-1.077-1.064h-2.154A1.07 1.07 0 0 0 13.39 5.73z'/%3E%3Cpath fill-rule='nonzero' d='M8.84 8.937c.286 0 .52-.236.52-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.52.522v.425c0 .287.234.523.52.523h4.82zm2.064-2.8c.287 0 .521-.236.521-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.521.522v.425c0 .287.234.523.52.523h6.884z'/%3E%3Cpath d='M13.39 12.731v2.13a1.07 1.07 0 0 0 1.076 1.064h2.154a1.07 1.07 0 0 0 1.077-1.065v-2.129a1.07 1.07 0 0 0-1.077-1.064h-2.154a1.07 1.07 0 0 0-1.077 1.064z'/%3E%3Cpath fill-rule='nonzero' d='M8.84 15.937c.286 0 .52-.236.52-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.52.522v.425c0 .287.234.523.52.523h4.82zm2.064-2.8c.287 0 .521-.236.521-.523v-.425a.523.523 0 0 0-.52-.522H4.02a.523.523 0 0 0-.521.522v.425c0 .287.234.523.52.523h6.884z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 22'%3E%3Cg fill='%23141827' fill-rule='nonzero'%3E%3Cg stroke-width='.7'%3E%3Cpath stroke='%23141827' d='M10.67 17.21c.182-.225 4.46-5.527 4.46-8.18 0-2.728-2.085-4.947-4.648-4.947-2.563 0-4.649 2.22-4.649 4.946 0 2.654 4.279 7.956 4.46 8.18a.243.243 0 0 0 .189.092c.072 0 .14-.034.188-.092zM6.33 9.03c0-2.436 1.863-4.418 4.152-4.418 2.29 0 4.152 1.982 4.152 4.417 0 2.16-3.318 6.533-4.152 7.597C9.648 15.562 6.33 11.19 6.33 9.03z'/%3E%3Cpath stroke='%23000' d='M12.055 9.04c0-.911-.706-1.652-1.573-1.652-.868 0-1.574.74-1.574 1.652 0 .91.706 1.652 1.574 1.652.867 0 1.573-.741 1.573-1.652zm-2.85 0c0-.74.573-1.34 1.277-1.34s1.277.6 1.277 1.34c0 .74-.573 1.34-1.277 1.34s-1.277-.6-1.277-1.34z'/%3E%3C/g%3E%3Cpath d='M0 .504v20.03c0 .278.19.503.425.503h20.188c.235 0 .425-.225.425-.504V.503c0-.277-.19-.503-.425-.503H.425C.19 0 0 .226 0 .504zm1.158.944h18.695v2.705H1.158V1.448zm0 2.705h18.695v15.432H1.158V4.153z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--month{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='22' height='22' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.637 1.063v19.879c0 .276.189.5.422.5h20.037c.232 0 .421-.224.421-.5V1.062c0-.275-.189-.5-.421-.5H1.059c-.233 0-.422.225-.422.5zM1.787 2H20.34v2.685H1.787V2zm0 4H20.34v14H1.787V6zM8 8.5v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-8 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm-12 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm0 4v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5zm4 0v1a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-1a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--no-map{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='92' height='92' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Cg stroke='%23141827' stroke-width='2.5' transform='translate(2 2)'%3E%3Cpath d='M32.219 88S0 58.674 0 32.281C-.011 15.598 12.685 1.66 29.278.136c16.593-1.523 31.608 9.873 34.627 26.28M32.733 88s2.96-2.693 7.083-7.181' stroke-linecap='round'/%3E%3Ccircle cx='33' cy='33' r='8.905'/%3E%3Ccircle cx='65.127' cy='59.016' r='23.571'/%3E%3C/g%3E%3Cg transform='translate(64.857 47.048)'%3E%3Ccircle fill='%23111' cx='2.839' cy='26.495' r='2.839'/%3E%3Cpath d='M2.642 0v18.925' stroke='%23141827' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--photo{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 21'%3E%3Cg fill='%23141827'%3E%3Cpath d='M20.407 0H.577A.565.565 0 0 0 0 .564v19.872c0 .316.254.564.578.564h19.83a.565.565 0 0 0 .577-.564V.564A.565.565 0 0 0 20.407 0zm-.6 1.15v14.868l-2.226-3.427c-.646-.677-1.848-.677-2.495 0l-1.548 1.646-4.482-5.029a1.806 1.806 0 0 0-1.363-.586c-.508 0-1.016.225-1.34.609l-5.175 5.75V1.15h18.628zM1.177 19.85v-3.133l6.053-6.765a.588.588 0 0 1 .462-.203c.162 0 .37.068.485.203l4.921 5.525c.116.113.278.203.44.203.184.022.323-.068.438-.18l1.987-2.12c.185-.203.555-.203.763 0l3.103 4.352v2.14H1.178v-.022z'/%3E%3Cpath d='M14.955 9.041c1.16 0 2.122-.97 2.122-2.187 0-1.218-.94-2.187-2.122-2.187-1.181 0-2.122.97-2.122 2.187 0 1.218.963 2.187 2.122 2.187zm0-3.224c.547 0 1.006.473 1.006 1.037s-.459 1.037-1.006 1.037c-.547 0-1.006-.473-1.006-1.037s.46-1.037 1.006-1.037z'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--week{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='21' height='21' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 .503v19.994c0 .278.19.503.424.503h20.152c.234 0 .424-.225.424-.503V.503C21 .225 20.81 0 20.576 0H.424C.19 0 0 .225 0 .503zm1.156.943h18.66v2.7H1.157v-2.7zm0 4.023h18.66V19.55H1.157V5.469zm6.25 6.537v1.006c0 .278.224.503.502.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H7.908a.503.503 0 0 0-.503.502zm4.022 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H11.93a.503.503 0 0 0-.503.502zm4.023 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502h-1.006a.503.503 0 0 0-.503.502zm-12.069 0v1.006c0 .278.225.503.503.503h1.006a.503.503 0 0 0 .503-.503v-1.006a.503.503 0 0 0-.503-.502H3.885a.503.503 0 0 0-.503.502z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:8px}.tribe-common .tribe-common-svgicon--recurring{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23141827'/%3E%3C/svg%3E");height:10px;width:10px}.tribe-common .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-svgicon--close{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cpath d='M16 2L2 16m14 0L2 2' stroke='%23727272' fill='none' fill-rule='evenodd' stroke-linecap='square' stroke-width='2'/%3E%3C/svg%3E")}.tribe-common .tribe-common-a11y-hidden{display:none!important;visibility:hidden}.tribe-common .tribe-common-a11y-visual-hide,.tribe-common .tribe-common-a11y-visual-show{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common .tribe-common-c-btn-border,.tribe-common a.tribe-common-c-btn-border{padding:14px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn-border,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn-border{padding:6px 15px;width:auto}.tribe-common .tribe-common-c-btn-icon:before{background-repeat:no-repeat;background-size:contain;content:"";display:block}.tribe-common .tribe-common-c-btn-icon--caret-left:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-left:active:before,.tribe-common .tribe-common-c-btn-icon--caret-left:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-left:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-left:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");height:20px;width:12px}.tribe-common .tribe-common-c-btn-icon--caret-right:active:before,.tribe-common .tribe-common-c-btn-icon--caret-right:focus:before,.tribe-common .tribe-common-c-btn-icon--caret-right:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--caret-right:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");height:20px;width:24px}.tribe-common .tribe-common-c-btn-icon--filters:active:before,.tribe-common .tribe-common-c-btn-icon--filters:focus:before,.tribe-common .tribe-common-c-btn-icon--filters:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--filters:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23D5D5D5' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");height:20px;width:20px}.tribe-common .tribe-common-c-btn-icon--search:active:before,.tribe-common .tribe-common-c-btn-icon--search:focus:before,.tribe-common .tribe-common-c-btn-icon--search:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn-icon--search:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-common .tribe-common-c-btn,.tribe-common a.tribe-common-c-btn{padding:11px 20px;width:100%}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-btn,.tribe-common--breakpoint-medium.tribe-common a.tribe-common-c-btn{width:auto}.tribe-common .tribe-common-c-image{display:block;height:auto;margin-left:auto;margin-right:auto;width:100%}.tribe-common .tribe-common-c-image--bg{position:relative}.tribe-common .tribe-common-c-image__bg{background:50% no-repeat;background-size:cover;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.tribe-common .tribe-common-c-loader{display:flex;padding-top:192px}.tribe-common--breakpoint-medium.tribe-common .tribe-common-c-loader{padding-top:288px}.tribe-common .tribe-common-c-loader__dot{background-color:rgba(51,74,255,.07);height:15px;width:15px;border-radius:50%}.tribe-common .tribe-common-c-loader__dot:not(:first-of-type){margin-left:8px}
common/src/resources/images/mascot.png CHANGED
Binary file
common/src/resources/postcss/README.md CHANGED
@@ -69,9 +69,9 @@ In this case, the label is an element of the toggle. However, the `--vertical` m
69
 
70
  For overriding styles, it is recommended to only use classes to keep overriding specificity consistent. All elements should have classes and should be targetted using those classes.
71
 
72
- ## Modifiers, pseudo-classes, and media queries
73
 
74
- As you get into building upon these styles and creating new styles, the order of modifiers, pseudo-classes, and media queries comes into question. The general rule is to apply them in the following order: media queries, pseudo-classes, modifiers. See the examples below:
75
 
76
  ```
77
  .tribe-common {
@@ -80,15 +80,15 @@ As you get into building upon these styles and creating new styles, the order of
80
  .tribe-common-form-control-toggle {
81
  /* toggle styles */
82
 
83
- @media (--viewport-medium) {
84
- /* viewport medium toggle styles */
85
  }
86
 
87
  &:after {
88
  /* :after pseudo-class styles */
89
 
90
- @media (--viewport-medium) {
91
- /* viewport medium :after pseudo-class styles */
92
  }
93
  }
94
  }
@@ -96,15 +96,15 @@ As you get into building upon these styles and creating new styles, the order of
96
  .tribe-common-form-control-toggle--vertical {
97
  /* vertical toggle styles */
98
 
99
- @media (--viewport-medium) {
100
- /* viewport medium vertical toggle styles */
101
  }
102
 
103
  &:after {
104
  /* :after pseudo-class styles */
105
 
106
- @media (--viewport-medium) {
107
- /* viewport medium :after pseudo-class styles */
108
  }
109
  }
110
  }
@@ -122,15 +122,15 @@ In the case of an element, we might get the following scenario:
122
  .tribe-common-form-control-toggle__input {
123
  /* toggle input styles */
124
 
125
- @media (--viewport-medium) {
126
- /* viewport medium toggle input styles */
127
  }
128
 
129
  &:after {
130
  /* :after pseudo-class styles */
131
 
132
- @media (--viewport-medium) {
133
- /* viewport medium :after pseudo-class styles */
134
  }
135
  }
136
  }
@@ -140,15 +140,15 @@ In the case of an element, we might get the following scenario:
140
  .tribe-common-form-control-toggle__input {
141
  /* vertical toggle input styles */
142
 
143
- @media (--viewport-medium) {
144
- /* viewport medium vertical toggle input styles */
145
  }
146
 
147
  &:after {
148
  /* :after pseudo-class styles */
149
 
150
- @media (--viewport-medium) {
151
- /* viewport medium :after pseudo-class styles */
152
  }
153
  }
154
  }
@@ -196,7 +196,7 @@ Base grid styles are for layout and grids provided by the design system. Prefixe
196
 
197
  Base typography styles are for anything typography-related. These include anchors, body text, call to actions, headings, and lists. For body text, we've used the classes `.tribe-common-b1` to `.tribe-common-b3`. These body text classes are used to mimic the design system body text styles. For headings, we've used the classes `.tribe-common-h1` to `.tribe-common-h8`. These heading classes are also used to mimic the design system heading styles.
198
 
199
- There are also classes in body text and heading styles with the `--min-medium` modifier. Each body text and heading class has a style for mobile and desktop (`@media (--viewport-medium)`). However, the designs may not follow the styles exactly for each class upon reaching the `--viewport-medium` breakpoint, but instead use another class style. For this reason, we've added the `--min-medium` modifier for each body text and heading class to apply a different style upon reaching this breakpoint. See example below:
200
 
201
  ```
202
  <h2 class="tribe-common-h6 tribe-common-h5--min-medium">Test heading</h2>
@@ -212,9 +212,13 @@ Accessibility styles are utility classes for repeatable patterns regarding acces
212
 
213
  Components are groups of reusable markup and styles. The component style structure is meant to mirror the markup structure.
214
 
215
- ### Media queries
216
 
217
- These styles use a mobile-first approach. Given this, there are only `min-width:` breakpoints, never `max-width:` breakpoints. This also lends to using the `--min-medium` modifier.
 
 
 
 
218
 
219
  ## Theme overrides
220
 
69
 
70
  For overriding styles, it is recommended to only use classes to keep overriding specificity consistent. All elements should have classes and should be targetted using those classes.
71
 
72
+ ## Modifiers, pseudo-classes, and container query classes
73
 
74
+ As you get into building upon these styles and creating new styles, the order of modifiers, pseudo-classes, and container query classes comes into question. The general rule is to apply them in the following order: container query classes, pseudo-classes, modifiers. See the examples below:
75
 
76
  ```
77
  .tribe-common {
80
  .tribe-common-form-control-toggle {
81
  /* toggle styles */
82
 
83
+ .tribe-common--breakpoint-medium& {
84
+ /* container medium toggle styles */
85
  }
86
 
87
  &:after {
88
  /* :after pseudo-class styles */
89
 
90
+ .tribe-common--breakpoint-medium& {
91
+ /* container medium :after pseudo-class styles */
92
  }
93
  }
94
  }
96
  .tribe-common-form-control-toggle--vertical {
97
  /* vertical toggle styles */
98
 
99
+ .tribe-common--breakpoint-medium& {
100
+ /* container medium vertical toggle styles */
101
  }
102
 
103
  &:after {
104
  /* :after pseudo-class styles */
105
 
106
+ .tribe-common--breakpoint-medium& {
107
+ /* container medium :after pseudo-class styles */
108
  }
109
  }
110
  }
122
  .tribe-common-form-control-toggle__input {
123
  /* toggle input styles */
124
 
125
+ .tribe-common--breakpoint-medium& {
126
+ /* container medium toggle input styles */
127
  }
128
 
129
  &:after {
130
  /* :after pseudo-class styles */
131
 
132
+ .tribe-common--breakpoint-medium& {
133
+ /* container medium :after pseudo-class styles */
134
  }
135
  }
136
  }
140
  .tribe-common-form-control-toggle__input {
141
  /* vertical toggle input styles */
142
 
143
+ .tribe-common--breakpoint-medium& {
144
+ /* container medium vertical toggle input styles */
145
  }
146
 
147
  &:after {
148
  /* :after pseudo-class styles */
149
 
150
+ .tribe-common--breakpoint-medium& {
151
+ /* container medium :after pseudo-class styles */
152
  }
153
  }
154
  }
196
 
197
  Base typography styles are for anything typography-related. These include anchors, body text, call to actions, headings, and lists. For body text, we've used the classes `.tribe-common-b1` to `.tribe-common-b3`. These body text classes are used to mimic the design system body text styles. For headings, we've used the classes `.tribe-common-h1` to `.tribe-common-h8`. These heading classes are also used to mimic the design system heading styles.
198
 
199
+ There are also classes in body text and heading styles with the `--min-medium` modifier. Each body text and heading class has a style for mobile and desktop (`.tribe-common--breakpoint-medium`). However, the designs may not follow the styles exactly for each class upon reaching the `.tribe-common--breakpoint-medium` breakpoint, but instead use another class style. For this reason, we've added the `--min-medium` modifier for each body text and heading class to apply a different style upon reaching this breakpoint. See example below:
200
 
201
  ```
202
  <h2 class="tribe-common-h6 tribe-common-h5--min-medium">Test heading</h2>
212
 
213
  Components are groups of reusable markup and styles. The component style structure is meant to mirror the markup structure.
214
 
215
+ ### Container queries
216
 
217
+ These styles use a mobile-first approach. Given this, styles build on top of each other at various breakpoints. However, they don't use the traditional `min-width:` media queries most of us are used to. Instead, the styles use container queries based on the `.tribe-common` container.
218
+
219
+ The reasoning for this is simple. Many of the views for The Events Calendar and Event Tickets depend on the theme to which they are applied. Some themes have an extremely wide spacing on the left and right while others have none. At our usual 768px breakpoint for the `--min-medium` modifier, the `.tribe-common` container could have very different widths based on the theme used and display the view inconsistently.
220
+
221
+ To counter this, we've applied a type of container media queries. By applying JavaScript that runs as soon as the container is printed, we are able apply classes to the container based on its width rather than the viewport width. We currently use 3 breakpoints: `.tribe-common--breakpoint-xsmall`, `.tribe-common--breakpoint-medium`, and `.tribe-common--breakpoint-full`. These correspond to 500px, 768px, and 960px, respectively. These values can also be filtered to customize the breakpoint values.
222
 
223
  ## Theme overrides
224
 
common/src/resources/postcss/base/full/forms/_text.pcss CHANGED
@@ -23,7 +23,7 @@
23
  border: 0;
24
  border-bottom: 1px solid var(--color-border-default);
25
 
26
- @media (--viewport-medium) {
27
  @mixin desktop-body-2;
28
 
29
  border: 0;
@@ -80,16 +80,16 @@
80
  border: 0;
81
  border-bottom: 1px solid var(--color-border-default);
82
 
83
- @media (--viewport-medium) {
84
- @mixin desktop-body-2;
85
-
86
- border: 0;
87
- }
88
-
89
  &:focus {
90
  border-bottom-color: var(--color-border-active);
91
  box-shadow: none;
92
  }
93
  }
 
 
 
 
 
 
94
  }
95
  }
23
  border: 0;
24
  border-bottom: 1px solid var(--color-border-default);
25
 
26
+ .tribe-common--breakpoint-medium& {
27
  @mixin desktop-body-2;
28
 
29
  border: 0;
80
  border: 0;
81
  border-bottom: 1px solid var(--color-border-default);
82
 
 
 
 
 
 
 
83
  &:focus {
84
  border-bottom-color: var(--color-border-active);
85
  box-shadow: none;
86
  }
87
  }
88
+
89
+ &.tribe-common--breakpoint-medium .tribe-common-form-control-text__input {
90
+ @mixin desktop-body-2;
91
+
92
+ border: 0;
93
+ }
94
  }
95
  }
common/src/resources/postcss/base/full/typography/_body.pcss CHANGED
@@ -15,7 +15,7 @@
15
  .tribe-common-b1 {
16
  @mixin mobile-body-1;
17
 
18
- @media (--viewport-medium) {
19
  @mixin desktop-body-1-sup;
20
  }
21
  }
@@ -31,7 +31,7 @@
31
  .tribe-common-b2 {
32
  @mixin mobile-body-2;
33
 
34
- @media (--viewport-medium) {
35
  @mixin desktop-body-2-sup;
36
  }
37
  }
@@ -47,7 +47,7 @@
47
  .tribe-common-b3 {
48
  @mixin mobile-body-3;
49
 
50
- @media (--viewport-medium) {
51
  @mixin desktop-body-3-sup;
52
  }
53
  }
@@ -61,7 +61,8 @@
61
  * ------------------------------------------------------------------------- */
62
 
63
  .tribe-common-b1--min-medium {
64
- @media (--viewport-medium) {
 
65
  @mixin desktop-body-1-sup;
66
  }
67
  }
@@ -71,7 +72,8 @@
71
  * ------------------------------------------------------------------------- */
72
 
73
  .tribe-common-b2--min-medium {
74
- @media (--viewport-medium) {
 
75
  @mixin desktop-body-2-sup;
76
  }
77
  }
@@ -81,7 +83,8 @@
81
  * ------------------------------------------------------------------------- */
82
 
83
  .tribe-common-b3--min-medium {
84
- @media (--viewport-medium) {
 
85
  @mixin desktop-body-3-sup;
86
  }
87
  }
15
  .tribe-common-b1 {
16
  @mixin mobile-body-1;
17
 
18
+ .tribe-common--breakpoint-medium& {
19
  @mixin desktop-body-1-sup;
20
  }
21
  }
31
  .tribe-common-b2 {
32
  @mixin mobile-body-2;
33
 
34
+ .tribe-common--breakpoint-medium& {
35
  @mixin desktop-body-2-sup;
36
  }
37
  }
47
  .tribe-common-b3 {
48
  @mixin mobile-body-3;
49
 
50
+ .tribe-common--breakpoint-medium& {
51
  @mixin desktop-body-3-sup;
52
  }
53
  }
61
  * ------------------------------------------------------------------------- */
62
 
63
  .tribe-common-b1--min-medium {
64
+
65
+ .tribe-common--breakpoint-medium& {
66
  @mixin desktop-body-1-sup;
67
  }
68
  }
72
  * ------------------------------------------------------------------------- */
73
 
74
  .tribe-common-b2--min-medium {
75
+
76
+ .tribe-common--breakpoint-medium& {
77
  @mixin desktop-body-2-sup;
78
  }
79
  }
83
  * ------------------------------------------------------------------------- */
84
 
85
  .tribe-common-b3--min-medium {
86
+
87
+ .tribe-common--breakpoint-medium& {
88
  @mixin desktop-body-3-sup;
89
  }
90
  }
common/src/resources/postcss/base/full/typography/_headings.pcss CHANGED
@@ -16,7 +16,7 @@
16
  @mixin heading;
17
  @mixin mobile-heading-1;
18
 
19
- @media (--viewport-medium) {
20
  @mixin desktop-heading-1;
21
  }
22
  }
@@ -29,7 +29,7 @@
29
  @mixin heading;
30
  @mixin mobile-heading-2;
31
 
32
- @media (--viewport-medium) {
33
  @mixin desktop-heading-2;
34
  }
35
  }
@@ -42,7 +42,7 @@
42
  @mixin heading;
43
  @mixin mobile-heading-3;
44
 
45
- @media (--viewport-medium) {
46
  @mixin desktop-heading-3;
47
  }
48
  }
@@ -55,7 +55,7 @@
55
  @mixin heading;
56
  @mixin mobile-heading-4;
57
 
58
- @media (--viewport-medium) {
59
  @mixin desktop-heading-4;
60
  }
61
  }
@@ -77,7 +77,7 @@
77
  @mixin heading;
78
  @mixin mobile-heading-6;
79
 
80
- @media (--viewport-medium) {
81
  @mixin desktop-heading-6;
82
  }
83
  }
@@ -105,7 +105,8 @@
105
  * ------------------------------------------------------------------------- */
106
 
107
  .tribe-common-h3--min-medium {
108
- @media (--viewport-medium) {
 
109
  @mixin desktop-heading-3;
110
  }
111
  }
@@ -115,7 +116,8 @@
115
  * ------------------------------------------------------------------------- */
116
 
117
  .tribe-common-h4--min-medium {
118
- @media (--viewport-medium) {
 
119
  @mixin desktop-heading-4;
120
  }
121
  }
@@ -125,7 +127,8 @@
125
  * ------------------------------------------------------------------------- */
126
 
127
  .tribe-common-h5--min-medium {
128
- @media (--viewport-medium) {
 
129
  @mixin heading-5;
130
  }
131
  }
@@ -135,7 +138,8 @@
135
  * ------------------------------------------------------------------------- */
136
 
137
  .tribe-common-h6--min-medium {
138
- @media (--viewport-medium) {
 
139
  @mixin desktop-heading-6;
140
  }
141
  }
@@ -145,7 +149,8 @@
145
  * ------------------------------------------------------------------------- */
146
 
147
  .tribe-common-h7--min-medium {
148
- @media (--viewport-medium) {
 
149
  @mixin heading-7;
150
  }
151
  }
@@ -168,7 +173,7 @@
168
  * Theme Overrides - Avada
169
  * ------------------------------------------------------------------------- */
170
 
171
- .tribe-theme-avada #main & {
172
 
173
  /* -------------------------------------------------------------------------
174
  * Heading: h1
@@ -177,10 +182,10 @@
177
  .tribe-common-h1 {
178
  @mixin heading;
179
  @mixin mobile-heading-1;
 
180
 
181
- @media (--viewport-medium) {
182
- @mixin desktop-heading-1;
183
- }
184
  }
185
 
186
  /* -------------------------------------------------------------------------
@@ -190,10 +195,10 @@
190
  .tribe-common-h2 {
191
  @mixin heading;
192
  @mixin mobile-heading-2;
 
193
 
194
- @media (--viewport-medium) {
195
- @mixin desktop-heading-2;
196
- }
197
  }
198
 
199
  /* -------------------------------------------------------------------------
@@ -203,10 +208,10 @@
203
  .tribe-common-h3 {
204
  @mixin heading;
205
  @mixin mobile-heading-3;
 
206
 
207
- @media (--viewport-medium) {
208
- @mixin desktop-heading-3;
209
- }
210
  }
211
 
212
  /* -------------------------------------------------------------------------
@@ -216,10 +221,10 @@
216
  .tribe-common-h4 {
217
  @mixin heading;
218
  @mixin mobile-heading-4;
 
219
 
220
- @media (--viewport-medium) {
221
- @mixin desktop-heading-4;
222
- }
223
  }
224
 
225
  /* -------------------------------------------------------------------------
@@ -238,10 +243,10 @@
238
  .tribe-common-h6 {
239
  @mixin heading;
240
  @mixin mobile-heading-6;
 
241
 
242
- @media (--viewport-medium) {
243
- @mixin desktop-heading-6;
244
- }
245
  }
246
 
247
  /* -------------------------------------------------------------------------
@@ -266,50 +271,40 @@
266
  * Heading: h3 for --viewport-medium
267
  * ------------------------------------------------------------------------- */
268
 
269
- .tribe-common-h3--min-medium {
270
- @media (--viewport-medium) {
271
- @mixin desktop-heading-3;
272
- }
273
  }
274
 
275
  /* -------------------------------------------------------------------------
276
  * Heading: h4 for --viewport-medium
277
  * ------------------------------------------------------------------------- */
278
 
279
- .tribe-common-h4--min-medium {
280
- @media (--viewport-medium) {
281
- @mixin desktop-heading-4;
282
- }
283
  }
284
 
285
  /* -------------------------------------------------------------------------
286
  * Heading: h5 for --viewport-medium
287
  * ------------------------------------------------------------------------- */
288
 
289
- .tribe-common-h5--min-medium {
290
- @media (--viewport-medium) {
291
- @mixin heading-5;
292
- }
293
  }
294
 
295
  /* -------------------------------------------------------------------------
296
  * Heading: h6 for --viewport-medium
297
  * ------------------------------------------------------------------------- */
298
 
299
- .tribe-common-h6--min-medium {
300
- @media (--viewport-medium) {
301
- @mixin desktop-heading-6;
302
- }
303
  }
304
 
305
  /* -------------------------------------------------------------------------
306
  * Heading: h7 for --viewport-medium
307
  * ------------------------------------------------------------------------- */
308
 
309
- .tribe-common-h7--min-medium {
310
- @media (--viewport-medium) {
311
- @mixin heading-7;
312
- }
313
  }
314
 
315
  /* -------------------------------------------------------------------------
16
  @mixin heading;
17
  @mixin mobile-heading-1;
18
 
19
+ .tribe-common--breakpoint-medium& {
20
  @mixin desktop-heading-1;
21
  }
22
  }
29
  @mixin heading;
30
  @mixin mobile-heading-2;
31
 
32
+ .tribe-common--breakpoint-medium& {
33
  @mixin desktop-heading-2;
34
  }
35
  }
42
  @mixin heading;
43
  @mixin mobile-heading-3;
44
 
45
+ .tribe-common--breakpoint-medium& {
46
  @mixin desktop-heading-3;
47
  }
48
  }
55
  @mixin heading;
56
  @mixin mobile-heading-4;
57
 
58
+ .tribe-common--breakpoint-medium& {
59
  @mixin desktop-heading-4;
60
  }
61
  }
77
  @mixin heading;
78
  @mixin mobile-heading-6;
79
 
80
+ .tribe-common--breakpoint-medium& {
81
  @mixin desktop-heading-6;
82
  }
83
  }
105
  * ------------------------------------------------------------------------- */
106
 
107
  .tribe-common-h3--min-medium {
108
+
109
+ .tribe-common--breakpoint-medium& {
110
  @mixin desktop-heading-3;
111
  }
112
  }
116
  * ------------------------------------------------------------------------- */
117
 
118
  .tribe-common-h4--min-medium {
119
+
120
+ .tribe-common--breakpoint-medium& {
121
  @mixin desktop-heading-4;
122
  }
123
  }
127
  * ------------------------------------------------------------------------- */
128
 
129
  .tribe-common-h5--min-medium {
130
+
131
+ .tribe-common--breakpoint-medium& {
132
  @mixin heading-5;
133
  }
134
  }
138
  * ------------------------------------------------------------------------- */
139
 
140
  .tribe-common-h6--min-medium {
141
+
142
+ .tribe-common--breakpoint-medium& {
143
  @mixin desktop-heading-6;
144
  }
145
  }
149
  * ------------------------------------------------------------------------- */
150
 
151
  .tribe-common-h7--min-medium {
152
+
153
+ .tribe-common--breakpoint-medium& {
154
  @mixin heading-7;
155
  }
156
  }
173
  * Theme Overrides - Avada
174
  * ------------------------------------------------------------------------- */
175
 
176
+ .tribe-theme-avada #main & {
177
 
178
  /* -------------------------------------------------------------------------
179
  * Heading: h1
182
  .tribe-common-h1 {
183
  @mixin heading;
184
  @mixin mobile-heading-1;
185
+ }
186
 
187
+ &.tribe-common--breakpoint-medium .tribe-common-h1 {
188
+ @mixin desktop-heading-1;
 
189
  }
190
 
191
  /* -------------------------------------------------------------------------
195
  .tribe-common-h2 {
196
  @mixin heading;
197
  @mixin mobile-heading-2;
198
+ }
199
 
200
+ &.tribe-common--breakpoint-medium .tribe-common-h2 {
201
+ @mixin desktop-heading-2;
 
202
  }
203
 
204
  /* -------------------------------------------------------------------------
208
  .tribe-common-h3 {
209
  @mixin heading;
210
  @mixin mobile-heading-3;
211
+ }
212
 
213
+ &.tribe-common--breakpoint-medium .tribe-common-h3 {
214
+ @mixin desktop-heading-3;
 
215
  }
216
 
217
  /* -------------------------------------------------------------------------
221
  .tribe-common-h4 {
222
  @mixin heading;
223
  @mixin mobile-heading-4;
224
+ }
225
 
226
+ &.tribe-common--breakpoint-medium .tribe-common-h4 {
227
+ @mixin desktop-heading-4;
 
228
  }
229
 
230
  /* -------------------------------------------------------------------------
243
  .tribe-common-h6 {
244
  @mixin heading;
245
  @mixin mobile-heading-6;
246
+ }
247
 
248
+ &.tribe-common--breakpoint-medium .tribe-common-h6 {
249
+ @mixin desktop-heading-6;
 
250
  }
251
 
252
  /* -------------------------------------------------------------------------
271
  * Heading: h3 for --viewport-medium
272
  * ------------------------------------------------------------------------- */
273
 
274
+ &.tribe-common--breakpoint-medium .tribe-common-h3--min-medium {
275
+ @mixin desktop-heading-3;
 
 
276
  }
277
 
278
  /* -------------------------------------------------------------------------
279
  * Heading: h4 for --viewport-medium
280
  * ------------------------------------------------------------------------- */
281
 
282
+ &.tribe-common--breakpoint-medium .tribe-common-h4--min-medium {
283
+ @mixin desktop-heading-4;
 
 
284
  }
285
 
286
  /* -------------------------------------------------------------------------
287
  * Heading: h5 for --viewport-medium
288
  * ------------------------------------------------------------------------- */
289
 
290
+ &.tribe-common--breakpoint-medium .tribe-common-h5--min-medium {
291
+ @mixin heading-5;
 
 
292
  }
293
 
294
  /* -------------------------------------------------------------------------
295
  * Heading: h6 for --viewport-medium
296
  * ------------------------------------------------------------------------- */
297
 
298
+ &.tribe-common--breakpoint-medium .tribe-common-h6--min-medium {
299
+ @mixin desktop-heading-6;
 
 
300
  }
301
 
302
  /* -------------------------------------------------------------------------
303
  * Heading: h7 for --viewport-medium
304
  * ------------------------------------------------------------------------- */
305
 
306
+ &.tribe-common--breakpoint-medium .tribe-common-h7--min-medium {
307
+ @mixin heading-7;
 
 
308
  }
309
 
310
  /* -------------------------------------------------------------------------
common/src/resources/postcss/base/skeleton/_layouts.pcss CHANGED
@@ -13,7 +13,7 @@
13
  padding-right: var(--grid-gutter-page-small);
14
  width: 100%;
15
 
16
- @media (--viewport-medium) {
17
  padding-left: var(--grid-gutter-page);
18
  padding-right: var(--grid-gutter-page);
19
  }
13
  padding-right: var(--grid-gutter-page-small);
14
  width: 100%;
15
 
16
+ .tribe-common--breakpoint-medium& {
17
  padding-left: var(--grid-gutter-page);
18
  padding-right: var(--grid-gutter-page);
19
  }
common/src/resources/postcss/base/skeleton/forms/_text.pcss CHANGED
@@ -26,7 +26,7 @@
26
  padding: var(--spacer-2) var(--spacer-6) var(--spacer-2) 0;
27
  width: 100%;
28
 
29
- @media (--viewport-medium) {
30
  padding: var(--spacer-4) var(--spacer-4) var(--spacer-4) var(--spacer-8);
31
  }
32
  }
@@ -46,10 +46,10 @@
46
  .tribe-common-form-control-text__input {
47
  padding: var(--spacer-2) var(--spacer-6) var(--spacer-2) 0;
48
  width: 100%;
 
49
 
50
- @media (--viewport-medium) {
51
- padding: var(--spacer-4) var(--spacer-4) var(--spacer-4) var(--spacer-8);
52
- }
53
  }
54
  }
55
  }
26
  padding: var(--spacer-2) var(--spacer-6) var(--spacer-2) 0;
27
  width: 100%;
28
 
29
+ .tribe-common--breakpoint-medium& {
30
  padding: var(--spacer-4) var(--spacer-4) var(--spacer-4) var(--spacer-8);
31
  }
32
  }
46
  .tribe-common-form-control-text__input {
47
  padding: var(--spacer-2) var(--spacer-6) var(--spacer-2) 0;
48
  width: 100%;
49
+ }
50
 
51
+ &.tribe-common--breakpoint-medium .tribe-common-form-control-text__input {
52
+ padding: var(--spacer-4) var(--spacer-4) var(--spacer-4) var(--spacer-8);
 
53
  }
54
  }
55
  }
common/src/resources/postcss/base/skeleton/grid/_rows.pcss CHANGED
@@ -21,7 +21,7 @@
21
  margin-left: var(--grid-gutter-small-half-negative);
22
  margin-right: var(--grid-gutter-small-half-negative);
23
 
24
- @media (--viewport-medium) {
25
  margin-left: var(--grid-gutter-half-negative);
26
  margin-right: var(--grid-gutter-half-negative);
27
  }
@@ -30,7 +30,7 @@
30
  padding-left: var(--grid-gutter-small-half);
31
  padding-right: var(--grid-gutter-small-half);
32
 
33
- @media (--viewport-medium) {
34
  padding-left: var(--grid-gutter-half);
35
  padding-right: var(--grid-gutter-half);
36
  }
@@ -53,25 +53,22 @@
53
  margin-left: var(--grid-gutter-small-half-negative);
54
  margin-right: var(--grid-gutter-small-half-negative);
55
  padding: 0;
56
-
57
- @media (--viewport-medium) {
58
- margin-left: var(--grid-gutter-half-negative);
59
- margin-right: var(--grid-gutter-half-negative);
60
- }
61
  }
62
 
63
- .tribe-common-g-row--gutters {
 
 
 
64
 
65
- & > .entry.tribe-common-g-col {
66
- margin: 0;
67
- padding-left: var(--grid-gutter-small-half);
68
- padding-right: var(--grid-gutter-small-half);
 
69
 
70
- @media (--viewport-medium) {
71
- padding-left: var(--grid-gutter-half);
72
- padding-right: var(--grid-gutter-half);
73
- }
74
- }
75
  }
76
  }
77
  }
21
  margin-left: var(--grid-gutter-small-half-negative);
22
  margin-right: var(--grid-gutter-small-half-negative);
23
 
24
+ .tribe-common--breakpoint-medium& {
25
  margin-left: var(--grid-gutter-half-negative);
26
  margin-right: var(--grid-gutter-half-negative);
27
  }
30
  padding-left: var(--grid-gutter-small-half);
31
  padding-right: var(--grid-gutter-small-half);
32
 
33
+ .tribe-common--breakpoint-medium& {
34
  padding-left: var(--grid-gutter-half);
35
  padding-right: var(--grid-gutter-half);
36
  }
53
  margin-left: var(--grid-gutter-small-half-negative);
54
  margin-right: var(--grid-gutter-small-half-negative);
55
  padding: 0;
 
 
 
 
 
56
  }
57
 
58
+ &.tribe-common--breakpoint-medium .entry.tribe-common-g-row--gutters {
59
+ margin-left: var(--grid-gutter-half-negative);
60
+ margin-right: var(--grid-gutter-half-negative);
61
+ }
62
 
63
+ .tribe-common-g-row--gutters > .entry.tribe-common-g-col {
64
+ margin: 0;
65
+ padding-left: var(--grid-gutter-small-half);
66
+ padding-right: var(--grid-gutter-small-half);
67
+ }
68
 
69
+ &.tribe-common--breakpoint-medium .tribe-common-g-row--gutters > .entry.tribe-common-g-col {
70
+ padding-left: var(--grid-gutter-half);
71
+ padding-right: var(--grid-gutter-half);
 
 
72
  }
73
  }
74
  }
common/src/resources/postcss/components/full/buttons/_border.pcss CHANGED
@@ -16,7 +16,7 @@
16
  color: var(--color-text-secondary);
17
  padding: 14px 20px 14px;
18
 
19
- @media (--viewport-medium) {
20
  padding: 6px 15px;
21
  }
22
 
16
  color: var(--color-text-secondary);
17
  padding: 14px 20px 14px;
18
 
19
+ .tribe-common--breakpoint-medium& {
20
  padding: 6px 15px;
21
  }
22
 
common/src/resources/postcss/components/full/buttons/_solid.pcss CHANGED
@@ -13,8 +13,13 @@
13
  a.tribe-common-c-btn {
14
  @mixin button-solid;
15
 
16
- padding: 11px 20px 11px;
17
  background-color: var(--color-accent-primary);
 
 
 
 
 
 
18
 
19
  &:focus,
20
  &:hover {
13
  a.tribe-common-c-btn {
14
  @mixin button-solid;
15
 
 
16
  background-color: var(--color-accent-primary);
17
+ padding: 11px 20px 11px;
18
+ width: 100%;
19
+
20
+ .tribe-common--breakpoint-medium& {
21
+ width: auto;
22
+ }
23
 
24
  &:focus,
25
  &:hover {
common/src/resources/postcss/components/skeleton/_loader.pcss CHANGED
@@ -17,7 +17,7 @@
17
  display: flex;
18
  padding-top: calc(var(--spacer-11) * 3);
19
 
20
- @media (--viewport-medium) {
21
  padding-top: calc(var(--spacer-13) * 3);
22
  }
23
  }
17
  display: flex;
18
  padding-top: calc(var(--spacer-11) * 3);
19
 
20
+ .tribe-common--breakpoint-medium& {
21
  padding-top: calc(var(--spacer-13) * 3);
22
  }
23
  }
common/src/resources/postcss/components/skeleton/buttons/_border.pcss CHANGED
@@ -14,7 +14,7 @@
14
  padding: 14px 20px 14px;
15
  width: 100%;
16
 
17
- @media (--viewport-medium) {
18
  padding: 6px 15px;
19
  width: auto;
20
  }
14
  padding: 14px 20px 14px;
15
  width: 100%;
16
 
17
+ .tribe-common--breakpoint-medium& {
18
  padding: 6px 15px;
19
  width: auto;
20
  }
common/src/resources/postcss/components/skeleton/buttons/_solid.pcss CHANGED
@@ -14,7 +14,7 @@
14
  padding: 11px 20px 11px;
15
  width: 100%;
16
 
17
- @media (--viewport-medium) {
18
  width: auto;
19
  }
20
  }
14
  padding: 11px 20px 11px;
15
  width: 100%;
16
 
17
+ .tribe-common--breakpoint-medium& {
18
  width: auto;
19
  }
20
  }
common/src/resources/postcss/resets/skeleton/_twentyseventeen.pcss CHANGED
@@ -1,7 +1,12 @@
1
- /* .tribe-theme-twentyseventeen .tribe-common { */
2
 
3
  /* -------------------------------------------------------------------------
4
  * Reset Skeleton Theme Overrides - Twenty Seventeen
5
  * ------------------------------------------------------------------------- */
6
 
7
- /* } */
 
 
 
 
 
1
+ .tribe-theme-twentyseventeen .tribe-common {
2
 
3
  /* -------------------------------------------------------------------------
4
  * Reset Skeleton Theme Overrides - Twenty Seventeen
5
  * ------------------------------------------------------------------------- */
6
 
7
+ /* dialogs are set to z-index of 1 by default. Twentyseventeen .site-branding (in page header) is set to 3. */
8
+ div.tribe-dialog {
9
+ z-index: 5 !important;
10
+ }
11
+
12
+ }
common/src/resources/postcss/utilities/icons/arrow.svg DELETED
@@ -1 +0,0 @@
1
- <svg width="12px" height="8px" viewBox="0 0 12 8" version="1.1" xmlns="http://www.w3.org/2000/svg"><g id="arrow" transform="translate(1.000000, 0.000000)" stroke="#141827" stroke-width="1" fill="none" fill-rule="evenodd"><line x1="10.7" y1="4" x2="0.1" y2="4" id="Path"></line><polyline id="Path" stroke-linecap="square" points="4.1 0 0.1 4 4.1 8"></polyline></g></svg>
 
common/src/resources/postcss/utilities/icons/error.svg DELETED
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="8" cy="8" r="7.467" stroke="#141827" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"/><circle cx="8" cy="11.733" r="1.067" fill="#141827" fill-rule="nonzero"/><path stroke="#141827" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M8 3.733v4.8"/></g></svg>
 
common/src/resources/postcss/utilities/icons/link.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17 18"><defs/><g fill="none" fill-rule="evenodd" stroke="#141827" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="M15.53125 1.5l-7.5 8M8.96875 1.5h6.5625v7M5.21875 1.5h-2.8125c-.5175 0-.9375.448-.9375 1v13c0 .552.42 1 .9375 1h12.1875c.5175 0 .9375-.448.9375-1v-3"/></g></svg>
common/src/resources/postcss/utilities/icons/list.svg CHANGED
@@ -1 +1 @@
1
- <svg width="21" height="18" xmlns="http://www.w3.org/2000/svg"><g fill="#141827" fill-rule="nonzero"><path d="M19.883 3.272c.342 0 .622-.21.622-.467v-.464c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.464c0 .257.28.467.622.467h12.756zM1.838 4.207a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5zM19.883 9.98c.342 0 .622-.21.622-.466v-.465c0-.257-.28-.467-.622-.467H7.127c-.342 0-.622.21-.622.467v.465c0 .256.28.466.622.466h12.756zM1.838 10.916a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/><g><path d="M19.883 16.689c.342 0 .622-.21.622-.467v-.465c0-.256-.28-.466-.622-.466H7.127c-.342 0-.622.21-.622.466v.465c0 .257.28.467.622.467h12.756zM1.838 17.624a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5z"/></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><defs/><g fill="#141827" fill-rule="evenodd"><path fill-rule="nonzero" d="M0 .50378788V20.5332919c0 .278234.19022354.5037879.42487547.5037879H20.6133064c.2346519 0 .4248754-.2255539.4248754-.5037879V.50378788C21.0381818.22555389 20.8479583 0 20.6133064 0H.42487547C.19022355 0 0 .2255539 0 .50378788zm1.1580346.94435628h18.6945206v2.70490149H1.1580346V1.44814416zm0 2.70490796h18.6945206V19.5845078H1.1580346V4.15305212z"/><path d="M13.38928235 5.73125033V7.860417c0 .58795234.48212125 1.06458333 1.07684605 1.06458333h2.1536922c.5947248 0 1.0768461-.47663099 1.0768461-1.06458333V5.73125033c0-.58795234-.4821213-1.06458333-1.0768461-1.06458333h-2.1536922c-.5947248 0-1.07684605.476631-1.07684605 1.06458333z"/><path fill-rule="nonzero" d="M8.83943685 8.936667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092h-4.8185522C3.7343981 7.466667 3.5 7.70188614 3.5 7.9893762v.4245816c0 .28749006.2343981.5227092.52088465.5227092h4.8185522zM10.9041036 6.136667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092H4.02088465C3.7343981 4.666667 3.5 4.90188614 3.5 5.1893762v.4245816c0 .28749006.2343981.5227092.52088465.5227092h6.88321895z"/><g><path d="M13.38928235 12.73125033V14.860417c0 .58795234.48212125 1.06458333 1.07684605 1.06458333h2.1536922c.5947248 0 1.0768461-.47663099 1.0768461-1.06458333v-2.12916667c0-.58795234-.4821213-1.06458333-1.0768461-1.06458333h-2.1536922c-.5947248 0-1.07684605.476631-1.07684605 1.06458333z"/><path fill-rule="nonzero" d="M8.83943685 15.936667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092h-4.8185522c-.28648655 0-.52088465.23521914-.52088465.5227092v.4245816c0 .28749006.2343981.5227092.52088465.5227092h4.8185522zM10.9041036 13.136667c.28648654 0 .52088465-.23521914.52088465-.5227092v-.4245816c0-.28749006-.23439811-.5227092-.52088465-.5227092H4.02088465c-.28648655 0-.52088465.23521914-.52088465.5227092v.4245816c0 .28749006.2343981.5227092.52088465.5227092h6.88321895z"/></g></g></svg>
common/src/resources/postcss/utilities/icons/mail.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 15"><defs/><g fill="none" fill-rule="evenodd" stroke="#141827" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5"><path d="M1.40468965 1.40468965l7.87117242 7.04358621 7.31255173-7.05131034"/><path d="M1 2.37931034V12.862069c0 .761772.61753828 1.3793103 1.37931034 1.3793103H15.6206897C16.3824617 14.2413793 17 13.623841 17 12.862069V2.37931034C17 1.61753828 16.3824617 1 15.6206897 1H2.37931034C1.61753828 1 1 1.61753828 1 2.37931034z"/></g></svg>
common/src/resources/postcss/utilities/icons/map-pin.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 18"><defs/><g fill="none" fill-rule="evenodd" stroke="#141828" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" transform="translate(1 1)"><path d="M11.9322034 5.99186441C11.9322034 10.0338983 5.96610169 16 5.96610169 16S0 10.0338983 0 5.99186441C0 2.20013559 3.08311864 0 5.96610169 0c2.88298306 0 5.96610171 2.20013559 5.96610171 5.99186441z"/><circle cx="5.96610169" cy="5.96610169" r="2.16949153"/></g></svg>
common/src/resources/postcss/utilities/icons/map.svg CHANGED
@@ -1 +1 @@
1
- <svg width="22" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path stroke="#141827" stroke-linejoin="round" d="M13.921 11.632H17.5l3.588 8.421H1l3.488-8.421h4.016"/><path d="M11.32 15.506c.2-.248 4.93-6.108 4.93-9.04 0-3.015-2.305-5.468-5.138-5.468-2.833 0-5.138 2.453-5.138 5.467 0 2.933 4.729 8.793 4.93 9.041a.268.268 0 0 0 .208.101c.08 0 .155-.037.207-.101zm-4.797-9.04c0-2.693 2.058-4.883 4.589-4.883 2.53 0 4.588 2.19 4.588 4.882 0 2.387-3.667 7.22-4.588 8.397-.922-1.177-4.589-6.009-4.589-8.397z" stroke="#141827" stroke-width=".4" fill="#141827" fill-rule="nonzero"/><path d="M12.85 6.477c0-1.007-.78-1.826-1.738-1.826-.96 0-1.74.819-1.74 1.826 0 1.007.78 1.826 1.74 1.826.959 0 1.739-.82 1.739-1.826zm-3.15 0c0-.817.633-1.482 1.412-1.482.778 0 1.41.665 1.41 1.482s-.632 1.482-1.41 1.482c-.779 0-1.412-.665-1.412-1.482z" stroke="#000" stroke-width=".7" fill="#000" fill-rule="nonzero"/></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 22"><defs/><g fill="none" fill-rule="evenodd"><g fill-rule="nonzero" stroke-width=".7"><path fill="#141827" stroke="#141827" d="M10.66992557 17.2092094c.18208949-.2244634 4.46052505-5.52626362 4.46052505-8.17980983 0-2.72724863-2.08535521-4.94606657-4.64855882-4.94606657-2.56320359 0-4.6485588 2.21881794-4.6485588 4.94606657 0 2.65354618 4.27843556 7.95534643 4.46052504 8.17980983.04719041.0580842.11585307.0915149.18803376.0915149.0721807 0 .14084336-.0334307.18803377-.0915149zM6.33022741 9.02939957c0-2.43579482 1.86238353-4.41737092 4.15166439-4.41737092 2.28928088 0 4.15166441 1.9815761 4.15166441 4.41737092 0 2.15995923-3.31788627 6.53241163-4.15166441 7.59703123-.83377813-1.0644905-4.15166439-5.43616846-4.15166439-7.59703123z"/><path fill="#000" stroke="#000" d="M12.05539077 9.03985474c0-.91098834-.70589102-1.65217392-1.57349897-1.65217392-.86760794 0-1.57349896.74118558-1.57349896 1.65217392 0 .91098834.70589102 1.65217392 1.57349896 1.65217392.86760795 0 1.57349897-.74118558 1.57349897-1.65217392zm-2.85036002 0c0-.73928452.57278056-1.34070411 1.27686105-1.34070411.70408051 0 1.27686107.60141959 1.27686107 1.34070411 0 .73928452-.57278056 1.34070411-1.27686107 1.34070411-.70408049 0-1.27686105-.60141959-1.27686105-1.34070411z"/></g><path fill="#000" fill-rule="nonzero" d="M0 .50378788V20.5332919c0 .278234.19022354.5037879.42487547.5037879H20.6133064c.2346519 0 .4248754-.2255539.4248754-.5037879V.50378788C21.0381818.22555389 20.8479583 0 20.6133064 0H.42487547C.19022355 0 0 .2255539 0 .50378788zm1.1580346.94435628h18.6945206v2.70490796H1.1580346V1.44814416zm0 2.70490796h18.6945206V19.5845078H1.1580346V4.15305212z"/></g></svg>
common/src/resources/postcss/utilities/icons/messages-not-found.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 23"><defs/><g fill="none" fill-rule="evenodd"><path stroke="#141827" d="M.5 2.5h20v20H.5z"/><path stroke="#334AFF" stroke-linecap="round" d="M7.58333333 11.58333333l5.83333334 5.83333334m0-5.83333334l-5.83333334 5.83333334"/><path stroke="#141827" stroke-linecap="round" d="M4.5.5v4m12-4v4"/><path stroke="#141827" stroke-linecap="square" d="M.5 7.5h20"/></g></svg>
common/src/resources/postcss/utilities/icons/no-map.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg width="92" height="92" xmlns="http://www.w3.org/2000/svg"><g fill-rule="nonzero" fill="none"><g stroke="#141827" stroke-width="2.5" transform="translate(2 2)"><path d="M32.219 88S0 58.674 0 32.281C-.011 15.598 12.685 1.66 29.278.136c16.593-1.523 31.608 9.873 34.627 26.28M32.733 88s2.96-2.693 7.083-7.181" stroke-linecap="round"/><circle cx="33" cy="33" r="8.905"/><circle cx="65.127" cy="59.016" r="23.571"/></g><g transform="translate(64.857 47.048)"><circle fill="#111" cx="2.839" cy="26.495" r="2.839"/><path d="M2.642 0v18.925" stroke="#141827" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round"/></g></g></svg>
common/src/resources/postcss/utilities/icons/phone.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18"><defs/><path fill="none" fill-rule="evenodd" stroke="#141827" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M11.6819994 10.88200048l-1.30400005 1.62857142c-2.01929741-1.1866922-3.70231405-2.86911883-4.88971428-4.888l1.63-1.304c.39282682-.31454501.52426073-.85436286.32-1.31428571L5.95257078 1.6585719c-.22002641-.49569916-.76652996-.75927831-1.29142857-.62285714l-2.82857143.73371429c-.54614963.14276045-.89926073.67138385-.822 1.23057143C2.03036105 10.26199785 7.73800197 15.9696388 14.99999 16.989429c.5591969.0772608 1.0878203-.2758503 1.2305808-.822l.7337143-2.8285714c.1360844-.5247877-.1272478-1.0710299-.6225715-1.2914286l-3.3454285-1.48571424c-.4599576-.20451327-.9999874-.07291035-1.3142857.32028572z"/></svg>
common/src/resources/postcss/utilities/icons/photo.svg CHANGED
@@ -1 +1 @@
1
- <svg width="20" height="17" xmlns="http://www.w3.org/2000/svg"><g fill="#141827" fill-rule="nonzero"><path d="M19.348.11H.634a.509.509 0 0 0-.52.508v15.017c0 .284.23.508.52.508h18.714c.29 0 .52-.224.52-.508V.618a.509.509 0 0 0-.52-.508zm-.54 1.035v10.837l-2.87-3.084c-.583-.61-1.664-.61-2.246 0l-1.393 1.481-4.034-4.525a1.625 1.625 0 0 0-1.227-.528 1.6 1.6 0 0 0-1.206.548l-4.657 5.175V1.145h17.632zM1.174 15.108v-2.496l5.448-6.089a.529.529 0 0 1 .415-.182c.146 0 .333.06.437.182l4.429 4.972c.104.102.25.183.395.183.166.02.291-.06.395-.162l1.788-1.908c.167-.183.5-.183.686 0l3.66 3.917v1.603H1.175v-.02z"/><path d="M14.19 5.757c1.044 0 1.91-.872 1.91-1.968s-.846-1.969-1.91-1.969c-1.062 0-1.909.873-1.909 1.969s.866 1.968 1.91 1.968zm0-2.902c.493 0 .907.427.907.934 0 .507-.414.933-.906.933-.492 0-.906-.426-.906-.933 0-.507.414-.934.906-.934z"/></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 21"><defs/><g fill="#141827" fill-rule="nonzero"><path d="M20.4070967 0H.57757675C.25413377 0 0 .24803922 0 .5637255v19.872549C0 20.7519607.25413377 21 .57757676 21H20.4070967c.323443 0 .5775767-.2480393.5775767-.5637255V.5637255C20.9846734.24803921 20.7305397 0 20.4070967 0zm-.6006799 1.15v14.8679567l-2.2249804-3.4274509c-.6468859-.6764706-1.8482455-.6764706-2.4951316 0l-1.5479057 1.6460784-4.48199558-5.02843135c-.34654605-.38333333-.83171053-.58627451-1.36308114-.58627451-.50826755 0-1.01653509.22549021-1.33997808.60882354L1.17825658 14.9807019V1.15H19.8064168zM1.17825658 19.8499999v-3.1330235l6.0530044-6.76470589c.11551535-.13529412.27723684-.20294118.4620614-.20294118.16172149 0 .36964912.06764706.48516448.20294118l4.92095394 5.52450979c.1155153.1127452.2772369.2029412.4389583.2029412.1848246.022549.3234431-.067647.4389583-.1803922l1.9868641-2.1196078c.1848246-.2029412.5544737-.2029412.7624013 0l3.1028972 4.3519608v2.1408666H1.17825658v-.022549z"/><path d="M14.9552083 9.04117648c1.159375 0 2.121875-.96960785 2.121875-2.18725491 0-1.21764705-.940625-2.1872549-2.121875-2.1872549-1.18125 0-2.121875.96960785-2.121875 2.1872549 0 1.21764706.9625 2.18725491 2.121875 2.18725491zm0-3.22450981c.546875 0 1.00625.47352941 1.00625 1.0372549 0 .5637255-.459375 1.03725491-1.00625 1.03725491-.546875 0-1.00625-.47352941-1.00625-1.03725491 0-.56372549.459375-1.0372549 1.00625-1.0372549z"/></g></svg>
common/src/resources/postcss/utilities/icons/remove.svg DELETED
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18"><g fill="none" fill-rule="evenodd" stroke-linecap="square" stroke-width="1.5" transform="translate(1 1)"><path stroke="#D5D5D5" d="M10.91 5.09l-5.82 5.82M10.91 10.91L5.09 5.09"/><circle cx="8" cy="8" r="8" stroke="#D5D5D5"/></g></svg>
 
common/src/resources/postcss/utilities/mixins/_buttons.pcss CHANGED
@@ -26,25 +26,6 @@
26
  transition: var(--transition-background-color);
27
  }
28
 
29
- /* -----------------------------------------------------------------------------
30
- * Button - Link
31
- * ----------------------------------------------------------------------------- */
32
-
33
- @define-mixin button-link {
34
- @mixin desktop-body-2;
35
- @mixin button-global;
36
-
37
- background-color: transparent;
38
- text-align: center;
39
- text-decoration: underline;
40
- transition: var(--transition-color);
41
-
42
- &:hover,
43
- &:focus {
44
- background-color: transparent;
45
- }
46
- }
47
-
48
  /* -----------------------------------------------------------------------------
49
  * Button - Border
50
  * ----------------------------------------------------------------------------- */
26
  transition: var(--transition-background-color);
27
  }
28
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  /* -----------------------------------------------------------------------------
30
  * Button - Border
31
  * ----------------------------------------------------------------------------- */
common/src/resources/postcss/utilities/variables/_box-shadows.pcss CHANGED
@@ -6,6 +6,6 @@
6
  --box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
7
  --box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
8
  --box-shadow-card: 0 1px 6px 2px var(--color-box-shadow);
9
- --box-shadow-multiday: 16px 6px 6px -2px var(--color-box-shadow);
10
  }
11
 
6
  --box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
7
  --box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
8
  --box-shadow-card: 0 1px 6px 2px var(--color-box-shadow);
9
+ --box-shadow-multiday: 16px 6px 6px -2px var(--color-box-shadow-secondary);
10
  }
11
 
common/src/resources/postcss/utilities/variables/_colors.pcss CHANGED
@@ -4,6 +4,7 @@
4
  * ----------------------------------------------------------------------------- */
5
 
6
  --color-text-primary: #141827;
 
7
  --color-text-secondary: #727272;
8
  --color-text-disabled: #D5D5D5;
9
 
@@ -16,7 +17,6 @@
16
  --color-icon-active: #141827;
17
  --color-icon-disabled: #D5D5D5;
18
  --color-icon-focus: #334AFF;
19
- --color-icon-error: #DA394D;
20
 
21
  /* -----------------------------------------------------------------------------
22
  * Colors - UI
@@ -48,9 +48,10 @@
48
  --color-background: #FFFFFF;
49
  --color-background-transparent: rgba(var(--color-background), 0.6);
50
  --color-background-secondary: #F7F6F6;
 
51
  --color-background-secondary-hover: #F0EEEE;
52
- --color-background-error: rgba(var(--color-icon-error), 0.08);
53
  --color-box-shadow: rgba(#000000, 0.14);
 
54
  --color-scroll-track: rgba(#000000, 0.25);
55
  --color-scroll-bar: rgba(#000000, 0.5);
56
 
4
  * ----------------------------------------------------------------------------- */
5
 
6
  --color-text-primary: #141827;
7
+ --color-text-primary-light: rgba(var(--color-text-primary), 0.62);
8
  --color-text-secondary: #727272;
9
  --color-text-disabled: #D5D5D5;
10
 
17
  --color-icon-active: #141827;
18
  --color-icon-disabled: #D5D5D5;
19
  --color-icon-focus: #334AFF;
 
20
 
21
  /* -----------------------------------------------------------------------------
22
  * Colors - UI
48
  --color-background: #FFFFFF;
49
  --color-background-transparent: rgba(var(--color-background), 0.6);
50
  --color-background-secondary: #F7F6F6;
51
+ --color-background-messages: rgba(var(--color-text-primary), 0.07);
52
  --color-background-secondary-hover: #F0EEEE;
 
53
  --color-box-shadow: rgba(#000000, 0.14);
54
+ --color-box-shadow-secondary: rgba(#000000, 0.1);
55
  --color-scroll-track: rgba(#000000, 0.25);
56
  --color-scroll-bar: rgba(#000000, 0.5);
57
 
common/src/resources/postcss/utilities/variables/_svgs.pcss CHANGED
@@ -23,17 +23,6 @@
23
  }
24
  }
25
 
26
- /* -----------------------------------------------------------------------------
27
- * SVG - Arrow (light, left)
28
- * ----------------------------------------------------------------------------- */
29
-
30
- @svg-load arrow url('../icons/arrow.svg') {
31
-
32
- path {
33
- fill: var(--color-icon-primary);
34
- }
35
- }
36
-
37
  /* -----------------------------------------------------------------------------
38
  * SVG - Caret Down
39
  * ----------------------------------------------------------------------------- */
@@ -135,17 +124,17 @@
135
  * SVG - Close
136
  * ----------------------------------------------------------------------------- */
137
 
138
- @svg-load close-secondary url('../icons/close.svg') {
139
 
140
  path {
141
- stroke: var(--color-icon-secondary);
142
  }
143
  }
144
 
145
- @svg-load close url('../icons/close.svg') {
146
 
147
  path {
148
- stroke: var(--color-icon-primary);
149
  }
150
  }
151
 
@@ -171,17 +160,6 @@
171
  }
172
  }
173
 
174
- /* -----------------------------------------------------------------------------
175
- * SVG - Error
176
- * ----------------------------------------------------------------------------- */
177
-
178
- @svg-load error-active url('../icons/error.svg') {
179
-
180
- path {
181
- fill: var(--color-icon-active);
182
- }
183
- }
184
-
185
  /* -----------------------------------------------------------------------------
186
  * SVG - Featured
187
  * ----------------------------------------------------------------------------- */
@@ -244,6 +222,17 @@
244
  }
245
  }
246
 
 
 
 
 
 
 
 
 
 
 
 
247
  /* -----------------------------------------------------------------------------
248
  * SVG - List
249
  * ----------------------------------------------------------------------------- */
@@ -287,17 +276,45 @@
287
  }
288
  }
289
 
 
 
 
 
 
 
 
 
 
 
 
290
  /* -----------------------------------------------------------------------------
291
  * SVG - Map
292
  * ----------------------------------------------------------------------------- */
293
 
294
  @svg-load map url('../icons/map.svg') {
295
 
 
 
 
 
 
 
 
 
 
 
 
296
  path {
297
  stroke: var(--color-icon-active);
298
  }
299
  }
300
 
 
 
 
 
 
 
301
  /* -----------------------------------------------------------------------------
302
  * SVG - Month
303
  * ----------------------------------------------------------------------------- */
@@ -310,44 +327,48 @@
310
  }
311
 
312
  /* -----------------------------------------------------------------------------
313
- * SVG - Photo
314
  * ----------------------------------------------------------------------------- */
315
 
316
- @svg-load photo url('../icons/photo.svg') {
 
 
 
 
 
 
317
 
318
  path {
319
- fill: var(--color-icon-active);
320
  }
321
  }
322
 
323
  /* -----------------------------------------------------------------------------
324
- * SVG - Recurring
325
  * ----------------------------------------------------------------------------- */
326
 
327
- @svg-load recurring url('../icons/recurring-events.svg') {
328
 
329
  path {
330
- fill: var(--color-accent-primary);
331
  }
332
  }
333
 
334
  /* -----------------------------------------------------------------------------
335
- * SVG - Remove
336
  * ----------------------------------------------------------------------------- */
337
 
338
- @svg-load remove url('../icons/remove.svg') {
339
 
340
- circle,
341
  path {
342
- stroke: var(--color-icon-primary);
343
  }
344
  }
345
 
346
- @svg-load remove-secondary url('../icons/remove.svg') {
347
 
348
- circle,
349
  path {
350
- stroke: var(--color-icon-secondary);
351
  }
352
  }
353
 
23
  }
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
26
  /* -----------------------------------------------------------------------------
27
  * SVG - Caret Down
28
  * ----------------------------------------------------------------------------- */
124
  * SVG - Close
125
  * ----------------------------------------------------------------------------- */
126
 
127
+ @svg-load close url('../icons/close.svg') {
128
 
129
  path {
130
+ stroke: var(--color-icon-primary);
131
  }
132
  }
133
 
134
+ @svg-load close-secondary url('../icons/close.svg') {
135
 
136
  path {
137
+ stroke: var(--color-icon-secondary);
138
  }
139
  }
140
 
160
  }
161
  }
162
 
 
 
 
 
 
 
 
 
 
 
 
163
  /* -----------------------------------------------------------------------------
164
  * SVG - Featured
165
  * ----------------------------------------------------------------------------- */
222
  }
223
  }
224
 
225
+ /* -----------------------------------------------------------------------------
226
+ * SVG - Link
227
+ * ----------------------------------------------------------------------------- */
228
+
229
+ @svg-load link-active url('../icons/link.svg') {
230
+
231
+ path {
232
+ stroke: var(--color-icon-active);
233
+ }
234
+ }
235
+
236
  /* -----------------------------------------------------------------------------
237
  * SVG - List
238
  * ----------------------------------------------------------------------------- */
276
  }
277
  }
278
 
279
+ /* -----------------------------------------------------------------------------
280
+ * SVG - Mail
281
+ * ----------------------------------------------------------------------------- */
282
+
283
+ @svg-load mail-active url('../icons/mail.svg') {
284
+
285
+ path {
286
+ stroke: var(--color-icon-active);
287
+ }
288
+ }
289
+
290
  /* -----------------------------------------------------------------------------
291
  * SVG - Map
292
  * ----------------------------------------------------------------------------- */
293
 
294
  @svg-load map url('../icons/map.svg') {
295
 
296
+ path {
297
+ fill: var(--color-icon-active);
298
+ }
299
+ }
300
+
301
+ /* -----------------------------------------------------------------------------
302
+ * SVG - Map pin
303
+ * ----------------------------------------------------------------------------- */
304
+
305
+ @svg-load map-pin-active url('../icons/map-pin.svg') {
306
+
307
  path {
308
  stroke: var(--color-icon-active);
309
  }
310
  }
311
 
312
+ /* -----------------------------------------------------------------------------
313
+ * SVG - Messages
314
+ * ----------------------------------------------------------------------------- */
315
+
316
+ @svg-load messages-not-found url('../icons/messages-not-found.svg') {}
317
+
318
  /* -----------------------------------------------------------------------------
319
  * SVG - Month
320
  * ----------------------------------------------------------------------------- */
327
  }
328
 
329
  /* -----------------------------------------------------------------------------
330
+ * SVG - No Map
331
  * ----------------------------------------------------------------------------- */
332
 
333
+ @svg-load no-map url('../icons/no-map.svg') {}
334
+
335
+ /* -----------------------------------------------------------------------------
336
+ * SVG - Phone
337
+ * ----------------------------------------------------------------------------- */
338
+
339
+ @svg-load phone-active url('../icons/phone.svg') {
340
 
341
  path {
342
+ stroke: var(--color-icon-active);
343
  }
344
  }
345
 
346
  /* -----------------------------------------------------------------------------
347
+ * SVG - Photo
348
  * ----------------------------------------------------------------------------- */
349
 
350
+ @svg-load photo url('../icons/photo.svg') {
351
 
352
  path {
353
+ fill: var(--color-icon-active);
354
  }
355
  }
356
 
357
  /* -----------------------------------------------------------------------------
358
+ * SVG - Recurring
359
  * ----------------------------------------------------------------------------- */
360
 
361
+ @svg-load recurring url('../icons/recurring-events.svg') {
362
 
 
363
  path {
364
+ fill: var(--color-accent-primary);
365
  }
366
  }
367
 
368
+ @svg-load recurring-active url('../icons/recurring-events.svg') {
369
 
 
370
  path {
371
+ fill: var(--color-icon-active);
372
  }
373
  }
374
 
common/src/resources/postcss/utilities/variables/_z-index.pcss CHANGED
@@ -13,4 +13,5 @@
13
  --z-index-map-event-hover: 5;
14
  --z-index-map-event-hover-actions: 6;
15
  --z-index-multiday-event: 5;
 
16
  }
13
  --z-index-map-event-hover: 5;
14
  --z-index-map-event-hover-actions: 6;
15
  --z-index-multiday-event: 5;
16
+ --z-index-multiday-event-bar: 2;
17
  }
common/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit3a672380888faa1d26541e85d9fd9364::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit45e5a9d8cf34dec530211a7c9e3d4ba1::getLoader();
common/vendor/autoload_52.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
- return ComposerAutoloaderInit110480551d212fc5dacee2f78e99948c::getLoader();
4
 
5
  require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
6
 
7
+ return ComposerAutoloaderInitb66f981e26d6b97fe576db7aa8e3b5ff::getLoader();
common/vendor/composer/autoload_classmap.php CHANGED
@@ -131,6 +131,8 @@ return array(
131
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
132
  'Tribe\\Utils\\Collection_Interface' => $baseDir . '/src/Tribe/Utils/Collection_Interface.php',
133
  'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
 
 
134
  'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
135
  'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
136
  'Tribe\\Utils\\Lazy_Events' => $baseDir . '/src/Tribe/Utils/Lazy_Events.php',
131
  'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
132
  'Tribe\\Utils\\Collection_Interface' => $baseDir . '/src/Tribe/Utils/Collection_Interface.php',
133
  'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
134
+ 'Tribe\\Utils\\Date_I18n' => $baseDir . '/src/Tribe/Utils/Date_I18n.php',
135
+ 'Tribe\\Utils\\Date_I18n_Immutable' => $baseDir . '/src/Tribe/Utils/Date_I18n_Immutable.php',
136
  'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
137
  'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
138
  'Tribe\\Utils\\Lazy_Events' => $baseDir . '/src/Tribe/Utils/Lazy_Events.php',
common/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit3a672380888faa1d26541e85d9fd9364
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit3a672380888faa1d26541e85d9fd9364
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit3a672380888faa1d26541e85d9fd9364', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit3a672380888faa1d26541e85d9fd9364', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit3a672380888faa1d26541e85d9fd9364::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit45e5a9d8cf34dec530211a7c9e3d4ba1
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit45e5a9d8cf34dec530211a7c9e3d4ba1', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit45e5a9d8cf34dec530211a7c9e3d4ba1', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit45e5a9d8cf34dec530211a7c9e3d4ba1::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
common/vendor/composer/autoload_real_52.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
- class ComposerAutoloaderInit110480551d212fc5dacee2f78e99948c {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit110480551d212fc5dacee2f78e99948c {
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit110480551d212fc5dacee2f78e99948c', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit110480551d212fc5dacee2f78e99948c', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
2
 
3
  // autoload_real_52.php generated by xrstf/composer-php52
4
 
5
+ class ComposerAutoloaderInitb66f981e26d6b97fe576db7aa8e3b5ff {
6
  private static $loader;
7
 
8
  public static function loadClassLoader($class) {
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInitb66f981e26d6b97fe576db7aa8e3b5ff', 'loadClassLoader'), true /*, true */);
23
  self::$loader = $loader = new xrstf_Composer52_ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitb66f981e26d6b97fe576db7aa8e3b5ff', 'loadClassLoader'));
25
 
26
  $vendorDir = dirname(dirname(__FILE__));
27
  $baseDir = dirname($vendorDir);
common/vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit3a672380888faa1d26541e85d9fd9364
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -187,6 +187,8 @@ class ComposerStaticInit3a672380888faa1d26541e85d9fd9364
187
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
188
  'Tribe\\Utils\\Collection_Interface' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Interface.php',
189
  'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
 
 
190
  'Tribe\\Utils\\Element_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Element_Classes.php',
191
  'Tribe\\Utils\\Lazy_Collection' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Collection.php',
192
  'Tribe\\Utils\\Lazy_Events' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Events.php',
@@ -205,10 +207,10 @@ class ComposerStaticInit3a672380888faa1d26541e85d9fd9364
205
  public static function getInitializer(ClassLoader $loader)
206
  {
207
  return \Closure::bind(function () use ($loader) {
208
- $loader->prefixLengthsPsr4 = ComposerStaticInit3a672380888faa1d26541e85d9fd9364::$prefixLengthsPsr4;
209
- $loader->prefixDirsPsr4 = ComposerStaticInit3a672380888faa1d26541e85d9fd9364::$prefixDirsPsr4;
210
- $loader->prefixesPsr0 = ComposerStaticInit3a672380888faa1d26541e85d9fd9364::$prefixesPsr0;
211
- $loader->classMap = ComposerStaticInit3a672380888faa1d26541e85d9fd9364::$classMap;
212
 
213
  }, null, ClassLoader::class);
214
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit45e5a9d8cf34dec530211a7c9e3d4ba1
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
187
  'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
188
  'Tribe\\Utils\\Collection_Interface' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Interface.php',
189
  'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
190
+ 'Tribe\\Utils\\Date_I18n' => __DIR__ . '/../..' . '/src/Tribe/Utils/Date_I18n.php',
191
+ 'Tribe\\Utils\\Date_I18n_Immutable' => __DIR__ . '/../..' . '/src/Tribe/Utils/Date_I18n_Immutable.php',
192
  'Tribe\\Utils\\Element_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Element_Classes.php',
193
  'Tribe\\Utils\\Lazy_Collection' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Collection.php',
194
  'Tribe\\Utils\\Lazy_Events' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Events.php',
207
  public static function getInitializer(ClassLoader $loader)
208
  {
209
  return \Closure::bind(function () use ($loader) {
210
+ $loader->prefixLengthsPsr4 = ComposerStaticInit45e5a9d8cf34dec530211a7c9e3d4ba1::$prefixLengthsPsr4;
211
+ $loader->prefixDirsPsr4 = ComposerStaticInit45e5a9d8cf34dec530211a7c9e3d4ba1::$prefixDirsPsr4;
212
+ $loader->prefixesPsr0 = ComposerStaticInit45e5a9d8cf34dec530211a7c9e3d4ba1::$prefixesPsr0;
213
+ $loader->classMap = ComposerStaticInit45e5a9d8cf34dec530211a7c9e3d4ba1::$classMap;
214
 
215
  }, null, ClassLoader::class);
216
  }
lang/the-events-calendar-zh_TW.mo CHANGED
Binary file
lang/the-events-calendar.pot CHANGED
@@ -2,14 +2,14 @@
2
  # This file is distributed under the same license as the The Events Calendar package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: The Events Calendar 4.9.14\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
7
  "calendar\n"
8
- "POT-Creation-Date: 2020-01-14 18:47:19+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "PO-Revision-Date: 2020-01-14 18:47\n"
13
  "Last-Translator: \n"
14
  "Language-Team: \n"
15
 
@@ -47,7 +47,7 @@ msgstr ""
47
  msgid "%s"
48
  msgstr ""
49
 
50
- #: src/Tribe/Admin/Bar/Default_Configurator.php:45 src/Tribe/Main.php:4152
51
  #: src/admin-views/tribe-options-upgrade.php:20
52
  msgid "View Calendar"
53
  msgstr ""
@@ -57,8 +57,8 @@ msgid "Add %s"
57
  msgstr ""
58
 
59
  #: src/Tribe/Admin/Bar/Default_Configurator.php:62
60
- #: src/Tribe/Linked_Posts/Chooser_Meta_Box.php:211 src/Tribe/Main.php:2010
61
- #: src/Tribe/Main.php:5248 src/Tribe/Main.php:5295 src/Tribe/Organizer.php:93
62
  #: src/Tribe/Venue.php:112
63
  msgid "Edit %s"
64
  msgstr ""
@@ -69,7 +69,7 @@ msgstr ""
69
  msgid "Import"
70
  msgstr ""
71
 
72
- #: src/Tribe/Admin/Bar/Default_Configurator.php:89 src/Tribe/Main.php:4200
73
  msgid "Settings"
74
  msgstr ""
75
 
@@ -154,7 +154,7 @@ msgid ""
154
  "refresh and try again."
155
  msgstr ""
156
 
157
- #: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2029
158
  msgid "%s Categories"
159
  msgstr ""
160
 
@@ -1936,29 +1936,29 @@ msgstr ""
1936
  msgid "Custom"
1937
  msgstr ""
1938
 
1939
- #: src/Tribe/Customizer/Global_Elements.php:113
1940
  msgid "Global Elements"
1941
  msgstr ""
1942
 
1943
- #: src/Tribe/Customizer/Global_Elements.php:114
1944
  msgid ""
1945
  "Options selected here will override what was selected in the \"General Theme"
1946
  "\" section"
1947
  msgstr ""
1948
 
1949
- #: src/Tribe/Customizer/Global_Elements.php:145
1950
  msgid "Link Color"
1951
  msgstr ""
1952
 
1953
- #: src/Tribe/Customizer/Global_Elements.php:167
1954
  msgid "Filter Bar Color"
1955
  msgstr ""
1956
 
1957
- #: src/Tribe/Customizer/Global_Elements.php:189
1958
  msgid "Button Color"
1959
  msgstr ""
1960
 
1961
- #: src/Tribe/Customizer/Global_Elements.php:213
1962
  msgid "Map Pin"
1963
  msgstr ""
1964
 
@@ -2035,8 +2035,9 @@ msgstr ""
2035
 
2036
  #: src/Tribe/Editor/Template.php:70 src/Tribe/Template/Embed.php:59
2037
  #: src/Tribe/Template/Single_Event.php:119
2038
- #: src/Tribe/Views/V2/Template_Bootstrap.php:128
2039
  #: src/Tribe/Views/V2/Template_Bootstrap.php:160
 
2040
  msgid "This %s has passed."
2041
  msgstr ""
2042
 
@@ -2639,202 +2640,202 @@ msgstr ""
2639
  msgid "Upcoming Events"
2640
  msgstr ""
2641
 
2642
- #. #-#-#-#-# the-events-calendar.pot (The Events Calendar 4.9.14) #-#-#-#-#
2643
  #. Plugin Name of the plugin/theme
2644
- #: src/Tribe/Main.php:910 src/Tribe/Main.php:1365 src/Tribe/Privacy.php:29
2645
- #: src/functions/template-tags/general.php:1358 the-events-calendar.php:56
2646
  msgid "The Events Calendar"
2647
  msgstr ""
2648
 
2649
- #: src/Tribe/Main.php:917
2650
  msgid "month"
2651
  msgstr ""
2652
 
2653
- #: src/Tribe/Main.php:918
2654
  msgid "list"
2655
  msgstr ""
2656
 
2657
- #: src/Tribe/Main.php:919
2658
  msgid "upcoming"
2659
  msgstr ""
2660
 
2661
- #: src/Tribe/Main.php:920
2662
  msgid "past"
2663
  msgstr ""
2664
 
2665
- #: src/Tribe/Main.php:921
2666
  msgid "day"
2667
  msgstr ""
2668
 
2669
- #: src/Tribe/Main.php:922
2670
  msgid "today"
2671
  msgstr ""
2672
 
2673
- #: src/Tribe/Main.php:923
2674
  msgctxt "featured events slug"
2675
  msgid "featured"
2676
  msgstr ""
2677
 
2678
- #: src/Tribe/Main.php:924
2679
  msgctxt "all events slug"
2680
  msgid "all"
2681
  msgstr ""
2682
 
2683
- #: src/Tribe/Main.php:948
2684
  msgid "Initializing Tribe Events on %s"
2685
  msgstr ""
2686
 
2687
- #: src/Tribe/Main.php:1006 src/Tribe/Main.php:1008
2688
  msgid "Welcome to The Events Calendar!"
2689
  msgstr ""
2690
 
2691
- #: src/Tribe/Main.php:1154
2692
  msgid ""
2693
  "The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
2694
  "show its calendar in place of the page."
2695
  msgstr ""
2696
 
2697
- #: src/Tribe/Main.php:1157
2698
  msgid "Ask the site administrator to edit the %s slug"
2699
  msgstr ""
2700
 
2701
- #: src/Tribe/Main.php:1159
2702
  msgid "Edit the %s slug"
2703
  msgstr ""
2704
 
2705
- #: src/Tribe/Main.php:1163
2706
- msgid " ask the site administrator set a different Events URL slug."
2707
  msgstr ""
2708
 
2709
- #: src/Tribe/Main.php:1168
2710
  msgid "edit Events settings."
2711
  msgstr ""
2712
 
2713
- #: src/Tribe/Main.php:1171
2714
  msgid "%1$s or %2$s"
2715
  msgstr ""
2716
 
2717
- #: src/Tribe/Main.php:1240
2718
  msgid "Upgrade your calendar views"
2719
  msgstr ""
2720
 
2721
- #: src/Tribe/Main.php:1276
2722
  msgid "Upgrade"
2723
  msgstr ""
2724
 
2725
- #: src/Tribe/Main.php:1325 src/admin-views/admin-welcome-message.php:19
2726
  msgid "New User Primer"
2727
  msgstr ""
2728
 
2729
- #: src/Tribe/Main.php:1327
2730
  msgid ""
2731
  "We are committed to helping make your calendar spectacular and have a wealth "
2732
  "of resources available, including a handy %s to get your calendar up and "
2733
  "running."
2734
  msgstr ""
2735
 
2736
- #: src/Tribe/Main.php:1338
2737
  msgid "Support for The Events Calendar"
2738
  msgstr ""
2739
 
2740
- #: src/Tribe/Main.php:1341
2741
  msgid ""
2742
  "%s: A thorough walkthrough of The Events Calendar and the settings that are "
2743
  "available to you."
2744
  msgstr ""
2745
 
2746
- #: src/Tribe/Main.php:1341
2747
  msgid "Settings overview"
2748
  msgstr ""
2749
 
2750
- #: src/Tribe/Main.php:1343
2751
  msgid ""
2752
  "%s: A complete look at the features you can expect to see right out of the "
2753
  "box as well as how to use them."
2754
  msgstr ""
2755
 
2756
- #: src/Tribe/Main.php:1343
2757
  msgid "Features overview"
2758
  msgstr ""
2759
 
2760
- #: src/Tribe/Main.php:1345
2761
  msgid ""
2762
  "%s: Our most comprehensive outline for customizing the calendar to suit your "
2763
  "needs, including custom layouts and styles."
2764
  msgstr ""
2765
 
2766
- #: src/Tribe/Main.php:1345
2767
  msgid "Themer’s Guide"
2768
  msgstr ""
2769
 
2770
- #: src/Tribe/Main.php:1347
2771
  msgid ""
2772
  "%s: An overview of the default templates and styles that are included in the "
2773
  "plugin, as well as how to change them."
2774
  msgstr ""
2775
 
2776
- #: src/Tribe/Main.php:1347
2777
  msgid "Using stylesheets and page templates"
2778
  msgstr ""
2779
 
2780
- #: src/Tribe/Main.php:1349
2781
  msgid ""
2782
  "%s: Do you see an issue with your calendar? Go here first to find where it’s "
2783
  "coming from and how to fix it."
2784
  msgstr ""
2785
 
2786
- #: src/Tribe/Main.php:1349
2787
  msgid "Troubleshooting common problems"
2788
  msgstr ""
2789
 
2790
- #: src/Tribe/Main.php:1351
2791
  msgid ""
2792
  "%s: Code and guides for customizing your calendar in useful and interesting "
2793
  "ways."
2794
  msgstr ""
2795
 
2796
- #: src/Tribe/Main.php:1351
2797
  msgid "Customizing the Events plugins"
2798
  msgstr ""
2799
 
2800
- #: src/Tribe/Main.php:1366
2801
  msgid "Events Tickets"
2802
  msgstr ""
2803
 
2804
- #: src/Tribe/Main.php:1367
2805
  msgid ""
2806
  "If you have tried the above steps and are still having trouble, you can post "
2807
  "a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
2808
  "monitors these forums once a week and would be happy to assist you there. "
2809
  msgstr ""
2810
 
2811
- #: src/Tribe/Main.php:1369 src/Tribe/Main.php:1377
2812
  msgid "premium support on our website"
2813
  msgstr ""
2814
 
2815
- #: src/Tribe/Main.php:1370
2816
  msgid ""
2817
  "<strong>Looking for more immediate support?</strong> We offer %s with the "
2818
  "purchase of any of our premium plugins. Pick up a license and you can post "
2819
  "there directly and expect a response within 24-48 hours during weekdays"
2820
  msgstr ""
2821
 
2822
- #: src/Tribe/Main.php:1374
2823
  msgid "open-source forum on WordPress.org"
2824
  msgstr ""
2825
 
2826
- #: src/Tribe/Main.php:1375
2827
  msgid ""
2828
  "If you have tried the above steps and are still having trouble, you can post "
2829
  "a new thread to our %s. Our support staff monitors these forums once a week "
2830
  "and would be happy to assist you there."
2831
  msgstr ""
2832
 
2833
- #: src/Tribe/Main.php:1378
2834
  msgid "Events Calendar PRO"
2835
  msgstr ""
2836
 
2837
- #: src/Tribe/Main.php:1379
2838
  msgid ""
2839
  "<strong>Looking for more immediate support?</strong> We offer %1$s with the "
2840
  "purchase of any of our premium plugins (like %2$s). Pick up a license and "
@@ -2842,427 +2843,427 @@ msgid ""
2842
  "weekdays."
2843
  msgstr ""
2844
 
2845
- #: src/Tribe/Main.php:1383
2846
  msgid "post a thread"
2847
  msgstr ""
2848
 
2849
- #: src/Tribe/Main.php:1384
2850
  msgid ""
2851
  "If you have a valid license for one of our paid plugins, you can %s in our "
2852
  "premium support forums. Our support team monitors the forums and will "
2853
  "respond to your thread within 24-48 hours (during the week)."
2854
  msgstr ""
2855
 
2856
- #: src/Tribe/Main.php:1427
2857
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
2858
  #: src/functions/template-tags/general.php:95
2859
  msgid "Events"
2860
  msgstr ""
2861
 
2862
- #: src/Tribe/Main.php:1435 src/admin-views/aggregator/tabs/import-form.php:208
2863
  #: src/admin-views/aggregator/tabs/import-form.php:220
2864
  #: src/functions/template-tags/general.php:63
2865
  msgid "Event"
2866
  msgstr ""
2867
 
2868
- #: src/Tribe/Main.php:1652
2869
  msgid ""
2870
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
2871
  "your WordPress install."
2872
  msgstr ""
2873
 
2874
- #: src/Tribe/Main.php:1655
2875
  msgid ""
2876
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
2877
  "about moving you to a newer version of PHP."
2878
  msgstr ""
2879
 
2880
- #: src/Tribe/Main.php:1687
2881
  msgid ""
2882
  "To continue using The Events Calendar, please install the latest version of"
2883
  msgstr ""
2884
 
2885
- #: src/Tribe/Main.php:1689 src/Tribe/Main.php:1690
2886
  msgid "Event Tickets"
2887
  msgstr ""
2888
 
2889
- #: src/Tribe/Main.php:1725
2890
  msgid ""
2891
  "It appears as if the tribe-common libraries cannot be found! The directory "
2892
  "should be in the \"common/\" directory in the events calendar plugin."
2893
  msgstr ""
2894
 
2895
- #: src/Tribe/Main.php:1961 src/Tribe/Main.php:2420
2896
  msgid "category"
2897
  msgstr ""
2898
 
2899
- #: src/Tribe/Main.php:1975 src/Tribe/Main.php:2419
2900
  msgid "tag"
2901
  msgstr ""
2902
 
2903
- #: src/Tribe/Main.php:2008 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
2904
  msgid "Add New"
2905
  msgstr ""
2906
 
2907
- #: src/Tribe/Main.php:2009 src/Tribe/Main.php:2146 src/Tribe/Main.php:2147
2908
  #: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
2909
  msgid "Add New %s"
2910
  msgstr ""
2911
 
2912
- #: src/Tribe/Main.php:2011 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
2913
  msgid "New %s"
2914
  msgstr ""
2915
 
2916
- #: src/Tribe/Main.php:2012 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
2917
  #: src/views/month/single-day.php:26
2918
  msgid "View %s"
2919
  msgstr ""
2920
 
2921
- #: src/Tribe/Main.php:2013 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
2922
  msgid "Search %s"
2923
  msgstr ""
2924
 
2925
- #: src/Tribe/Main.php:2014 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
2926
  msgid "No %s found"
2927
  msgstr ""
2928
 
2929
- #: src/Tribe/Main.php:2015 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
2930
  msgid "No %s found in Trash"
2931
  msgstr ""
2932
 
2933
- #: src/Tribe/Main.php:2016 src/Tribe/Main.php:2103 src/Tribe/Main.php:2123
2934
  #: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
2935
  msgid "%s published."
2936
  msgstr ""
2937
 
2938
- #: src/Tribe/Main.php:2017 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
2939
  msgid "%s published privately."
2940
  msgstr ""
2941
 
2942
- #: src/Tribe/Main.php:2018 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
2943
  msgid "%s reverted to draft."
2944
  msgstr ""
2945
 
2946
- #: src/Tribe/Main.php:2019 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
2947
  msgid "%s scheduled."
2948
  msgstr ""
2949
 
2950
- #: src/Tribe/Main.php:2020 src/Tribe/Main.php:2062 src/Tribe/Main.php:2097
2951
- #: src/Tribe/Main.php:2100 src/Tribe/Main.php:2117 src/Tribe/Main.php:2120
2952
  #: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
2953
  msgid "%s updated."
2954
  msgstr ""
2955
 
2956
- #: src/Tribe/Main.php:2030
2957
  msgid "%s Category"
2958
  msgstr ""
2959
 
2960
- #: src/Tribe/Main.php:2031
2961
  msgid "Search %s Categories"
2962
  msgstr ""
2963
 
2964
- #: src/Tribe/Main.php:2032
2965
  msgid "All %s Categories"
2966
  msgstr ""
2967
 
2968
- #: src/Tribe/Main.php:2033
2969
  msgid "Parent %s Category"
2970
  msgstr ""
2971
 
2972
- #: src/Tribe/Main.php:2034
2973
  msgid "Parent %s Category:"
2974
  msgstr ""
2975
 
2976
- #: src/Tribe/Main.php:2035
2977
  msgid "Edit %s Category"
2978
  msgstr ""
2979
 
2980
- #: src/Tribe/Main.php:2036
2981
  msgid "Update %s Category"
2982
  msgstr ""
2983
 
2984
- #: src/Tribe/Main.php:2037
2985
  msgid "Add New %s Category"
2986
  msgstr ""
2987
 
2988
- #: src/Tribe/Main.php:2038
2989
  msgid "New %s Category Name"
2990
  msgstr ""
2991
 
2992
- #: src/Tribe/Main.php:2055
2993
  msgid "%1$s updated. %2$sView %1$s%3$s"
2994
  msgstr ""
2995
 
2996
- #: src/Tribe/Main.php:2060 src/Tribe/Main.php:2098 src/Tribe/Main.php:2118
2997
  msgid "Custom field updated."
2998
  msgstr ""
2999
 
3000
- #: src/Tribe/Main.php:2061 src/Tribe/Main.php:2099 src/Tribe/Main.php:2119
3001
  msgid "Custom field deleted."
3002
  msgstr ""
3003
 
3004
  #. translators: %s: date and time of the revision
3005
- #: src/Tribe/Main.php:2064 src/Tribe/Main.php:2102
3006
  msgid "%1$s restored to revision from %2$s"
3007
  msgstr ""
3008
 
3009
- #: src/Tribe/Main.php:2066
3010
  msgid "%1$s published. %2$sView %3$s"
3011
  msgstr ""
3012
 
3013
- #: src/Tribe/Main.php:2071 src/Tribe/Main.php:2104 src/Tribe/Main.php:2124
3014
  msgid "%s saved."
3015
  msgstr ""
3016
 
3017
- #: src/Tribe/Main.php:2073
3018
  msgid "%1$s submitted. %2$sPreview %3$s"
3019
  msgstr ""
3020
 
3021
- #: src/Tribe/Main.php:2079
3022
  msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
3023
  msgstr ""
3024
 
3025
  #. translators: Publish box date format, see http://php.net/date
3026
- #: src/Tribe/Main.php:2082 src/Tribe/Main.php:2110 src/Tribe/Main.php:2130
3027
  msgid "M j, Y @ G:i"
3028
  msgstr ""
3029
 
3030
- #: src/Tribe/Main.php:2088
3031
  msgid "%1$s draft updated. %2$sPreview %3$s"
3032
  msgstr ""
3033
 
3034
- #: src/Tribe/Main.php:2105 src/Tribe/Main.php:2125
3035
  msgid "%s submitted."
3036
  msgstr ""
3037
 
3038
- #: src/Tribe/Main.php:2107 src/Tribe/Main.php:2127
3039
  msgid "%1$s scheduled for: %2$s."
3040
  msgstr ""
3041
 
3042
- #: src/Tribe/Main.php:2112 src/Tribe/Main.php:2132
3043
  msgid "%s draft updated."
3044
  msgstr ""
3045
 
3046
  #. translators: %s: date and time of the revision
3047
- #: src/Tribe/Main.php:2122
3048
  msgid "%s restored to revision from %s"
3049
  msgstr ""
3050
 
3051
- #: src/Tribe/Main.php:2176
3052
  msgid ""
3053
  "Without a defined location your event will not display a %sGoogle Rich "
3054
  "Snippet%s on the search results."
3055
  msgstr ""
3056
 
3057
- #: src/Tribe/Main.php:2421
3058
  msgid "page"
3059
  msgstr ""
3060
 
3061
- #: src/Tribe/Main.php:2422 src/functions/template-tags/general.php:79
3062
  msgid "event"
3063
  msgstr ""
3064
 
3065
- #: src/Tribe/Main.php:2423 src/functions/template-tags/general.php:111
3066
  msgid "events"
3067
  msgstr ""
3068
 
3069
- #: src/Tribe/Main.php:2424
3070
  msgid "all"
3071
  msgstr ""
3072
 
3073
- #: src/Tribe/Main.php:2815
3074
  msgid " (View Full %1$s Description Here: %2$s)"
3075
  msgstr ""
3076
 
3077
- #: src/Tribe/Main.php:3625 src/Tribe/Main.php:3660
3078
  #: src/functions/template-tags/day.php:157
3079
  #: src/functions/template-tags/day.php:178
3080
  msgid "Date out of range."
3081
  msgstr ""
3082
 
3083
- #: src/Tribe/Main.php:3702
3084
  msgid "%s Options"
3085
  msgstr ""
3086
 
3087
- #: src/Tribe/Main.php:3711 src/Tribe/Main.php:3724
3088
  msgid "%s Information"
3089
  msgstr ""
3090
 
3091
- #: src/Tribe/Main.php:4026
3092
  msgid "Support"
3093
  msgstr ""
3094
 
3095
- #: src/Tribe/Main.php:4029
3096
  msgid "View All Add-Ons"
3097
  msgstr ""
3098
 
3099
- #: src/Tribe/Main.php:4049
3100
  msgid "News from Modern Tribe"
3101
  msgstr ""
3102
 
3103
- #: src/Tribe/Main.php:4094
3104
  msgid "Additional Functionality"
3105
  msgstr ""
3106
 
3107
- #: src/Tribe/Main.php:4099
3108
  msgid ""
3109
  "Looking for additional functionality including recurring events, ticket "
3110
  "sales, publicly submitted events, new views and more?"
3111
  msgstr ""
3112
 
3113
- #: src/Tribe/Main.php:4100
3114
  msgid "Check out the %savailable add-ons%s."
3115
  msgstr ""
3116
 
3117
- #: src/Tribe/Main.php:4201
3118
  msgid "Calendar"
3119
  msgstr ""
3120
 
3121
- #: src/Tribe/Main.php:4217
3122
  msgid "List"
3123
  msgstr ""
3124
 
3125
- #: src/Tribe/Main.php:4235
3126
  msgid "Month"
3127
  msgstr ""
3128
 
3129
- #: src/Tribe/Main.php:4252 src/admin-views/aggregator/fields/schedule.php:44
3130
  #: src/admin-views/aggregator/fields/schedule.php:62
3131
  msgid "Day"
3132
  msgstr ""
3133
 
3134
- #: src/Tribe/Main.php:4275
3135
  msgid "Search for %s by Keyword."
3136
  msgstr ""
3137
 
3138
- #: src/Tribe/Main.php:4278
3139
  #: src/views/v2/components/events-bar/search-button.php:25
3140
  msgid "Search"
3141
  msgstr ""
3142
 
3143
- #: src/Tribe/Main.php:4279
3144
  msgid "Keyword"
3145
  msgstr ""
3146
 
3147
- #: src/Tribe/Main.php:4296
3148
  msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
3149
  msgstr ""
3150
 
3151
- #: src/Tribe/Main.php:4297
3152
  msgid "1 digit month slash 1 digit day slash 4 digit year"
3153
  msgstr ""
3154
 
3155
- #: src/Tribe/Main.php:4298
3156
  msgid "2 digit month slash 2 digit day slash 4 digit year"
3157
  msgstr ""
3158
 
3159
- #: src/Tribe/Main.php:4299
3160
  msgid "1 digit day slash 1 digit month slash 4 digit year"
3161
  msgstr ""
3162
 
3163
- #: src/Tribe/Main.php:4300
3164
  msgid "2 digit day slash 2 digit month slash 4 digit year"
3165
  msgstr ""
3166
 
3167
- #: src/Tribe/Main.php:4301
3168
  msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
3169
  msgstr ""
3170
 
3171
- #: src/Tribe/Main.php:4302
3172
  msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
3173
  msgstr ""
3174
 
3175
- #: src/Tribe/Main.php:4303
3176
  msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
3177
  msgstr ""
3178
 
3179
- #: src/Tribe/Main.php:4304
3180
  msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
3181
  msgstr ""
3182
 
3183
- #: src/Tribe/Main.php:4305
3184
  msgid "4 digit year dot 2 digit month dot 2 digit day"
3185
  msgstr ""
3186
 
3187
- #: src/Tribe/Main.php:4306
3188
  msgid "2 digit month dot 2 digit day dot 4 digit year"
3189
  msgstr ""
3190
 
3191
- #: src/Tribe/Main.php:4307
3192
  msgid "2 digit day dot 2 digit month dot 4 digit year"
3193
  msgstr ""
3194
 
3195
- #: src/Tribe/Main.php:4311
3196
  msgid "4 digit year hyphen 2 digit month"
3197
  msgstr ""
3198
 
3199
- #: src/Tribe/Main.php:4312 src/Tribe/Main.php:4314
3200
  msgid "1 digit month slash 4 digit year"
3201
  msgstr ""
3202
 
3203
- #: src/Tribe/Main.php:4313 src/Tribe/Main.php:4315
3204
  msgid "2 digit month slash 4 digit year"
3205
  msgstr ""
3206
 
3207
- #: src/Tribe/Main.php:4316 src/Tribe/Main.php:4317 src/Tribe/Main.php:4318
3208
  msgid "1 digit month hyphen 4 digit year"
3209
  msgstr ""
3210
 
3211
- #: src/Tribe/Main.php:4319
3212
  msgid "2 digit month hyphen 4 digit year"
3213
  msgstr ""
3214
 
3215
- #: src/Tribe/Main.php:4320
3216
  msgid "4 digit year dot 2 digit month"
3217
  msgstr ""
3218
 
3219
- #: src/Tribe/Main.php:4321 src/Tribe/Main.php:4322
3220
  msgid "2 digit month dot 4 digit year"
3221
  msgstr ""
3222
 
3223
- #: src/Tribe/Main.php:4351 src/Tribe/Main.php:4388
3224
  #: src/admin-views/aggregator/origins/refine.php:7
3225
  msgid "Date"
3226
  msgstr ""
3227
 
3228
- #: src/Tribe/Main.php:4353
3229
  msgid "Search for %s by Date. Please use the format %s."
3230
  msgstr ""
3231
 
3232
- #: src/Tribe/Main.php:4366
3233
  msgid "%s In"
3234
  msgstr ""
3235
 
3236
- #: src/Tribe/Main.php:4368
3237
  msgid "Search for %s by month. Please use the format %s."
3238
  msgstr ""
3239
 
3240
- #: src/Tribe/Main.php:4371
3241
  msgid "%s From"
3242
  msgstr ""
3243
 
3244
- #: src/Tribe/Main.php:4374
3245
  msgid "Day Of"
3246
  msgstr ""
3247
 
3248
- #: src/Tribe/Main.php:4454
3249
  msgid "Once Every 30 Mins"
3250
  msgstr ""
3251
 
3252
- #: src/Tribe/Main.php:5181
3253
  msgid ""
3254
  "Your version of The Events Calendar is not up-to-date with one of your The "
3255
  "Events Calendar add-ons. Please %supdate now.%s"
3256
  msgstr ""
3257
 
3258
- #: src/Tribe/Main.php:5193
3259
  msgid ""
3260
  "The following plugins are out of date: %1$s. All add-ons contain "
3261
  "dependencies on The Events Calendar and will not function properly unless "
3262
  "paired with the right version. %2$sLearn More%3$s."
3263
  msgstr ""
3264
 
3265
- #: src/Tribe/Main.php:5232 src/Tribe/Main.php:5289
3266
  msgid "Use Saved %s:"
3267
  msgstr ""
3268
 
@@ -4611,6 +4612,11 @@ msgstr ""
4611
  msgid "No previous %s "
4612
  msgstr ""
4613
 
 
 
 
 
 
4614
  #: src/Tribe/Templates.php:625
4615
  msgid "Template overrides should be moved to the correct subdirectory: %s"
4616
  msgstr ""
@@ -4672,15 +4678,15 @@ msgstr ""
4672
  msgid "Unnamed Venue"
4673
  msgstr ""
4674
 
4675
- #: src/Tribe/Views/V2/Hooks.php:367
4676
  msgid "We recommend a 16:9 aspect ratio for featured images."
4677
  msgstr ""
4678
 
4679
- #: src/Tribe/Views/V2/Hooks.php:409
4680
  msgid "Recommended for all sites using the updated calendar views."
4681
  msgstr ""
4682
 
4683
- #: src/Tribe/Views/V2/Hooks.php:424
4684
  msgid "The Events Calendar - View V2"
4685
  msgstr ""
4686
 
@@ -4737,7 +4743,7 @@ msgctxt "day_view"
4737
  msgid "%1$s for %2$s"
4738
  msgstr ""
4739
 
4740
- #: src/Tribe/Views/V2/View.php:1626 src/views/v2/day/event/date.php:27
4741
  #: src/views/v2/day/event/date.php:28 src/views/v2/day/event/date.php:32
4742
  #: src/views/v2/list/event/date.php:27 src/views/v2/list/event/date.php:28
4743
  #: src/views/v2/list/event/date.php:32
@@ -4745,38 +4751,46 @@ msgstr ""
4745
  #: src/views/v2/month/calendar-body/day/calendar-events/calendar-event/date.php:28
4746
  #: src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/date.php:26
4747
  #: src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/date.php:27
4748
- #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:93
4749
- #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:94
4750
- #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:108
4751
  #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:109
 
4752
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date.php:27
4753
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date.php:28
4754
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date.php:32
4755
  msgid "Featured"
4756
  msgstr ""
4757
 
4758
- #: src/Tribe/Views/V2/View.php:1711 src/Tribe/iCal.php:162
4759
  msgid "Export Events"
4760
  msgstr ""
4761
 
4762
- #: src/Tribe/Views/V2/View.php:1713 src/Tribe/iCal.php:163
4763
  msgid ""
4764
  "Use this to share calendar data with Google Calendar, Apple iCal and other "
4765
  "compatible apps"
4766
  msgstr ""
4767
 
4768
- #: src/Tribe/Views/V2/Views/List_Behavior.php:49
4769
  msgctxt "The datepicker label when the range start is now."
4770
  msgid "Now"
4771
  msgstr ""
4772
 
4773
  #. translators: the placeholder is for the date range start, e.g. "Now" or
4774
  #. "October 23".
4775
- #: src/Tribe/Views/V2/Views/List_Behavior.php:127
4776
  msgctxt "The datepicker range definition when no events are found."
4777
  msgid "%s onwards"
4778
  msgstr ""
4779
 
 
 
 
 
 
 
 
 
4780
  #: src/Tribe/iCal.php:53
4781
  msgctxt "feed link"
4782
  msgid "&raquo;"
@@ -7218,15 +7232,15 @@ msgstr ""
7218
  msgid "Loading %s"
7219
  msgstr ""
7220
 
7221
- #: src/functions/template-tags/general.php:1236
7222
  msgid "Find out more »"
7223
  msgstr ""
7224
 
7225
- #: src/functions/template-tags/general.php:1237
7226
  msgid "%s for"
7227
  msgstr ""
7228
 
7229
- #: src/functions/template-tags/general.php:1358
7230
  msgid "Calendar powered by %s"
7231
  msgstr ""
7232
 
@@ -7328,7 +7342,7 @@ msgstr ""
7328
  msgid "Find %s"
7329
  msgstr ""
7330
 
7331
- #: src/views/modules/bar.php:86 src/views/v2/components/events-bar/views.php:35
7332
  msgid "%s Views Navigation"
7333
  msgstr ""
7334
 
@@ -7406,23 +7420,23 @@ msgstr ""
7406
  msgid "Previous"
7407
  msgstr ""
7408
 
7409
- #: src/views/v2/day/top-bar/datepicker.php:58
7410
- #: src/views/v2/list/top-bar/datepicker.php:79
7411
- #: src/views/v2/month/top-bar/datepicker.php:55
7412
  msgid "Select date."
7413
  msgstr ""
7414
 
7415
- #: src/views/v2/day.php:35 src/views/v2/list.php:35 src/views/v2/month.php:34
7416
  msgid "Loading..."
7417
  msgstr ""
7418
 
7419
  #. translators: %s: Event (plural or singular).
7420
- #: src/views/v2/list/nav/next-disabled.php:22 src/views/v2/list/nav/next.php:29
7421
  msgid "Next %1$s"
7422
  msgstr ""
7423
 
7424
  #. translators: %s: Event (plural or singular).
7425
- #: src/views/v2/list/nav/prev-disabled.php:22 src/views/v2/list/nav/prev.php:29
7426
  msgid "Previous %1$s"
7427
  msgstr ""
7428
 
2
  # This file is distributed under the same license as the The Events Calendar package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: The Events Calendar 5.0.0\n"
6
  "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/the-events-"
7
  "calendar\n"
8
+ "POT-Creation-Date: 2020-01-23 20:32:53+00:00\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
+ "PO-Revision-Date: 2020-01-23 20:32\n"
13
  "Last-Translator: \n"
14
  "Language-Team: \n"
15
 
47
  msgid "%s"
48
  msgstr ""
49
 
50
+ #: src/Tribe/Admin/Bar/Default_Configurator.php:45 src/Tribe/Main.php:4194
51
  #: src/admin-views/tribe-options-upgrade.php:20
52
  msgid "View Calendar"
53
  msgstr ""
57
  msgstr ""
58
 
59
  #: src/Tribe/Admin/Bar/Default_Configurator.php:62
60
+ #: src/Tribe/Linked_Posts/Chooser_Meta_Box.php:211 src/Tribe/Main.php:2019
61
+ #: src/Tribe/Main.php:5290 src/Tribe/Main.php:5337 src/Tribe/Organizer.php:93
62
  #: src/Tribe/Venue.php:112
63
  msgid "Edit %s"
64
  msgstr ""
69
  msgid "Import"
70
  msgstr ""
71
 
72
+ #: src/Tribe/Admin/Bar/Default_Configurator.php:89 src/Tribe/Main.php:4242
73
  msgid "Settings"
74
  msgstr ""
75
 
154
  "refresh and try again."
155
  msgstr ""
156
 
157
+ #: src/Tribe/Admin_List.php:246 src/Tribe/Main.php:2038
158
  msgid "%s Categories"
159
  msgstr ""
160
 
1936
  msgid "Custom"
1937
  msgstr ""
1938
 
1939
+ #: src/Tribe/Customizer/Global_Elements.php:117
1940
  msgid "Global Elements"
1941
  msgstr ""
1942
 
1943
+ #: src/Tribe/Customizer/Global_Elements.php:118
1944
  msgid ""
1945
  "Options selected here will override what was selected in the \"General Theme"
1946
  "\" section"
1947
  msgstr ""
1948
 
1949
+ #: src/Tribe/Customizer/Global_Elements.php:149
1950
  msgid "Link Color"
1951
  msgstr ""
1952
 
1953
+ #: src/Tribe/Customizer/Global_Elements.php:177
1954
  msgid "Filter Bar Color"
1955
  msgstr ""
1956
 
1957
+ #: src/Tribe/Customizer/Global_Elements.php:199
1958
  msgid "Button Color"
1959
  msgstr ""
1960
 
1961
+ #: src/Tribe/Customizer/Global_Elements.php:223
1962
  msgid "Map Pin"
1963
  msgstr ""
1964
 
2035
 
2036
  #: src/Tribe/Editor/Template.php:70 src/Tribe/Template/Embed.php:59
2037
  #: src/Tribe/Template/Single_Event.php:119
2038
+ #: src/Tribe/Views/V2/Template_Bootstrap.php:124
2039
  #: src/Tribe/Views/V2/Template_Bootstrap.php:160
2040
+ #: src/Tribe/Views/V2/Template_Bootstrap.php:382
2041
  msgid "This %s has passed."
2042
  msgstr ""
2043
 
2640
  msgid "Upcoming Events"
2641
  msgstr ""
2642
 
2643
+ #. #-#-#-#-# the-events-calendar.pot (The Events Calendar 5.0.0) #-#-#-#-#
2644
  #. Plugin Name of the plugin/theme
2645
+ #: src/Tribe/Main.php:919 src/Tribe/Main.php:1374 src/Tribe/Privacy.php:29
2646
+ #: src/functions/template-tags/general.php:1373 the-events-calendar.php:56
2647
  msgid "The Events Calendar"
2648
  msgstr ""
2649
 
2650
+ #: src/Tribe/Main.php:926
2651
  msgid "month"
2652
  msgstr ""
2653
 
2654
+ #: src/Tribe/Main.php:927
2655
  msgid "list"
2656
  msgstr ""
2657
 
2658
+ #: src/Tribe/Main.php:928
2659
  msgid "upcoming"
2660
  msgstr ""
2661
 
2662
+ #: src/Tribe/Main.php:929
2663
  msgid "past"
2664
  msgstr ""
2665
 
2666
+ #: src/Tribe/Main.php:930
2667
  msgid "day"
2668
  msgstr ""
2669
 
2670
+ #: src/Tribe/Main.php:931
2671
  msgid "today"
2672
  msgstr ""
2673
 
2674
+ #: src/Tribe/Main.php:932
2675
  msgctxt "featured events slug"
2676
  msgid "featured"
2677
  msgstr ""
2678
 
2679
+ #: src/Tribe/Main.php:933
2680
  msgctxt "all events slug"
2681
  msgid "all"
2682
  msgstr ""
2683
 
2684
+ #: src/Tribe/Main.php:957
2685
  msgid "Initializing Tribe Events on %s"
2686
  msgstr ""
2687
 
2688
+ #: src/Tribe/Main.php:1015 src/Tribe/Main.php:1017
2689
  msgid "Welcome to The Events Calendar!"
2690
  msgstr ""
2691
 
2692
+ #: src/Tribe/Main.php:1163
2693
  msgid ""
2694
  "The %3$s \"%1$s\" uses the \"/%2$s\" slug: the Events Calendar plugin will "
2695
  "show its calendar in place of the page."
2696
  msgstr ""
2697
 
2698
+ #: src/Tribe/Main.php:1166
2699
  msgid "Ask the site administrator to edit the %s slug"
2700
  msgstr ""
2701
 
2702
+ #: src/Tribe/Main.php:1168
2703
  msgid "Edit the %s slug"
2704
  msgstr ""
2705
 
2706
+ #: src/Tribe/Main.php:1172
2707
+ msgid " ask the site administrator to set a different Events URL slug."
2708
  msgstr ""
2709
 
2710
+ #: src/Tribe/Main.php:1177
2711
  msgid "edit Events settings."
2712
  msgstr ""
2713
 
2714
+ #: src/Tribe/Main.php:1180
2715
  msgid "%1$s or %2$s"
2716
  msgstr ""
2717
 
2718
+ #: src/Tribe/Main.php:1249
2719
  msgid "Upgrade your calendar views"
2720
  msgstr ""
2721
 
2722
+ #: src/Tribe/Main.php:1285
2723
  msgid "Upgrade"
2724
  msgstr ""
2725
 
2726
+ #: src/Tribe/Main.php:1334 src/admin-views/admin-welcome-message.php:19
2727
  msgid "New User Primer"
2728
  msgstr ""
2729
 
2730
+ #: src/Tribe/Main.php:1336
2731
  msgid ""
2732
  "We are committed to helping make your calendar spectacular and have a wealth "
2733
  "of resources available, including a handy %s to get your calendar up and "
2734
  "running."
2735
  msgstr ""
2736
 
2737
+ #: src/Tribe/Main.php:1347
2738
  msgid "Support for The Events Calendar"
2739
  msgstr ""
2740
 
2741
+ #: src/Tribe/Main.php:1350
2742
  msgid ""
2743
  "%s: A thorough walkthrough of The Events Calendar and the settings that are "
2744
  "available to you."
2745
  msgstr ""
2746
 
2747
+ #: src/Tribe/Main.php:1350
2748
  msgid "Settings overview"
2749
  msgstr ""
2750
 
2751
+ #: src/Tribe/Main.php:1352
2752
  msgid ""
2753
  "%s: A complete look at the features you can expect to see right out of the "
2754
  "box as well as how to use them."
2755
  msgstr ""
2756
 
2757
+ #: src/Tribe/Main.php:1352
2758
  msgid "Features overview"
2759
  msgstr ""
2760
 
2761
+ #: src/Tribe/Main.php:1354
2762
  msgid ""
2763
  "%s: Our most comprehensive outline for customizing the calendar to suit your "
2764
  "needs, including custom layouts and styles."
2765
  msgstr ""
2766
 
2767
+ #: src/Tribe/Main.php:1354
2768
  msgid "Themer’s Guide"
2769
  msgstr ""
2770
 
2771
+ #: src/Tribe/Main.php:1356
2772
  msgid ""
2773
  "%s: An overview of the default templates and styles that are included in the "
2774
  "plugin, as well as how to change them."
2775
  msgstr ""
2776
 
2777
+ #: src/Tribe/Main.php:1356
2778
  msgid "Using stylesheets and page templates"
2779
  msgstr ""
2780
 
2781
+ #: src/Tribe/Main.php:1358
2782
  msgid ""
2783
  "%s: Do you see an issue with your calendar? Go here first to find where it’s "
2784
  "coming from and how to fix it."
2785
  msgstr ""
2786
 
2787
+ #: src/Tribe/Main.php:1358
2788
  msgid "Troubleshooting common problems"
2789
  msgstr ""
2790
 
2791
+ #: src/Tribe/Main.php:1360
2792
  msgid ""
2793
  "%s: Code and guides for customizing your calendar in useful and interesting "
2794
  "ways."
2795
  msgstr ""
2796
 
2797
+ #: src/Tribe/Main.php:1360
2798
  msgid "Customizing the Events plugins"
2799
  msgstr ""
2800
 
2801
+ #: src/Tribe/Main.php:1375
2802
  msgid "Events Tickets"
2803
  msgstr ""
2804
 
2805
+ #: src/Tribe/Main.php:1376
2806
  msgid ""
2807
  "If you have tried the above steps and are still having trouble, you can post "
2808
  "a new thread to our WordPress.org forums for %1$s or %2$s. Our support staff "
2809
  "monitors these forums once a week and would be happy to assist you there. "
2810
  msgstr ""
2811
 
2812
+ #: src/Tribe/Main.php:1378 src/Tribe/Main.php:1386
2813
  msgid "premium support on our website"
2814
  msgstr ""
2815
 
2816
+ #: src/Tribe/Main.php:1379
2817
  msgid ""
2818
  "<strong>Looking for more immediate support?</strong> We offer %s with the "
2819
  "purchase of any of our premium plugins. Pick up a license and you can post "
2820
  "there directly and expect a response within 24-48 hours during weekdays"
2821
  msgstr ""
2822
 
2823
+ #: src/Tribe/Main.php:1383
2824
  msgid "open-source forum on WordPress.org"
2825
  msgstr ""
2826
 
2827
+ #: src/Tribe/Main.php:1384
2828
  msgid ""
2829
  "If you have tried the above steps and are still having trouble, you can post "
2830
  "a new thread to our %s. Our support staff monitors these forums once a week "
2831
  "and would be happy to assist you there."
2832
  msgstr ""
2833
 
2834
+ #: src/Tribe/Main.php:1387
2835
  msgid "Events Calendar PRO"
2836
  msgstr ""
2837
 
2838
+ #: src/Tribe/Main.php:1388
2839
  msgid ""
2840
  "<strong>Looking for more immediate support?</strong> We offer %1$s with the "
2841
  "purchase of any of our premium plugins (like %2$s). Pick up a license and "
2843
  "weekdays."
2844
  msgstr ""
2845
 
2846
+ #: src/Tribe/Main.php:1392
2847
  msgid "post a thread"
2848
  msgstr ""
2849
 
2850
+ #: src/Tribe/Main.php:1393
2851
  msgid ""
2852
  "If you have a valid license for one of our paid plugins, you can %s in our "
2853
  "premium support forums. Our support team monitors the forums and will "
2854
  "respond to your thread within 24-48 hours (during the week)."
2855
  msgstr ""
2856
 
2857
+ #: src/Tribe/Main.php:1436
2858
  #: src/deprecated/Tribe__Events__Importer__Admin_Page.php:207
2859
  #: src/functions/template-tags/general.php:95
2860
  msgid "Events"
2861
  msgstr ""
2862
 
2863
+ #: src/Tribe/Main.php:1444 src/admin-views/aggregator/tabs/import-form.php:208
2864
  #: src/admin-views/aggregator/tabs/import-form.php:220
2865
  #: src/functions/template-tags/general.php:63
2866
  msgid "Event"
2867
  msgstr ""
2868
 
2869
+ #: src/Tribe/Main.php:1661
2870
  msgid ""
2871
  "Sorry, The Events Calendar requires WordPress %s or higher. Please upgrade "
2872
  "your WordPress install."
2873
  msgstr ""
2874
 
2875
+ #: src/Tribe/Main.php:1664
2876
  msgid ""
2877
  "Sorry, The Events Calendar requires PHP %s or higher. Talk to your Web host "
2878
  "about moving you to a newer version of PHP."
2879
  msgstr ""
2880
 
2881
+ #: src/Tribe/Main.php:1696
2882
  msgid ""
2883
  "To continue using The Events Calendar, please install the latest version of"
2884
  msgstr ""
2885
 
2886
+ #: src/Tribe/Main.php:1698 src/Tribe/Main.php:1699
2887
  msgid "Event Tickets"
2888
  msgstr ""
2889
 
2890
+ #: src/Tribe/Main.php:1734
2891
  msgid ""
2892
  "It appears as if the tribe-common libraries cannot be found! The directory "
2893
  "should be in the \"common/\" directory in the events calendar plugin."
2894
  msgstr ""
2895
 
2896
+ #: src/Tribe/Main.php:1970 src/Tribe/Main.php:2429
2897
  msgid "category"
2898
  msgstr ""
2899
 
2900
+ #: src/Tribe/Main.php:1984 src/Tribe/Main.php:2428
2901
  msgid "tag"
2902
  msgstr ""
2903
 
2904
+ #: src/Tribe/Main.php:2017 src/Tribe/Organizer.php:91 src/Tribe/Venue.php:110
2905
  msgid "Add New"
2906
  msgstr ""
2907
 
2908
+ #: src/Tribe/Main.php:2018 src/Tribe/Main.php:2155 src/Tribe/Main.php:2156
2909
  #: src/Tribe/Organizer.php:92 src/Tribe/Venue.php:111
2910
  msgid "Add New %s"
2911
  msgstr ""
2912
 
2913
+ #: src/Tribe/Main.php:2020 src/Tribe/Organizer.php:94 src/Tribe/Venue.php:113
2914
  msgid "New %s"
2915
  msgstr ""
2916
 
2917
+ #: src/Tribe/Main.php:2021 src/Tribe/Organizer.php:95 src/Tribe/Venue.php:114
2918
  #: src/views/month/single-day.php:26
2919
  msgid "View %s"
2920
  msgstr ""
2921
 
2922
+ #: src/Tribe/Main.php:2022 src/Tribe/Organizer.php:96 src/Tribe/Venue.php:115
2923
  msgid "Search %s"
2924
  msgstr ""
2925
 
2926
+ #: src/Tribe/Main.php:2023 src/Tribe/Organizer.php:97 src/Tribe/Venue.php:116
2927
  msgid "No %s found"
2928
  msgstr ""
2929
 
2930
+ #: src/Tribe/Main.php:2024 src/Tribe/Organizer.php:98 src/Tribe/Venue.php:117
2931
  msgid "No %s found in Trash"
2932
  msgstr ""
2933
 
2934
+ #: src/Tribe/Main.php:2025 src/Tribe/Main.php:2112 src/Tribe/Main.php:2132
2935
  #: src/Tribe/Organizer.php:99 src/Tribe/Venue.php:118
2936
  msgid "%s published."
2937
  msgstr ""
2938
 
2939
+ #: src/Tribe/Main.php:2026 src/Tribe/Organizer.php:100 src/Tribe/Venue.php:119
2940
  msgid "%s published privately."
2941
  msgstr ""
2942
 
2943
+ #: src/Tribe/Main.php:2027 src/Tribe/Organizer.php:101 src/Tribe/Venue.php:120
2944
  msgid "%s reverted to draft."
2945
  msgstr ""
2946
 
2947
+ #: src/Tribe/Main.php:2028 src/Tribe/Organizer.php:102 src/Tribe/Venue.php:121
2948
  msgid "%s scheduled."
2949
  msgstr ""
2950
 
2951
+ #: src/Tribe/Main.php:2029 src/Tribe/Main.php:2071 src/Tribe/Main.php:2106
2952
+ #: src/Tribe/Main.php:2109 src/Tribe/Main.php:2126 src/Tribe/Main.php:2129
2953
  #: src/Tribe/Organizer.php:103 src/Tribe/Venue.php:122
2954
  msgid "%s updated."
2955
  msgstr ""
2956
 
2957
+ #: src/Tribe/Main.php:2039
2958
  msgid "%s Category"
2959
  msgstr ""
2960
 
2961
+ #: src/Tribe/Main.php:2040
2962
  msgid "Search %s Categories"
2963
  msgstr ""
2964
 
2965
+ #: src/Tribe/Main.php:2041
2966
  msgid "All %s Categories"
2967
  msgstr ""
2968
 
2969
+ #: src/Tribe/Main.php:2042
2970
  msgid "Parent %s Category"
2971
  msgstr ""
2972
 
2973
+ #: src/Tribe/Main.php:2043
2974
  msgid "Parent %s Category:"
2975
  msgstr ""
2976
 
2977
+ #: src/Tribe/Main.php:2044
2978
  msgid "Edit %s Category"
2979
  msgstr ""
2980
 
2981
+ #: src/Tribe/Main.php:2045
2982
  msgid "Update %s Category"
2983
  msgstr ""
2984
 
2985
+ #: src/Tribe/Main.php:2046
2986
  msgid "Add New %s Category"
2987
  msgstr ""
2988
 
2989
+ #: src/Tribe/Main.php:2047
2990
  msgid "New %s Category Name"
2991
  msgstr ""
2992
 
2993
+ #: src/Tribe/Main.php:2064
2994
  msgid "%1$s updated. %2$sView %1$s%3$s"
2995
  msgstr ""
2996
 
2997
+ #: src/Tribe/Main.php:2069 src/Tribe/Main.php:2107 src/Tribe/Main.php:2127
2998
  msgid "Custom field updated."
2999
  msgstr ""
3000
 
3001
+ #: src/Tribe/Main.php:2070 src/Tribe/Main.php:2108 src/Tribe/Main.php:2128
3002
  msgid "Custom field deleted."
3003
  msgstr ""
3004
 
3005
  #. translators: %s: date and time of the revision
3006
+ #: src/Tribe/Main.php:2073 src/Tribe/Main.php:2111
3007
  msgid "%1$s restored to revision from %2$s"
3008
  msgstr ""
3009
 
3010
+ #: src/Tribe/Main.php:2075
3011
  msgid "%1$s published. %2$sView %3$s"
3012
  msgstr ""
3013
 
3014
+ #: src/Tribe/Main.php:2080 src/Tribe/Main.php:2113 src/Tribe/Main.php:2133
3015
  msgid "%s saved."
3016
  msgstr ""
3017
 
3018
+ #: src/Tribe/Main.php:2082
3019
  msgid "%1$s submitted. %2$sPreview %3$s"
3020
  msgstr ""
3021
 
3022
+ #: src/Tribe/Main.php:2088
3023
  msgid "%1$s scheduled for: %2$s. %3$sPreview %4$s"
3024
  msgstr ""
3025
 
3026
  #. translators: Publish box date format, see http://php.net/date
3027
+ #: src/Tribe/Main.php:2091 src/Tribe/Main.php:2119 src/Tribe/Main.php:2139
3028
  msgid "M j, Y @ G:i"
3029
  msgstr ""
3030
 
3031
+ #: src/Tribe/Main.php:2097
3032
  msgid "%1$s draft updated. %2$sPreview %3$s"
3033
  msgstr ""
3034
 
3035
+ #: src/Tribe/Main.php:2114 src/Tribe/Main.php:2134
3036
  msgid "%s submitted."
3037
  msgstr ""
3038
 
3039
+ #: src/Tribe/Main.php:2116 src/Tribe/Main.php:2136
3040
  msgid "%1$s scheduled for: %2$s."
3041
  msgstr ""
3042
 
3043
+ #: src/Tribe/Main.php:2121 src/Tribe/Main.php:2141
3044
  msgid "%s draft updated."
3045
  msgstr ""
3046
 
3047
  #. translators: %s: date and time of the revision
3048
+ #: src/Tribe/Main.php:2131
3049
  msgid "%s restored to revision from %s"
3050
  msgstr ""
3051
 
3052
+ #: src/Tribe/Main.php:2185
3053
  msgid ""
3054
  "Without a defined location your event will not display a %sGoogle Rich "
3055
  "Snippet%s on the search results."
3056
  msgstr ""
3057
 
3058
+ #: src/Tribe/Main.php:2430
3059
  msgid "page"
3060
  msgstr ""
3061
 
3062
+ #: src/Tribe/Main.php:2431 src/functions/template-tags/general.php:79
3063
  msgid "event"
3064
  msgstr ""
3065
 
3066
+ #: src/Tribe/Main.php:2432 src/functions/template-tags/general.php:111
3067
  msgid "events"
3068
  msgstr ""
3069
 
3070
+ #: src/Tribe/Main.php:2433
3071
  msgid "all"
3072
  msgstr ""
3073
 
3074
+ #: src/Tribe/Main.php:2824
3075
  msgid " (View Full %1$s Description Here: %2$s)"
3076
  msgstr ""
3077
 
3078
+ #: src/Tribe/Main.php:3640 src/Tribe/Main.php:3675
3079
  #: src/functions/template-tags/day.php:157
3080
  #: src/functions/template-tags/day.php:178
3081
  msgid "Date out of range."
3082
  msgstr ""
3083
 
3084
+ #: src/Tribe/Main.php:3717
3085
  msgid "%s Options"
3086
  msgstr ""
3087
 
3088
+ #: src/Tribe/Main.php:3726 src/Tribe/Main.php:3739
3089
  msgid "%s Information"
3090
  msgstr ""
3091
 
3092
+ #: src/Tribe/Main.php:4068
3093
  msgid "Support"
3094
  msgstr ""
3095
 
3096
+ #: src/Tribe/Main.php:4071
3097
  msgid "View All Add-Ons"
3098
  msgstr ""
3099
 
3100
+ #: src/Tribe/Main.php:4091
3101
  msgid "News from Modern Tribe"
3102
  msgstr ""
3103
 
3104
+ #: src/Tribe/Main.php:4136
3105
  msgid "Additional Functionality"
3106
  msgstr ""
3107
 
3108
+ #: src/Tribe/Main.php:4141
3109
  msgid ""
3110
  "Looking for additional functionality including recurring events, ticket "
3111
  "sales, publicly submitted events, new views and more?"
3112
  msgstr ""
3113
 
3114
+ #: src/Tribe/Main.php:4142
3115
  msgid "Check out the %savailable add-ons%s."
3116
  msgstr ""
3117
 
3118
+ #: src/Tribe/Main.php:4243
3119
  msgid "Calendar"
3120
  msgstr ""
3121
 
3122
+ #: src/Tribe/Main.php:4259
3123
  msgid "List"
3124
  msgstr ""
3125
 
3126
+ #: src/Tribe/Main.php:4277
3127
  msgid "Month"
3128
  msgstr ""
3129
 
3130
+ #: src/Tribe/Main.php:4294 src/admin-views/aggregator/fields/schedule.php:44
3131
  #: src/admin-views/aggregator/fields/schedule.php:62
3132
  msgid "Day"
3133
  msgstr ""
3134
 
3135
+ #: src/Tribe/Main.php:4317
3136
  msgid "Search for %s by Keyword."
3137
  msgstr ""
3138
 
3139
+ #: src/Tribe/Main.php:4320
3140
  #: src/views/v2/components/events-bar/search-button.php:25
3141
  msgid "Search"
3142
  msgstr ""
3143
 
3144
+ #: src/Tribe/Main.php:4321
3145
  msgid "Keyword"
3146
  msgstr ""
3147
 
3148
+ #: src/Tribe/Main.php:4338
3149
  msgid "4 digit year hyphen 2 digit month hyphen 2 digit day"
3150
  msgstr ""
3151
 
3152
+ #: src/Tribe/Main.php:4339
3153
  msgid "1 digit month slash 1 digit day slash 4 digit year"
3154
  msgstr ""
3155
 
3156
+ #: src/Tribe/Main.php:4340
3157
  msgid "2 digit month slash 2 digit day slash 4 digit year"
3158
  msgstr ""
3159
 
3160
+ #: src/Tribe/Main.php:4341
3161
  msgid "1 digit day slash 1 digit month slash 4 digit year"
3162
  msgstr ""
3163
 
3164
+ #: src/Tribe/Main.php:4342
3165
  msgid "2 digit day slash 2 digit month slash 4 digit year"
3166
  msgstr ""
3167
 
3168
+ #: src/Tribe/Main.php:4343
3169
  msgid "1 digit month hyphen 1 digit day hyphen 4 digit year"
3170
  msgstr ""
3171
 
3172
+ #: src/Tribe/Main.php:4344
3173
  msgid "1 digit month hyphen 2 digit day hyphen 4 digit year"
3174
  msgstr ""
3175
 
3176
+ #: src/Tribe/Main.php:4345
3177
  msgid "1 digit day hyphen 1 digit month hyphen 4 digit year"
3178
  msgstr ""
3179
 
3180
+ #: src/Tribe/Main.php:4346
3181
  msgid "2 digit day hyphen 2 digit month hyphen 4 digit year"
3182
  msgstr ""
3183
 
3184
+ #: src/Tribe/Main.php:4347
3185
  msgid "4 digit year dot 2 digit month dot 2 digit day"
3186
  msgstr ""
3187
 
3188
+ #: src/Tribe/Main.php:4348
3189
  msgid "2 digit month dot 2 digit day dot 4 digit year"
3190
  msgstr ""
3191
 
3192
+ #: src/Tribe/Main.php:4349
3193
  msgid "2 digit day dot 2 digit month dot 4 digit year"
3194
  msgstr ""
3195
 
3196
+ #: src/Tribe/Main.php:4353
3197
  msgid "4 digit year hyphen 2 digit month"
3198
  msgstr ""
3199
 
3200
+ #: src/Tribe/Main.php:4354 src/Tribe/Main.php:4356
3201
  msgid "1 digit month slash 4 digit year"
3202
  msgstr ""
3203
 
3204
+ #: src/Tribe/Main.php:4355 src/Tribe/Main.php:4357
3205
  msgid "2 digit month slash 4 digit year"
3206
  msgstr ""
3207
 
3208
+ #: src/Tribe/Main.php:4358 src/Tribe/Main.php:4359 src/Tribe/Main.php:4360
3209
  msgid "1 digit month hyphen 4 digit year"
3210
  msgstr ""
3211
 
3212
+ #: src/Tribe/Main.php:4361
3213
  msgid "2 digit month hyphen 4 digit year"
3214
  msgstr ""
3215
 
3216
+ #: src/Tribe/Main.php:4362
3217
  msgid "4 digit year dot 2 digit month"
3218
  msgstr ""
3219
 
3220
+ #: src/Tribe/Main.php:4363 src/Tribe/Main.php:4364
3221
  msgid "2 digit month dot 4 digit year"
3222
  msgstr ""
3223
 
3224
+ #: src/Tribe/Main.php:4393 src/Tribe/Main.php:4430
3225
  #: src/admin-views/aggregator/origins/refine.php:7
3226
  msgid "Date"
3227
  msgstr ""
3228
 
3229
+ #: src/Tribe/Main.php:4395
3230
  msgid "Search for %s by Date. Please use the format %s."
3231
  msgstr ""
3232
 
3233
+ #: src/Tribe/Main.php:4408
3234
  msgid "%s In"
3235
  msgstr ""
3236
 
3237
+ #: src/Tribe/Main.php:4410
3238
  msgid "Search for %s by month. Please use the format %s."
3239
  msgstr ""
3240
 
3241
+ #: src/Tribe/Main.php:4413
3242
  msgid "%s From"
3243
  msgstr ""
3244
 
3245
+ #: src/Tribe/Main.php:4416
3246
  msgid "Day Of"
3247
  msgstr ""
3248
 
3249
+ #: src/Tribe/Main.php:4496
3250
  msgid "Once Every 30 Mins"
3251
  msgstr ""
3252
 
3253
+ #: src/Tribe/Main.php:5223
3254
  msgid ""
3255
  "Your version of The Events Calendar is not up-to-date with one of your The "
3256
  "Events Calendar add-ons. Please %supdate now.%s"
3257
  msgstr ""
3258
 
3259
+ #: src/Tribe/Main.php:5235
3260
  msgid ""
3261
  "The following plugins are out of date: %1$s. All add-ons contain "
3262
  "dependencies on The Events Calendar and will not function properly unless "
3263
  "paired with the right version. %2$sLearn More%3$s."
3264
  msgstr ""
3265
 
3266
+ #: src/Tribe/Main.php:5274 src/Tribe/Main.php:5331
3267
  msgid "Use Saved %s:"
3268
  msgstr ""
3269
 
4612
  msgid "No previous %s "
4613
  msgstr ""
4614
 
4615
+ #. translators: %s: Protected post title.
4616
+ #: src/Tribe/Template_Factory.php:600 src/Tribe/Views/V2/Template/Event.php:133
4617
+ msgid "Protected: %s"
4618
+ msgstr ""
4619
+
4620
  #: src/Tribe/Templates.php:625
4621
  msgid "Template overrides should be moved to the correct subdirectory: %s"
4622
  msgstr ""
4678
  msgid "Unnamed Venue"
4679
  msgstr ""
4680
 
4681
+ #: src/Tribe/Views/V2/Hooks.php:395
4682
  msgid "We recommend a 16:9 aspect ratio for featured images."
4683
  msgstr ""
4684
 
4685
+ #: src/Tribe/Views/V2/Hooks.php:457
4686
  msgid "Recommended for all sites using the updated calendar views."
4687
  msgstr ""
4688
 
4689
+ #: src/Tribe/Views/V2/Hooks.php:472
4690
  msgid "The Events Calendar - View V2"
4691
  msgstr ""
4692
 
4743
  msgid "%1$s for %2$s"
4744
  msgstr ""
4745
 
4746
+ #: src/Tribe/Views/V2/View.php:1801 src/views/v2/day/event/date.php:27
4747
  #: src/views/v2/day/event/date.php:28 src/views/v2/day/event/date.php:32
4748
  #: src/views/v2/list/event/date.php:27 src/views/v2/list/event/date.php:28
4749
  #: src/views/v2/list/event/date.php:32
4751
  #: src/views/v2/month/calendar-body/day/calendar-events/calendar-event/date.php:28
4752
  #: src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/date.php:26
4753
  #: src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/date.php:27
4754
+ #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:91
4755
+ #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:92
 
4756
  #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:109
4757
+ #: src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php:110
4758
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date.php:27
4759
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date.php:28
4760
  #: src/views/v2/month/mobile-events/mobile-day/mobile-event/date.php:32
4761
  msgid "Featured"
4762
  msgstr ""
4763
 
4764
+ #: src/Tribe/Views/V2/View.php:1886 src/Tribe/iCal.php:162
4765
  msgid "Export Events"
4766
  msgstr ""
4767
 
4768
+ #: src/Tribe/Views/V2/View.php:1888 src/Tribe/iCal.php:163
4769
  msgid ""
4770
  "Use this to share calendar data with Google Calendar, Apple iCal and other "
4771
  "compatible apps"
4772
  msgstr ""
4773
 
4774
+ #: src/Tribe/Views/V2/Views/Traits/List_Behavior.php:49
4775
  msgctxt "The datepicker label when the range start is now."
4776
  msgid "Now"
4777
  msgstr ""
4778
 
4779
  #. translators: the placeholder is for the date range start, e.g. "Now" or
4780
  #. "October 23".
4781
+ #: src/Tribe/Views/V2/Views/Traits/List_Behavior.php:152
4782
  msgctxt "The datepicker range definition when no events are found."
4783
  msgid "%s onwards"
4784
  msgstr ""
4785
 
4786
+ #. translators: the placeholder is for the date range start, e.g. "Now" or
4787
+ #. "1/1/2020".
4788
+ #: src/Tribe/Views/V2/Views/Traits/List_Behavior.php:158
4789
+ msgctxt ""
4790
+ "The datepicker range definition when no events are found (for mobile)."
4791
+ msgid "%s onwards"
4792
+ msgstr ""
4793
+
4794
  #: src/Tribe/iCal.php:53
4795
  msgctxt "feed link"
4796
  msgid "&raquo;"
7232
  msgid "Loading %s"
7233
  msgstr ""
7234
 
7235
+ #: src/functions/template-tags/general.php:1251
7236
  msgid "Find out more »"
7237
  msgstr ""
7238
 
7239
+ #: src/functions/template-tags/general.php:1252
7240
  msgid "%s for"
7241
  msgstr ""
7242
 
7243
+ #: src/functions/template-tags/general.php:1373
7244
  msgid "Calendar powered by %s"
7245
  msgstr ""
7246
 
7342
  msgid "Find %s"
7343
  msgstr ""
7344
 
7345
+ #: src/views/modules/bar.php:86 src/views/v2/components/events-bar/views.php:29
7346
  msgid "%s Views Navigation"
7347
  msgstr ""
7348
 
7420
  msgid "Previous"
7421
  msgstr ""
7422
 
7423
+ #: src/views/v2/day/top-bar/datepicker.php:63
7424
+ #: src/views/v2/list/top-bar/datepicker.php:85
7425
+ #: src/views/v2/month/top-bar/datepicker.php:62
7426
  msgid "Select date."
7427
  msgstr ""
7428
 
7429
+ #: src/views/v2/day.php:40 src/views/v2/list.php:39 src/views/v2/month.php:38
7430
  msgid "Loading..."
7431
  msgstr ""
7432
 
7433
  #. translators: %s: Event (plural or singular).
7434
+ #: src/views/v2/list/nav/next-disabled.php:23 src/views/v2/list/nav/next.php:30
7435
  msgid "Next %1$s"
7436
  msgstr ""
7437
 
7438
  #. translators: %s: Event (plural or singular).
7439
+ #: src/views/v2/list/nav/prev-disabled.php:23 src/views/v2/list/nav/prev.php:30
7440
  msgid "Previous %1$s"
7441
  msgstr ""
7442
 
readme.txt CHANGED
@@ -3,9 +3,9 @@
3
  Contributors: ModernTribe, borkweb, barry.hughes, bordoni, brianjessee, aguseo, cliffpaulick, courane01, faction23, GeoffBel, geoffgraham, ggwicz, jbrinley, jentheo, leahkoerper, lucatume, mastromktg, MZAWeb, neillmcshea, nicosantos, patriciahillebrandt, peterchester, reid.peifer, roblagatta, ryancurban, shane.pearlman, tribecari, vicskf, zbtirrell, juanfra
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: http://m.tri.be/29
6
- Requires at least: 4.7
7
- Stable tag: 4.9.14
8
- Tested up to: 5.3
9
  Requires PHP: 5.6
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -94,17 +94,14 @@ That's it! Just configure your settings as you see fit, and you're on your way t
94
  == Screenshots ==
95
 
96
  1. Month View with hover
97
- 2. Month View
98
- 3. List View
99
- 4. Day View
100
- 5. Single event
101
- 6. Event Editor
102
- 7. Events admin listing
103
- 8. General Settings
104
- 9. Display Settings
105
- 10. Events List Widget
106
- 11. Mobile Month View
107
- 12. CSV Importer
108
 
109
  == Frequently Asked Questions ==
110
 
@@ -215,6 +212,34 @@ Still not happy? Shoot us an email to support@theeventscalendar.com or tweet to
215
 
216
  == Changelog ==
217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  = [4.9.14] 2020-01-15 =
219
 
220
  * Feature - Add Repository filter `where_meta_related_by_meta` for getting a post by the meta value an associated post. [133333]
3
  Contributors: ModernTribe, borkweb, barry.hughes, bordoni, brianjessee, aguseo, cliffpaulick, courane01, faction23, GeoffBel, geoffgraham, ggwicz, jbrinley, jentheo, leahkoerper, lucatume, mastromktg, MZAWeb, neillmcshea, nicosantos, patriciahillebrandt, peterchester, reid.peifer, roblagatta, ryancurban, shane.pearlman, tribecari, vicskf, zbtirrell, juanfra
4
  Tags: events, calendar, event, venue, organizer, dates, date, google maps, conference, workshop, concert, meeting, seminar, summit, class, modern tribe, tribe, widget
5
  Donate link: http://m.tri.be/29
6
+ Requires at least: 4.9
7
+ Stable tag: 5.0.0
8
+ Tested up to: 5.3.2
9
  Requires PHP: 5.6
10
  License: GPLv2 or later
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
94
  == Screenshots ==
95
 
96
  1. Month View with hover
97
+ 2. Mobile Views
98
+ 3. Single event
99
+ 4. List View
100
+ 5. Event Editor
101
+ 6. Events admin listing
102
+ 7. General Settings
103
+ 8. Display Settings
104
+ 9. CSV Importer
 
 
 
105
 
106
  == Frequently Asked Questions ==
107
 
212
 
213
  == Changelog ==
214
 
215
+ = [5.0.0] 2020-01-27 =
216
+
217
+ * Feature - Created new Month, Day, and List views with all new HTML, CSS, and JavaScript.
218
+ * Feature - Add upgrade path for new Month, Day, and List views making it opt-in for any existing users.
219
+ * Feature - New templating engine to power the new Views. [See More](http://m.tri.be/1aid)
220
+ * Feature - Views initialization and instance includes more filters and actions to allow improved extensibility and customization. (See all filters below)
221
+ * Feature - Views manager and bootstraping classes were created to allow more control over where and when views will be initialized. (See filters related to those below)
222
+ * Feature - Reduced maintenance burden of customizations by leveraging atomic templates for the new views. (See list of files now available below)
223
+ * Feature - CSS uses a Block Element Modifier (BEM) methodology to improve reusablility of components. [See More](http://m.tri.be/1aib)
224
+ * Feature - New Views share one JavaScript Manager, which contains multiple jQuery actions and customization points.
225
+ * Feature - View navigation relies on the WP Rest API, improving reliability and caching opportunities.
226
+ * Feature - Event permalinks are now more consistent across navigation using `WP_Rewrite` to map params to their matching URL, which improves SEO.
227
+ * Feature - Event data filtering used across all new views: `tribe_get_event_before`, `tribe_get_event`, `tribe_get_event_after`, `tribe_events_organizers_fetch_callback`, `tribe_events_venues_fetch_callback`
228
+ * Feature - Venue data filtering used across all new views: `tribe_get_venue_object_before`, `tribe_get_venue_object`
229
+ * Tweak - Custom Before and After HTML on the Events > Settings page will now prefer event view styling over the Theme's CSS.
230
+ * Tweak - Lowered the reliance on the global `$wp_query` to create more consistent output and faster maintenance. [See More](http://m.tri.be/1aic)
231
+ * Tweak - View overrides for the new views will look within a new folder in your theme to avoid conflicting with old The Events Calendar theme customizations [See More](http://m.tri.be/1aia)
232
+ * Tweak - Switch to a compact date while on day and month view in mobile [136789]
233
+ * Tweak - Remove `tribe_events_getLink` in favor of `tribe_events_get_link` which was a deprecated filter since version 4.3
234
+ * Hooks - View template include and render filters and actions: `tribe_template_before_include`, `tribe_template_before_include:{$template_path}`, `tribe_template_after_include`, `tribe_template_after_include:{$template_path}`, `tribe_template_html`, `tribe_template_html:{$template_path}`
235
+ * Hooks - View instance filters and actions: `tribe_events_views_v2_view_template`, `tribe_events_views_v2_{$view_slug}_view_template`, `tribe_events_views_v2_view_context`, `tribe_events_views_v2_{$view_slug}_view_context`, `tribe_events_views_v2_view_repository`, `tribe_events_views_v2_{$view_slug}_view_repository`, `tribe_events_views_v2_view_url_query_args`, `tribe_events_views_v2_{$view_slug}_view_url_query_args`, `tribe_events_views_v2_view_html_classes`, `tribe_events_views_v2_{$view_slug}_view_html_classes`, `tribe_events_views_v2_url_query_args`, `tribe_events_views_v2_view_template_vars`, `tribe_events_views_v2_view_{$view_slug}_template_vars`, `tribe_events_views_v2_view_url`, `tribe_events_views_v2_view_{$view_slug}_url`, `tribe_events_views_v2_view_prev_url`, `tribe_events_views_v2_view_{$view_slug}_prev_url`, `tribe_events_views_v2_view_next_url`, `tribe_events_views_v2_view_{$view_slug}_next_url`, `tribe_events_views_v2_view_repository_args`, `tribe_events_views_v2_view_link_label_format`, `tribe_events_views_v2_view_{$view_slug}_link_label_format`, `tribe_events_views_v2_view_title`, `tribe_events_views_v2_view_{$view_slug}_title`, `tribe_events_views_v2_view_messages`, `tribe_events_views_v2_view_{$view_slug}_messages`, `tribe_events_views_v2_view_breadcrumbs`, `tribe_events_views_v2_view_{$view_slug}_breadcrumbs`, `tribe_events_views_v2_view_display_events_bar`, `tribe_events_views_v2_view_{$view_slug}_display_events_bar`, `tribe_events_views_v2_view_ical_data`, `tribe_events_views_v2_view_{$view_slug}_ical_data`, `tribe_events_views_v2_view_show_datepicker_submit`, `tribe_events_views_v2_view_{$view_slug}_show_datepicker_submit`, `tribe_events_views_v2_view_public_views`, `tribe_events_views_v2_view_{$view_slug}_public_views`, `tribe_events_views_v2_view_data`, `tribe_events_views_v2_{$view_slug}_view_data`, `tribe_events_views_v2_{$view_slug}_events_per_day`, `tribe_events_views_v2_month_events_per_day`, `tribe_events_views_v2_month_nav_skip_empty`, `tribe_events_views_v2_view_breakpoints`, `tribe_events_views_v2_view_{$view_slug}_breakpoints`, `tribe_events_views_v2_before_make_view`, `tribe_events_views_v2_after_make_view`, `tribe_events_views_v2_messages_map`, `tribe_events_views_v2_view_messages_before_render`
236
+ * Hooks - View REST API HTML request actions and filters: `tribe_events_views_v2_request_arguments`, `tribe_events_views_v2_rest_endpoint_available`, `tribe_events_views_v2_rest_params`, `tribe_events_views_v2_{$view_slug}_rest_params`
237
+ * Hooks - Views Bootstrap filters and actions: `tribe_events_views_v2_bootstrap_pre_get_view_html`, `tribe_events_views_v2_bootstrap_should_display_single`, `tribe_events_views_v2_bootstrap_view_slug`, `tribe_events_views_v2_bootstrap_pre_should_load`, `tribe_events_views_v2_should_hijack_page_template`
238
+ * Hooks - Views Manager filters and actions: `tribe_events_views`, `tribe_events_views_v2_manager_default_view`, `tribe_events_views_v2_manager_view_label_domain`, `tribe_events_views_v2_manager_{$view_slug}_view_label_domain`, `tribe_events_views_v2_manager_view_label`, `tribe_events_views_v2_manager_{$view_slug}_view_label`
239
+ * Hooks - Other views filters and actions: `tribe_events_views_v2_is_enabled`, `tribe_events_views_v2_assets_should_enqueue_frontend`, `tribe_events_views_v2_assets_should_enqueue_full_styles`, `tribe_events_v2_view_title`, `tribe_events_views_v2_should_replace_excerpt_more_link`, `tribe_events_views_v2_view_before_events_html`, `tribe_events_views_v2_view_after_events_html`, `tribe_events_views_v2_month_title`, `tribe_events_views_v2_day_title`, `tribe_events_views_v2_category_title`, `tribe_events_views_v2_theme_compatibility_registered`, `tribe_events_views_v2_stack_spacer`, `tribe_events_views_v2_stack_recycle_spaces`, `tribe_events_views_v2_stack_events`, `tribe_events_views_v2_stack_filter_event`, `tribe_events_views_v2_stack_normalize`
240
+ * Templates - Views refactored template files: `v2/base`, `v2/components/after`, `v2/components/before`, `v2/components/breadcrumbs`, `v2/components/breadcrumbs/breadcrumb`, `v2/components/breadcrumbs/linked-breadcrumb`, `v2/components/breakpoints`, `v2/components/data`, `v2/components/events-bar`, `v2/components/events-bar/filters`, `v2/components/events-bar/search-button`, `v2/components/events-bar/search-button/icon`, `v2/components/events-bar/search`, `v2/components/events-bar/search/keyword`, `v2/components/events-bar/search/submit`, `v2/components/events-bar/tabs`, `v2/components/events-bar/views`, `v2/components/events-bar/views/list`, `v2/components/events-bar/views/list/item`, `v2/components/filter-bar`, `v2/components/ical-link`, `v2/components/loader`, `v2/components/messages`, `v2/components/read-more`, `v2/components/top-bar/actions`, `v2/components/top-bar/actions/content`, `v2/components/top-bar/datepicker/submit`, `v2/components/top-bar/nav`, `v2/components/top-bar/nav/next-disabled`, `v2/components/top-bar/nav/next`, `v2/components/top-bar/nav/prev-disabled`, `v2/components/top-bar/nav/prev`, `v2/components/top-bar/today`, `v2/day`, `v2/day/event`, `v2/day/event/cost`, `v2/day/event/date`, `v2/day/event/date/meta`, `v2/day/event/description`, `v2/day/event/featured-image`, `v2/day/event/title`, `v2/day/event/venue`, `v2/day/nav`, `v2/day/nav/next-disabled`, `v2/day/nav/next`, `v2/day/nav/prev-disabled`, `v2/day/nav/prev`, `v2/day/time-separator`, `v2/day/top-bar`, `v2/day/top-bar/datepicker`, `v2/day/type-separator`, `v2/index`, `v2/list`, `v2/list/event`, `v2/list/event/cost`, `v2/list/event/date-tag`, `v2/list/event/date`, `v2/list/event/date/meta`, `v2/list/event/description`, `v2/list/event/featured-image`, `v2/list/event/title`, `v2/list/event/venue`, `v2/list/month-separator`, `v2/list/nav`, `v2/list/nav/next-disabled`, `v2/list/nav/next`, `v2/list/nav/prev-disabled`, `v2/list/nav/prev`, `v2/list/nav/today`, `v2/list/top-bar`, `v2/list/top-bar/datepicker`, `v2/month`, `v2/month/calendar-body`, `v2/month/calendar-body/day`, `v2/month/calendar-body/day/calendar-events`, `v2/month/calendar-body/day/calendar-events/calendar-event`, `v2/month/calendar-body/day/calendar-events/calendar-event/date`, `v2/month/calendar-body/day/calendar-events/calendar-event/date/meta`, `v2/month/calendar-body/day/calendar-events/calendar-event/featured-image`, `v2/month/calendar-body/day/calendar-events/calendar-event/title`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/cost`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/date`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/date/meta`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/description`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/featured-image`, `v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/title`, `v2/month/calendar-body/day/more-events`, `v2/month/calendar-body/day/multiday-events`, `v2/month/calendar-body/day/multiday-events/multiday-event-spacer`, `v2/month/calendar-body/day/multiday-events/multiday-event`, `v2/month/calendar-header`, `v2/month/mobile-events`, `v2/month/mobile-events/mobile-day`, `v2/month/mobile-events/mobile-day/day-marker`, `v2/month/mobile-events/mobile-day/mobile-event`, `v2/month/mobile-events/mobile-day/mobile-event/cost`, `v2/month/mobile-events/mobile-day/mobile-event/date`, `v2/month/mobile-events/mobile-day/mobile-event/date/meta`, `v2/month/mobile-events/mobile-day/mobile-event/featured-image`, `v2/month/mobile-events/mobile-day/mobile-event/title`, `v2/month/mobile-events/mobile-day/more-events`, `v2/month/mobile-events/nav`, `v2/month/mobile-events/nav/next-disabled`, `v2/month/mobile-events/nav/next`, `v2/month/mobile-events/nav/prev-disabled`, `v2/month/mobile-events/nav/prev`, `v2/month/mobile-events/nav/today`, `v2/month/top-bar`, `v2/month/top-bar/datepicker`, `v2/not-found`
241
+ * Language - 2 new strings added, 169 updated, 1 fuzzied, and 0 obsoleted
242
+
243
  = [4.9.14] 2020-01-15 =
244
 
245
  * Feature - Add Repository filter `where_meta_related_by_meta` for getting a post by the meta value an associated post. [133333]
src/Tribe/Aggregator/Record/Queue.php CHANGED
@@ -66,6 +66,8 @@ class Tribe__Events__Aggregator__Record__Queue implements Tribe__Events__Aggrega
66
  * @param Tribe__Events__Aggregator__Record__Queue_Cleaner|null $cleaner
67
  */
68
  public function __construct( $record, $items = array(), Tribe__Events__Aggregator__Record__Queue_Cleaner $cleaner = null ) {
 
 
69
  if ( is_numeric( $record ) ) {
70
  $record = Tribe__Events__Aggregator__Records::instance()->get_by_post_id( $record );
71
  }
66
  * @param Tribe__Events__Aggregator__Record__Queue_Cleaner|null $cleaner
67
  */
68
  public function __construct( $record, $items = array(), Tribe__Events__Aggregator__Record__Queue_Cleaner $cleaner = null ) {
69
+ tribe( 'chunker' );
70
+
71
  if ( is_numeric( $record ) ) {
72
  $record = Tribe__Events__Aggregator__Records::instance()->get_by_post_id( $record );
73
  }
src/Tribe/Collections/Lazy_Post_Collection.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Models a lazy collection of posts that will store the post IDs in cache during serialization and rebuild the
4
+ * collection items from post IDs during unserialization.
5
+ *
6
+ * @since 5.0.0
7
+ *
8
+ * @package Tribe\Events\Collections
9
+ */
10
+
11
+ namespace Tribe\Events\Collections;
12
+
13
+ use Tribe\Utils\Lazy_Collection;
14
+
15
+ /**
16
+ * Class Lazy_Post_Collection
17
+ *
18
+ * @since 5.0.0
19
+ *
20
+ * @package Tribe\Events\Collections
21
+ */
22
+ class Lazy_Post_Collection extends Lazy_Collection {
23
+ /**
24
+ * The callback function that should be called to rebuild the collection items from an array of post IDs.
25
+ *
26
+ * @since 5.0.0
27
+ *
28
+ * @var callable|string
29
+ */
30
+ protected $unserialize_callback;
31
+
32
+ /**
33
+ * Lazy_Post_Collection constructor.
34
+ *
35
+ * @since 5.0.0
36
+ *
37
+ * @param callable $callback The callback that should be used to fetch the collection items.
38
+ * @param string $unserialize_callback The callback that should be used to rebuild the collection items from the
39
+ * serialized post IDs.
40
+ */
41
+ public function __construct( callable $callback, $unserialize_callback = 'get_post' ) {
42
+ parent::__construct( $callback );
43
+ $this->unserialize_callback = $unserialize_callback;
44
+ }
45
+
46
+ /**
47
+ * Plucks the post IDs from the collection items before serialization.
48
+ *
49
+ * While serializing a post object w/ added properties will not generate any error during serialization, doing the
50
+ * same during unserialization will yield a `false` result.
51
+ * To avoid dealing with the lower level details of how the post object is built or decorated, here we extract
52
+ * the post IDs to only store those.
53
+ *
54
+ * @since 5.0.0
55
+ *
56
+ * @param array<\WP_Post> $items The posts part of this collection.
57
+ *
58
+ * @return array The collection post IDs and callback.
59
+ *
60
+ * @see Lazy_Post_Collection::custom_unserialize() for the other part of the post handling.
61
+ */
62
+ protected function before_serialize( array $items ) {
63
+ return [
64
+ 'callback' => $this->unserialize_callback,
65
+ 'ids' => wp_list_pluck( $items, 'ID' ),
66
+ ];
67
+ }
68
+
69
+ /**
70
+ * Custom handling of the lazy collection unserialization, this method will build complete post objects from
71
+ * the serialized post IDs.
72
+ *
73
+ * @since 5.0.0
74
+ *
75
+ * @param string $serialized The serialized values, usually an array of post IDs.
76
+ *
77
+ * @return array<\WP_Post>|null Either the rebuilt collection, or `null` if the serialized string cannot be
78
+ * unserialized.
79
+ */
80
+ protected function custom_unserialize( $serialized ) {
81
+ $unserialized = unserialize( $serialized );
82
+
83
+ if ( false === $unserialized || ! is_array( $unserialized ) ) {
84
+ return null;
85
+ }
86
+
87
+ return array_map( $unserialized['callback'], $unserialized['ids'] );
88
+ }
89
+ }
src/Tribe/Customizer/Global_Elements.php CHANGED
@@ -41,6 +41,10 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
41
  ';
42
  }
43
 
 
 
 
 
44
  if ( $customizer->has_option( $this->ID, 'filterbar_color' ) ) {
45
  $template .= '
46
  #tribe-bar-form {
@@ -148,6 +152,12 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
148
  )
149
  );
150
 
 
 
 
 
 
 
151
  $manager->add_setting(
152
  $customizer->get_setting_name( 'filterbar_color', $section ),
153
  array(
@@ -218,12 +228,10 @@ final class Tribe__Events__Customizer__Global_Elements extends Tribe__Customizer
218
  }
219
 
220
  // Introduced to make Selective Refresh have less code duplication
221
- $customizer->add_setting_name( $customizer->get_setting_name( 'link_color', $section ) );
222
  $customizer->add_setting_name( $customizer->get_setting_name( 'filterbar_color', $section ) );
223
  $customizer->add_setting_name( $customizer->get_setting_name( 'button_color', $section ) );
224
 
225
  // To add Live Edit Pins will require some JS refactor to be able to work
226
  // $customizer->add_setting_name( $customizer->get_setting_name( 'map_pin', $section ) );
227
-
228
  }
229
  }
41
  ';
42
  }
43
 
44
+ if ( tribe_events_views_v2_is_enabled() ) {
45
+ return $template;
46
+ }
47
+
48
  if ( $customizer->has_option( $this->ID, 'filterbar_color' ) ) {
49
  $template .= '
50
  #tribe-bar-form {
152
  )
153
  );
154
 
155
+ $customizer->add_setting_name( $customizer->get_setting_name( 'link_color', $section ) );
156
+
157
+ if ( tribe_events_views_v2_is_enabled() ) {
158
+ return;
159
+ }
160
+
161
  $manager->add_setting(
162
  $customizer->get_setting_name( 'filterbar_color', $section ),
163
  array(
228
  }
229
 
230
  // Introduced to make Selective Refresh have less code duplication
 
231
  $customizer->add_setting_name( $customizer->get_setting_name( 'filterbar_color', $section ) );
232
  $customizer->add_setting_name( $customizer->get_setting_name( 'button_color', $section ) );
233
 
234
  // To add Live Edit Pins will require some JS refactor to be able to work
235
  // $customizer->add_setting_name( $customizer->get_setting_name( 'map_pin', $section ) );
 
236
  }
237
  }
src/Tribe/Front_Page_View.php CHANGED
@@ -29,7 +29,7 @@ class Tribe__Events__Front_Page_View {
29
  if ( tribe_get_option( 'front_page_event_archive', false ) ) {
30
  // Implement front page view
31
  add_action( 'parse_query', array( $this, 'parse_query' ), 5 );
32
- add_filter( 'tribe_events_getLink', array( $this, 'main_event_page_links' ) );
33
  }
34
 
35
  add_action( 'parse_query', array( $this, 'parse_customizer_query' ) );
29
  if ( tribe_get_option( 'front_page_event_archive', false ) ) {
30
  // Implement front page view
31
  add_action( 'parse_query', array( $this, 'parse_query' ), 5 );
32
+ add_filter( 'tribe_events_get_link', array( $this, 'main_event_page_links' ) );
33
  }
34
 
35
  add_action( 'parse_query', array( $this, 'parse_customizer_query' ) );
src/Tribe/Main.php CHANGED
@@ -32,7 +32,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
32
  const VENUE_POST_TYPE = 'tribe_venue';
33
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
34
 
35
- const VERSION = '4.9.14';
36
 
37
  /**
38
  * Min Pro Addon
@@ -69,7 +69,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
69
  *
70
  * @since 4.8
71
  */
72
- protected $min_et_version = '4.10.6.2-dev';
73
 
74
  /**
75
  * Maybe display data wrapper
@@ -553,14 +553,6 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
553
  // Assets loader
554
  tribe_singleton( 'tec.assets', 'Tribe__Events__Assets', array( 'register', 'hook' ) );
555
 
556
- // Register and start the Customizer Sections
557
- tribe_singleton( 'tec.customizer.general-theme', new Tribe__Events__Customizer__General_Theme() );
558
- tribe_singleton( 'tec.customizer.global-elements', new Tribe__Events__Customizer__Global_Elements() );
559
- tribe_singleton( 'tec.customizer.day-list-view', new Tribe__Events__Customizer__Day_List_View() );
560
- tribe_singleton( 'tec.customizer.month-week-view', new Tribe__Events__Customizer__Month_Week_View() );
561
- tribe_singleton( 'tec.customizer.single-event', new Tribe__Events__Customizer__Single_Event() );
562
- tribe_singleton( 'tec.customizer.widget', new Tribe__Events__Customizer__Widget() );
563
-
564
  // Tribe Bar
565
  tribe_singleton( 'tec.bar', 'Tribe__Events__Bar', array( 'hook' ) );
566
 
@@ -606,6 +598,24 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
606
  // The Views v2 service provider.
607
  tribe_register_provider( Tribe\Events\Views\V2\Service_Provider::class );
608
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
609
  /**
610
  * Allows other plugins and services to override/change the bound implementations.
611
  */
@@ -853,7 +863,6 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
853
 
854
  // Register all of the post types in the chunker and start the chunker
855
  add_filter( 'tribe_meta_chunker_post_types', array( $this, 'filter_meta_chunker_post_types' ) );
856
- tribe( 'chunker' );
857
 
858
  // Purge old events
859
  add_action( 'update_option_' . Tribe__Main::OPTIONNAME, tribe_callback( 'tec.event-cleaner', 'move_old_events_to_trash' ), 10, 2 );
@@ -1160,7 +1169,7 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
1160
  }
1161
 
1162
  $settings_cap = apply_filters( 'tribe_settings_req_cap', 'manage_options' );
1163
- $edit_settings_link = __( ' ask the site administrator set a different Events URL slug.', 'the-events-calendar' );
1164
 
1165
  if ( current_user_can( $settings_cap ) ) {
1166
  $admin_slug = apply_filters( 'tribe_settings_admin_slug', 'tribe-common' );
@@ -2573,6 +2582,8 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
2573
  * @return string The link.
2574
  */
2575
  public function getLink( $type = 'home', $secondary = false, $term = null, $featured = null ) {
 
 
2576
  // if permalinks are off or user doesn't want them: ugly.
2577
  if ( '' === get_option( 'permalink_structure' ) ) {
2578
  return esc_url_raw( $this->uglyLink( $type, $secondary ) );
@@ -2605,7 +2616,15 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
2605
 
2606
  // Append Events structure
2607
  $slug = _x( Tribe__Settings_Manager::get_option( 'eventsSlug', 'events' ), 'Archive Events Slug', 'the-events-calendar' );
2608
- $event_url .= trailingslashit( sanitize_title( $slug ) );
 
 
 
 
 
 
 
 
2609
 
2610
  // if we're on an Event Cat, show the cat link, except for home and days.
2611
  if ( $type !== 'home' && is_tax( self::TAXONOMY ) && $term !== false && ! is_numeric( $term ) ) {
@@ -2632,17 +2651,12 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
2632
  }
2633
  break;
2634
  case 'list':
2635
- $event_url = trailingslashit( esc_url_raw( $event_url . $this->listSlug ) );
2636
- break;
2637
  case 'upcoming':
2638
  $event_url = trailingslashit( esc_url_raw( $event_url . $this->listSlug ) );
2639
  break;
2640
  case 'past':
2641
  $event_url = esc_url_raw( add_query_arg( 'tribe_event_display', 'past', trailingslashit( $event_url . $this->listSlug ) ) );
2642
  break;
2643
- case 'dropdown':
2644
- $event_url = esc_url_raw( $event_url );
2645
- break;
2646
  case 'single':
2647
  global $post;
2648
  $p = $secondary ? $secondary : $post;
@@ -2665,11 +2679,6 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
2665
  // Filter get link
2666
  $event_url = apply_filters( 'tribe_events_get_link', $event_url, $type, $secondary, $term, $url_args, $featured );
2667
 
2668
- /**
2669
- * @deprecated 4.3
2670
- */
2671
- $event_url = apply_filters( 'tribe_events_getLink', $event_url, $type, $secondary, $term, $url_args );
2672
-
2673
  // Add the Arguments back
2674
  $event_url = add_query_arg( $url_args, $event_url );
2675
 
@@ -3015,6 +3024,12 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
3015
  require_once dirname( __FILE__ ) . '/Deactivation.php';
3016
  }
3017
 
 
 
 
 
 
 
3018
  $deactivation = new Tribe__Events__Deactivation( $network_deactivating );
3019
  add_action( 'shutdown', array( $deactivation, 'deactivate' ) );
3020
  }
@@ -3797,17 +3812,30 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
3797
  * @return bool Is it a venue?
3798
  */
3799
  public function isVenue( $postId = null ) {
 
 
 
 
3800
  if ( $postId === null || ! is_numeric( $postId ) ) {
3801
  global $post;
3802
  if ( isset( $post->ID ) ) {
3803
  $postId = $post->ID;
3804
  }
3805
  }
 
 
 
 
 
 
3806
  if ( isset( $postId ) && get_post_field( 'post_type', $postId ) == Tribe__Events__Venue::POSTTYPE ) {
3807
- return true;
 
 
3808
  }
3809
 
3810
- return false;
 
3811
  }
3812
 
3813
  /**
@@ -3818,17 +3846,31 @@ if ( ! class_exists( 'Tribe__Events__Main' ) ) {
3818
  * @return bool Is it an organizer?
3819
  */
3820
  public function isOrganizer( $postId = null ) {
 
 
 
 
3821
  if ( $postId === null || ! is_numeric( $postId ) ) {
3822
  global $post;
3823
  if ( isset( $post->ID ) ) {
3824
  $postId = $post->ID;
3825
  }
3826
  }
 
 
 
 
 
 
3827
  if ( isset( $postId ) && get_post_field( 'post_type', $postId ) == Tribe__Events__Organizer::POSTTYPE ) {
3828
- return true;
 
 
3829
  }
3830
 
3831
- return false;
 
 
3832
  }
3833
 
3834
  /**
32
  const VENUE_POST_TYPE = 'tribe_venue';
33
  const ORGANIZER_POST_TYPE = 'tribe_organizer';
34
 
35
+ const VERSION = '5.0.0';
36
 
37
  /**
38
  * Min Pro Addon
69
  *
70
  * @since 4.8
71
  */
72
+ protected $min_et_version = '4.11.2-dev';
73
 
74
  /**
75
  * Maybe display data wrapper
553
  // Assets loader
554
  tribe_singleton( 'tec.assets', 'Tribe__Events__Assets', array( 'register', 'hook' ) );
555
 
 
 
 
 
 
 
 
 
556
  // Tribe Bar
557
  tribe_singleton( 'tec.bar', 'Tribe__Events__Bar', array( 'hook' ) );
558
 
598
  // The Views v2 service provider.
599
  tribe_register_provider( Tribe\Events\Views\V2\Service_Provider::class );
600
 
601
+ // Register and start the Customizer Sections
602
+ if ( ! tribe_events_views_v2_is_enabled() ){
603
+ tribe_singleton( 'tec.customizer.general-theme', new Tribe__Events__Customizer__General_Theme() );
604
+ }
605
+
606
+ tribe_singleton( 'tec.customizer.global-elements', new Tribe__Events__Customizer__Global_Elements() );
607
+
608
+ if ( ! tribe_events_views_v2_is_enabled() ) {
609
+ tribe_singleton( 'tec.customizer.day-list-view', new Tribe__Events__Customizer__Day_List_View() );
610
+ tribe_singleton( 'tec.customizer.month-week-view', new Tribe__Events__Customizer__Month_Week_View() );
611
+ }
612
+
613
+ tribe_singleton( 'tec.customizer.single-event', new Tribe__Events__Customizer__Single_Event() );
614
+
615
+ if ( ! tribe_events_views_v2_is_enabled() ) {
616
+ tribe_singleton( 'tec.customizer.widget', new Tribe__Events__Customizer__Widget() );
617
+ }
618
+
619
  /**
620
  * Allows other plugins and services to override/change the bound implementations.
621
  */
863
 
864
  // Register all of the post types in the chunker and start the chunker
865
  add_filter( 'tribe_meta_chunker_post_types', array( $this, 'filter_meta_chunker_post_types' ) );
 
866
 
867
  // Purge old events
868
  add_action( 'update_option_' . Tribe__Main::OPTIONNAME, tribe_callback( 'tec.event-cleaner', 'move_old_events_to_trash' ), 10, 2 );
1169
  }
1170
 
1171
  $settings_cap = apply_filters( 'tribe_settings_req_cap', 'manage_options' );
1172
+ $edit_settings_link = __( ' ask the site administrator to set a different Events URL slug.', 'the-events-calendar' );
1173
 
1174
  if ( current_user_can( $settings_cap ) ) {
1175
  $admin_slug = apply_filters( 'tribe_settings_admin_slug', 'tribe-common' );
2582
  * @return string The link.
2583
  */
2584
  public function getLink( $type = 'home', $secondary = false, $term = null, $featured = null ) {
2585
+ static $cache_var_name = __METHOD__;
2586
+
2587
  // if permalinks are off or user doesn't want them: ugly.
2588
  if ( '' === get_option( 'permalink_structure' ) ) {
2589
  return esc_url_raw( $this->uglyLink( $type, $secondary ) );
2616
 
2617
  // Append Events structure
2618
  $slug = _x( Tribe__Settings_Manager::get_option( 'eventsSlug', 'events' ), 'Archive Events Slug', 'the-events-calendar' );
2619
+
2620
+ $cache_event_url_slugs = tribe_get_var( $cache_var_name, [] );
2621
+
2622
+ if ( ! isset( $cache_event_url_slugs[ $slug ] ) ) {
2623
+ $cache_event_url_slugs[ $slug ] = trailingslashit( sanitize_title( $slug ) );
2624
+ tribe_set_var( $cache_var_name, $cache_event_url_slugs );
2625
+ }
2626
+
2627
+ $event_url .= $cache_event_url_slugs[ $slug ];
2628
 
2629
  // if we're on an Event Cat, show the cat link, except for home and days.
2630
  if ( $type !== 'home' && is_tax( self::TAXONOMY ) && $term !== false && ! is_numeric( $term ) ) {
2651
  }
2652
  break;
2653
  case 'list':
 
 
2654
  case 'upcoming':
2655
  $event_url = trailingslashit( esc_url_raw( $event_url . $this->listSlug ) );
2656
  break;
2657
  case 'past':
2658
  $event_url = esc_url_raw( add_query_arg( 'tribe_event_display', 'past', trailingslashit( $event_url . $this->listSlug ) ) );
2659
  break;
 
 
 
2660
  case 'single':
2661
  global $post;
2662
  $p = $secondary ? $secondary : $post;
2679
  // Filter get link
2680
  $event_url = apply_filters( 'tribe_events_get_link', $event_url, $type, $secondary, $term, $url_args, $featured );
2681
 
 
 
 
 
 
2682
  // Add the Arguments back
2683
  $event_url = add_query_arg( $url_args, $event_url );
2684
 
3024
  require_once dirname( __FILE__ ) . '/Deactivation.php';
3025
  }
3026
 
3027
+ if ( ! class_exists( 'Tribe__Cache' ) ) {
3028
+ require_once dirname( dirname( __FILE__ ) ) . '/common/src/Tribe/Cache.php';
3029
+ }
3030
+
3031
+ wp_clear_scheduled_hook( \Tribe__Cache::SCHEDULED_EVENT_DELETE_TRANSIENT );
3032
+
3033
  $deactivation = new Tribe__Events__Deactivation( $network_deactivating );
3034
  add_action( 'shutdown', array( $deactivation, 'deactivate' ) );
3035
  }
3812
  * @return bool Is it a venue?
3813
  */
3814
  public function isVenue( $postId = null ) {
3815
+ static $cache_var_name = __METHOD__;
3816
+
3817
+ $is_venue = tribe_get_var( $cache_var_name, [] );
3818
+
3819
  if ( $postId === null || ! is_numeric( $postId ) ) {
3820
  global $post;
3821
  if ( isset( $post->ID ) ) {
3822
  $postId = $post->ID;
3823
  }
3824
  }
3825
+
3826
+ // Return if we've already fetched this info.
3827
+ if ( isset( $is_venue[ $postId ] ) ) {
3828
+ return $is_venue[ $postId ];
3829
+ }
3830
+
3831
  if ( isset( $postId ) && get_post_field( 'post_type', $postId ) == Tribe__Events__Venue::POSTTYPE ) {
3832
+ $is_venue[ $postId ] = true;
3833
+ } else {
3834
+ $is_venue[ $postId ] = false;
3835
  }
3836
 
3837
+ tribe_set_var( $cache_var_name, $is_venue );
3838
+ return $is_venue[ $postId ];
3839
  }
3840
 
3841
  /**
3846
  * @return bool Is it an organizer?
3847
  */
3848
  public function isOrganizer( $postId = null ) {
3849
+ static $cache_var_name = __METHOD__;
3850
+
3851
+ $is_organizer = tribe_get_var( $cache_var_name, [] );
3852
+
3853
  if ( $postId === null || ! is_numeric( $postId ) ) {
3854
  global $post;
3855
  if ( isset( $post->ID ) ) {
3856
  $postId = $post->ID;
3857
  }
3858
  }
3859
+
3860
+ // Return if we've already fetched this info.
3861
+ if ( isset( $is_organizer[ $postId ] ) ) {
3862
+ return $is_organizer[ $postId ];
3863
+ }
3864
+
3865
  if ( isset( $postId ) && get_post_field( 'post_type', $postId ) == Tribe__Events__Organizer::POSTTYPE ) {
3866
+ $is_organizer[ $postId ] = true;
3867
+ } else {
3868
+ $is_organizer[ $postId ] = false;
3869
  }
3870
 
3871
+ tribe_set_var( $cache_var_name, $is_organizer );
3872
+
3873
+ return $is_organizer[ $postId ];
3874
  }
3875
 
3876
  /**
src/Tribe/Models/Post_Types/Event.php CHANGED
@@ -11,8 +11,8 @@ namespace Tribe\Events\Models\Post_Types;
11
 
12
  use DateInterval;
13
  use DatePeriod;
14
- use DateTimeImmutable;
15
  use DateTimeZone;
 
16
  use Tribe\Models\Post_Types\Base;
17
  use Tribe\Utils\Lazy_Collection;
18
  use Tribe\Utils\Lazy_String;
@@ -46,22 +46,24 @@ class Event extends Base {
46
 
47
  $post_id = $this->post->ID;
48
 
49
- $start_date = get_post_meta( $post_id, '_EventStartDate', true );
50
- $start_date_utc = get_post_meta( $post_id, '_EventStartDateUTC', true );
51
- $end_date = get_post_meta( $post_id, '_EventEndDate', true );
52
- $end_date_utc = get_post_meta( $post_id, '_EventEndDateUTC', true );
53
- $duration = (int) get_post_meta( $post_id, '_EventDuration', true );
 
 
54
  $timezone_string = Timezones::get_event_timezone_string( $post_id );
55
- $all_day = tribe_is_truthy( get_post_meta( $post_id, '_EventAllDay', true ) );
56
  $end_of_day = tribe_end_of_day( $start_date );
57
  $timezone = Timezones::build_timezone_object( $timezone_string );
58
  $site_timezone = Timezones::build_timezone_object();
59
  $utc_timezone = new DateTimezone( 'UTC' );
60
- $start_date_object = new DateTimeImmutable( $start_date, $timezone );
61
- $end_date_object = new DateTimeImmutable( $end_date, $timezone );
62
- $start_date_utc_object = new DateTimeImmutable( $start_date_utc, $utc_timezone );
63
- $end_date_utc_object = new DateTimeImmutable( $end_date_utc, $utc_timezone );
64
- $end_of_day_object = new DateTimeImmutable( $end_of_day, $timezone );
65
 
66
  if ( empty( $duration ) ) {
67
  // This is really an edge case, but here we have the information to rebuild it.
@@ -72,8 +74,30 @@ class Event extends Base {
72
  * An event is multi-day if its end date is after the end-of-day cutoff of the start date.
73
  * We add one second to make sure events ending at end-of-day, same day, cutoff are not marked as multi-day.
74
  */
75
- $is_multiday = $end_of_day_object->add( $one_second ) < $end_date_object;
76
- $multiday = false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
 
78
  // Without a context these values will not make sense; we'll set them if the `$filter` argument is a date.
79
  $starts_this_week = null;
@@ -81,21 +105,6 @@ class Event extends Base {
81
  $happens_this_week = null;
82
  $this_week_duration = null;
83
 
84
- // Multi-day events will span at least two days: the day they start on and the following one.
85
- if ( $is_multiday ) {
86
- /*
87
- * Count the number of cut-offs happening before the end date and add 1.
88
- * Do not add 1 for all-day events as they span cut-off to cut-off.
89
- */
90
- $multiday = $all_day ? 0 : 1;
91
-
92
- // The end date should be inclusive, since it's not in the DatePeriod we work-around it adding a second.
93
- $period = new DatePeriod( $end_of_day_object, $one_day, $end_date_object );
94
- foreach ( $period as $date ) {
95
- ++ $multiday;
96
- };
97
- }
98
-
99
  if ( Dates::is_valid_date( $filter ) ) {
100
  list( $week_start, $week_end ) = Dates::get_week_start_end( $filter );
101
 
@@ -130,9 +139,9 @@ class Event extends Base {
130
  if ( $starts_this_week && $ends_this_week ) {
131
  $this_week_duration = min( 7, max( 1, Dates::date_diff( $the_end_ymd, $the_start_ymd ) ) + $cross_day );
132
  } elseif ( $ends_this_week ) {
133
- $this_week_duration = $the_end_ymd - $week_start_ymd + $cross_day;
134
  } elseif ( $starts_this_week ) {
135
- $this_week_duration = $week_end_ymd - $the_start_ymd + $cross_day;
136
  } else {
137
  // If it happens this week and it doesn't start or end this week, then it spans the week.
138
  $this_week_duration = 7;
@@ -141,7 +150,7 @@ class Event extends Base {
141
  }
142
  }
143
 
144
- $featured = tribe_is_truthy( get_post_meta( $post_id, Featured::FEATURED_EVENT_KEY, true ) );
145
  $sticky = get_post_field( 'menu_order', $post_id ) === -1;
146
  $organizer_fetch = Organizer::get_fetch_callback( $post_id );
147
  $venue_fetch = Venue::get_fetch_callback( $post_id );
@@ -184,9 +193,17 @@ class Event extends Base {
184
  false
185
  ) )->on_resolve( $cache_this ),
186
  'organizers' => ( new Lazy_Collection( $organizer_fetch ) )->on_resolve( $cache_this ),
187
- 'venues' => ( new Lazy_Collection( $venue_fetch ) )->on_resolve( $cache_this ),
 
 
 
188
  'thumbnail' => ( new Post_Thumbnail( $post_id ) )->on_resolve( $cache_this ),
189
- 'permalink' => get_permalink( $post_id ),
 
 
 
 
 
190
  'schedule_details' => ( new Lazy_String(
191
  static function () use ( $post_id ) {
192
  return tribe_events_event_schedule_details( $post_id );
@@ -199,6 +216,12 @@ class Event extends Base {
199
  },
200
  false
201
  ) )->on_resolve( $cache_this ),
 
 
 
 
 
 
202
  ];
203
  } catch ( \Exception $e ) {
204
  return [];
11
 
12
  use DateInterval;
13
  use DatePeriod;
 
14
  use DateTimeZone;
15
+ use Tribe\Events\Collections\Lazy_Post_Collection;
16
  use Tribe\Models\Post_Types\Base;
17
  use Tribe\Utils\Lazy_Collection;
18
  use Tribe\Utils\Lazy_String;
46
 
47
  $post_id = $this->post->ID;
48
 
49
+ $post_meta = get_post_meta( $post_id );
50
+
51
+ $start_date = isset( $post_meta['_EventStartDate'][0] ) ? $post_meta['_EventStartDate'][0] : null;
52
+ $start_date_utc = isset( $post_meta['_EventStartDateUTC'][0] ) ? $post_meta['_EventStartDateUTC'][0] : null;
53
+ $end_date = isset( $post_meta['_EventEndDate'][0] ) ? $post_meta['_EventEndDate'][0] : null;
54
+ $end_date_utc = isset( $post_meta['_EventEndDateUTC'][0] ) ? $post_meta['_EventEndDateUTC'][0] : null;
55
+ $duration = (int) isset( $post_meta['_EventDuration'][0] ) ? $post_meta['_EventDuration'][0] : null;
56
  $timezone_string = Timezones::get_event_timezone_string( $post_id );
57
+ $all_day = tribe_is_truthy( isset( $post_meta['_EventAllDay'][0] ) ? $post_meta['_EventAllDay'][0] : null );
58
  $end_of_day = tribe_end_of_day( $start_date );
59
  $timezone = Timezones::build_timezone_object( $timezone_string );
60
  $site_timezone = Timezones::build_timezone_object();
61
  $utc_timezone = new DateTimezone( 'UTC' );
62
+ $start_date_object = Dates::immutable( $start_date, $timezone );
63
+ $end_date_object = Dates::immutable( $end_date, $timezone );
64
+ $start_date_utc_object = Dates::immutable( $start_date_utc, $utc_timezone );
65
+ $end_date_utc_object = Dates::immutable( $end_date_utc, $utc_timezone );
66
+ $end_of_day_object = Dates::immutable( $end_of_day, $timezone );
67
 
68
  if ( empty( $duration ) ) {
69
  // This is really an edge case, but here we have the information to rebuild it.
74
  * An event is multi-day if its end date is after the end-of-day cutoff of the start date.
75
  * We add one second to make sure events ending at end-of-day, same day, cutoff are not marked as multi-day.
76
  */
77
+ $multiday = false;
78
+
79
+ if ( $all_day ) {
80
+ $start_end_diff = $start_date_object->diff( $end_date_object );
81
+ $is_multiday = $start_end_diff->days > 1;
82
+ $multiday = $is_multiday ? $start_end_diff->days : false;
83
+ } else {
84
+ $is_multiday = $end_of_day_object->add( $one_second ) < $end_date_object;
85
+
86
+ // Multi-day events will span at least two days: the day they start on and the following one.
87
+ if ( $is_multiday ) {
88
+ /*
89
+ * Count the number of cut-offs happening before the end date and add 1.
90
+ * Do not add 1 for all-day events as they span cut-off to cut-off.
91
+ */
92
+ $multiday = 1;
93
+
94
+ // The end date should be inclusive, since it's not in the DatePeriod we work-around it adding a second.
95
+ $period = new DatePeriod( $end_of_day_object, $one_day, $end_date_object );
96
+ foreach ( $period as $date ) {
97
+ ++ $multiday;
98
+ }
99
+ }
100
+ }
101
 
102
  // Without a context these values will not make sense; we'll set them if the `$filter` argument is a date.
103
  $starts_this_week = null;
105
  $happens_this_week = null;
106
  $this_week_duration = null;
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  if ( Dates::is_valid_date( $filter ) ) {
109
  list( $week_start, $week_end ) = Dates::get_week_start_end( $filter );
110
 
139
  if ( $starts_this_week && $ends_this_week ) {
140
  $this_week_duration = min( 7, max( 1, Dates::date_diff( $the_end_ymd, $the_start_ymd ) ) + $cross_day );
141
  } elseif ( $ends_this_week ) {
142
+ $this_week_duration = Dates::date_diff( $the_end_ymd, $week_start_ymd ) + $cross_day;
143
  } elseif ( $starts_this_week ) {
144
+ $this_week_duration = Dates::date_diff( $week_end_ymd, $the_start_ymd ) + $cross_day;
145
  } else {
146
  // If it happens this week and it doesn't start or end this week, then it spans the week.
147
  $this_week_duration = 7;
150
  }
151
  }
152
 
153
+ $featured = tribe_is_truthy( isset( $post_meta[ Featured::FEATURED_EVENT_KEY ][0] ) ? $post_meta[ Featured::FEATURED_EVENT_KEY ][0] : null );
154
  $sticky = get_post_field( 'menu_order', $post_id ) === -1;
155
  $organizer_fetch = Organizer::get_fetch_callback( $post_id );
156
  $venue_fetch = Venue::get_fetch_callback( $post_id );
193
  false
194
  ) )->on_resolve( $cache_this ),
195
  'organizers' => ( new Lazy_Collection( $organizer_fetch ) )->on_resolve( $cache_this ),
196
+ 'venues' => ( new Lazy_Post_Collection(
197
+ $venue_fetch,
198
+ 'tribe_get_venue_object' )
199
+ )->on_resolve( $cache_this ),
200
  'thumbnail' => ( new Post_Thumbnail( $post_id ) )->on_resolve( $cache_this ),
201
+ 'permalink' => ( new Lazy_String(
202
+ static function () use ( $post_id ) {
203
+ return get_permalink( $post_id );
204
+ },
205
+ false
206
+ ) )->on_resolve( $cache_this ),
207
  'schedule_details' => ( new Lazy_String(
208
  static function () use ( $post_id ) {
209
  return tribe_events_event_schedule_details( $post_id );
216
  },
217
  false
218
  ) )->on_resolve( $cache_this ),
219
+ 'title' => ( new Lazy_String(
220
+ static function () use ( $post_id ) {
221
+ return get_the_title( $post_id );
222
+ },
223
+ false
224
+ ) )->on_resolve( $cache_this ),
225
  ];
226
  } catch ( \Exception $e ) {
227
  return [];
src/Tribe/Organizer.php CHANGED
@@ -640,7 +640,12 @@ class Tribe__Events__Organizer extends Tribe__Events__Linked_Posts__Base {
640
  }
641
 
642
  return static function () use ( $event ) {
643
- $organizer_ids = array_map( 'absint', (array) get_post_meta( $event, '_EventOrganizerID' ) );
 
 
 
 
 
644
 
645
  $organizers = ! empty( $organizer_ids )
646
  ? array_map( 'tribe_get_organizer', $organizer_ids )
640
  }
641
 
642
  return static function () use ( $event ) {
643
+ $organizer_ids = array_filter(
644
+ array_map(
645
+ 'absint',
646
+ (array) get_post_meta( $event, '_EventOrganizerID' )
647
+ )
648
+ );
649
 
650
  $organizers = ! empty( $organizer_ids )
651
  ? array_map( 'tribe_get_organizer', $organizer_ids )
src/Tribe/Plugin_Register.php CHANGED
@@ -6,11 +6,11 @@ class Tribe__Events__Plugin_Register extends Tribe__Abstract_Plugin_Register {
6
  protected $main_class = 'Tribe__Events__Main';
7
  protected $dependencies = array(
8
  'addon-dependencies' => array(
9
- 'Tribe__Events__Pro__Main' => '4.7.3-dev',
10
- 'Tribe__Events__Filterbar__View' => '4.8.0-dev',
11
  'Tribe__Events__Tickets__Eventbrite__Main' => '4.6-dev',
12
  'Tribe__Events__Community__Main' => '4.6-dev',
13
- 'Tribe__Events__Community__Tickets__Main' => '4.6-dev',
14
  ),
15
  );
16
 
6
  protected $main_class = 'Tribe__Events__Main';
7
  protected $dependencies = array(
8
  'addon-dependencies' => array(
9
+ 'Tribe__Events__Pro__Main' => '5.0.0-dev',
10
+ 'Tribe__Events__Filterbar__View' => '4.9.0-dev',
11
  'Tribe__Events__Tickets__Eventbrite__Main' => '4.6-dev',
12
  'Tribe__Events__Community__Main' => '4.6-dev',
13
+ 'Tribe__Events__Community__Tickets__Main' => '4.7.2-dev',
14
  ),
15
  );
16
 
src/Tribe/REST/V1/Post_Repository.php CHANGED
@@ -104,7 +104,6 @@ class Tribe__Events__REST__V1__Post_Repository implements Tribe__Events__REST__I
104
  'date_utc' => $event->post_date_gmt,
105
  'modified' => $event->post_modified,
106
  'modified_utc' => $event->post_modified_gmt,
107
- 'status' => $event->post_status,
108
  'url' => get_the_permalink( $event_id ),
109
  'rest_url' => tribe_events_rest_url( 'events/' . $event_id ),
110
  'title' => trim( apply_filters( 'the_title', $event->post_title, $event_id ) ),
104
  'date_utc' => $event->post_date_gmt,
105
  'modified' => $event->post_modified,
106
  'modified_utc' => $event->post_modified_gmt,
 
107
  'url' => get_the_permalink( $event_id ),
108
  'rest_url' => tribe_events_rest_url( 'events/' . $event_id ),
109
  'title' => trim( apply_filters( 'the_title', $event->post_title, $event_id ) ),
src/Tribe/Repositories/Event.php CHANGED
@@ -1486,6 +1486,10 @@ class Tribe__Events__Repositories__Event extends Tribe__Repository {
1486
  case $timestamp_key:
1487
  $this->filter_query->orderby( [ $timestamp_key => $default_order ], null, null, $after );
1488
  break;
 
 
 
 
1489
  default:
1490
  $after = $after || 1 === $loop;
1491
  if ( empty( $this->query_args['orderby'] ) ) {
1486
  case $timestamp_key:
1487
  $this->filter_query->orderby( [ $timestamp_key => $default_order ], null, null, $after );
1488
  break;
1489
+ case '__none':
1490
+ unset( $this->query_args['orderby'] );
1491
+ unset( $this->query_args['order'] );
1492
+ break;
1493
  default:
1494
  $after = $after || 1 === $loop;
1495
  if ( empty( $this->query_args['orderby'] ) ) {
src/Tribe/Rewrite.php CHANGED
@@ -436,7 +436,7 @@ class Tribe__Events__Rewrite extends Tribe__Rewrite {
436
  * {@inheritDoc}
437
  */
438
  protected function get_matcher_to_query_var_map() {
439
- $matchers = [
440
  'month' => 'eventDisplay',
441
  'list' => 'eventDisplay',
442
  'today' => 'eventDisplay',
@@ -456,9 +456,9 @@ class Tribe__Events__Rewrite extends Tribe__Rewrite {
456
  * @param array array of the current matchers for query vars.
457
  * @param self $rewrite
458
  */
459
- $matchers = apply_filters( 'tribe_events_rewrite_matchers_to_query_vars_map', $matchers, $this );
460
 
461
- return $matchers;
462
  }
463
 
464
  /**
@@ -530,7 +530,7 @@ class Tribe__Events__Rewrite extends Tribe__Rewrite {
530
  }
531
 
532
  /**
533
- * Overrides the base method, from commmon, to filter the parsed query variables and handle some cases related to
534
  * the `eventDisplay` query variable.
535
  *
536
  * {@inheritDoc}
436
  * {@inheritDoc}
437
  */
438
  protected function get_matcher_to_query_var_map() {
439
+ $map = [
440
  'month' => 'eventDisplay',
441
  'list' => 'eventDisplay',
442
  'today' => 'eventDisplay',
456
  * @param array array of the current matchers for query vars.
457
  * @param self $rewrite
458
  */
459
+ $map = apply_filters( 'tribe_events_rewrite_matchers_to_query_vars_map', $map, $this );
460
 
461
+ return $map;
462
  }
463
 
464
  /**
530
  }
531
 
532
  /**
533
+ * Overrides the base method, from common, to filter the parsed query variables and handle some cases related to
534
  * the `eventDisplay` query variable.
535
  *
536
  * {@inheritDoc}
src/Tribe/Service_Providers/Context.php CHANGED
@@ -179,8 +179,23 @@ class Context extends \tad_DI52_ServiceProvider {
179
  */
180
  'read' => [
181
  Tribe__Context::REQUEST_VAR => [ 'view', 'tribe_view', 'tribe_event_display', 'eventDisplay' ],
182
- Tribe__Context::WP_PARSED => [ 'eventDisplay' ],
183
- Tribe__Context::QUERY_VAR => 'eventDisplay',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  ],
185
  ],
186
  'keyword' => [
@@ -317,6 +332,14 @@ class Context extends \tad_DI52_ServiceProvider {
317
  ],
318
  ],
319
  ],
 
 
 
 
 
 
 
 
320
  ]
321
  );
322
 
179
  */
180
  'read' => [
181
  Tribe__Context::REQUEST_VAR => [ 'view', 'tribe_view', 'tribe_event_display', 'eventDisplay' ],
182
+ Tribe__Context::WP_PARSED => [ 'eventDisplay', 'tribe_event_display' ],
183
+ Tribe__Context::QUERY_VAR => [ 'eventDisplay', 'tribe_event_display' ],
184
+ ],
185
+ ],
186
+ 'tribe_event_display' => [
187
+ /**
188
+ * On V1 we depend on `tribe_event_display` to handle Plain permalink usage of `past` events.
189
+ * The context need to be aware of where to read and write this from.
190
+ */
191
+ 'read' => [
192
+ Tribe__Context::REQUEST_VAR => [ 'tribe_event_display' ],
193
+ Tribe__Context::WP_PARSED => [ 'tribe_event_display' ],
194
+ Tribe__Context::QUERY_VAR => [ 'tribe_event_display' ],
195
+ ],
196
+ 'write' => [
197
+ Tribe__Context::REQUEST_VAR => [ 'tribe_event_display', 'event_display_mode' ],
198
+ Tribe__Context::QUERY_VAR => [ 'tribe_event_display' ],
199
  ],
200
  ],
201
  'keyword' => [
332
  ],
333
  ],
334
  ],
335
+ 'view_request' => [
336
+ 'read' => [
337
+ Tribe__Context::WP_MATCHED_QUERY => [ 'eventDisplay' ],
338
+ Tribe__Context::WP_PARSED => [ 'eventDisplay' ],
339
+ Tribe__Context::REQUEST_VAR => [ 'view', 'tribe_view', 'tribe_event_display', 'eventDisplay' ],
340
+ Tribe__Context::QUERY_VAR => [ 'tribe_view', 'eventDisplay' ],
341
+ ],
342
+ ],
343
  ]
344
  );
345
 
src/Tribe/Template_Factory.php CHANGED
@@ -408,10 +408,15 @@ class Tribe__Events__Template_Factory extends Tribe__Template_Factory {
408
  add_filter( 'tribe_events_recurrence_tooltip', '__return_false' );
409
  add_filter( 'tribe_event_meta_venue_name', '__return_empty_string' );
410
  add_filter( 'tribe_event_meta_venue_address', '__return_empty_string' );
 
411
  add_filter( 'tribe_event_featured_image', '__return_empty_string' );
412
  add_filter( 'tribe_get_venue', '__return_empty_string' );
413
  add_filter( 'tribe_get_cost', '__return_empty_string' );
414
 
 
 
 
 
415
  if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
416
  add_filter( 'the_title', '__return_empty_string' );
417
  add_filter( 'tribe_get_template_part_templates', '__return_empty_array' );
@@ -425,6 +430,10 @@ class Tribe__Events__Template_Factory extends Tribe__Template_Factory {
425
  remove_filter( 'tribe_get_venue', '__return_empty_string' );
426
  remove_filter( 'tribe_get_cost', '__return_empty_string' );
427
 
 
 
 
 
428
  if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
429
  remove_filter( 'the_title', '__return_empty_string' );
430
  remove_filter( 'tribe_get_template_part_templates', '__return_empty_array' );
@@ -567,4 +576,36 @@ class Tribe__Events__Template_Factory extends Tribe__Template_Factory {
567
  'meta_after' => '',
568
  ) );
569
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
  }
408
  add_filter( 'tribe_events_recurrence_tooltip', '__return_false' );
409
  add_filter( 'tribe_event_meta_venue_name', '__return_empty_string' );
410
  add_filter( 'tribe_event_meta_venue_address', '__return_empty_string' );
411
+ add_filter( 'tribe_get_full_address', '__return_empty_string' );
412
  add_filter( 'tribe_event_featured_image', '__return_empty_string' );
413
  add_filter( 'tribe_get_venue', '__return_empty_string' );
414
  add_filter( 'tribe_get_cost', '__return_empty_string' );
415
 
416
+ if ( wp_doing_ajax() ) {
417
+ add_filter( 'the_title', [ $this, 'filter_get_the_title' ], 10, 2 );
418
+ }
419
+
420
  if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
421
  add_filter( 'the_title', '__return_empty_string' );
422
  add_filter( 'tribe_get_template_part_templates', '__return_empty_array' );
430
  remove_filter( 'tribe_get_venue', '__return_empty_string' );
431
  remove_filter( 'tribe_get_cost', '__return_empty_string' );
432
 
433
+ if ( wp_doing_ajax() ) {
434
+ remove_filter( 'the_title', [ $this, 'filter_get_the_title' ], 10 );
435
+ }
436
+
437
  if ( is_singular( Tribe__Events__Main::POSTTYPE ) ) {
438
  remove_filter( 'the_title', '__return_empty_string' );
439
  remove_filter( 'tribe_get_template_part_templates', '__return_empty_array' );
576
  'meta_after' => '',
577
  ) );
578
  }
579
+
580
+ /**
581
+ * Filters the post title as WordPress does in `get_the_title` to apply the password-protected prefix in
582
+ * the context of AJAX requests.
583
+ *
584
+ * @since 5.0.0
585
+ *
586
+ * @param string $title The post title.
587
+ * @param int|WP_Post $post_id The post ID, or object, to apply the filter for.
588
+ *
589
+ * @return string The filtered post title.
590
+ */
591
+ public function filter_get_the_title( $title, $post_id = 0 ) {
592
+ $post = get_post( $post_id );
593
+
594
+ if ( ! $post instanceof WP_Post ) {
595
+ return $title;
596
+ }
597
+
598
+ if ( ! empty( $post->post_password ) ) {
599
+ /* translators: %s: Protected post title. */
600
+ $prepend = __( 'Protected: %s' );
601
+
602
+ /**
603
+ * @see get_the_title() for the original filter documentation.
604
+ */
605
+ $protected_title_format = apply_filters( 'protected_title_format', $prepend, $post );
606
+ $title = sprintf( $protected_title_format, $title );
607
+ }
608
+
609
+ return $title;
610
+ }
611
  }
src/Tribe/Timezones.php CHANGED
@@ -131,6 +131,16 @@ class Tribe__Events__Timezones extends Tribe__Timezones {
131
  * @return int
132
  */
133
  protected static function get_event_timestamp( $event_id, $type = 'Start', $timezone = null ) {
 
 
 
 
 
 
 
 
 
 
134
  $event = get_post( Tribe__Events__Main::postIdHelper( $event_id ) );
135
  $event_tz = get_post_meta( $event->ID, '_EventTimezone', true );
136
  $site_tz = self::wp_timezone_string();
@@ -151,7 +161,7 @@ class Tribe__Events__Timezones extends Tribe__Timezones {
151
  if ( $use_event_tz || ( $use_site_tz && $site_zone_is_event_zone ) ) {
152
  $datetime = get_post_meta( $event->ID, "_Event{$type}Date", true );
153
 
154
- return strtotime( $datetime );
155
  }
156
 
157
  // Otherwise lets load the event's UTC time and convert it
@@ -164,7 +174,11 @@ class Tribe__Events__Timezones extends Tribe__Timezones {
164
  : $timezone;
165
 
166
  $localized = self::to_tz( $datetime, $tzstring );
167
- return strtotime( $localized );
 
 
 
 
168
  }
169
 
170
 
131
  * @return int
132
  */
133
  protected static function get_event_timestamp( $event_id, $type = 'Start', $timezone = null ) {
134
+ static $cache_var_name = __METHOD__;
135
+
136
+ $timestamps = tribe_get_var( $cache_var_name, [] );
137
+
138
+ $cache_key = "{$event_id}:{$type}:{$timezone}";
139
+
140
+ if ( isset( $timestamps[ $cache_key ] ) ) {
141
+ return $timestamps[ $cache_key ];
142
+ }
143
+
144
  $event = get_post( Tribe__Events__Main::postIdHelper( $event_id ) );
145
  $event_tz = get_post_meta( $event->ID, '_EventTimezone', true );
146
  $site_tz = self::wp_timezone_string();
161
  if ( $use_event_tz || ( $use_site_tz && $site_zone_is_event_zone ) ) {
162
  $datetime = get_post_meta( $event->ID, "_Event{$type}Date", true );
163
 
164
+ return $timestamps[ $cache_key ] = strtotime( $datetime );
165
  }
166
 
167
  // Otherwise lets load the event's UTC time and convert it
174
  : $timezone;
175
 
176
  $localized = self::to_tz( $datetime, $tzstring );
177
+ $timestamps[ $cache_key ] = strtotime( $localized );
178
+
179
+ tribe_set_var( $cache_var_name, $timestamps );
180
+
181
+ return $timestamps[ $cache_key ];
182
  }
183
 
184
 
src/Tribe/Venue.php CHANGED
@@ -698,7 +698,12 @@ class Tribe__Events__Venue extends Tribe__Events__Linked_Posts__Base {
698
  }
699
 
700
  return static function () use ( $event ) {
701
- $venue_ids = array_map( 'absint', (array) get_post_meta( $event, '_EventVenueID' ) );
 
 
 
 
 
702
 
703
  $venues = ! empty( $venue_ids )
704
  ? array_map( 'tribe_get_venue_object', $venue_ids )
698
  }
699
 
700
  return static function () use ( $event ) {
701
+ $venue_ids = array_filter(
702
+ array_map(
703
+ 'absint',
704
+ (array) get_post_meta( $event, '_EventVenueID' )
705
+ )
706
+ );
707
 
708
  $venues = ! empty( $venue_ids )
709
  ? array_map( 'tribe_get_venue_object', $venue_ids )
src/Tribe/Views/V2/Assets.php CHANGED
@@ -12,6 +12,7 @@
12
  namespace Tribe\Events\Views\V2;
13
 
14
  use Tribe__Events__Main as Plugin;
 
15
 
16
  /**
17
  * Register
@@ -147,6 +148,7 @@ class Assets extends \tad_DI52_ServiceProvider {
147
  [
148
  'jquery',
149
  'tribe-common',
 
150
  ],
151
  null,
152
  [
@@ -261,6 +263,7 @@ class Assets extends \tad_DI52_ServiceProvider {
261
  [
262
  'jquery',
263
  'tribe-common',
 
264
  'tribe-events-views-v2-accordion',
265
  ],
266
  null,
@@ -297,6 +300,43 @@ class Assets extends \tad_DI52_ServiceProvider {
297
  'priority' => 10,
298
  ]
299
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  }
301
 
302
  /**
12
  namespace Tribe\Events\Views\V2;
13
 
14
  use Tribe__Events__Main as Plugin;
15
+ use Tribe__Events__Templates;
16
 
17
  /**
18
  * Register
148
  [
149
  'jquery',
150
  'tribe-common',
151
+ 'tribe-events-views-v2-breakpoints',
152
  ],
153
  null,
154
  [
263
  [
264
  'jquery',
265
  'tribe-common',
266
+ 'tribe-events-views-v2-viewport',
267
  'tribe-events-views-v2-accordion',
268
  ],
269
  null,
300
  'priority' => 10,
301
  ]
302
  );
303
+
304
+ tribe_asset(
305
+ $plugin,
306
+ 'tribe-events-views-v2-breakpoints',
307
+ 'views/breakpoints.js',
308
+ [
309
+ 'jquery',
310
+ 'tribe-common',
311
+ ],
312
+ 'wp_enqueue_scripts',
313
+ [
314
+ 'priority' => 10,
315
+ 'conditionals' => [ $this, 'should_enqueue_frontend' ],
316
+ 'groups' => [ static::$group_key ],
317
+ 'in_footer' => false,
318
+ ]
319
+ );
320
+
321
+ $overrides_stylesheet = Tribe__Events__Templates::locate_stylesheet( 'tribe-events/tribe-events.css' );
322
+
323
+ if ( ! empty( $overrides_stylesheet ) ) {
324
+ tribe_asset(
325
+ $plugin,
326
+ 'tribe-events-views-v2-override-style',
327
+ $overrides_stylesheet,
328
+ [
329
+ 'tribe-common-full-style',
330
+ 'tribe-events-views-v2-skeleton',
331
+ ],
332
+ 'wp_enqueue_scripts',
333
+ [
334
+ 'priority' => 10,
335
+ 'conditionals' => [ $this, 'should_enqueue_frontend' ],
336
+ 'groups' => [ static::$group_key ],
337
+ ]
338
+ );
339
+ }
340
  }
341
 
342
  /**
src/Tribe/Views/V2/Hooks.php CHANGED
@@ -19,11 +19,12 @@ namespace Tribe\Events\Views\V2;
19
 
20
  use Tribe\Events\Views\V2\Query\Abstract_Query_Controller;
21
  use Tribe\Events\Views\V2\Query\Event_Query_Controller;
22
- use Tribe\Events\Views\V2\Repository\Caching_Set_Decorator;
23
  use Tribe\Events\Views\V2\Repository\Event_Period;
24
  use Tribe\Events\Views\V2\Template\Title;
25
  use Tribe__Events__Main as TEC;
26
- use Tribe__Rewrite as Rewrite;
 
 
27
 
28
  /**
29
  * Class Hooks
@@ -58,6 +59,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
58
  add_action( 'wp_enqueue_scripts', [ $this, 'action_disable_assets_v1' ], 0 );
59
  add_action( 'tribe_events_pro_shortcode_tribe_events_after_assets', [ $this, 'action_disable_shortcode_assets_v1' ] );
60
  add_action( 'updated_option', [ $this, 'action_save_wplang' ], 10, 3 );
 
61
  }
62
 
63
  /**
@@ -66,8 +68,8 @@ class Hooks extends \tad_DI52_ServiceProvider {
66
  * @since 4.9.2
67
  */
68
  protected function add_filters() {
69
- add_filter( 'wp_redirect', [ $this, 'filter_prevent_canonical_embed_redirect' ] );
70
- add_filter( 'redirect_canonical', [ $this, 'filter_prevent_canonical_embed_redirect' ] );
71
  add_action( 'tribe_events_parse_query', [ $this, 'parse_query' ] );
72
  add_filter( 'template_include', [ $this, 'filter_template_include' ], 50 );
73
  add_filter( 'embed_template', [ $this, 'filter_template_include' ], 50 );
@@ -84,10 +86,14 @@ class Hooks extends \tad_DI52_ServiceProvider {
84
  add_filter( 'tribe_events_event_repository_map', [ $this, 'add_period_repository' ], 10, 3 );
85
 
86
  add_filter( 'tribe_general_settings_tab_fields', [ $this, 'filter_general_settings_tab_live_update' ], 20 );
 
 
 
87
 
88
  if ( tribe_context()->doing_php_initial_state() ) {
89
  add_filter( 'wp_title', [ $this, 'filter_wp_title' ], 10, 2 );
90
  add_filter( 'document_title_parts', [ $this, 'filter_document_title_parts' ] );
 
91
  }
92
  }
93
 
@@ -159,7 +165,7 @@ class Hooks extends \tad_DI52_ServiceProvider {
159
  *
160
  * @param \Tribe__Events__Rewrite $rewrite An instance of the Tribe rewrite abstraction.
161
  */
162
- public function on_tribe_events_pre_rewrite( Rewrite $rewrite ) {
163
  $this->container->make( Kitchen_Sink::class )->generate_rules( $rewrite );
164
  }
165
 
@@ -297,13 +303,33 @@ class Hooks extends \tad_DI52_ServiceProvider {
297
  * @return string The modified page title, if required.
298
  */
299
  public function filter_wp_title( $title, $sep = null ) {
300
- if ( ! $this->container->make( Template_Bootstrap::class )->should_load() ) {
 
301
  return $title;
302
  }
303
 
304
  return $this->container->make( Title::class )->filter_wp_title( $title, $sep );
305
  }
306
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
  /**
308
  * Filters the `wp_get_document_title` template tag.
309
  *
@@ -316,10 +342,12 @@ class Hooks extends \tad_DI52_ServiceProvider {
316
  * @return string The modified page title, if required.
317
  */
318
  public function filter_document_title_parts( $title ) {
319
- if ( ! $this->container->make( Template_Bootstrap::class )->should_load() ) {
 
320
  return $title;
321
  }
322
 
 
323
  return $this->container->make( Title::class )->filter_document_title_parts( $title );
324
  }
325
 
@@ -376,15 +404,40 @@ class Hooks extends \tad_DI52_ServiceProvider {
376
  *
377
  * @return string A redirection URL, or `false` to prevent redirection.
378
  */
379
- public function filter_prevent_canonical_embed_redirect( $redirect_url = null ) {
 
 
 
 
380
  $context = tribe_context();
381
 
382
- // Any other URL we bail with the URL return.
383
- if ( 'embed' !== $context->get( 'view' ) ) {
 
 
 
 
 
 
 
384
  return $redirect_url;
385
  }
386
 
387
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  }
389
 
390
  /**
@@ -401,11 +454,6 @@ class Hooks extends \tad_DI52_ServiceProvider {
401
  return $fields;
402
  }
403
 
404
- $disable_bar = tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) );
405
- if ( $disable_bar ) {
406
- return $fields;
407
- }
408
-
409
  $fields['liveFiltersUpdate']['tooltip'] .= '<br/>' . esc_html__( 'Recommended for all sites using the updated calendar views.', 'the-events-calendar' );
410
 
411
  return $fields;
@@ -485,4 +533,72 @@ class Hooks extends \tad_DI52_ServiceProvider {
485
  // And `flush_rewrite_rules()` doesn't take effect.
486
  delete_option( 'rewrite_rules' );
487
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
  }
19
 
20
  use Tribe\Events\Views\V2\Query\Abstract_Query_Controller;
21
  use Tribe\Events\Views\V2\Query\Event_Query_Controller;
 
22
  use Tribe\Events\Views\V2\Repository\Event_Period;
23
  use Tribe\Events\Views\V2\Template\Title;
24
  use Tribe__Events__Main as TEC;
25
+ use Tribe__Rewrite as TEC_Rewrite;
26
+ use Tribe__Utils__Array as Arr;
27
+ use Tribe__Date_Utils as Dates;
28
 
29
  /**
30
  * Class Hooks
59
  add_action( 'wp_enqueue_scripts', [ $this, 'action_disable_assets_v1' ], 0 );
60
  add_action( 'tribe_events_pro_shortcode_tribe_events_after_assets', [ $this, 'action_disable_shortcode_assets_v1' ] );
61
  add_action( 'updated_option', [ $this, 'action_save_wplang' ], 10, 3 );
62
+ add_action( 'the_post', [ $this, 'manage_sensitive_info' ] );
63
  }
64
 
65
  /**
68
  * @since 4.9.2
69
  */
70
  protected function add_filters() {
71
+ add_filter( 'wp_redirect', [ $this, 'filter_redirect_canonical' ], 10, 2 );
72
+ add_filter( 'redirect_canonical', [ $this, 'filter_redirect_canonical' ], 10, 2 );
73
  add_action( 'tribe_events_parse_query', [ $this, 'parse_query' ] );
74
  add_filter( 'template_include', [ $this, 'filter_template_include' ], 50 );
75
  add_filter( 'embed_template', [ $this, 'filter_template_include' ], 50 );
86
  add_filter( 'tribe_events_event_repository_map', [ $this, 'add_period_repository' ], 10, 3 );
87
 
88
  add_filter( 'tribe_general_settings_tab_fields', [ $this, 'filter_general_settings_tab_live_update' ], 20 );
89
+ add_filter( 'tribe_events_rewrite_i18n_slugs_raw', [ $this, 'filter_rewrite_i18n_slugs_raw' ], 50, 2 );
90
+ add_filter( 'tribe_get_event_after', [ $this, 'filter_events_properties' ] );
91
+ add_filter( 'tribe_template_file', [ $this, 'filter_template_file' ], 10, 3 );
92
 
93
  if ( tribe_context()->doing_php_initial_state() ) {
94
  add_filter( 'wp_title', [ $this, 'filter_wp_title' ], 10, 2 );
95
  add_filter( 'document_title_parts', [ $this, 'filter_document_title_parts' ] );
96
+ add_filter( 'pre_get_document_title', [ $this, 'pre_get_document_title' ], 20 );
97
  }
98
  }
99
 
165
  *
166
  * @param \Tribe__Events__Rewrite $rewrite An instance of the Tribe rewrite abstraction.
167
  */
168
+ public function on_tribe_events_pre_rewrite( TEC_Rewrite $rewrite ) {
169
  $this->container->make( Kitchen_Sink::class )->generate_rules( $rewrite );
170
  }
171
 
303
  * @return string The modified page title, if required.
304
  */
305
  public function filter_wp_title( $title, $sep = null ) {
306
+ $bootstrap = $this->container->make( Template_Bootstrap::class );
307
+ if ( ! $bootstrap->should_load() || $bootstrap->is_single_event() ) {
308
  return $title;
309
  }
310
 
311
  return $this->container->make( Title::class )->filter_wp_title( $title, $sep );
312
  }
313
 
314
+ /**
315
+ * Filters the `pre_get_document_title` to prevent conflicts when other plugins
316
+ * modify this initial value on our pages.
317
+ *
318
+ * @since 5.0.0
319
+ *
320
+ * @param string $title The current title value.
321
+ *
322
+ * @return string The current title or empty string.
323
+ */
324
+ public function pre_get_document_title( $title ) {
325
+ $bootstrap = $this->container->make( Template_Bootstrap::class );
326
+ if ( ! $bootstrap->should_load() || $bootstrap->is_single_event() ) {
327
+ return $title;
328
+ }
329
+
330
+ return '';
331
+ }
332
+
333
  /**
334
  * Filters the `wp_get_document_title` template tag.
335
  *
342
  * @return string The modified page title, if required.
343
  */
344
  public function filter_document_title_parts( $title ) {
345
+ $bootstrap = $this->container->make( Template_Bootstrap::class );
346
+ if ( ! $bootstrap->should_load() || $bootstrap->is_single_event() ) {
347
  return $title;
348
  }
349
 
350
+
351
  return $this->container->make( Title::class )->filter_document_title_parts( $title );
352
  }
353
 
404
  *
405
  * @return string A redirection URL, or `false` to prevent redirection.
406
  */
407
+ public function filter_redirect_canonical( $redirect_url = null, $original_url = null ) {
408
+ if ( trailingslashit( $original_url ) === trailingslashit( $redirect_url ) ) {
409
+ return $redirect_url;
410
+ }
411
+
412
  $context = tribe_context();
413
 
414
+ $view = $context->get( 'view_request', null );
415
+
416
+ if ( 'embed' === $view ) {
417
+ // Do not redirect embedded Views.
418
+ return false;
419
+ }
420
+
421
+ if ( empty( $view ) || 'single-event' === $view ) {
422
+ // Let the redirection go on.
423
  return $redirect_url;
424
  }
425
 
426
+ $parsed = \Tribe__Events__Rewrite::instance()->parse_request( $redirect_url );
427
+
428
+ if (
429
+ empty( $parsed['tribe_redirected'] )
430
+ && $view !== Arr::get( (array) $parsed, 'eventDisplay' )
431
+ ) {
432
+
433
+ /*
434
+ * If we're here we know we should be looking at a View URL.
435
+ * If the proposed URL does not resolve to a View, do not redirect.
436
+ */
437
+ return false;
438
+ }
439
+
440
+ return $redirect_url;
441
  }
442
 
443
  /**
454
  return $fields;
455
  }
456
 
 
 
 
 
 
457
  $fields['liveFiltersUpdate']['tooltip'] .= '<br/>' . esc_html__( 'Recommended for all sites using the updated calendar views.', 'the-events-calendar' );
458
 
459
  return $fields;
533
  // And `flush_rewrite_rules()` doesn't take effect.
534
  delete_option( 'rewrite_rules' );
535
  }
536
+
537
+ /**
538
+ * Filters rewrite rules to modify and update them for Views V2.
539
+ *
540
+ * @since 5.0.0
541
+ *
542
+ * @param array $bases An array of rewrite bases that have been generated.
543
+ * @param string $method The method that's being used to generate the bases; defaults to `regex`.
544
+ *
545
+ * @return array<string,array> An array of rewrite rules. Modified, if required, to support Views V2.
546
+ */
547
+ public function filter_rewrite_i18n_slugs_raw( $bases, $method ) {
548
+ if ( ! is_array( $bases ) ) {
549
+ return $bases;
550
+ }
551
+
552
+ return $this->container->make( Rewrite::class )->filter_raw_i18n_slugs( $bases, $method );
553
+ }
554
+
555
+ /**
556
+ * Fires to manage sensitive information on password protected posts.
557
+ *
558
+ * @since 5.0.0
559
+ *
560
+ * @param \WP_Post|int $post The event post ID or object currently being decorated.
561
+ */
562
+ public function manage_sensitive_info( $post ) {
563
+ if ( $this->container->make( Template_Bootstrap::class )->is_single_event() ) {
564
+ $this->container->make( Template\Event::class )->manage_sensitive_info( $post );
565
+ }
566
+ }
567
+
568
+ /**
569
+ * Updates and modifies the properties added to the event post object by the `tribe_get_event` function to
570
+ * hide some sensitive information, if required.
571
+ *
572
+ * @since 5.0.0
573
+ *
574
+ * @param \WP_Post $event The event post object, decorated w/ properties added by the `tribe_get_event` function.
575
+ *
576
+ * @return \WP_Post The event post object, decorated w/ properties added by the `tribe_get_event` function, some of
577
+ * them updated to hide sensitive information, if required.
578
+ */
579
+ public function filter_events_properties( $event ) {
580
+ if ( ! $event instanceof \WP_Post ) {
581
+ return $event;
582
+ }
583
+
584
+ return $this->container->make( Template\Event::class )->filter_event_properties( $event );
585
+ }
586
+
587
+ /**
588
+ * Filter the template file in case we're in single event
589
+ * and we need to use the theme overrides.
590
+ *
591
+ * @see tribe_template_file
592
+ *
593
+ * @since 5.0.0
594
+ *
595
+ * @param string $file Complete path to include the PHP File
596
+ * @param array $name Template name
597
+ * @param object $template Instance of the Tribe__Template
598
+ *
599
+ * @return string
600
+ */
601
+ public function filter_template_file( $file, $name, $template ) {
602
+ return $this->container->make( Template_Bootstrap::class )->filter_template_file( $file, $name, $template );
603
+ }
604
  }
src/Tribe/Views/V2/Index.php CHANGED
@@ -22,6 +22,6 @@ class Index extends Template {
22
  * Overrides the base implementation to allow plugins and themes to override the index file.
23
  */
24
  public function __construct() {
25
- parent::__construct( 'index' );
26
  }
27
  }
22
  * Overrides the base implementation to allow plugins and themes to override the index file.
23
  */
24
  public function __construct() {
25
+ parent::__construct( 'default-template' );
26
  }
27
  }
src/Tribe/Views/V2/Kitchen_Sink.php CHANGED
@@ -9,7 +9,6 @@ namespace Tribe\Events\Views\V2;
9
 
10
  use Tribe__Events__Main as Events;
11
  use Tribe__Template as Template;
12
- use Tribe__Events__Rewrite as Rewrite;
13
 
14
  /**
15
  * Class Kitchen_Sink
@@ -71,7 +70,7 @@ class Kitchen_Sink extends Template {
71
  *
72
  * @return void
73
  */
74
- public function generate_rules( Rewrite $rewrite ) {
75
  $args = [
76
  'post_type' => Events::POSTTYPE,
77
  'tribe_events_views_kitchen_sink' => 'page',
9
 
10
  use Tribe__Events__Main as Events;
11
  use Tribe__Template as Template;
 
12
 
13
  /**
14
  * Class Kitchen_Sink
70
  *
71
  * @return void
72
  */
73
+ public function generate_rules( \Tribe__Events__Rewrite $rewrite ) {
74
  $args = [
75
  'post_type' => Events::POSTTYPE,
76
  'tribe_events_views_kitchen_sink' => 'page',
src/Tribe/Views/V2/Manager.php CHANGED
@@ -145,8 +145,7 @@ class Manager {
145
 
146
  $views = array_filter(
147
  $views,
148
- static function ( $view_class, $slug ) use ( $enabled_views )
149
- {
150
  return in_array( $slug, $enabled_views, true )
151
  && (bool) call_user_func( [ $view_class, 'is_publicly_visible' ] );
152
  },
@@ -156,6 +155,30 @@ class Manager {
156
  return $views;
157
  }
158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  /**
160
  * Returns the slug and class of a given view, accepts slug or class.
161
  * Will return false for both in case both fail.
@@ -208,7 +231,7 @@ class Manager {
208
  *
209
  * @since 4.9.4
210
  *
211
- * @param string $slug The view fully qualified class name.
212
  *
213
  * @return string|false The class currently associated to a View slug if it is found, `false` otherwise.
214
  */
@@ -217,4 +240,103 @@ class Manager {
217
 
218
  return Arr::get( $registered_views, $slug, false );
219
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
220
  }
145
 
146
  $views = array_filter(
147
  $views,
148
+ static function ( $view_class, $slug ) use ( $enabled_views ) {
 
149
  return in_array( $slug, $enabled_views, true )
150
  && (bool) call_user_func( [ $view_class, 'is_publicly_visible' ] );
151
  },
155
  return $views;
156
  }
157
 
158
+ /**
159
+ * Returns an array of data of the public views.
160
+ *
161
+ * @since 5.0.0
162
+ *
163
+ * @return array
164
+ */
165
+ public function get_publicly_visible_views_data() {
166
+ $views = $this->get_publicly_visible_views();
167
+
168
+ array_walk(
169
+ $views,
170
+ function ( &$value, $view_slug ) {
171
+ $value = (object) [
172
+ 'view_class' => $value,
173
+ 'view_url' => tribe_events_get_url( array_filter( [ 'eventDisplay' => $view_slug ] ) ),
174
+ 'view_label' => $this->get_view_label_by_slug( $view_slug ),
175
+ ];
176
+ }
177
+ );
178
+
179
+ return $views;
180
+ }
181
+
182
  /**
183
  * Returns the slug and class of a given view, accepts slug or class.
184
  * Will return false for both in case both fail.
231
  *
232
  * @since 4.9.4
233
  *
234
+ * @param string $slug The view slug.
235
  *
236
  * @return string|false The class currently associated to a View slug if it is found, `false` otherwise.
237
  */
240
 
241
  return Arr::get( $registered_views, $slug, false );
242
  }
243
+
244
+ /**
245
+ * Returns the view label based on the fully qualified class name.
246
+ *
247
+ * @since 5.0.0
248
+ *
249
+ * @param string $view_class The view fully qualified class name.
250
+ *
251
+ * @return string|false The label associated with a given View.
252
+ */
253
+ public function get_view_label_by_class( $view_class ) {
254
+ $slug = $this->get_view_slug_by_class( $view_class );
255
+
256
+ if ( ! $slug ) {
257
+ return false;
258
+ }
259
+
260
+ return $this->prepare_view_label( $slug, $view_class );
261
+ }
262
+
263
+ /**
264
+ * Returns the view label based on the view slug.
265
+ *
266
+ * @since 5.0.0
267
+ *
268
+ * @param string $slug The view slug.
269
+ *
270
+ * @return string|false The label associated with a given View.
271
+ */
272
+ public function get_view_label_by_slug( $slug ) {
273
+ $view_class = $this->get_view_class_by_slug( $slug );
274
+
275
+ if ( ! $view_class ) {
276
+ return false;
277
+ }
278
+
279
+ return $this->prepare_view_label( $slug, $view_class );
280
+ }
281
+
282
+ /**
283
+ * Prepare the view Label with filters for the domain and label.
284
+ *
285
+ * @param string $slug The view slug.
286
+ * @param string $view_class The view fully qualified class name.
287
+ *
288
+ * @return string The filtered label associated with a given View.
289
+ */
290
+ protected function prepare_view_label( $slug, $view_class ) {
291
+ $label = ucfirst( $slug );
292
+
293
+ /**
294
+ * Filters the label that will be used on the UI for views listing.
295
+ *
296
+ * @since 5.0.0
297
+ *
298
+ * @param string $domain Text Domain for the View label.
299
+ * @param string $slug Slug of the view we are getting the label for.
300
+ * @param string $view_class Class Name of the view we are getting the label for.
301
+ */
302
+ $domain = apply_filters( 'tribe_events_views_v2_manager_view_label_domain', 'the-events-calendar', $slug, $view_class );
303
+
304
+ /**
305
+ * Filters the label that will be used on the UI for views listing.
306
+ *
307
+ * @since 5.0.0
308
+ *
309
+ * @param string $domain Text Domain for the View label.
310
+ * @param string $view_class Class Name of the view we are getting the label for.
311
+ */
312
+ $domain = apply_filters( "tribe_events_views_v2_manager_{$slug}_view_label_domain", $domain, $view_class );
313
+
314
+ /**
315
+ * Pass by the translation engine, dont remove.
316
+ */
317
+ $label = __( $label, $domain );
318
+
319
+ /**
320
+ * Filters the label that will be used on the UI for views listing.
321
+ *
322
+ * @since 5.0.0
323
+ *
324
+ * @param string $label Label of the Current view.
325
+ * @param string $slug Slug of the view we are getting the label for.
326
+ * @param string $view_class Class Name of the view we are getting the label for.
327
+ */
328
+ $label = apply_filters( 'tribe_events_views_v2_manager_view_label', $label, $slug, $view_class );
329
+
330
+ /**
331
+ * Filters the label that will be used on the UI for views listing.
332
+ *
333
+ * @since 5.0.0
334
+ *
335
+ * @param string $label Label of the Current view.
336
+ * @param string $view_class Class Name of the view we are getting the label for.
337
+ */
338
+ $label = apply_filters( "tribe_events_views_v2_manager_{$slug}_view_label", $label, $view_class );
339
+
340
+ return $label;
341
+ }
342
  }
src/Tribe/Views/V2/Repository/Event_Period.php CHANGED
@@ -707,7 +707,7 @@ class Event_Period implements Core_Read_Interface {
707
  $results = $this->query_for_sets_ending_after_period_start(
708
  $limit,
709
  $start,
710
- array_column( $starting_before_period_end, 'ID' )
711
  );
712
 
713
  if ( empty( $results ) ) {
@@ -715,7 +715,7 @@ class Event_Period implements Core_Read_Interface {
715
  }
716
 
717
  $starting_before_period_end = array_combine(
718
- array_column( $starting_before_period_end, 'ID' ),
719
  $starting_before_period_end
720
  );
721
 
@@ -725,7 +725,7 @@ class Event_Period implements Core_Read_Interface {
725
  }
726
  unset( $result );
727
 
728
- $post_ids = array_column( $results, 'ID' );
729
  $timezone_details = $this->query_for_meta( $limit, '_EventTimezone', $post_ids );
730
  $all_day_details = $this->query_for_meta( $limit, '_EventAllDay', $post_ids, 'LEFT' );
731
 
@@ -925,7 +925,7 @@ class Event_Period implements Core_Read_Interface {
925
 
926
  $results = $this->query_w_limit( $limit, $query, $prepare_args, $post_ids );
927
 
928
- return array_combine( array_column( $results, 'ID' ), $results );
929
  }
930
 
931
  /**
@@ -1222,11 +1222,9 @@ class Event_Period implements Core_Read_Interface {
1222
  /** @var \DateTimeInterface $day */
1223
  foreach ( $period as $day ) {
1224
  $day_string = $day->format( Dates::DBDATEFORMAT );
 
1225
 
1226
- $sets[ $day_string ] = unserialize( $cache->get_transient(
1227
- static::get_cache_key( $day_string . '_set' ),
1228
- $trigger
1229
- ) );
1230
  }
1231
 
1232
  return $sets;
707
  $results = $this->query_for_sets_ending_after_period_start(
708
  $limit,
709
  $start,
710
+ wp_list_pluck( $starting_before_period_end, 'ID' )
711
  );
712
 
713
  if ( empty( $results ) ) {
715
  }
716
 
717
  $starting_before_period_end = array_combine(
718
+ wp_list_pluck( $starting_before_period_end, 'ID' ),
719
  $starting_before_period_end
720
  );
721
 
725
  }
726
  unset( $result );
727
 
728
+ $post_ids = wp_list_pluck( $results, 'ID' );
729
  $timezone_details = $this->query_for_meta( $limit, '_EventTimezone', $post_ids );
730
  $all_day_details = $this->query_for_meta( $limit, '_EventAllDay', $post_ids, 'LEFT' );
731
 
925
 
926
  $results = $this->query_w_limit( $limit, $query, $prepare_args, $post_ids );
927
 
928
+ return array_combine( wp_list_pluck( $results, 'ID' ), $results );
929
  }
930
 
931
  /**
1222
  /** @var \DateTimeInterface $day */
1223
  foreach ( $period as $day ) {
1224
  $day_string = $day->format( Dates::DBDATEFORMAT );
1225
+ $cached = $cache->get_transient( static::get_cache_key( $day_string . '_set' ), $trigger );
1226
 
1227
+ $sets[ $day_string ] = Events_Result_Set::from_value( $cached );
 
 
 
1228
  }
1229
 
1230
  return $sets;
src/Tribe/Views/V2/Repository/Events_Result_Set.php CHANGED
@@ -41,6 +41,64 @@ class Events_Result_Set implements Collection_Interface {
41
  $this->items = $this->normalize_event_results( $event_results );
42
  }
43
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  /**
45
  * Builds a result set from different type of values.
46
  *
@@ -57,20 +115,37 @@ class Events_Result_Set implements Collection_Interface {
57
  }
58
 
59
  if ( is_array( $value ) ) {
60
- try {
61
- return new Events_Result_Set( $value );
62
- } catch ( \Exception $e ) {
63
- return new Events_Result_Set( [] );
64
- }
65
  }
66
 
67
  return new Events_Result_Set( [] );
68
  }
69
 
 
 
 
 
 
 
 
70
  public function count() {
71
  return count( $this->items );
72
  }
73
 
 
 
 
 
 
 
 
 
 
 
74
  public function order_by( $order_by, $order ) {
75
  $order = strtoupper( $order );
76
  if ( ! in_array( $order, [ 'ASC', 'DESC' ], true ) ) {
41
  $this->items = $this->normalize_event_results( $event_results );
42
  }
43
 
44
+ /**
45
+ * Returns whether a string represents a serialized instance of the class or not.
46
+ *
47
+ * @since 5.0.0
48
+ *
49
+ * @param mixed $value The value to test.
50
+ *
51
+ * @return bool Whether the input value is a string representing a serialized instance of the class or not.
52
+ */
53
+ protected static function is_serialized( $value ) {
54
+ if ( ! is_string( $value ) ) {
55
+ return false;
56
+ }
57
+
58
+ $serialized_start = sprintf( 'C:%d:"%s"', strlen( __CLASS__ ), __CLASS__ );
59
+
60
+ return 0 === strpos( $value, $serialized_start );
61
+ }
62
+
63
+ /**
64
+ * Unserializes, with error handling, a result set to return a new instance of this class.
65
+ *
66
+ * @since 5.0.0
67
+ *
68
+ * @param string $value The serialized version of the result set.
69
+ *
70
+ * @return Events_Result_Set The unserialized result set, or an empty result set on failure.
71
+ */
72
+ protected static function from_serialized( $value ) {
73
+ try {
74
+ $set = unserialize( $value );
75
+ if ( false === $set || ! $set instanceof static ) {
76
+ return new Events_Result_Set( [] );
77
+ }
78
+
79
+ return $set;
80
+ } catch ( \Exception $e ) {
81
+ return new Events_Result_Set( [] );
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Builds a set from an array of event results.
87
+ *
88
+ * @since 5.0.0
89
+ *
90
+ * @param array<Event_Result> $event_results An array of event results.
91
+ *
92
+ * @return Events_Result_Set A new set, built from the input Event Results.
93
+ */
94
+ protected static function from_array( $event_results ) {
95
+ try {
96
+ return new Events_Result_Set( $event_results );
97
+ } catch ( \Exception $e ) {
98
+ return new Events_Result_Set( [] );
99
+ }
100
+ }
101
+
102
  /**
103
  * Builds a result set from different type of values.
104
  *
115
  }
116
 
117
  if ( is_array( $value ) ) {
118
+ return self::from_array( $value );
119
+ }
120
+
121
+ if ( self::is_serialized( $value ) ) {
122
+ return self::from_serialized( $value );
123
  }
124
 
125
  return new Events_Result_Set( [] );
126
  }
127
 
128
+ /**
129
+ * Returns the number of Event Results in this set.
130
+ *
131
+ * @since 5.0.0
132
+ *
133
+ * @return int The number of Event Results in this set.
134
+ */
135
  public function count() {
136
  return count( $this->items );
137
  }
138
 
139
+ /**
140
+ * Orders the Event Results by a specified criteria.
141
+ *
142
+ * @since 5.0.0
143
+ *
144
+ * @param string $order_by The key to order the Event Results by, currently supported is only `start_date`.
145
+ * @param string $order The order direction, one of `ASC` or `DESC`.
146
+ *
147
+ * @return $this The current object, for chaining.
148
+ */
149
  public function order_by( $order_by, $order ) {
150
  $order = strtoupper( $order );
151
  if ( ! in_array( $order, [ 'ASC', 'DESC' ], true ) ) {
src/Tribe/Views/V2/Rewrite.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Modifies and updates rewrite rules for Views V2.
4
+ *
5
+ * @since 5.0.0
6
+ *
7
+ * @package Tribe\Events\Views\V2
8
+ */
9
+
10
+ namespace Tribe\Events\Views\V2;
11
+
12
+ /**
13
+ * Class Rewrite
14
+ *
15
+ * @since 5.0.0
16
+ *
17
+ * @package Tribe\Events\Views\V2
18
+ */
19
+ class Rewrite {
20
+
21
+ /**
22
+ * Filters The Events Calendar rewrite rules to fix and update them, if required.
23
+ *
24
+ * @since 5.0.0
25
+ *
26
+ * @param array $bases An array of rewrite bases that have been generated.
27
+ * @param string $method The method that's being used to generate the bases; defaults to `regex`.
28
+ *
29
+ * @return array<string,array> The filtered rewrite rules, updated or modified if required.
30
+ */
31
+ public function filter_raw_i18n_slugs( array $bases, $method ) {
32
+ if ( $method !== 'regex' ) {
33
+ return $bases;
34
+ }
35
+
36
+ $bases = $this->add_url_encoded_slugs( $bases );
37
+
38
+ return $bases;
39
+ }
40
+
41
+ /**
42
+ * Adds the URL encoded version of the slugs to the rewrite rules to ensure rewrites will keep working
43
+ * in localized installations.
44
+ *
45
+ * This method wil "fill-in" wrongly formatted or encoded bases too and order bases so that the `Tribe__Rewrite`
46
+ * URL resolving methods will, preferably, resolve to the "pretty" (non URL-encoded) and human readable version.
47
+ *
48
+ * @since 5.0.0
49
+ *
50
+ * @param array<string,array> $bases The raw bases, as generated by The Events Calendar rewrite handler.
51
+ *
52
+ * @return array<string,array> The rules, updated to include the URL encoded version of the slugs.
53
+ */
54
+ protected function add_url_encoded_slugs( $bases ) {
55
+ array_walk( $bases, function ( array &$base_group ) {
56
+ foreach ( $base_group as $value ) {
57
+ $is_encoded = $this->is_encoded( $value );
58
+
59
+ if ( $is_encoded ) {
60
+ $encoded = strtolower( $value );
61
+ $decoded = urldecode( $value );
62
+ } else {
63
+ $encoded = strtolower( urlencode( $value ) );
64
+ $decoded = $value;
65
+ }
66
+
67
+ if ( $encoded === $decoded ) {
68
+ continue;
69
+ }
70
+
71
+ // Some function expect, or provide, uppercase encoding chars, some don't. Cope w/ both.
72
+ $base_group[] = $decoded;
73
+ $base_group[] = strtoupper( $encoded );
74
+ $base_group[] = $encoded;
75
+ }
76
+
77
+ // Remove duplicates and put the non-encoded strings first.
78
+ $base_group = array_unique( $base_group );
79
+ usort( $base_group, [ $this, 'sort_by_encoding' ] );
80
+ } );
81
+
82
+ return $bases;
83
+ }
84
+
85
+ /**
86
+ * Detects, in a very specific manner, if the string is urlencoded or not.
87
+ *
88
+ * Refrain from moving this into a general-purpose function: this detections system makes a number of assumptions
89
+ * thare are just wrong in other contexts.
90
+ *
91
+ * @since 5.0.0
92
+ *
93
+ * @param strin $string The string to check for encoding.
94
+ *
95
+ * @return bool Whether the strins is encoded or not.
96
+ */
97
+ protected function is_encoded( $string ) {
98
+ // We assume no localized slug will contain the `%` char as a legit translation.
99
+ return false !== strpos( $string, '%' );
100
+ }
101
+
102
+ /**
103
+ * Sorts a set of English, localize, encoded and not encoded slugs trying to put English and "pretty" first.
104
+ *
105
+ * URL encoded versions will be moved down the set, English will be put first, then "pretty" localized versions.
106
+ *
107
+ * @since 5.0.0
108
+ *
109
+ * @param string $a The first localized slug to check.
110
+ * @param $b The second localized slug to check.
111
+ *
112
+ * @return int The check result, `0` if the positions should not change, `-1` or `1` to move `$a` before `$b` or
113
+ * viceversa.
114
+ */
115
+ protected function sort_by_encoding( $a, $b ) {
116
+ $a_is_encoded = $this->is_encoded( $a );
117
+ $b_is_encoded = $this->is_encoded( $b );
118
+
119
+ if ( $a_is_encoded === $b_is_encoded ) {
120
+ return 0;
121
+ }
122
+
123
+ return $a_is_encoded - $b_is_encoded;
124
+ }
125
+ }
src/Tribe/Views/V2/Service_Provider.php CHANGED
@@ -24,10 +24,6 @@ class Service_Provider extends \tad_DI52_ServiceProvider {
24
  require_once tribe( 'tec.main' )->plugin_path . 'src/functions/views/provider.php';
25
 
26
  if ( ! tribe_events_views_v2_is_enabled() ) {
27
-
28
- add_filter( 'tribe_events_show_upgrade_tab', '__return_false' );
29
- add_filter( 'tribe_events_views_v2_should_smart_activate', '__return_false' );
30
-
31
  return;
32
  }
33
 
24
  require_once tribe( 'tec.main' )->plugin_path . 'src/functions/views/provider.php';
25
 
26
  if ( ! tribe_events_views_v2_is_enabled() ) {
 
 
 
 
27
  return;
28
  }
29
 
src/Tribe/Views/V2/Template.php CHANGED
@@ -89,6 +89,7 @@ class Template extends Base_Template {
89
  // Set some defaults on the template.
90
  $this->set( 'view_class', get_class( $view ), false );
91
  $this->set( 'view_slug', $view->get_slug(), false );
 
92
 
93
  // Set which view globally.
94
  $this->set( 'view', $view, false );
@@ -150,6 +151,7 @@ class Template extends Base_Template {
150
 
151
  if ( $this->view instanceof View_Interface ) {
152
  $this->set( 'view_slug', $this->view->get_slug(), false );
 
153
  $this->set( 'view_class', get_class( $this->view ), false );
154
  }
155
 
@@ -207,4 +209,15 @@ class Template extends Base_Template {
207
  public function get_view() {
208
  return $this->view;
209
  }
 
 
 
 
 
 
 
 
 
 
 
210
  }
89
  // Set some defaults on the template.
90
  $this->set( 'view_class', get_class( $view ), false );
91
  $this->set( 'view_slug', $view->get_slug(), false );
92
+ $this->set( 'view_label', $view->get_label(), false );
93
 
94
  // Set which view globally.
95
  $this->set( 'view', $view, false );
151
 
152
  if ( $this->view instanceof View_Interface ) {
153
  $this->set( 'view_slug', $this->view->get_slug(), false );
154
+ $this->set( 'view_label', $this->view->get_label(), false );
155
  $this->set( 'view_class', get_class( $this->view ), false );
156
  }
157
 
209
  public function get_view() {
210
  return $this->view;
211
  }
212
+
213
+ /**
214
+ * Returns the current template context.
215
+ *
216
+ * @since 5.0.0
217
+ *
218
+ * @return \Tribe__Context The template context instance, or the global context if no context is set.
219
+ */
220
+ public function get_context() {
221
+ return $this->context instanceof \Tribe__Context ? $this->context : tribe_context();
222
+ }
223
  }
src/Tribe/Views/V2/Template/Event.php CHANGED
@@ -10,9 +10,38 @@
10
  */
11
  namespace Tribe\Events\Views\V2\Template;
12
 
 
 
13
  use Tribe\Events\Views\V2\View;
 
 
14
 
15
  class Event {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
  /**
17
  * Determines the Path for the PHP file to be used as the main template
18
  * For Page base template setting it will select from theme or child theme
@@ -25,7 +54,132 @@ class Event {
25
  */
26
  public function get_path() {
27
  $fake_view = View::make( 'reflector' );
28
- $path = $fake_view->get_template()->get_template_file( 'index' );
 
29
  return $path;
30
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
10
  */
11
  namespace Tribe\Events\Views\V2\Template;
12
 
13
+ use Tribe\Events\Collections\Lazy_Post_Collection;
14
+ use Tribe\Events\Views\V2\Template_Bootstrap;
15
  use Tribe\Events\Views\V2\View;
16
+ use Tribe\Utils\Lazy_String;
17
+ use Tribe\Utils\Post_Thumbnail;
18
 
19
  class Event {
20
+ /**
21
+ * @var boolean Whether or not we are currently filtering out content due to password protection
22
+ */
23
+ protected $managing_sensitive_info = false;
24
+
25
+ /**
26
+ * The current template bootstrap instance.
27
+ *
28
+ * @since 5.0.0
29
+ *
30
+ * @var Template_Bootstrap
31
+ */
32
+ protected $template_bootstrap;
33
+
34
+ /**
35
+ * Event constructor.
36
+ *
37
+ * @since 5.0.0
38
+ *
39
+ * @param Template_Bootstrap $template_bootstrap The current template bootstrap instance.
40
+ */
41
+ public function __construct( Template_Bootstrap $template_bootstrap ) {
42
+ $this->template_bootstrap = $template_bootstrap;
43
+ }
44
+
45
  /**
46
  * Determines the Path for the PHP file to be used as the main template
47
  * For Page base template setting it will select from theme or child theme
54
  */
55
  public function get_path() {
56
  $fake_view = View::make( 'reflector' );
57
+ $path = $fake_view->get_template()->get_template_file( 'default-template' );
58
+
59
  return $path;
60
  }
61
+
62
+ /**
63
+ * Add/remove filters to hide/show sensitive event info on password protected posts
64
+ *
65
+ * @since 5.0.0
66
+ *
67
+ * @param int|\WP_Post $post The post ID or object to filter.
68
+ **/
69
+ public function manage_sensitive_info( $post ) {
70
+ $password_required = post_password_required( $post );
71
+
72
+ if ( ! $this->managing_sensitive_info && $password_required ) {
73
+ add_filter( 'tribe_events_event_schedule_details', '__return_empty_string' );
74
+ add_filter( 'tribe_events_recurrence_tooltip', '__return_false' );
75
+ add_filter( 'tribe_event_meta_venue_name', '__return_empty_string' );
76
+ add_filter( 'tribe_event_meta_venue_address', '__return_empty_string' );
77
+ add_filter( 'tribe_event_featured_image', '__return_empty_string' );
78
+ add_filter( 'tribe_get_venue', '__return_empty_string' );
79
+ add_filter( 'tribe_get_cost', '__return_empty_string' );
80
+
81
+ if ( tribe_context()->doing_ajax() ) {
82
+ add_filter( 'the_title', [ $this, 'filter_get_the_title' ], 10, 2 );
83
+ }
84
+
85
+ if ( $this->template_bootstrap->is_single_event() ) {
86
+ add_filter( 'the_title', '__return_empty_string' );
87
+ add_filter( 'tribe_get_template_part_templates', '__return_empty_array' );
88
+ }
89
+
90
+ $this->managing_sensitive_info = true;
91
+ } elseif ( $this->managing_sensitive_info && ! $password_required ) {
92
+ remove_filter( 'tribe_events_event_schedule_details', '__return_empty_string' );
93
+ remove_filter( 'tribe_events_recurrence_tooltip', '__return_false' );
94
+ remove_filter( 'tribe_event_meta_venue_name', '__return_empty_string' );
95
+ remove_filter( 'tribe_event_meta_venue_address', '__return_empty_string' );
96
+ remove_filter( 'tribe_event_featured_image', '__return_empty_string' );
97
+ remove_filter( 'tribe_get_venue', '__return_empty_string' );
98
+ remove_filter( 'tribe_get_cost', '__return_empty_string' );
99
+
100
+ if ( tribe_context()->doing_ajax() ) {
101
+ remove_filter( 'the_title', [ $this, 'filter_get_the_title' ], 10 );
102
+ }
103
+
104
+ if ( $this->template_bootstrap->is_single_event() ) {
105
+ remove_filter( 'the_title', '__return_empty_string' );
106
+ remove_filter( 'tribe_get_template_part_templates', '__return_empty_array' );
107
+ }
108
+
109
+ $this->managing_sensitive_info = false;
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Filters the post title as WordPress does in `get_the_title` to apply the password-protected prefix in
115
+ * the context of AJAX requests.
116
+ *
117
+ * @since 5.0.0
118
+ *
119
+ * @param string $title The post title.
120
+ * @param int|\WP_Post $post_id The post ID, or object, to apply the filter for.
121
+ *
122
+ * @return string The filtered post title.
123
+ */
124
+ public function filter_get_the_title( $title, $post_id = 0 ) {
125
+ $post = get_post( $post_id );
126
+
127
+ if ( ! $post instanceof \WP_Post ) {
128
+ return $title;
129
+ }
130
+
131
+ if ( ! empty( $post->post_password ) ) {
132
+ /* translators: %s: Protected post title. */
133
+ $prepend = __( 'Protected: %s' );
134
+
135
+ /**
136
+ * @see get_the_title() for the original filter documentation.
137
+ */
138
+ $protected_title_format = apply_filters( 'protected_title_format', $prepend, $post );
139
+ $title = sprintf( $protected_title_format, $title );
140
+ }
141
+
142
+ return $title;
143
+ }
144
+
145
+ /**
146
+ * Filters and modifies the event WP_Post object returned from the `tribe_get_event` function to hide some
147
+ * sensitive information if required.
148
+ *
149
+ * @since 5.0.0
150
+ *
151
+ * @param \WP_Post $event The event post object, decorated w/ properties added by the `tribe_get_event` function.
152
+ *
153
+ * @return \WP_Post The event post object, decorated w/ properties added by the `tribe_get_event` function, some of
154
+ * them updated to hide sensitive information, if required.
155
+ */
156
+ public function filter_event_properties( \WP_Post $event ) {
157
+ if ( post_password_required( $event ) ) {
158
+ $props = [
159
+ 'start_date',
160
+ 'start_date_utc',
161
+ 'end_date',
162
+ 'end_date_utc',
163
+ 'cost',
164
+ 'recurring',
165
+ 'permalink_all',
166
+ ];
167
+
168
+ foreach ( $props as $prop ) {
169
+ $event->{$prop} = '';
170
+ }
171
+
172
+ foreach ( [ 'venues', 'organizers' ] as $lazy_collection ) {
173
+ $event->{$lazy_collection} = new Lazy_Post_Collection( '__return_empty_array' );
174
+ }
175
+
176
+ foreach ( [ 'plain_schedule_details', 'schedule_details', 'excerpt' ] as $lazy_string ) {
177
+ $event->{$lazy_string} = new Lazy_String( '__return_empty_string' );
178
+ }
179
+
180
+ $event->thumbnail = new Post_Thumbnail( - 1 );
181
+ }
182
+
183
+ return $event;
184
+ }
185
  }
src/Tribe/Views/V2/Template/Excerpt.php CHANGED
@@ -8,9 +8,9 @@
8
  */
9
  namespace Tribe\Events\Views\V2\Template;
10
 
11
- use Tribe__Template as Base_Template;
12
- use Tribe__Events__Main as Plugin;
13
  use Tribe\Events\Views\V2\Hooks;
 
 
14
 
15
  /**
16
  * Class Excerpt
@@ -67,7 +67,10 @@ class Excerpt extends Base_Template {
67
  return $link;
68
  }
69
 
70
- $event = tribe_get_event( get_the_ID() );
 
 
 
71
 
72
  $template = strtolower( get_template() );
73
 
@@ -75,17 +78,17 @@ class Excerpt extends Base_Template {
75
  $should_replace_read_more = $template && 'twentyseventeen' === $template;
76
 
77
  /**
78
- * Detemines the require
79
  *
80
  * @since 4.9.11
81
  *
82
- * @param bool $should_replace_read_more Determines if we need to replace the excerpt read more link
83
- * in a given scenario.
84
- * @param WP_Post $event Event that we are dealing with.
 
85
  */
86
  $should_replace_read_more = apply_filters( 'tribe_events_views_v2_should_replace_excerpt_more_link', $should_replace_read_more, $event );
87
 
88
- // If shouldn't replace we bail.
89
  if ( ! $should_replace_read_more ) {
90
  return $link;
91
  }
@@ -93,4 +96,39 @@ class Excerpt extends Base_Template {
93
  return $this->template( 'components/read-more', [ 'event' => $event ], false );
94
  }
95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
  }
8
  */
9
  namespace Tribe\Events\Views\V2\Template;
10
 
 
 
11
  use Tribe\Events\Views\V2\Hooks;
12
+ use Tribe__Events__Main as Plugin;
13
+ use Tribe__Template as Base_Template;
14
 
15
  /**
16
  * Class Excerpt
67
  return $link;
68
  }
69
 
70
+ // Read the method doc-block to understand why we do this here.
71
+ $event = $this->avoiding_filter_loop( static function () {
72
+ return tribe_get_event( get_the_ID() );
73
+ } );
74
 
75
  $template = strtolower( get_template() );
76
 
78
  $should_replace_read_more = $template && 'twentyseventeen' === $template;
79
 
80
  /**
81
+ * Determines if we need to replace the excerpt read more link in a given scenario or not.
82
  *
83
  * @since 4.9.11
84
  *
85
+ * @param bool $should_replace_read_more Whether we need to replace the excerpt read more link or not.
86
+ * @param \WP_Post $event Event that we are dealing with.
87
+ *
88
+ * @see tribe_get_event() for the format and the properties of the decorated post.
89
  */
90
  $should_replace_read_more = apply_filters( 'tribe_events_views_v2_should_replace_excerpt_more_link', $should_replace_read_more, $event );
91
 
 
92
  if ( ! $should_replace_read_more ) {
93
  return $link;
94
  }
96
  return $this->template( 'components/read-more', [ 'event' => $event ], false );
97
  }
98
 
99
+ /**
100
+ * Handles the infinite loop that could happen when the excerpt filtering fires as a consequence of a
101
+ * `Lazy_String` resolution in the `tribe_get_event` function.
102
+ *
103
+ * To correctly apply the `read-more` template, and account for possible third-parties overrides, we need the
104
+ * result of a call to the `tribe_get_event` function.
105
+ * If object caching is active that function will be fired on `shutdown` and will resolve all of its `Lazy_String`
106
+ * instances.
107
+ * One of those is the one holding the value of the filtered post excerpt.
108
+ * This will cause an infinite loop if not handled.
109
+ *
110
+ * @since 5.0.0
111
+ *
112
+ * @param callable $function The function that should be resolved avoiding a filter infinite loop.
113
+ *
114
+ * @return mixed The result value of the function call.
115
+ */
116
+ protected function avoiding_filter_loop( callable $function ) {
117
+ $hooks = tribe( Hooks::class );
118
+ // As registered in `Tribe\Events\Views\V2\Hooks::action_include_filters_excerpt`.
119
+ $priority = 50;
120
+ $has_filter = has_filter( 'excerpt_more', [ $hooks, 'filter_excerpt_more' ] );
121
+
122
+ if ( $has_filter ) {
123
+ remove_filter( 'excerpt_more', [ $hooks, 'filter_excerpt_more' ], $priority );
124
+ }
125
+
126
+ $result = $function();
127
+
128
+ if ( $has_filter ) {
129
+ add_filter( 'excerpt_more', [ $hooks, 'filter_excerpt_more' ], $priority );
130
+ }
131
+
132
+ return $result;
133
+ }
134
  }
src/Tribe/Views/V2/Template/Page.php CHANGED
@@ -259,6 +259,16 @@ class Page {
259
  public function should_hijack_page_template( \WP_Query $query ) {
260
  $should_hijack = true;
261
 
 
 
 
 
 
 
 
 
 
 
262
  // Dont hijack non-page event based
263
  if ( 'page' !== tribe( Template_Bootstrap::class )->get_template_setting() ) {
264
  $should_hijack = false;
259
  public function should_hijack_page_template( \WP_Query $query ) {
260
  $should_hijack = true;
261
 
262
+ // don't hijack a feed
263
+ if ( is_feed() ) {
264
+ $should_hijack = false;
265
+ }
266
+
267
+ // don't hijack a password protected page
268
+ if ( is_single() && post_password_required() ) {
269
+ $should_hijack = false;
270
+ }
271
+
272
  // Dont hijack non-page event based
273
  if ( 'page' !== tribe( Template_Bootstrap::class )->get_template_setting() ) {
274
  $should_hijack = false;
src/Tribe/Views/V2/Template_Bootstrap.php CHANGED
@@ -11,12 +11,11 @@
11
  namespace Tribe\Events\Views\V2;
12
 
13
  use Tribe__Events__Main as TEC;
14
- use Tribe__Events__Rewrite as Rewrite;
15
  use Tribe__Notices;
 
16
  use Tribe__Utils__Array as Arr;
17
  use WP_Query;
18
- use Tribe__Templates as V1_Templates;
19
- use Tribe__Events__Templates as V1_Event_Templates;
20
 
21
 
22
  /**
@@ -98,8 +97,7 @@ class Template_Bootstrap {
98
  }
99
 
100
  /**
101
- * Detemines wether we are in a Single event page or not,
102
- * base only on global context.
103
  *
104
  * @since 4.9.11
105
  *
@@ -111,9 +109,7 @@ class Template_Bootstrap {
111
  'single-event' === tribe_context()->get( 'view' ),
112
  ];
113
 
114
- $is_single_event = in_array( true, $conditions );
115
-
116
- return $is_single_event;
117
  }
118
 
119
  /**
@@ -129,6 +125,10 @@ class Template_Bootstrap {
129
  }
130
  $setting = $this->get_template_setting();
131
 
 
 
 
 
132
  ob_start();
133
  if ( 'page' === $setting ) {
134
  echo '<main id="tribe-events">';
@@ -178,11 +178,41 @@ class Template_Bootstrap {
178
  $context = tribe_context();
179
  $view_slug = $context->get( 'view' );
180
 
181
- if (
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
  'single-event' === $view_slug
183
  && ! tribe_is_showing_all()
184
  && ! V1_Templates::is_embed()
185
- ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
186
  $html = $this->get_v1_single_event_html();
187
  } elseif ( isset( $query->query_vars['tribe_events_views_kitchen_sink'] ) ) {
188
  $context = [
@@ -231,10 +261,27 @@ class Template_Bootstrap {
231
  $query = tribe_get_global_query_object();
232
  }
233
 
 
 
 
 
 
 
 
 
 
 
 
 
 
234
  if ( ! $query instanceof \WP_Query ) {
235
  return false;
236
  }
237
 
 
 
 
 
238
  /**
239
  * Bail if we are not dealing with an Event, Venue or Organizer main query.
240
  *
@@ -297,4 +344,45 @@ class Template_Bootstrap {
297
 
298
  return $classes;
299
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  }
11
  namespace Tribe\Events\Views\V2;
12
 
13
  use Tribe__Events__Main as TEC;
14
+ use Tribe__Events__Templates as V1_Event_Templates;
15
  use Tribe__Notices;
16
+ use Tribe__Templates as V1_Templates;
17
  use Tribe__Utils__Array as Arr;
18
  use WP_Query;
 
 
19
 
20
 
21
  /**
97
  }
98
 
99
  /**
100
+ * Determines whether we are in a Single event page or not, base only on global context.
 
101
  *
102
  * @since 4.9.11
103
  *
109
  'single-event' === tribe_context()->get( 'view' ),
110
  ];
111
 
112
+ return in_array( true, $conditions, true );
 
 
113
  }
114
 
115
  /**
125
  }
126
  $setting = $this->get_template_setting();
127
 
128
+ // A number of TEC, and third-party, functions, depend on this. Let's fire it.
129
+ global $post;
130
+ do_action( 'the_post', $post );
131
+
132
  ob_start();
133
  if ( 'page' === $setting ) {
134
  echo '<main id="tribe-events">';
178
  $context = tribe_context();
179
  $view_slug = $context->get( 'view' );
180
 
181
+ /**
182
+ * Filters the HTML for the view before we do any other logic around that.
183
+ *
184
+ * @since 5.0.0
185
+ *
186
+ * @param string $pre_html Allow pre-filtering the HTML that we will boostrap.
187
+ * @param string $view_slug The slug of the View that will be built, based on the context.
188
+ * @param \Tribe__Context $context Tribe context used to setup the view.
189
+ * @param \WP_Query $query The current WP Query object.
190
+ */
191
+ $pre_html = apply_filters( 'tribe_events_views_v2_bootstrap_pre_get_view_html', null, $view_slug, $query, $context );
192
+
193
+ if ( null !== $pre_html ) {
194
+ return $pre_html;
195
+ }
196
+
197
+ $should_display_single = (
198
  'single-event' === $view_slug
199
  && ! tribe_is_showing_all()
200
  && ! V1_Templates::is_embed()
201
+ );
202
+
203
+ /**
204
+ * Filters when we display the single for events.
205
+ *
206
+ * @since 5.0.0
207
+ *
208
+ * @param boolean $should_display_single If we are currently going to display single.
209
+ * @param string $view_slug The slug of the View that will be built, based on the context.
210
+ * @param \Tribe__Context $context Tribe context used to setup the view.
211
+ * @param \WP_Query $query The current WP Query object.
212
+ */
213
+ $should_display_single = apply_filters( 'tribe_events_views_v2_bootstrap_should_display_single', $should_display_single, $view_slug, $query, $context );
214
+
215
+ if ( $should_display_single ) {
216
  $html = $this->get_v1_single_event_html();
217
  } elseif ( isset( $query->query_vars['tribe_events_views_kitchen_sink'] ) ) {
218
  $context = [
261
  $query = tribe_get_global_query_object();
262
  }
263
 
264
+ /**
265
+ * Allows filtering if bootstrap should load.
266
+ *
267
+ * @since 5.0.0
268
+ *
269
+ * @param null|boolean $should_load Anything other then null will be returned after casting as bool.
270
+ * @param \WP_Query $query The current WP Query object.
271
+ */
272
+ $should_load = apply_filters( 'tribe_events_views_v2_bootstrap_pre_should_load', null, $query );
273
+ if ( null !== $should_load ) {
274
+ return (bool) $should_load;
275
+ }
276
+
277
  if ( ! $query instanceof \WP_Query ) {
278
  return false;
279
  }
280
 
281
+ if ( is_404() ) {
282
+ return false;
283
+ }
284
+
285
  /**
286
  * Bail if we are not dealing with an Event, Venue or Organizer main query.
287
  *
344
 
345
  return $classes;
346
  }
347
+
348
+ /**
349
+ * Filter the template file in case we're in single event
350
+ * and we need to use the theme overrides.
351
+ *
352
+ * @since 5.0.0
353
+ *
354
+ * @param string $file Complete path to include the PHP File
355
+ * @param array $name Template name
356
+ * @param object $template Instance of the Tribe__Template
357
+ *
358
+ * @return string
359
+ */
360
+ public function filter_template_file( $file, $name, $template ) {
361
+ $template_name = end( $name );
362
+
363
+ // Bail when we dont are not loading 'default-template'.
364
+ if ( 'default-template' !== $template_name ) {
365
+ return $file;
366
+ }
367
+
368
+ if (
369
+ ! is_singular( TEC::POSTTYPE )
370
+ && 'single-event' !== tribe_context()->get( 'view' )
371
+ ) {
372
+ return $file;
373
+ }
374
+
375
+ $theme_file = locate_template( 'tribe-events/default-template.php', false, false );
376
+
377
+ if ( ! $theme_file ) {
378
+ return $file;
379
+ }
380
+
381
+ if ( ! tribe_is_showing_all() && tribe_is_past_event() ) {
382
+ Tribe__Notices::set_notice( 'event-past', sprintf( esc_html__( 'This %s has passed.', 'the-events-calendar' ), tribe_get_event_label_singular_lowercase() ) );
383
+ }
384
+
385
+ return $theme_file;
386
+ }
387
+
388
  }
src/Tribe/Views/V2/Url.php CHANGED
@@ -9,7 +9,7 @@
9
  namespace Tribe\Events\Views\V2;
10
 
11
  use Tribe__Context as Context;
12
- use Tribe__Events__Rewrite as Rewrite;
13
  use Tribe__Utils__Array as Arr;
14
 
15
  /**
@@ -152,7 +152,7 @@ class Url {
152
  */
153
  public function parse_url() {
154
  $this->components = array_merge( static::$default_url_components, parse_url( $this->url ) );
155
- $this->query_args = Rewrite::instance()->parse_request( $this->url );
156
  if ( ! empty( $this->components['query'] ) ) {
157
  parse_str( $this->components['query'], $query_component_args );
158
  $this->query_args = $this->query_overrides_path
9
  namespace Tribe\Events\Views\V2;
10
 
11
  use Tribe__Context as Context;
12
+ use Tribe__Events__Rewrite as TEC_Rewrite;
13
  use Tribe__Utils__Array as Arr;
14
 
15
  /**
152
  */
153
  public function parse_url() {
154
  $this->components = array_merge( static::$default_url_components, parse_url( $this->url ) );
155
+ $this->query_args = TEC_Rewrite::instance()->parse_request( $this->url );
156
  if ( ! empty( $this->components['query'] ) ) {
157
  parse_str( $this->components['query'], $query_component_args );
158
  $this->query_args = $this->query_overrides_path
src/Tribe/Views/V2/Utils/View.php CHANGED
@@ -34,4 +34,24 @@ class View {
34
 
35
  return empty( $found ) || $default === $found ? $default : $found;
36
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
34
 
35
  return empty( $found ) || $default === $found ? $default : $found;
36
  }
37
+
38
+ /**
39
+ * Based on the `permalink_structure` determines which variable the view should read `event_display_mode` for past
40
+ * URL management.
41
+ *
42
+ * @since 5.0.0
43
+ *
44
+ * @return string URL Query Variable Key
45
+ */
46
+ public static function get_past_event_display_key() {
47
+ $event_display_key = 'eventDisplay';
48
+
49
+ // When dealing with "Plain Permalink" we need to move `past` into a separate url argument.
50
+ if ( ! get_option( 'permalink_structure' ) ) {
51
+ $event_display_key = 'tribe_event_display';
52
+ }
53
+
54
+ return $event_display_key;
55
+ }
56
+
57
  }
src/Tribe/Views/V2/View.php CHANGED
@@ -10,15 +10,18 @@ namespace Tribe\Events\Views\V2;
10
 
11
  use Tribe\Events\Views\V2\Template\Settings\Advanced_Display;
12
  use Tribe\Events\Views\V2\Template\Title;
 
 
13
  use Tribe__Container as Container;
14
  use Tribe__Context as Context;
15
  use Tribe__Date_Utils as Dates;
16
  use Tribe__Events__Main as TEC;
17
  use Tribe__Events__Organizer as Organizer;
18
- use Tribe__Events__Rewrite as Rewrite;
19
  use Tribe__Events__Venue as Venue;
20
  use Tribe__Repository__Interface as Repository;
21
  use Tribe__Utils__Array as Arr;
 
22
 
23
  /**
24
  * Class View
@@ -27,10 +30,14 @@ use Tribe__Utils__Array as Arr;
27
  * @since 4.9.2
28
  */
29
  class View implements View_Interface {
 
 
 
 
30
  /**
31
  * An instance of the DI container.
32
  *
33
- * @var \tad_DI52_Container
34
  */
35
  protected static $container;
36
 
@@ -71,7 +78,7 @@ class View implements View_Interface {
71
  *
72
  * This value will be set by the `View::make()` method while building a View instance.
73
  *
74
- * @var \Tribe\Events\Views\V2\Template
75
  */
76
  protected $template;
77
 
@@ -85,7 +92,7 @@ class View implements View_Interface {
85
  /**
86
  * The URL object the View is currently.
87
  *
88
- * @var \Tribe\Events\Views\V2\Url
89
  */
90
  protected $url;
91
 
@@ -127,6 +134,15 @@ class View implements View_Interface {
127
  */
128
  protected $page_key = 'paged';
129
 
 
 
 
 
 
 
 
 
 
130
  /**
131
  * Whether the View instance should manage the URL
132
  *
@@ -170,7 +186,7 @@ class View implements View_Interface {
170
  *
171
  * @since 4.9.13
172
  *
173
- * @var Rewrite
174
  */
175
  protected $rewrite;
176
 
@@ -182,6 +198,15 @@ class View implements View_Interface {
182
  */
183
  protected static $date_in_url = true;
184
 
 
 
 
 
 
 
 
 
 
185
  /**
186
  * View constructor.
187
  *
@@ -191,7 +216,12 @@ class View implements View_Interface {
191
  */
192
  public function __construct( Messages $messages = null ) {
193
  $this->messages = $messages ?: new Messages();
194
- $this->rewrite = Rewrite::instance();
 
 
 
 
 
195
  }
196
 
197
  /**
@@ -206,6 +236,14 @@ class View implements View_Interface {
206
  public static function make_for_rest( \WP_REST_Request $request ) {
207
  // Try to read the slug from the REST request.
208
  $params = $request->get_params();
 
 
 
 
 
 
 
 
209
  $slug = Arr::get( $params, 'view', false );
210
  $url_object = Url::from_url_and_params( Arr::get( $params, 'url' ), $params );
211
 
@@ -255,7 +293,7 @@ class View implements View_Interface {
255
  $slug = Arr::get( $params, 'eventDisplay', tribe_context()->get( 'view', 'default' ) );
256
  }
257
 
258
- $params['event_display_mode'] = Arr::get( $query_args, 'eventDisplay', false );
259
 
260
  if ( ! empty( $slug ) ) {
261
  /**
@@ -271,13 +309,13 @@ class View implements View_Interface {
271
 
272
  // Determine context based on the request parameters.
273
  $do_not_override = [ 'event_display_mode' ];
274
- $not_overrideable_params = array_intersect_key( $params, array_combine( $do_not_override, $do_not_override ) );
275
  $context = tribe_context()
276
  ->alter(
277
  array_merge(
278
  $params,
279
  tribe_context()->translate_sub_locations( $params, \Tribe__Context::REQUEST_VAR ),
280
- $not_overrideable_params
281
  )
282
  );
283
 
@@ -351,9 +389,9 @@ class View implements View_Interface {
351
  *
352
  * @since 4.9.3
353
  *
354
- * @param \Tribe\Events\Views\V2\Template $template The template object for the View.
355
- * @param string $view_slug The current view slug.
356
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
357
  */
358
  $template = apply_filters( 'tribe_events_views_v2_view_template', $template, $view_slug, $instance );
359
 
@@ -362,8 +400,8 @@ class View implements View_Interface {
362
  *
363
  * @since 4.9.3
364
  *
365
- * @param \Tribe\Events\Views\V2\Template $template The template object for the View.
366
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
367
  */
368
  $template = apply_filters( "tribe_events_views_v2_{$view_slug}_view_template", $template, $instance );
369
 
@@ -379,10 +417,10 @@ class View implements View_Interface {
379
  *
380
  * @since 4.9.3
381
  *
382
- * @param \Tribe__Context $view_context The context abstraction object that will be passed to the
383
  * view.
384
- * @param string $view The current view slug.
385
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
386
  */
387
  $view_context = apply_filters( 'tribe_events_views_v2_view_context', $view_context, $view_slug, $instance );
388
 
@@ -391,9 +429,9 @@ class View implements View_Interface {
391
  *
392
  * @since 4.9.3
393
  *
394
- * @param \Tribe__Context $view_context The context abstraction object that will be passed to the
395
  * view.
396
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
397
  */
398
  $view_context = apply_filters( "tribe_events_views_v2_{$view_slug}_view_context", $view_context, $instance );
399
 
@@ -410,7 +448,7 @@ class View implements View_Interface {
410
  *
411
  * @param \Tribe__Repository__Interface $view_repository The repository instance the View will use.
412
  * @param string $view_slug The current view slug.
413
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
414
  */
415
  $view_repository = apply_filters( 'tribe_events_views_v2_view_repository', $view_repository, $view_slug, $instance );
416
 
@@ -420,7 +458,7 @@ class View implements View_Interface {
420
  * @since 4.9.11
421
  *
422
  * @param \Tribe__Repository__Interface $view_repository The repository instance the View will use.
423
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
424
  */
425
  $view_repository = apply_filters( "tribe_events_views_v2_{$view_slug}_view_repository", $view_repository, $instance );
426
 
@@ -431,9 +469,9 @@ class View implements View_Interface {
431
  *
432
  * @since 4.9.11
433
  *
434
- * @param array $query_args Arguments used to build the URL.
435
- * @param string $view_slug The current view slug.
436
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
437
  */
438
  $view_url_query_args = apply_filters( 'tribe_events_views_v2_view_url_query_args', [], $view_slug, $instance );
439
 
@@ -442,8 +480,8 @@ class View implements View_Interface {
442
  *
443
  * @since 4.9.11
444
  *
445
- * @param array $query_args Arguments used to build the URL.
446
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
447
  */
448
  $view_url_query_args = apply_filters( "tribe_events_views_v2_{$view_slug}_view_url_query_args", $view_url_query_args, $instance );
449
 
@@ -454,7 +492,7 @@ class View implements View_Interface {
454
  *
455
  * @since 4.9.11
456
  *
457
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
458
  */
459
  do_action( 'tribe_events_views_v2_after_make_view', $instance );
460
 
@@ -464,7 +502,7 @@ class View implements View_Interface {
464
  /**
465
  * Sets the DI container the class should use to build views.
466
  *
467
- * @param \tad_DI52_Container $container The DI container instance to use.
468
  *
469
  * @since 4.9.2
470
  *
@@ -522,8 +560,12 @@ class View implements View_Interface {
522
  */
523
  $this->repository_args = $repository_args;
524
 
 
 
 
 
 
525
  if ( ! tribe_events_view_v2_use_period_repository() ) {
526
- // @todo @bluedevs do we still need this? It's slow and time-consuming!
527
  $this->setup_the_loop( $repository_args );
528
  }
529
 
@@ -535,6 +577,13 @@ class View implements View_Interface {
535
 
536
  $this->restore_the_loop();
537
 
 
 
 
 
 
 
 
538
  return $html;
539
  }
540
 
@@ -542,34 +591,7 @@ class View implements View_Interface {
542
  * {@inheritDoc}
543
  */
544
  public function get_label() {
545
- $label = ucfirst( $this->slug );
546
-
547
- /**
548
- * Pass by the translation engine, dont remove.
549
- */
550
- $label = __( $label, 'the-events-calendar' );
551
-
552
- /**
553
- * Filters the label that will be used on the UI for views listing.
554
- *
555
- * @since 4.9.4
556
- *
557
- * @param string $label Label of the Current view.
558
- * @param View_Interface $view The current view whose template variables are being set.
559
- */
560
- $label = apply_filters( 'tribe_events_views_v2_view_label', $label, $this );
561
-
562
- /**
563
- * Filters the label that will be used on the UI for views listing.
564
- *
565
- * @since 4.9.4
566
- *
567
- * @param string $label Label of the Current view.
568
- * @param View_Interface $view The current view whose template variables are being set.
569
- */
570
- $label = apply_filters( "tribe_events_views_v2_view_{$this->slug}_label", $label, $this );
571
-
572
- return $label;
573
  }
574
 
575
  /**
@@ -622,23 +644,23 @@ class View implements View_Interface {
622
  $html_classes = array_merge( $base_classes, $parents, $classes );
623
 
624
  /**
625
- * Filters the query arguments array for a View URL.
626
  *
627
  * @since 4.9.13
628
  *
629
- * @param array $html_classes Array of classes used for this view.
630
- * @param string $view_slug The current view slug.
631
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
632
  */
633
  $html_classes = apply_filters( 'tribe_events_views_v2_view_html_classes', $html_classes, $this->get_slug(), $this );
634
 
635
  /**
636
- * Filters the query arguments array for a specific View URL.
637
  *
638
  * @since 4.9.13
639
  *
640
- * @param array $html_classes Array of classes used for this view.
641
- * @param \Tribe\Events\Views\V2\View $instance The current View object.
642
  */
643
  $html_classes = apply_filters( "tribe_events_views_v2_{$this->get_slug()}_view_html_classes", $html_classes, $this );
644
 
@@ -684,23 +706,14 @@ class View implements View_Interface {
684
  unset( $query_args['featured'] );
685
  }
686
 
687
- /**
688
- * Filters the query arguments that will be used to build a View URL.
689
- *
690
- * @since 4.9.10
691
- *
692
- * @param array $query_args An array of query args that will be used to build the URL for the View.
693
- * @param View_Interface $this This View instance.
694
- * @param bool $canonical Whether the URL should be the canonical one or not.
695
- */
696
- $query_args = apply_filters( 'tribe_events_views_v2_url_query_args', $query_args, $this, $canonical );
697
 
698
  if ( ! empty( $query_args['tribe-bar-date'] ) ) {
699
  // If the Events Bar date is the same as today's date, then drop it.
700
- $today = $this->context->get( 'today', 'today' );
701
- $url_date_format = $this->get_url_date_format();
702
- $today_date = Dates::build_date_object( $today ) ->format( $url_date_format );
703
- $tribe_bar_date = Dates::build_date_object( $query_args['tribe-bar-date'] ) ->format( $url_date_format );
704
 
705
  if ( static::$date_in_url ) {
706
  if ( $today_date !== $tribe_bar_date ) {
@@ -713,7 +726,10 @@ class View implements View_Interface {
713
  }
714
 
715
  // When we find nothing we're always on page 1.
716
- $page = $this->repository->count() > 0 ? $this->url->get_current_page() : 1;
 
 
 
717
 
718
  if ( $page > 1 ) {
719
  $query_args[ $this->page_key ] = $page;
@@ -726,8 +742,11 @@ class View implements View_Interface {
726
  }
727
 
728
  $event_display_mode = $this->context->get( 'event_display_mode', false );
729
- if ( 'past' === $event_display_mode && $event_display_mode !== $this->context->get( 'eventDisplay' ) ) {
730
- $url = add_query_arg( [ 'eventDisplay' => $event_display_mode ], $url );
 
 
 
731
  }
732
 
733
  $url = $this->filter_view_url( $canonical, $url );
@@ -739,33 +758,54 @@ class View implements View_Interface {
739
  * {@inheritDoc}
740
  */
741
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
742
- $next_page = $this->repository->next();
 
 
743
 
744
  $url = $this->get_url();
745
 
 
 
746
  if ( ! empty( $passthru_vars ) ) {
747
  // Remove the pass-thru vars, we'll re-apply them to the URL later.
748
  $url = remove_query_arg( array_keys( $passthru_vars ), $url );
749
  }
750
 
751
  // Make sure the view slug is always set to correctly match rewrites.
752
- $url = add_query_arg( [ 'eventDisplay' => $this->slug ], $url );
753
 
754
- $url = $next_page->count() > 0 ?
755
- add_query_arg( [ $this->page_key => $this->url->get_current_page() + 1 ], $url )
756
- : '';
757
 
758
- if ( ! empty( $url ) && $canonical ) {
759
- $url = tribe( 'events.rewrite' )->get_clean_url( $url );
760
- }
 
 
 
 
 
 
 
 
 
761
 
762
- if ( ! empty( $passthru_vars ) && ! empty( $url ) ) {
763
- // Re-apply the pass-thru query arguments.
764
- $url = add_query_arg( $passthru_vars, $url );
 
 
 
 
 
 
 
765
  }
766
 
767
  $url = $this->filter_next_url( $canonical, $url );
768
 
 
 
769
  return $url;
770
  }
771
 
@@ -773,9 +813,15 @@ class View implements View_Interface {
773
  * {@inheritDoc}
774
  */
775
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
776
- $prev_page = $this->repository->prev();
777
- $paged = $this->url->get_current_page() - 1;
778
- $query_args = $paged > 1
 
 
 
 
 
 
779
  ? [ $this->page_key => $paged ]
780
  : [];
781
 
@@ -787,28 +833,74 @@ class View implements View_Interface {
787
  }
788
 
789
  // Make sure the view slug is always set to correctly match rewrites.
790
- $url = add_query_arg( [ 'eventDisplay' => $this->slug ], $url );
791
 
792
- $url = $prev_page->count() > 0 ? add_query_arg( $query_args, $url ) : '';
 
793
 
794
- if ( ! empty( $url ) && $paged === 1 ) {
795
- $url = remove_query_arg( $this->page_key, $url );
796
- }
797
 
798
- if ( ! empty( $url ) && $canonical ) {
799
- $url = tribe( 'events.rewrite' )->get_clean_url( $url );
800
- }
 
801
 
802
- if ( ! empty( $passthru_vars ) && ! empty( $url ) ) {
803
- // Re-apply the pass-thru query arguments.
804
- $url = add_query_arg( $passthru_vars, $url );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
805
  }
806
 
807
  $url = $this->filter_prev_url( $canonical, $url );
808
 
 
 
809
  return $url;
810
  }
811
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
812
  /**
813
  * {@inheritDoc}
814
  */
@@ -984,16 +1076,30 @@ class View implements View_Interface {
984
 
985
  $context_arr = $context->to_array();
986
 
 
 
 
 
 
 
 
987
  $args = [
988
- 'posts_per_page' => $context_arr['events_per_page'],
989
  'paged' => max( Arr::get_first_set( array_filter( $context_arr ), [
990
  'paged',
991
  'page',
992
  ], 1 ), 1 ),
993
  'search' => $context->get( 'keyword', '' ),
994
  'hidden_from_upcoming' => false,
 
 
 
 
 
995
  ];
996
 
 
 
997
  // Set's up category URL for all views.
998
  if ( ! empty( $context_arr[ TEC::TAXONOMY ] ) ) {
999
  $args[ TEC::TAXONOMY ] = $context_arr[ TEC::TAXONOMY ];
@@ -1009,6 +1115,33 @@ class View implements View_Interface {
1009
  return $args;
1010
  }
1011
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1012
  /**
1013
  * Filters the current URL returned for a specific View.
1014
  *
@@ -1121,7 +1254,11 @@ class View implements View_Interface {
1121
  * {@inheritDoc}
1122
  */
1123
  public function found_post_ids() {
1124
- return $this->repository->get_ids();
 
 
 
 
1125
  }
1126
 
1127
  /**
@@ -1131,6 +1268,42 @@ class View implements View_Interface {
1131
  return static::$publicly_visible;
1132
  }
1133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1134
  /**
1135
  * Sets up the View template variables.
1136
  *
@@ -1146,13 +1319,29 @@ class View implements View_Interface {
1146
 
1147
  $events = (array) $this->repository->all();
1148
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
  $this->setup_messages( $events );
1150
 
1151
  $today_url = $this->get_today_url( true );
1152
  $today = $this->context->get( 'today', 'today' );
1153
 
1154
  $event_date = $this->context->get( 'event_date', false );
1155
- $url_event_date = false !== $event_date
 
 
1156
  ? Dates::build_date_object( $event_date )->format( Dates::DBDATEFORMAT )
1157
  : false;
1158
 
@@ -1177,10 +1366,11 @@ class View implements View_Interface {
1177
  'prev_label' => $this->get_link_label( $this->prev_url( false ) ),
1178
  'next_label' => $this->get_link_label( $this->next_url( false ) ),
1179
  'date_formats' => (object) [
1180
- 'compact' => Dates::datepicker_formats( tribe_get_option( 'datepickerFormat' ) ),
1181
- 'month_and_year' => tribe_get_date_option( 'monthAndYearFormat', 'F Y' ),
1182
- 'time_range_separator' => tribe_get_date_option( 'timeRangeSeparator', ' - ' ),
1183
- 'date_time_separator' => tribe_get_date_option( 'dateTimeSeparator', ' @ ' ),
 
1184
  ],
1185
  'messages' => $this->get_messages( $events ),
1186
  'start_of_week' => get_option( 'start_of_week', 0 ),
@@ -1192,8 +1382,12 @@ class View implements View_Interface {
1192
  'live_refresh' => tribe_is_truthy( tribe_get_option( 'liveFiltersUpdate', true ) ),
1193
  'ical' => $this->get_ical_data(),
1194
  'container_classes' => $this->get_html_classes(),
 
1195
  'is_past' => 'past' === $this->context->get( 'event_display_mode', false ),
1196
  'show_datepicker_submit' => $this->get_show_datepicker_submit(),
 
 
 
1197
  ];
1198
 
1199
  return $template_vars;
@@ -1293,7 +1487,7 @@ class View implements View_Interface {
1293
  * {@inheritDoc}
1294
  */
1295
  public function get_today_url( $canonical = false ) {
1296
- $to_remove = [ 'tribe-bar-date', 'paged', 'page', 'eventDate' ];
1297
 
1298
  // While we want to remove the date query vars, we want to keep any other query var.
1299
  $query_args = $this->url->get_query_args();
@@ -1301,6 +1495,8 @@ class View implements View_Interface {
1301
  // Handle the `eventDisplay` query arg due to its particular usage to indicate the mode too.
1302
  $query_args['eventDisplay'] = $this->slug;
1303
 
 
 
1304
  $ugly_url = add_query_arg( $query_args, $this->get_url( false ) );
1305
  $ugly_url = remove_query_arg( $to_remove, $ugly_url );
1306
 
@@ -1588,28 +1784,23 @@ class View implements View_Interface {
1588
  protected function get_breadcrumbs() {
1589
  $context = $this->context;
1590
  $breadcrumbs = [];
1591
- $context_tax = $context->get( TEC::TAXONOMY, false );
 
1592
 
1593
  // Get term slug if taxonomy is not empty
1594
  if ( ! empty( $context_tax ) ) {
1595
- $taxonomy = $context->get( 'taxonomy', false );
1596
- $term_slug = $taxonomy ? $context->get( $taxonomy, false ) : false;
1597
-
1598
- // Set up breadcrumbs for category
1599
- if ( ! empty( $term_slug ) ) {
1600
- $term = get_term_by( 'slug', $term_slug, $taxonomy );
1601
- if ( ! empty( $term->name ) ) {
1602
- $label = $term->name;
1603
-
1604
- $breadcrumbs[] = [
1605
- 'link' => $this->get_today_url( true ),
1606
- 'label' => tribe_get_event_label_plural(),
1607
- ];
1608
- $breadcrumbs[] = [
1609
- 'link' => '',
1610
- 'label' => $label,
1611
- ];
1612
- }
1613
  }
1614
  }
1615
 
@@ -1617,10 +1808,13 @@ class View implements View_Interface {
1617
  if ( $is_featured = tribe_is_truthy( $this->context->get( 'featured', false ) ) ) {
1618
  $non_featured_link = tribe_events_get_url( [ 'featured' => 0 ] );
1619
 
1620
- $breadcrumbs[] = [
1621
- 'link' => $non_featured_link,
1622
- 'label' => tribe_get_event_label_plural(),
1623
- ];
 
 
 
1624
  $breadcrumbs[] = [
1625
  'link' => '',
1626
  'label' => esc_html__( 'Featured', 'the-events-calendar' ),
@@ -1755,11 +1949,78 @@ class View implements View_Interface {
1755
  $live_refresh = tribe_is_truthy( tribe_get_option( 'liveFiltersUpdate', true ) );
1756
  $disable_events_bar = tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) );
1757
 
1758
- if ( empty( $live_refresh ) && ! empty( $disable_events_bar ) ) {
1759
- return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1760
  }
1761
 
1762
- return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1763
  }
1764
 
1765
  /**
@@ -1807,4 +2068,36 @@ class View implements View_Interface {
1807
  protected function get_url_date_format() {
1808
  return Dates::DBDATEFORMAT;
1809
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1810
  }
10
 
11
  use Tribe\Events\Views\V2\Template\Settings\Advanced_Display;
12
  use Tribe\Events\Views\V2\Template\Title;
13
+ use Tribe\Events\Views\V2\Views\Traits\Breakpoint_Behavior;
14
+ use Tribe\Events\Views\V2\Views\Traits\HTML_Cache;
15
  use Tribe__Container as Container;
16
  use Tribe__Context as Context;
17
  use Tribe__Date_Utils as Dates;
18
  use Tribe__Events__Main as TEC;
19
  use Tribe__Events__Organizer as Organizer;
20
+ use Tribe__Events__Rewrite as TEC_Rewrite;
21
  use Tribe__Events__Venue as Venue;
22
  use Tribe__Repository__Interface as Repository;
23
  use Tribe__Utils__Array as Arr;
24
+ use Tribe\Events\Views\V2\Utils;
25
 
26
  /**
27
  * Class View
30
  * @since 4.9.2
31
  */
32
  class View implements View_Interface {
33
+
34
+ use Breakpoint_Behavior;
35
+ use HTML_Cache;
36
+
37
  /**
38
  * An instance of the DI container.
39
  *
40
+ * @var Container
41
  */
42
  protected static $container;
43
 
78
  *
79
  * This value will be set by the `View::make()` method while building a View instance.
80
  *
81
+ * @var Template
82
  */
83
  protected $template;
84
 
92
  /**
93
  * The URL object the View is currently.
94
  *
95
+ * @var Url
96
  */
97
  protected $url;
98
 
134
  */
135
  protected $page_key = 'paged';
136
 
137
+ /**
138
+ * Indicates whether there are more events beyond the current view
139
+ *
140
+ * @since 5.0.0
141
+ *
142
+ * @var bool
143
+ */
144
+ protected $has_next_event = false;
145
+
146
  /**
147
  * Whether the View instance should manage the URL
148
  *
186
  *
187
  * @since 4.9.13
188
  *
189
+ * @var TEC_Rewrite
190
  */
191
  protected $rewrite;
192
 
198
  */
199
  protected static $date_in_url = true;
200
 
201
+ /**
202
+ * Cached URLs
203
+ *
204
+ * @since 5.0.0
205
+ *
206
+ * @var array
207
+ */
208
+ protected $cached_urls = [];
209
+
210
  /**
211
  * View constructor.
212
  *
216
  */
217
  public function __construct( Messages $messages = null ) {
218
  $this->messages = $messages ?: new Messages();
219
+ $this->rewrite = TEC_Rewrite::instance();
220
+
221
+ // For plain permalinks, the pagination variable is "page".
222
+ if ( ! get_option( 'permalink_structure' ) ) {
223
+ $this->page_key = 'page';
224
+ }
225
  }
226
 
227
  /**
236
  public static function make_for_rest( \WP_REST_Request $request ) {
237
  // Try to read the slug from the REST request.
238
  $params = $request->get_params();
239
+ if ( isset( $params['url'] ) ) {
240
+ $params['url'] = untrailingslashit( $params['url'] );
241
+ }
242
+
243
+ if ( isset( $params['prev_url'] ) ) {
244
+ $params['prev_url'] = untrailingslashit( $params['prev_url'] );
245
+ }
246
+
247
  $slug = Arr::get( $params, 'view', false );
248
  $url_object = Url::from_url_and_params( Arr::get( $params, 'url' ), $params );
249
 
293
  $slug = Arr::get( $params, 'eventDisplay', tribe_context()->get( 'view', 'default' ) );
294
  }
295
 
296
+ $params['event_display_mode'] = Arr::get( $query_args, Utils\View::get_past_event_display_key(), 'default' );
297
 
298
  if ( ! empty( $slug ) ) {
299
  /**
309
 
310
  // Determine context based on the request parameters.
311
  $do_not_override = [ 'event_display_mode' ];
312
+ $not_overridable_params = array_intersect_key( $params, array_combine( $do_not_override, $do_not_override ) );
313
  $context = tribe_context()
314
  ->alter(
315
  array_merge(
316
  $params,
317
  tribe_context()->translate_sub_locations( $params, \Tribe__Context::REQUEST_VAR ),
318
+ $not_overridable_params
319
  )
320
  );
321
 
389
  *
390
  * @since 4.9.3
391
  *
392
+ * @param Template $template The template object for the View.
393
+ * @param string $view_slug The current view slug.
394
+ * @param View $instance The current View object.
395
  */
396
  $template = apply_filters( 'tribe_events_views_v2_view_template', $template, $view_slug, $instance );
397
 
400
  *
401
  * @since 4.9.3
402
  *
403
+ * @param Template $template The template object for the View.
404
+ * @param View $instance The current View object.
405
  */
406
  $template = apply_filters( "tribe_events_views_v2_{$view_slug}_view_template", $template, $instance );
407
 
417
  *
418
  * @since 4.9.3
419
  *
420
+ * @param \Tribe__Context $view_context The context abstraction object that will be passed to the
421
  * view.
422
+ * @param string $view The current view slug.
423
+ * @param View $instance The current View object.
424
  */
425
  $view_context = apply_filters( 'tribe_events_views_v2_view_context', $view_context, $view_slug, $instance );
426
 
429
  *
430
  * @since 4.9.3
431
  *
432
+ * @param \Tribe__Context $view_context The context abstraction object that will be passed to the
433
  * view.
434
+ * @param View $instance The current View object.
435
  */
436
  $view_context = apply_filters( "tribe_events_views_v2_{$view_slug}_view_context", $view_context, $instance );
437
 
448
  *
449
  * @param \Tribe__Repository__Interface $view_repository The repository instance the View will use.
450
  * @param string $view_slug The current view slug.
451
+ * @param View $instance The current View object.
452
  */
453
  $view_repository = apply_filters( 'tribe_events_views_v2_view_repository', $view_repository, $view_slug, $instance );
454
 
458
  * @since 4.9.11
459
  *
460
  * @param \Tribe__Repository__Interface $view_repository The repository instance the View will use.
461
+ * @param View $instance The current View object.
462
  */
463
  $view_repository = apply_filters( "tribe_events_views_v2_{$view_slug}_view_repository", $view_repository, $instance );
464
 
469
  *
470
  * @since 4.9.11
471
  *
472
+ * @param array $query_args Arguments used to build the URL.
473
+ * @param string $view_slug The current view slug.
474
+ * @param View $instance The current View object.
475
  */
476
  $view_url_query_args = apply_filters( 'tribe_events_views_v2_view_url_query_args', [], $view_slug, $instance );
477
 
480
  *
481
  * @since 4.9.11
482
  *
483
+ * @param array $query_args Arguments used to build the URL.
484
+ * @param View $instance The current View object.
485
  */
486
  $view_url_query_args = apply_filters( "tribe_events_views_v2_{$view_slug}_view_url_query_args", $view_url_query_args, $instance );
487
 
492
  *
493
  * @since 4.9.11
494
  *
495
+ * @param View $instance The current View object.
496
  */
497
  do_action( 'tribe_events_views_v2_after_make_view', $instance );
498
 
502
  /**
503
  * Sets the DI container the class should use to build views.
504
  *
505
+ * @param Container $container The DI container instance to use.
506
  *
507
  * @since 4.9.2
508
  *
560
  */
561
  $this->repository_args = $repository_args;
562
 
563
+ // If HTML_Cache is a class trait and we have content to display, display it.
564
+ if ( method_exists( $this, 'maybe_get_cached_html' ) && $cached_html = $this->maybe_get_cached_html() ) {
565
+ return $cached_html;
566
+ }
567
+
568
  if ( ! tribe_events_view_v2_use_period_repository() ) {
 
569
  $this->setup_the_loop( $repository_args );
570
  }
571
 
577
 
578
  $this->restore_the_loop();
579
 
580
+ // If HTML_Cache is a class trait, perhaps the markup should be cached.
581
+ if ( method_exists( $this, 'maybe_cache_html' ) ) {
582
+ $this->maybe_cache_html( $html );
583
+ }
584
+
585
+ remove_filter( 'tribe_repository_query_arg_offset_override', [ $this, 'filter_repository_query_arg_offset_override' ], 10, 2 );
586
+
587
  return $html;
588
  }
589
 
591
  * {@inheritDoc}
592
  */
593
  public function get_label() {
594
+ return tribe( Manager::class )->get_view_label_by_slug( $this->get_slug() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
595
  }
596
 
597
  /**
644
  $html_classes = array_merge( $base_classes, $parents, $classes );
645
 
646
  /**
647
+ * Filters the HTML classes applied to a View top-level container.
648
  *
649
  * @since 4.9.13
650
  *
651
+ * @param array $html_classes Array of classes used for this view.
652
+ * @param string $view_slug The current view slug.
653
+ * @param View $instance The current View object.
654
  */
655
  $html_classes = apply_filters( 'tribe_events_views_v2_view_html_classes', $html_classes, $this->get_slug(), $this );
656
 
657
  /**
658
+ * Filters the HTML classes applied to a specific View top-level container.
659
  *
660
  * @since 4.9.13
661
  *
662
+ * @param array $html_classes Array of classes used for this view.
663
+ * @param View $instance The current View object.
664
  */
665
  $html_classes = apply_filters( "tribe_events_views_v2_{$this->get_slug()}_view_html_classes", $html_classes, $this );
666
 
706
  unset( $query_args['featured'] );
707
  }
708
 
709
+ $query_args = $this->filter_query_args( $query_args, $canonical );
 
 
 
 
 
 
 
 
 
710
 
711
  if ( ! empty( $query_args['tribe-bar-date'] ) ) {
712
  // If the Events Bar date is the same as today's date, then drop it.
713
+ $today = $this->context->get( 'today', 'today' );
714
+ $url_date_format = $this->get_url_date_format();
715
+ $today_date = Dates::build_date_object( $today )->format( $url_date_format );
716
+ $tribe_bar_date = Dates::build_date_object( $query_args['tribe-bar-date'] ) ->format( $url_date_format );
717
 
718
  if ( static::$date_in_url ) {
719
  if ( $today_date !== $tribe_bar_date ) {
726
  }
727
 
728
  // When we find nothing we're always on page 1.
729
+ $page = $this->url->get_current_page();
730
+ if ( ! $page ) {
731
+ $page = 1;
732
+ }
733
 
734
  if ( $page > 1 ) {
735
  $query_args[ $this->page_key ] = $page;
742
  }
743
 
744
  $event_display_mode = $this->context->get( 'event_display_mode', false );
745
+ if (
746
+ 'past' === $event_display_mode
747
+ && $event_display_mode !== $this->context->get( 'eventDisplay' )
748
+ ) {
749
+ $url = add_query_arg( [ Utils\View::get_past_event_display_key() => $event_display_mode ], $url );
750
  }
751
 
752
  $url = $this->filter_view_url( $canonical, $url );
758
  * {@inheritDoc}
759
  */
760
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
761
+ if ( isset( $this->cached_urls['next_url'] ) ) {
762
+ return $this->cached_urls['next_url'];
763
+ }
764
 
765
  $url = $this->get_url();
766
 
767
+ $query_args = [];
768
+
769
  if ( ! empty( $passthru_vars ) ) {
770
  // Remove the pass-thru vars, we'll re-apply them to the URL later.
771
  $url = remove_query_arg( array_keys( $passthru_vars ), $url );
772
  }
773
 
774
  // Make sure the view slug is always set to correctly match rewrites.
775
+ $query_args['eventDisplay'] = $this->slug;
776
 
777
+ if ( $this->has_next_event ) {
778
+ $query_args[ $this->page_key ] = $this->url->get_current_page() + 1;
 
779
 
780
+ // Default to the current URL.
781
+ $url = $url ?: home_url( add_query_arg( [] ) );
782
+
783
+ $query_args = $this->filter_query_args( $query_args, $url );
784
+ $query_args = array_filter( $query_args );
785
+
786
+ if ( ! empty( $query_args ) ) {
787
+ $url = add_query_arg( $query_args, $url );
788
+ }
789
+
790
+ // Remove the inverse of the page key we are using.
791
+ $url = remove_query_arg( 'page' === $this->page_key ? 'paged' : 'page', $url );
792
 
793
+ if ( $canonical ) {
794
+ $url = tribe( 'events.rewrite' )->get_clean_url( $url );
795
+ }
796
+
797
+ if ( ! empty( $passthru_vars ) && ! empty( $url ) ) {
798
+ // Re-apply the pass-thru query arguments.
799
+ $url = add_query_arg( $passthru_vars, $url );
800
+ }
801
+ } else {
802
+ $url = '';
803
  }
804
 
805
  $url = $this->filter_next_url( $canonical, $url );
806
 
807
+ $this->cached_urls['next_url'] = $url;
808
+
809
  return $url;
810
  }
811
 
813
  * {@inheritDoc}
814
  */
815
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
816
+ if ( isset( $this->cached_urls['prev_url'] ) ) {
817
+ return $this->cached_urls['prev_url'];
818
+ }
819
+
820
+ $prev_page = $this->repository->prev()->order_by( '__none' );
821
+
822
+ $paged = $this->url->get_current_page() - 1;
823
+ $query_args = [];
824
+ $page_query_args = $paged > 1
825
  ? [ $this->page_key => $paged ]
826
  : [];
827
 
833
  }
834
 
835
  // Make sure the view slug is always set to correctly match rewrites.
836
+ $query_args['eventDisplay'] = $this->slug;
837
 
838
+ if ( $prev_page->count() > 0 ) {
839
+ $query_args = array_merge( $query_args, $page_query_args );
840
 
841
+ // Default to the current URL.
842
+ $url = $url ?: home_url( add_query_arg( [] ) );
 
843
 
844
+ if ( $paged === 1 ) {
845
+ $url = remove_query_arg( $this->page_key, $url );
846
+ unset( $query_args[ $this->page_key ] );
847
+ }
848
 
849
+ $query_args = $this->filter_query_args( $query_args, $url );
850
+ $query_args = array_filter( $query_args );
851
+
852
+ if ( ! empty( $query_args ) ) {
853
+ $url = add_query_arg( $query_args, $url );
854
+ }
855
+
856
+ // Remove the inverse of the page key we are using.
857
+ $url = remove_query_arg( 'page' === $this->page_key ? 'paged' : 'page', $url );
858
+
859
+ if ( $canonical ) {
860
+ $url = tribe( 'events.rewrite' )->get_clean_url( $url );
861
+ }
862
+
863
+ if ( ! empty( $passthru_vars ) ) {
864
+ // Re-apply the pass-thru query arguments.
865
+ $url = add_query_arg( $passthru_vars, $url );
866
+ }
867
+ } else {
868
+ $url = '';
869
  }
870
 
871
  $url = $this->filter_prev_url( $canonical, $url );
872
 
873
+ $this->cached_urls['prev_url'] = $url;
874
+
875
  return $url;
876
  }
877
 
878
+ /**
879
+ * Filters URL query args with a predictable filter
880
+ *
881
+ * @since 5.0.0
882
+ *
883
+ * @param array $query_args An array of query args that will be used to build the URL for the View.
884
+ * @param bool $canonical Whether the URL should be the canonical one or not.
885
+ *
886
+ * @return array Filtered array of query arguments.
887
+ */
888
+ public function filter_query_args( $query_args, $canonical ) {
889
+ /**
890
+ * Filters the query arguments that will be used to build a View URL.
891
+ *
892
+ * @since 4.9.10
893
+ *
894
+ * @param array $query_args An array of query args that will be used to build the URL for the View.
895
+ * @param View_Interface $this This View instance.
896
+ * @param bool $canonical Whether the URL should be the canonical one or not.
897
+ */
898
+ $query_args = apply_filters( 'tribe_events_views_v2_url_query_args', $query_args, $this, $canonical );
899
+
900
+ return $query_args;
901
+ }
902
+
903
+
904
  /**
905
  * {@inheritDoc}
906
  */
1076
 
1077
  $context_arr = $context->to_array();
1078
 
1079
+ /*
1080
+ * Note: we are setting events_per_page to +1 so we don't need to query twice to
1081
+ * determine if there are subsequent pages. When running setup_template_vars, we pop
1082
+ * the last item off the array if the returned posts are > events_per_page.
1083
+ *
1084
+ * @since 5.0.0
1085
+ */
1086
  $args = [
1087
+ 'posts_per_page' => $context_arr['events_per_page'] + 1,
1088
  'paged' => max( Arr::get_first_set( array_filter( $context_arr ), [
1089
  'paged',
1090
  'page',
1091
  ], 1 ), 1 ),
1092
  'search' => $context->get( 'keyword', '' ),
1093
  'hidden_from_upcoming' => false,
1094
+ /*
1095
+ * Passing this parameter that is only used in this object to control whether or not the
1096
+ * offset value should be overridden with the `tribe_repository_query_arg_offset_override` filter.
1097
+ */
1098
+ 'view_override_offset' => true,
1099
  ];
1100
 
1101
+ add_filter( 'tribe_repository_query_arg_offset_override', [ $this, 'filter_repository_query_arg_offset_override' ], 10, 2 );
1102
+
1103
  // Set's up category URL for all views.
1104
  if ( ! empty( $context_arr[ TEC::TAXONOMY ] ) ) {
1105
  $args[ TEC::TAXONOMY ] = $context_arr[ TEC::TAXONOMY ];
1115
  return $args;
1116
  }
1117
 
1118
+ /**
1119
+ * Filters the offset value separate from the posts_per_page/paged calculation.
1120
+ *
1121
+ * This allows us to save a query when determining pagination for list-like views.
1122
+ *
1123
+ * @since 5.0.0
1124
+ *
1125
+ * @param null|int $offset_override Offset override value.
1126
+ * @param \WP_Query $query WP Query object.
1127
+ *
1128
+ * @return null|int
1129
+ */
1130
+ public function filter_repository_query_arg_offset_override( $offset_override, $query ) {
1131
+ if ( ! isset( $query['view_override_offset'] ) ) {
1132
+ return $offset_override;
1133
+ }
1134
+
1135
+ $context = $this->get_context();
1136
+
1137
+ $current_page = max(
1138
+ $context->get( 'page' ),
1139
+ $context->get( 'paged' ),
1140
+ 1
1141
+ );
1142
+ return ( $current_page - 1 ) * $this->get_context()->get( 'events_per_page' );
1143
+ }
1144
+
1145
  /**
1146
  * Filters the current URL returned for a specific View.
1147
  *
1254
  * {@inheritDoc}
1255
  */
1256
  public function found_post_ids() {
1257
+ $events = $this->repository->get_ids();
1258
+ if ( $this->has_next_event( $events ) ) {
1259
+ array_pop( $events );
1260
+ }
1261
+ return $events;
1262
  }
1263
 
1264
  /**
1268
  return static::$publicly_visible;
1269
  }
1270
 
1271
+ /**
1272
+ * Sets the has_next_event boolean flag, which determines if we have events in the next page.
1273
+ *
1274
+ * This flag is required due to being required to optimize the determination of whether
1275
+ * there are future events, we increased events_per_page by +1 during setup_repository_args. Because of that
1276
+ * if the number of events returned are greater than events_per_page, we need to
1277
+ * pop an element off the end and set a boolean.
1278
+ *
1279
+ * @since 5.0.0
1280
+ *
1281
+ * @param boolean $value Which value will be set to has_next_event, will be casted as boolean.
1282
+ *
1283
+ * @return mixed Value passed after being saved and casted as boolean.
1284
+ */
1285
+ public function set_has_next_event( $value ) {
1286
+ return $this->has_next_event = (bool) $value;
1287
+ }
1288
+
1289
+ /**
1290
+ * Determines from a given array of events if we have next events or not.
1291
+ *
1292
+ * @since 5.0.0
1293
+ *
1294
+ * @param array $events Array that will be counted to verify if we have events.
1295
+ * @param boolean $overwrite_flag If we should overwrite the flag when we discover the result.
1296
+ *
1297
+ * @return mixed Weather the array of events has a next page.
1298
+ */
1299
+ public function has_next_event( array $events, $overwrite_flag = true ) {
1300
+ $has_next_events = count( $events ) > $this->get_context()->get( 'events_per_page', 12 );
1301
+ if ( (bool) $overwrite_flag ) {
1302
+ $this->set_has_next_event( $has_next_events );
1303
+ }
1304
+ return $has_next_events;
1305
+ }
1306
+
1307
  /**
1308
  * Sets up the View template variables.
1309
  *
1319
 
1320
  $events = (array) $this->repository->all();
1321
 
1322
+ $is_paginated = isset( $this->repository_args['posts_per_page'] ) && -1 !== $this->repository_args['posts_per_page'];
1323
+
1324
+ /*
1325
+ * To optimize the determination of whether there are future events, we
1326
+ * increased events_per_page by +1 during setup_repository_args. Because of that
1327
+ * if the number of events returned is greater than events_per_page, we need to
1328
+ * pop an element off the end and set a boolean.
1329
+ *
1330
+ * @since 5.0.0
1331
+ */
1332
+ if ( $is_paginated && $this->has_next_event( $events ) ) {
1333
+ array_pop( $events );
1334
+ }
1335
+
1336
  $this->setup_messages( $events );
1337
 
1338
  $today_url = $this->get_today_url( true );
1339
  $today = $this->context->get( 'today', 'today' );
1340
 
1341
  $event_date = $this->context->get( 'event_date', false );
1342
+
1343
+ // Set the URL event date only if it's not empty or "now": both are implicit, default, date selections.
1344
+ $url_event_date = ( ! empty( $event_date ) && 'now' !== $event_date )
1345
  ? Dates::build_date_object( $event_date )->format( Dates::DBDATEFORMAT )
1346
  : false;
1347
 
1366
  'prev_label' => $this->get_link_label( $this->prev_url( false ) ),
1367
  'next_label' => $this->get_link_label( $this->next_url( false ) ),
1368
  'date_formats' => (object) [
1369
+ 'compact' => Dates::datepicker_formats( tribe_get_option( 'datepickerFormat' ) ),
1370
+ 'month_and_year_compact' => Dates::datepicker_formats( 'm' . tribe_get_option( 'datepickerFormat' ) ),
1371
+ 'month_and_year' => tribe_get_date_option( 'monthAndYearFormat', 'F Y' ),
1372
+ 'time_range_separator' => tribe_get_date_option( 'timeRangeSeparator', ' - ' ),
1373
+ 'date_time_separator' => tribe_get_date_option( 'dateTimeSeparator', ' @ ' ),
1374
  ],
1375
  'messages' => $this->get_messages( $events ),
1376
  'start_of_week' => get_option( 'start_of_week', 0 ),
1382
  'live_refresh' => tribe_is_truthy( tribe_get_option( 'liveFiltersUpdate', true ) ),
1383
  'ical' => $this->get_ical_data(),
1384
  'container_classes' => $this->get_html_classes(),
1385
+ 'container_data' => $this->get_container_data(),
1386
  'is_past' => 'past' === $this->context->get( 'event_display_mode', false ),
1387
  'show_datepicker_submit' => $this->get_show_datepicker_submit(),
1388
+ 'breakpoints' => $this->get_breakpoints(),
1389
+ 'is_initial_load' => $this->context->doing_php_initial_state(),
1390
+ 'public_views' => $this->get_public_views( $url_event_date ),
1391
  ];
1392
 
1393
  return $template_vars;
1487
  * {@inheritDoc}
1488
  */
1489
  public function get_today_url( $canonical = false ) {
1490
+ $to_remove = [ 'tribe-bar-date', 'paged', 'page', 'eventDate', 'tribe_event_display' ];
1491
 
1492
  // While we want to remove the date query vars, we want to keep any other query var.
1493
  $query_args = $this->url->get_query_args();
1495
  // Handle the `eventDisplay` query arg due to its particular usage to indicate the mode too.
1496
  $query_args['eventDisplay'] = $this->slug;
1497
 
1498
+ $query_args = $this->filter_query_args( $query_args, $canonical );
1499
+
1500
  $ugly_url = add_query_arg( $query_args, $this->get_url( false ) );
1501
  $ugly_url = remove_query_arg( $to_remove, $ugly_url );
1502
 
1784
  protected function get_breadcrumbs() {
1785
  $context = $this->context;
1786
  $breadcrumbs = [];
1787
+ $taxonomy = TEC::TAXONOMY;
1788
+ $context_tax = $context->get( $taxonomy, false );
1789
 
1790
  // Get term slug if taxonomy is not empty
1791
  if ( ! empty( $context_tax ) ) {
1792
+ $term = get_term_by( 'slug', $context_tax, $taxonomy );
1793
+ if ( ! empty( $term->name ) ) {
1794
+ $label = $term->name;
1795
+
1796
+ $breadcrumbs[] = [
1797
+ 'link' => $this->get_today_url( true ),
1798
+ 'label' => tribe_get_event_label_plural(),
1799
+ ];
1800
+ $breadcrumbs[] = [
1801
+ 'link' => '',
1802
+ 'label' => $label,
1803
+ ];
 
 
 
 
 
 
1804
  }
1805
  }
1806
 
1808
  if ( $is_featured = tribe_is_truthy( $this->context->get( 'featured', false ) ) ) {
1809
  $non_featured_link = tribe_events_get_url( [ 'featured' => 0 ] );
1810
 
1811
+ if ( empty( $context_tax ) ) {
1812
+ $breadcrumbs[] = [
1813
+ 'link' => $non_featured_link,
1814
+ 'label' => tribe_get_event_label_plural(),
1815
+ ];
1816
+ }
1817
+
1818
  $breadcrumbs[] = [
1819
  'link' => '',
1820
  'label' => esc_html__( 'Featured', 'the-events-calendar' ),
1949
  $live_refresh = tribe_is_truthy( tribe_get_option( 'liveFiltersUpdate', true ) );
1950
  $disable_events_bar = tribe_is_truthy( tribe_get_option( 'tribeDisableTribeBar', false ) );
1951
 
1952
+ $show_datepicker_submit = empty( $live_refresh ) && ! empty( $disable_events_bar );
1953
+
1954
+ /**
1955
+ * Filters the show datepicker submit value.
1956
+ *
1957
+ * @since 5.0.0
1958
+ *
1959
+ * @param object $show_datepicker_submit The show datepicker submit value.
1960
+ * @param View $this The current View instance being rendered.
1961
+ */
1962
+ $show_datepicker_submit = apply_filters( "tribe_events_views_v2_view_show_datepicker_submit", $show_datepicker_submit, $this );
1963
+
1964
+ /**
1965
+ * Filters the show datepicker submit value for a specific view.
1966
+ *
1967
+ * @since 5.0.0
1968
+ *
1969
+ * @param object $show_datepicker_submit The show datepicker submit value.
1970
+ * @param View $this The current View instance being rendered.
1971
+ */
1972
+ $show_datepicker_submit = apply_filters( "tribe_events_views_v2_view_{$this->slug}_show_datepicker_submit", $show_datepicker_submit, $this );
1973
+
1974
+ return $show_datepicker_submit;
1975
+ }
1976
+
1977
+ /**
1978
+ * Manipulates public views data, if necessary, and returns result.
1979
+ *
1980
+ * @since 5.0.0
1981
+ *
1982
+ * @param string|bool $url_event_date The value, `Y-m-d` format, of the `eventDate` request variable to
1983
+ * append to the view URL, if any.
1984
+ *
1985
+ * @return array
1986
+ */
1987
+ protected function get_public_views( $url_event_date ) {
1988
+ $public_views = tribe( Manager::class )->get_publicly_visible_views_data();
1989
+
1990
+ if ( ! empty( $url_event_date ) ) {
1991
+ // Each View expects the event date in a specific format, here we account for it.
1992
+ $query_args = wp_parse_url( $this->get_url( false ), PHP_URL_QUERY );
1993
+
1994
+ array_walk(
1995
+ $public_views,
1996
+ function ( &$view_data, $view_slug ) use ( $url_event_date, $query_args ) {
1997
+ $view_instance = View::make( $view_data->view_class );
1998
+ $view_data->view_url = $view_instance->url_for_query_args( $url_event_date, $query_args );
1999
+ }
2000
+ );
2001
  }
2002
 
2003
+ /**
2004
+ * Filters the public views.
2005
+ *
2006
+ * @since 5.0.0
2007
+ *
2008
+ * @param object $public_views The public views.
2009
+ * @param View $this The current View instance being rendered.
2010
+ */
2011
+ $public_views = apply_filters( "tribe_events_views_v2_view_public_views", $public_views, $this );
2012
+
2013
+ /**
2014
+ * Filters the public views for a specific view.
2015
+ *
2016
+ * @since 5.0.0
2017
+ *
2018
+ * @param object $public_views The public views.
2019
+ * @param View $this The current View instance being rendered.
2020
+ */
2021
+ $public_views = apply_filters( "tribe_events_views_v2_view_{$this->slug}_public_views", $public_views, $this );
2022
+
2023
+ return $public_views;
2024
  }
2025
 
2026
  /**
2068
  protected function get_url_date_format() {
2069
  return Dates::DBDATEFORMAT;
2070
  }
2071
+
2072
+ /**
2073
+ * Returns the filtered container data attributes for the View top-level container.
2074
+ *
2075
+ * @since 5.0.0
2076
+ *
2077
+ * @return array<string,string> The filtered list of data attributes for the View top-level container.
2078
+ */
2079
+ protected function get_container_data() {
2080
+ /**
2081
+ * Filters the data for a View top-level container.
2082
+ *
2083
+ * @since 5.0.0
2084
+ *
2085
+ * @param array<string,string> $data Associative array of data for the View top-level container.
2086
+ * @param string $view_slug The current view slug.
2087
+ * @param View $instance The current View object.
2088
+ */
2089
+ $data = apply_filters( 'tribe_events_views_v2_view_data', [], $this->get_slug(), $this );
2090
+
2091
+ /**
2092
+ * Filters the data for a specific View top-level container.
2093
+ *
2094
+ * @since 4.9.13
2095
+ *
2096
+ * @param array<string,string> $data Associative array of data for the View top-level container.
2097
+ * @param View $instance The current View object.
2098
+ */
2099
+ $data = apply_filters( "tribe_events_views_v2_{$this->get_slug()}_view_data", $data, $this );
2100
+
2101
+ return $data;
2102
+ }
2103
  }
src/Tribe/Views/V2/Views/By_Day_View.php CHANGED
@@ -16,6 +16,7 @@ use Tribe\Events\Views\V2\View;
16
  use Tribe\Traits\Cache_User;
17
  use Tribe__Cache_Listener as Cache_Listener;
18
  use Tribe__Date_Utils as Dates;
 
19
  use Tribe__Utils__Array as Arr;
20
 
21
  /**
@@ -28,6 +29,8 @@ use Tribe__Utils__Array as Arr;
28
  abstract class By_Day_View extends View {
29
  use Cache_User;
30
 
 
 
31
  /**
32
  * The date input by the user, either by selecting the default view or using the bar.
33
  *
@@ -54,6 +57,15 @@ abstract class By_Day_View extends View {
54
  */
55
  protected $grid_days_found_cache = [];
56
 
 
 
 
 
 
 
 
 
 
57
  /**
58
  * An instance of the Stack object.
59
  *
@@ -95,7 +107,7 @@ abstract class By_Day_View extends View {
95
  ! $force
96
  && ! empty( $this->grid_days_cache )
97
  && isset( $this->user_date )
98
- && ( null === $date || $this->user_date === $date )
99
  ) {
100
  return $this->grid_days_cache;
101
  }
@@ -124,7 +136,7 @@ abstract class By_Day_View extends View {
124
  /**
125
  * If repository arguments have not ben set up yet, let's do it now.
126
  */
127
- $this->repository_args = $this->filter_repository_args( $this->setup_repository_args() );
128
  }
129
 
130
  $repository_args = $this->repository_args;
@@ -147,8 +159,77 @@ abstract class By_Day_View extends View {
147
  $repository = tribe_events( 'period' );
148
  }
149
  $repository->by_period( $grid_start_date, $grid_end_date )->fetch();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  }
151
 
 
 
152
  // phpcs:ignore
153
  /** @var \DateTime $day */
154
  foreach ( $days as $day ) {
@@ -164,38 +245,45 @@ abstract class By_Day_View extends View {
164
  $event_ids = array_map( 'absint', $day_results->pluck( 'ID' ) );
165
  }
166
 
167
- // @todo @bluedevs truncating here does not make sense, do in template?
168
- $day_event_ids = array_slice( $event_ids, 0, $events_per_day );
 
169
 
170
  $this->grid_days_cache[ $day_string ] = $day_event_ids;
171
  $this->grid_days_found_cache[ $day_string ] = $day_results->count();
172
  } else {
173
  $start = tribe_beginning_of_day( $day->format( Dates::DBDATETIMEFORMAT ) );
174
  $end = tribe_end_of_day( $day->format( Dates::DBDATETIMEFORMAT ) );
175
- /*
176
- * We want events overlapping the current day, by more than 1 second.
177
- * This prevents events ending on the cutoff from showing up here.
178
- */
179
- $day_query = tribe_events()
180
- ->set_found_rows(true)
181
- ->by_args( $repository_args )
182
- ->where( 'date_overlaps', $start, $end, null, 2 )
183
- ->per_page( $events_per_day )
184
- ->order_by( $order_by, $order );
185
- $day_event_ids = $day_query->get_ids();
186
- $found = $day_query->found();
187
-
188
- $this->grid_days_cache[ $day_string ] = (array) $day_event_ids;
189
- $this->grid_days_found_cache[ $day_string ] = (int) $found;
 
 
190
  }
191
 
192
- /*
193
- * Multi-day events will always appear on the second day and forward, back-fill if they did not make the
194
- * cut (of events per day) on previous days.
195
- */
196
- $this->backfill_multiday_event_ids( $day_event_ids );
197
  }
198
 
 
 
 
 
 
 
 
 
199
  if ( $using_period_repository ) {
200
  $post_ids = array_filter( array_unique( array_merge( ... array_values( $this->grid_days_cache ) ) ) );
201
  /** @var \Tribe__Cache $cache */
@@ -381,6 +469,39 @@ abstract class By_Day_View extends View {
381
  return $grid_days;
382
  }
383
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
384
  /**
385
  * Back-fills the days cache to add multi-day events that, due to events-per-day limits, might not appear on first
386
  * day.
@@ -393,10 +514,10 @@ abstract class By_Day_View extends View {
393
  *
394
  * @since 4.9.12
395
  *
396
- * @param array $event_ids An array of event post IDs for the day.
397
  */
398
- protected function backfill_multiday_event_ids( array $event_ids = [] ) {
399
- if ( empty( $event_ids ) ) {
400
  return;
401
  }
402
 
@@ -406,8 +527,10 @@ abstract class By_Day_View extends View {
406
  return;
407
  }
408
 
 
 
409
  foreach ( $event_ids as $event_id ) {
410
- $event = tribe_get_event( $event_id );
411
 
412
  if ( ! $event instanceof \WP_Post ) {
413
  continue;
@@ -454,4 +577,24 @@ abstract class By_Day_View extends View {
454
  return defined( 'TRIBE_EVENTS_V2_VIEWS_USE_PERIOD_REPOSITORY' )
455
  && TRIBE_EVENTS_V2_VIEWS_USE_PERIOD_REPOSITORY;
456
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
457
  }
16
  use Tribe\Traits\Cache_User;
17
  use Tribe__Cache_Listener as Cache_Listener;
18
  use Tribe__Date_Utils as Dates;
19
+ use Tribe__Timezones as Timezones;
20
  use Tribe__Utils__Array as Arr;
21
 
22
  /**
29
  abstract class By_Day_View extends View {
30
  use Cache_User;
31
 
32
+ const CHUNK_SIZE = 200;
33
+
34
  /**
35
  * The date input by the user, either by selecting the default view or using the bar.
36
  *
57
  */
58
  protected $grid_days_found_cache = [];
59
 
60
+ /**
61
+ * An array of cached events for the grid.
62
+ *
63
+ * @since 5.0.0
64
+ *
65
+ * @var array
66
+ */
67
+ protected $grid_events = [];
68
+
69
  /**
70
  * An instance of the Stack object.
71
  *
107
  ! $force
108
  && ! empty( $this->grid_days_cache )
109
  && isset( $this->user_date )
110
+ && ( ! $date || $this->user_date === $date )
111
  ) {
112
  return $this->grid_days_cache;
113
  }
136
  /**
137
  * If repository arguments have not ben set up yet, let's do it now.
138
  */
139
+ $this->repository_args = $this->filter_repository_args( $this->setup_repository_args( $this->context ) );
140
  }
141
 
142
  $repository_args = $this->repository_args;
159
  $repository = tribe_events( 'period' );
160
  }
161
  $repository->by_period( $grid_start_date, $grid_end_date )->fetch();
162
+ } else {
163
+ global $wpdb;
164
+
165
+ $first_grid_day = $days->start;
166
+ $start = tribe_beginning_of_day( $first_grid_day->format( Dates::DBDATETIMEFORMAT ) );
167
+ $last_grid_day = $days->end;
168
+ $end = tribe_end_of_day( $last_grid_day->format( Dates::DBDATETIMEFORMAT ) );
169
+
170
+ $view_event_ids = tribe_events()
171
+ ->set_found_rows( true )
172
+ ->fields( 'ids' )
173
+ ->by_args( $repository_args )
174
+ ->where( 'date_overlaps', $start, $end, null, 2 )
175
+ ->per_page( -1 )
176
+ ->order_by( $order_by, $order )
177
+ ->all();
178
+
179
+ $day_results = [];
180
+
181
+ $start_meta_key = '_EventStartDate';
182
+ $end_meta_key = '_EventEndDate';
183
+
184
+ if ( Timezones::is_mode( 'site' ) ) {
185
+ $start_meta_key = '_EventStartDateUTC';
186
+ $end_meta_key = '_EventEndDateUTC';
187
+ }
188
+
189
+ $results = [];
190
+ $request_chunks = array_chunk( $view_event_ids, $this->get_chunk_size() );
191
+
192
+ foreach ( $request_chunks as $chunk_ids ) {
193
+ $sql = "
194
+ SELECT
195
+ post_id,
196
+ meta_key,
197
+ meta_value
198
+ FROM
199
+ {$wpdb->postmeta}
200
+ WHERE
201
+ meta_key IN ( %s, %s )
202
+ AND post_id IN ( " . implode( ',', $chunk_ids ) . " )
203
+ ";
204
+
205
+ $chunk_results = $wpdb->get_results( $wpdb->prepare( $sql, [ $start_meta_key, $end_meta_key ] ) );
206
+
207
+ $results = array_merge( $results, $chunk_results );
208
+ }
209
+
210
+ $indexed_results = [];
211
+
212
+ foreach ( $results as $row ) {
213
+ if ( ! isset( $indexed_results[ $row->post_id ] ) ) {
214
+ $indexed_results[ $row->post_id ] = [
215
+ 'ID' => $row->post_id,
216
+ 'start_date' => null,
217
+ 'end_date' => null,
218
+ ];
219
+ }
220
+
221
+ $key = $start_meta_key === $row->meta_key ? 'start_date' : 'end_date';
222
+
223
+ $indexed_results[ $row->post_id ][ $key ] = $row->meta_value;
224
+ }
225
+
226
+ foreach ( $view_event_ids as $id ) {
227
+ $day_results[] = (object) $indexed_results[ $id ];
228
+ }
229
  }
230
 
231
+ $all_day_event_ids = [];
232
+
233
  // phpcs:ignore
234
  /** @var \DateTime $day */
235
  foreach ( $days as $day ) {
245
  $event_ids = array_map( 'absint', $day_results->pluck( 'ID' ) );
246
  }
247
 
248
+ if ( $events_per_day > -1 ) {
249
+ $day_event_ids = array_slice( $event_ids, 0, $events_per_day );
250
+ }
251
 
252
  $this->grid_days_cache[ $day_string ] = $day_event_ids;
253
  $this->grid_days_found_cache[ $day_string ] = $day_results->count();
254
  } else {
255
  $start = tribe_beginning_of_day( $day->format( Dates::DBDATETIMEFORMAT ) );
256
  $end = tribe_end_of_day( $day->format( Dates::DBDATETIMEFORMAT ) );
257
+
258
+ // Events overlap a day if Event start date <= Day End AND Event end date >= Day Start.
259
+ $results_in_day = array_filter(
260
+ $day_results,
261
+ static function ( $event ) use ( $start, $end ) {
262
+ return $event->start_date <= $end && $event->end_date >= $start;
263
+ }
264
+ );
265
+
266
+ $day_event_ids = array_map( 'absint', wp_list_pluck( $results_in_day, 'ID' ) );
267
+
268
+ if ( $events_per_day > -1 ) {
269
+ $day_event_ids = array_slice( $day_event_ids, 0, $events_per_day );
270
+ }
271
+
272
+ $this->grid_days_cache[ $day_string ] = $day_event_ids;
273
+ $this->grid_days_found_cache[ $day_string ] = count( $results_in_day );
274
  }
275
 
276
+ $all_day_event_ids = array_merge( $all_day_event_ids, $day_event_ids );
 
 
 
 
277
  }
278
 
279
+ $this->grid_events = $this->get_grid_events( $all_day_event_ids );
280
+
281
+ /*
282
+ * Multi-day events will always appear on the second day and forward, back-fill if they did not make the
283
+ * cut (of events per day) on previous days.
284
+ */
285
+ $this->backfill_multiday_event_ids( $this->grid_events );
286
+
287
  if ( $using_period_repository ) {
288
  $post_ids = array_filter( array_unique( array_merge( ... array_values( $this->grid_days_cache ) ) ) );
289
  /** @var \Tribe__Cache $cache */
469
  return $grid_days;
470
  }
471
 
472
+ /**
473
+ * Fetches events for the grid in chunks so we do not have to fetch events a second time.
474
+ *
475
+ * @since 5.0.0
476
+ *
477
+ * @param array $event_ids
478
+ *
479
+ * @return array|void
480
+ */
481
+ protected function get_grid_events( array $event_ids = [] ) {
482
+ if ( empty( $event_ids ) ) {
483
+ return [];
484
+ }
485
+
486
+ $events = [];
487
+
488
+ $event_id_chunks = array_chunk( $event_ids, $this->get_chunk_size() );
489
+ foreach ( $event_id_chunks as $ids ) {
490
+ // Prefetch provided events in a single query.
491
+ $event_results = tribe_events()
492
+ ->in( $ids )
493
+ ->per_page( -1 )
494
+ ->all();
495
+
496
+ // Massage events to be indexed by event ID.
497
+ foreach ( $event_results as $event_result ) {
498
+ $events[ $event_result->ID ] = $event_result;
499
+ }
500
+ }
501
+
502
+ return $events;
503
+ }
504
+
505
  /**
506
  * Back-fills the days cache to add multi-day events that, due to events-per-day limits, might not appear on first
507
  * day.
514
  *
515
  * @since 4.9.12
516
  *
517
+ * @param array $events An array of event posts
518
  */
519
+ protected function backfill_multiday_event_ids( array $events = [] ) {
520
+ if ( empty( $events ) ) {
521
  return;
522
  }
523
 
527
  return;
528
  }
529
 
530
+ $event_ids = wp_list_pluck( $events, 'ID' );
531
+
532
  foreach ( $event_ids as $event_id ) {
533
+ $event = $events[ $event_id ];
534
 
535
  if ( ! $event instanceof \WP_Post ) {
536
  continue;
577
  return defined( 'TRIBE_EVENTS_V2_VIEWS_USE_PERIOD_REPOSITORY' )
578
  && TRIBE_EVENTS_V2_VIEWS_USE_PERIOD_REPOSITORY;
579
  }
580
+
581
+ /**
582
+ * Gets the current desired chunk size for breaking up batched queries.
583
+ *
584
+ * @since 5.0.0
585
+ *
586
+ * @return int
587
+ */
588
+ protected function get_chunk_size() {
589
+ /**
590
+ * Filters the chunk size used for building grid dates.
591
+ *
592
+ * @since 5.0.0
593
+ *
594
+ * @param int $chunk_size Max number of values to query at a time.
595
+ * @param \Tribe__Context $context Context of request.
596
+ * @param By_Day_View $view Current view object.
597
+ */
598
+ return apply_filters( 'tribe_events_views_v2_by_day_view_chunk_size', self::CHUNK_SIZE, $this->get_context(), $this );
599
+ }
600
  }
src/Tribe/Views/V2/Views/Day_View.php CHANGED
@@ -38,6 +38,10 @@ class Day_View extends View {
38
  * {@inheritDoc}
39
  */
40
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
 
 
 
 
41
  $date = $this->context->get( 'event_date', $this->context->get( 'today', 'today' ) );
42
 
43
  $one_day = new \DateInterval( 'P1D' );
@@ -51,13 +55,21 @@ class Day_View extends View {
51
  $url = $this->build_url_for_date( $url_date, $canonical, $passthru_vars );
52
  }
53
 
54
- return $this->filter_prev_url( $canonical, $url );
 
 
 
 
55
  }
56
 
57
  /**
58
  * {@inheritDoc}
59
  */
60
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
 
 
 
 
61
  $date = $this->context->get( 'event_date', $this->context->get( 'today', 'today' ) );
62
 
63
  $one_day = new \DateInterval( 'P1D' );
@@ -71,7 +83,11 @@ class Day_View extends View {
71
  $url = $this->build_url_for_date( $url_date, $canonical, $passthru_vars );
72
  }
73
 
74
- return $this->filter_next_url( $canonical, $url );
 
 
 
 
75
  }
76
 
77
  /**
38
  * {@inheritDoc}
39
  */
40
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
41
+ if ( isset( $this->cached_urls[ __METHOD__ ] ) ) {
42
+ return $this->cached_urls[ __METHOD__ ];
43
+ }
44
+
45
  $date = $this->context->get( 'event_date', $this->context->get( 'today', 'today' ) );
46
 
47
  $one_day = new \DateInterval( 'P1D' );
55
  $url = $this->build_url_for_date( $url_date, $canonical, $passthru_vars );
56
  }
57
 
58
+ $url = $this->filter_prev_url( $canonical, $url );
59
+
60
+ $this->cached_urls[ __METHOD__ ] = $url;
61
+
62
+ return $url;
63
  }
64
 
65
  /**
66
  * {@inheritDoc}
67
  */
68
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
69
+ if ( isset( $this->cached_urls[ __METHOD__ ] ) ) {
70
+ return $this->cached_urls[ __METHOD__ ];
71
+ }
72
+
73
  $date = $this->context->get( 'event_date', $this->context->get( 'today', 'today' ) );
74
 
75
  $one_day = new \DateInterval( 'P1D' );
83
  $url = $this->build_url_for_date( $url_date, $canonical, $passthru_vars );
84
  }
85
 
86
+ $url = $this->filter_next_url( $canonical, $url );
87
+
88
+ $this->cached_urls[ __METHOD__ ] = $url;
89
+
90
+ return $url;
91
  }
92
 
93
  /**
src/Tribe/Views/V2/Views/List_View.php CHANGED
@@ -9,10 +9,12 @@
9
  namespace Tribe\Events\Views\V2\Views;
10
 
11
  use Tribe\Events\Views\V2\View;
 
12
  use Tribe__Context;
13
  use Tribe__Events__Main as TEC;
14
- use Tribe__Events__Rewrite as Rewrite;
15
  use Tribe__Utils__Array as Arr;
 
16
 
17
  class List_View extends View {
18
  use List_Behavior;
@@ -46,11 +48,15 @@ class List_View extends View {
46
  * {@inheritDoc}
47
  */
48
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
 
 
 
 
49
  $current_page = (int) $this->context->get( 'page', 1 );
50
  $display = $this->context->get( 'event_display_mode', 'list' );
51
 
52
  if ( 'past' === $display ) {
53
- $url = parent::next_url( $canonical, [ 'eventDisplay' => 'past' ] );
54
  } else if ( $current_page > 1 ) {
55
  $url = parent::prev_url( $canonical );
56
  } else {
@@ -59,6 +65,8 @@ class List_View extends View {
59
 
60
  $url = $this->filter_prev_url( $canonical, $url );
61
 
 
 
62
  return $url;
63
  }
64
 
@@ -66,19 +74,25 @@ class List_View extends View {
66
  * {@inheritDoc}
67
  */
68
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
 
 
 
 
69
  $current_page = (int) $this->context->get( 'page', 1 );
70
  $display = $this->context->get( 'event_display_mode', 'list' );
71
 
72
  if ( $this->slug === $display || 'default' === $display ) {
73
  $url = parent::next_url( $canonical );
74
- } else if ( $current_page > 1 ) {
75
- $url = parent::prev_url( $canonical, [ 'eventDisplay' => 'past' ] );
76
  } else {
77
  $url = $this->get_upcoming_url( $canonical );
78
  }
79
 
80
  $url = $this->filter_next_url( $canonical, $url );
81
 
 
 
82
  return $url;
83
  }
84
 
@@ -102,14 +116,21 @@ class List_View extends View {
102
  'paged' => $page,
103
  ] ) ) );
104
 
 
 
105
  if ( $past->count() > 0 ) {
106
- $past_url_object = clone $this->url->add_query_args( array_filter( [
 
107
  'post_type' => TEC::POSTTYPE,
108
- 'eventDisplay' => 'past',
109
  'eventDate' => $event_date_var,
110
  $this->page_key => $page,
111
  'tribe-bar-search' => $this->context->get( 'keyword' ),
112
- ] ) );
 
 
 
 
113
 
114
  $past_url = (string) $past_url_object;
115
 
@@ -118,7 +139,7 @@ class List_View extends View {
118
  }
119
 
120
  // We've got rewrite rules handling `eventDate` and `eventDisplay`, but not List. Let's remove it.
121
- $canonical_url = Rewrite::instance()->get_clean_url(
122
  add_query_arg(
123
  [ 'eventDisplay' => $this->slug ],
124
  remove_query_arg( [ 'eventDate' ], $past_url )
@@ -126,7 +147,7 @@ class List_View extends View {
126
  );
127
 
128
  // We use the `eventDisplay` query var as a display mode indicator: we have to make sure it's there.
129
- $url = add_query_arg( [ 'eventDisplay' => 'past' ], $canonical_url );
130
 
131
  // Let's re-add the `eventDate` if we had one and we're not already passing it with one of its aliases.
132
  if ( ! (
@@ -159,18 +180,24 @@ class List_View extends View {
159
  $url = '';
160
 
161
  $upcoming = tribe_events()->by_args( $this->setup_repository_args( $this->context->alter( [
162
- 'eventDisplay' => 'list',
163
  'paged' => $page,
164
  ] ) ) );
165
 
 
 
166
  if ( $upcoming->count() > 0 ) {
167
- $upcoming_url_object = clone $this->url->add_query_args( array_filter( [
168
  'post_type' => TEC::POSTTYPE,
169
- 'eventDisplay' => 'list',
170
  $this->page_key => $page,
171
  'eventDate' => $event_date_var,
172
  'tribe-bar-search' => $this->context->get( 'keyword' ),
173
- ] ) );
 
 
 
 
174
 
175
  $upcoming_url = (string) $upcoming_url_object;
176
 
@@ -180,7 +207,7 @@ class List_View extends View {
180
 
181
  // We've got rewrite rules handling `eventDate`, but not List. Let's remove it to build the URL.
182
  $url = tribe( 'events.rewrite' )->get_clean_url(
183
- remove_query_arg( [ 'eventDate' ], $upcoming_url )
184
  );
185
 
186
  // Let's re-add the `eventDate` if we had one and we're not already passing it with one of its aliases.
9
  namespace Tribe\Events\Views\V2\Views;
10
 
11
  use Tribe\Events\Views\V2\View;
12
+ use Tribe\Events\Views\V2\Views\Traits\List_Behavior;
13
  use Tribe__Context;
14
  use Tribe__Events__Main as TEC;
15
+ use Tribe__Events__Rewrite as TEC_Rewrite;
16
  use Tribe__Utils__Array as Arr;
17
+ use Tribe\Events\Views\V2\Utils;
18
 
19
  class List_View extends View {
20
  use List_Behavior;
48
  * {@inheritDoc}
49
  */
50
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
51
+ if ( isset( $this->cached_urls[ __METHOD__ ] ) ) {
52
+ return $this->cached_urls[ __METHOD__ ];
53
+ }
54
+
55
  $current_page = (int) $this->context->get( 'page', 1 );
56
  $display = $this->context->get( 'event_display_mode', 'list' );
57
 
58
  if ( 'past' === $display ) {
59
+ $url = parent::next_url( $canonical, [ Utils\View::get_past_event_display_key() => 'past' ] );
60
  } else if ( $current_page > 1 ) {
61
  $url = parent::prev_url( $canonical );
62
  } else {
65
 
66
  $url = $this->filter_prev_url( $canonical, $url );
67
 
68
+ $this->cached_urls[ __METHOD__ ] = $url;
69
+
70
  return $url;
71
  }
72
 
74
  * {@inheritDoc}
75
  */
76
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
77
+ if ( isset( $this->cached_urls[ __METHOD__ ] ) ) {
78
+ return $this->cached_urls[ __METHOD__ ];
79
+ }
80
+
81
  $current_page = (int) $this->context->get( 'page', 1 );
82
  $display = $this->context->get( 'event_display_mode', 'list' );
83
 
84
  if ( $this->slug === $display || 'default' === $display ) {
85
  $url = parent::next_url( $canonical );
86
+ } elseif ( $current_page > 1 ) {
87
+ $url = parent::prev_url( $canonical, [ Utils\View::get_past_event_display_key() => 'past' ] );
88
  } else {
89
  $url = $this->get_upcoming_url( $canonical );
90
  }
91
 
92
  $url = $this->filter_next_url( $canonical, $url );
93
 
94
+ $this->cached_urls[ __METHOD__ ] = $url;
95
+
96
  return $url;
97
  }
98
 
116
  'paged' => $page,
117
  ] ) ) );
118
 
119
+ $past->order_by( '__none' );
120
+
121
  if ( $past->count() > 0 ) {
122
+ $event_display_key = Utils\View::get_past_event_display_key();
123
+ $query_args = [
124
  'post_type' => TEC::POSTTYPE,
125
+ $event_display_key => 'past',
126
  'eventDate' => $event_date_var,
127
  $this->page_key => $page,
128
  'tribe-bar-search' => $this->context->get( 'keyword' ),
129
+ ];
130
+
131
+ $query_args = $this->filter_query_args( $query_args, $canonical );
132
+
133
+ $past_url_object = clone $this->url->add_query_args( array_filter( $query_args ) );
134
 
135
  $past_url = (string) $past_url_object;
136
 
139
  }
140
 
141
  // We've got rewrite rules handling `eventDate` and `eventDisplay`, but not List. Let's remove it.
142
+ $canonical_url = TEC_Rewrite::instance()->get_clean_url(
143
  add_query_arg(
144
  [ 'eventDisplay' => $this->slug ],
145
  remove_query_arg( [ 'eventDate' ], $past_url )
147
  );
148
 
149
  // We use the `eventDisplay` query var as a display mode indicator: we have to make sure it's there.
150
+ $url = add_query_arg( [ $event_display_key => 'past' ], $canonical_url );
151
 
152
  // Let's re-add the `eventDate` if we had one and we're not already passing it with one of its aliases.
153
  if ( ! (
180
  $url = '';
181
 
182
  $upcoming = tribe_events()->by_args( $this->setup_repository_args( $this->context->alter( [
183
+ 'eventDisplay' => $this->slug,
184
  'paged' => $page,
185
  ] ) ) );
186
 
187
+ $upcoming->order_by( '__none' );
188
+
189
  if ( $upcoming->count() > 0 ) {
190
+ $query_args = [
191
  'post_type' => TEC::POSTTYPE,
192
+ 'eventDisplay' => $this->slug,
193
  $this->page_key => $page,
194
  'eventDate' => $event_date_var,
195
  'tribe-bar-search' => $this->context->get( 'keyword' ),
196
+ ];
197
+
198
+ $query_args = $this->filter_query_args( $query_args, $canonical );
199
+
200
+ $upcoming_url_object = clone $this->url->add_query_args( array_filter( $query_args ) );
201
 
202
  $upcoming_url = (string) $upcoming_url_object;
203
 
207
 
208
  // We've got rewrite rules handling `eventDate`, but not List. Let's remove it to build the URL.
209
  $url = tribe( 'events.rewrite' )->get_clean_url(
210
+ remove_query_arg( [ 'eventDate', 'tribe_event_display' ], $upcoming_url )
211
  );
212
 
213
  // Let's re-add the `eventDate` if we had one and we're not already passing it with one of its aliases.
src/Tribe/Views/V2/Views/Month_View.php CHANGED
@@ -58,6 +58,10 @@ class Month_View extends By_Day_View {
58
  * {@inheritDoc}
59
  */
60
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
 
 
 
 
61
  // Setup the Default date for the month view here.
62
  $default_date = 'today';
63
  $date = $this->context->get( 'event_date', $default_date );
@@ -90,14 +94,21 @@ class Month_View extends By_Day_View {
90
  }
91
 
92
  $url = $this->build_url_for_date( $prev_date, $canonical, $passthru_vars );
 
 
 
93
 
94
- return $this->filter_prev_url( $canonical, $url );
95
  }
96
 
97
  /**
98
  * {@inheritDoc}
99
  */
100
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
 
 
 
 
101
  // Setup the Default date for the month view here.
102
  $default_date = 'today';
103
  $date = $this->context->get( 'event_date', $default_date );
@@ -130,8 +141,11 @@ class Month_View extends By_Day_View {
130
  }
131
 
132
  $url = $this->build_url_for_date( $next_date, $canonical, $passthru_vars );
 
 
 
133
 
134
- return $this->filter_next_url( $canonical, $url );
135
  }
136
 
137
  /**
@@ -211,26 +225,28 @@ class Month_View extends By_Day_View {
211
 
212
  $days = $this->get_days_data( $grid_days );
213
 
214
- $grid_date_str = $this->context->get( 'event_date', 'today' );
215
- $grid_date = Dates::build_date_object( $grid_date_str );
216
- $month_and_year_format = tribe_get_option( 'monthAndYearFormat', 'F Y' );
 
217
 
218
  $prev_month_num = Dates::build_date_object( $grid_date_str )->modify( 'first day of last month' )->format( 'n' );
219
  $next_month_num = Dates::build_date_object( $grid_date_str )->modify( 'first day of next month' )->format( 'n' );
220
  $prev_month = Dates::wp_locale_month( $prev_month_num, 'short' );
221
  $next_month = Dates::wp_locale_month( $next_month_num, 'short' );
222
 
223
- $today = $this->context->get( 'today' );
224
- $template_vars['the_date'] = $grid_date;
225
- $template_vars['today_date'] = Dates::build_date_object( $today )->format( 'Y-m-d' );
226
- $template_vars['grid_date'] = $grid_date->format( 'Y-m-d' );
227
- $template_vars['formatted_grid_date'] = $grid_date->format( $month_and_year_format );
228
- $template_vars['events'] = $grid_days;
229
- $template_vars['days'] = $days;
230
- $template_vars['prev_label'] = $prev_month;
231
- $template_vars['next_label'] = $next_month;
232
- $template_vars['messages'] = $this->messages->to_array();
233
- $template_vars['grid_start_date'] = $grid_start_date;
 
234
 
235
  return $template_vars;
236
  }
@@ -330,12 +346,13 @@ class Month_View extends By_Day_View {
330
  );
331
 
332
  $start_of_week = get_option( 'start_of_week', 0 );
 
333
 
334
  $day_url = tribe_events_get_url( [ 'eventDisplay' => 'day', 'eventDate' => $day_date ] );
335
 
336
- $day_data = [
337
  'date' => $day_date,
338
- 'is_start_of_week' => $start_of_week === $date_object->format( 'w' ),
339
  'year_number' => $date_object->format( 'Y' ),
340
  'month_number' => $date_object->format( 'm' ),
341
  'day_number' => $date_object->format( 'j' ),
58
  * {@inheritDoc}
59
  */
60
  public function prev_url( $canonical = false, array $passthru_vars = [] ) {
61
+ if ( isset( $this->cached_urls[ __METHOD__ ] ) ) {
62
+ return $this->cached_urls[ __METHOD__ ];
63
+ }
64
+
65
  // Setup the Default date for the month view here.
66
  $default_date = 'today';
67
  $date = $this->context->get( 'event_date', $default_date );
94
  }
95
 
96
  $url = $this->build_url_for_date( $prev_date, $canonical, $passthru_vars );
97
+ $url = $this->filter_prev_url( $canonical, $url );
98
+
99
+ $this->cached_urls[ __METHOD__ ] = $url;
100
 
101
+ return $url;
102
  }
103
 
104
  /**
105
  * {@inheritDoc}
106
  */
107
  public function next_url( $canonical = false, array $passthru_vars = [] ) {
108
+ if ( isset( $this->cached_urls[ __METHOD__ ] ) ) {
109
+ return $this->cached_urls[ __METHOD__ ];
110
+ }
111
+
112
  // Setup the Default date for the month view here.
113
  $default_date = 'today';
114
  $date = $this->context->get( 'event_date', $default_date );
141
  }
142
 
143
  $url = $this->build_url_for_date( $next_date, $canonical, $passthru_vars );
144
+ $url = $this->filter_next_url( $canonical, $url );
145
+
146
+ $this->cached_urls[ __METHOD__ ] = $url;
147
 
148
+ return $url;
149
  }
150
 
151
  /**
225
 
226
  $days = $this->get_days_data( $grid_days );
227
 
228
+ $grid_date_str = $this->context->get( 'event_date', 'today' );
229
+ $grid_date = Dates::build_date_object( $grid_date_str );
230
+ $month_and_year_format = tribe_get_option( 'monthAndYearFormat', 'F Y' );
231
+ $month_and_year_format_compact = Dates::datepicker_formats( tribe_get_option( 'datepickerFormat', 'm1' ) );
232
 
233
  $prev_month_num = Dates::build_date_object( $grid_date_str )->modify( 'first day of last month' )->format( 'n' );
234
  $next_month_num = Dates::build_date_object( $grid_date_str )->modify( 'first day of next month' )->format( 'n' );
235
  $prev_month = Dates::wp_locale_month( $prev_month_num, 'short' );
236
  $next_month = Dates::wp_locale_month( $next_month_num, 'short' );
237
 
238
+ $today = $this->context->get( 'today' );
239
+ $template_vars['the_date'] = $grid_date;
240
+ $template_vars['today_date'] = Dates::build_date_object( $today )->format( 'Y-m-d' );
241
+ $template_vars['grid_date'] = $grid_date->format( 'Y-m-d' );
242
+ $template_vars['formatted_grid_date'] = $grid_date->format_i18n( $month_and_year_format );
243
+ $template_vars['formatted_grid_date_mobile'] = $grid_date->format( $month_and_year_format_compact );
244
+ $template_vars['events'] = $grid_days;
245
+ $template_vars['days'] = $days;
246
+ $template_vars['prev_label'] = $prev_month;
247
+ $template_vars['next_label'] = $next_month;
248
+ $template_vars['messages'] = $this->messages->to_array();
249
+ $template_vars['grid_start_date'] = $grid_start_date;
250
 
251
  return $template_vars;
252
  }
346
  );
347
 
348
  $start_of_week = get_option( 'start_of_week', 0 );
349
+ $is_start_of_week = (int)$start_of_week === (int)$date_object->format( 'w' );
350
 
351
  $day_url = tribe_events_get_url( [ 'eventDisplay' => 'day', 'eventDate' => $day_date ] );
352
 
353
+ $day_data = [
354
  'date' => $day_date,
355
+ 'is_start_of_week' => $is_start_of_week,
356
  'year_number' => $date_object->format( 'Y' ),
357
  'month_number' => $date_object->format( 'm' ),
358
  'day_number' => $date_object->format( 'j' ),
src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Provides methods for Views for breakpoint behavior.
4
+ *
5
+ * @since 5.0.0
6
+ *
7
+ * @package Tribe\Events\Views\V2\Views\Traits
8
+ */
9
+
10
+ namespace Tribe\Events\Views\V2\Views\Traits;
11
+
12
+ use Tribe\Events\Views\V2\View;
13
+
14
+ /**
15
+ * Trait Breakpoint_Behavior
16
+ *
17
+ * @since 5.0.0
18
+ *
19
+ * @package Tribe\Events\Views\V2\Views\Traits
20
+ *
21
+ * @property string $string The slug of the View instance.
22
+ */
23
+ trait Breakpoint_Behavior {
24
+ /**
25
+ * Default breakpoints used by TEC views.
26
+ *
27
+ * @since 5.0.0
28
+ *
29
+ * @var array
30
+ */
31
+ protected $default_breakpoints = [
32
+ 'xsmall' => 500,
33
+ 'medium' => 768,
34
+ 'full' => 960,
35
+ ];
36
+
37
+ /**
38
+ * Returns a given breakpoint.
39
+ *
40
+ * @since 5.0.0
41
+ *
42
+ * @param string $name Which index we getting the breakpoint for.
43
+ *
44
+ * @return int Returns the breakpoint with that given name or 0 when not available.
45
+ */
46
+ public function get_breakpoint( $name ) {
47
+ $breakpoints = $this->get_breakpoints();
48
+ $breakpoint = false;
49
+
50
+ if ( isset( $breakpoints[ $name ] ) ) {
51
+ $breakpoint = $breakpoints[ $name ];
52
+ }
53
+
54
+ return absint( $breakpoint );
55
+ }
56
+
57
+ /**
58
+ * Returns all of the available breakpoints.
59
+ *
60
+ * @since 5.0.0
61
+ *
62
+ * @return array Indexed array of all available breakpoints.
63
+ */
64
+ public function get_breakpoints() {
65
+ $breakpoints = $this->default_breakpoints;
66
+
67
+ /**
68
+ * Filters all the breakpoints available.
69
+ *
70
+ * @since 5.0.0
71
+ *
72
+ * @param array $breakpoints All breapoints available.
73
+ * @param View $this The current View instance being rendered.
74
+ */
75
+ $breakpoints = apply_filters( "tribe_events_views_v2_view_breakpoints", $breakpoints, $this );
76
+
77
+ /**
78
+ * Filters the medium breakpoint value for a specific view.
79
+ *
80
+ * @since 5.0.0
81
+ *
82
+ * @param array $breakpoints All breapoints available.
83
+ * @param View $this The current View instance being rendered.
84
+ */
85
+ $breakpoints = apply_filters( "tribe_events_views_v2_view_{$this->slug}_breakpoints", $breakpoints, $this );
86
+
87
+ return $breakpoints;
88
+ }
89
+ }
src/Tribe/Views/V2/Views/Traits/HTML_Cache.php ADDED
@@ -0,0 +1,351 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Provides methods for HTML caching for views
4
+ *
5
+ * @since 4.9.11
6
+ *
7
+ * @package Tribe\Events\Views\V2\Views
8
+ */
9
+
10
+ namespace Tribe\Events\Views\V2\Views\Traits;
11
+
12
+ use Tribe__Cache_Listener as Cache_Listener;
13
+ use Tribe__Context as Context;
14
+ use Tribe__Date_Utils as Dates;
15
+ use Tribe\Events\Views\V2\View;
16
+
17
+ /**
18
+ * Trait HTML_Cache
19
+ *
20
+ * @since 5.0.0
21
+ *
22
+ * @package Tribe\Events\Views\V2\Views
23
+ *
24
+ * @property Context $context The current View context.
25
+ */
26
+ trait HTML_Cache {
27
+ /**
28
+ * Return cached HTML if enabled and cache is set.
29
+ *
30
+ * @since 5.0.0
31
+ *
32
+ * @return null|string
33
+ */
34
+ public function maybe_get_cached_html() {
35
+
36
+ if ( ! $this->should_cache_html() ) {
37
+ return;
38
+ }
39
+
40
+ $cache_key = $this->get_cache_html_key();
41
+
42
+ $cached_html = tribe( 'cache' )->get_transient( $cache_key, $this->cache_html_triggers() );
43
+
44
+ if ( ! $cached_html ) {
45
+ return;
46
+ }
47
+
48
+ $cached_html = $this->inject_nonces_into_cached_html( $cached_html );
49
+
50
+ return $cached_html;
51
+ }
52
+
53
+ /**
54
+ * If caching is enabled, set the cache.
55
+ *
56
+ * @since 5.0.0
57
+ *
58
+ * @param string $html HTML markup for view.
59
+ *
60
+ * @return boolean If we successfully cached on the transient.
61
+ */
62
+ public function maybe_cache_html( $html ) {
63
+ /**
64
+ * Filter the cache TTL
65
+ *
66
+ * @since 5.0.0
67
+ *
68
+ * @param int $cache_ttl Cache time to live.
69
+ * @param Context $context The View current context.
70
+ * @param View $this The current View instance.
71
+ */
72
+ $cache_expiration = apply_filters( 'tribe_events_views_v2_cache_html_expiration', DAY_IN_SECONDS, $this->get_context(), $this );
73
+
74
+ $cache_key = $this->get_cache_html_key();
75
+
76
+ if ( ! $this->should_cache_html() ) {
77
+ return false;
78
+ }
79
+
80
+ $html = $this->extract_nonces_before_cache( $html );
81
+
82
+ return tribe( 'cache' )->set_transient( $cache_key, $html, $cache_expiration, $this->cache_html_triggers() );
83
+ }
84
+
85
+ /**
86
+ * Fetch the HTML cache triggers.
87
+ *
88
+ * @since 5.0.0
89
+ *
90
+ * @return array
91
+ */
92
+ protected function cache_html_triggers() {
93
+ return [
94
+ Cache_Listener::TRIGGER_SAVE_POST,
95
+ Cache_Listener::TRIGGER_UPDATED_OPTION,
96
+ Cache_Listener::TRIGGER_GENERATE_REWRITE_RULES,
97
+ ];
98
+ }
99
+
100
+ /**
101
+ * Determine if HTML of the current view needs to be cached.
102
+ *
103
+ * @since 5.0.0
104
+ *
105
+ * @return bool
106
+ */
107
+ public function should_cache_html() {
108
+ $context = $this->get_context();
109
+
110
+ $cached_views = [
111
+ 'month' => true,
112
+ 'week' => true,
113
+ ];
114
+
115
+ $should_cache = isset( $cached_views[ $this->get_slug() ] ) && $this->should_enable_html_cache( $context );
116
+
117
+ /**
118
+ * Should the v2 view HTML be cached?
119
+ *
120
+ * @since 5.0.0
121
+ *
122
+ * @param bool $should_cache_html Should the current view have its HTML cached?
123
+ * @param Context $context The View current context.
124
+ * @param View $this The current View instance.
125
+ */
126
+ return (bool) apply_filters( 'tribe_events_views_v2_should_cache_html', $should_cache, $context, $this );
127
+ }
128
+
129
+ /**
130
+ * Determine if HTML of the current view needs to be cached.
131
+ *
132
+ * @since 5.0.0
133
+ *
134
+ * @return bool
135
+ */
136
+ public function get_cache_html_key() {
137
+ $context = $this->get_context();
138
+ $args = $context->to_array();
139
+
140
+ unset( $args['now'] );
141
+
142
+ $cache_key = 'tribe_views_v2_cache_' . substr( sha1( wp_json_encode( $args ) ), 0, 12 ) . ':';
143
+
144
+ /**
145
+ * Filter the cached html key for v2 event views
146
+ *
147
+ * @since 5.0.0
148
+ *
149
+ * @param string $cache_html_key Cache HTML key.
150
+ * @param Context $context The View current context.
151
+ * @param View $this The current View instance.
152
+ */
153
+ return apply_filters( 'tribe_events_views_v2_cache_html_key', $cache_key, $context, $this );
154
+ }
155
+
156
+ /**
157
+ * Indicates if HTML cache should be enabled or not.
158
+ *
159
+ * If the HTML cache setting itself is not enabled (or not set) then this
160
+ * method will always return false.
161
+ *
162
+ * In other cases, the default rules are to cache everything in the 2 months past
163
+ * to 12 months in the future range. This policy can be refined or replaced via
164
+ * the 'tribe_events_enable_month_view_cache' filter hook.
165
+ *
166
+ * @since 5.0.0
167
+ *
168
+ * @param Context $context Context object of the request.
169
+ *
170
+ * @return bool
171
+ */
172
+ protected function should_enable_html_cache( $context ) {
173
+ $event_date = $context->get( 'event_date' );
174
+
175
+ // Respect the month view caching setting.
176
+ if ( ! tribe_get_option( 'enable_month_view_cache', true ) ) {
177
+ return false;
178
+ }
179
+
180
+ // Default to always caching the current month.
181
+ if ( ! $event_date ) {
182
+ return true;
183
+ }
184
+
185
+ // If the eventDate argument is not in the expected format then do not cache.
186
+ if ( ! preg_match( '/^[0-9]{4}-[0-9]{1,2}$/', $event_date ) ) {
187
+ return false;
188
+ }
189
+
190
+ // If the requested month is more than 2 months in the past, do not cache.
191
+ if ( $event_date < Dates::build_date_object( '-2 months' )->format( Dates::DBYEARMONTHTIMEFORMAT ) ) {
192
+ return false;
193
+ }
194
+
195
+ // If the requested month is more than 1yr in the future, do not cache.
196
+ if ( $event_date > Dates::build_date_object( '+1 year' )->format( Dates::DBYEARMONTHTIMEFORMAT ) ) {
197
+ return false;
198
+ }
199
+
200
+ // In all other cases, let's cache it!
201
+ return true;
202
+ }
203
+
204
+ /**
205
+ * Get the list of fields/input we will do replacement for HTML Cache.
206
+ *
207
+ * @since 5.0.0
208
+ *
209
+ * @return array List of fields/input that we are going to replace.
210
+ */
211
+ protected function get_view_nonce_fields() {
212
+ $nonces = [
213
+ 'wp_rest' => 'tribe-events-views[_wpnonce]',
214
+ ];
215
+
216
+ /**
217
+ * Filter to control nonce fields replacement for HTML Cache.
218
+ *
219
+ * @since 5.0.0
220
+ *
221
+ * @param array $nonces List of action and field name where the nonce is stored.
222
+ * @param Context $context Context from the current view.
223
+ * @param View $view Which view instance we are currently rendering.
224
+ */
225
+ return apply_filters( 'tribe_events_views_v2_get_view_nonce_fields', $nonces, $this->get_context(), $this );
226
+ }
227
+
228
+ /**
229
+ * Get the list of attributes we will do replacement for HTML Cache.
230
+ *
231
+ * @since 5.0.0
232
+ *
233
+ * @return array List of attributes that we are going to replace.
234
+ */
235
+ protected function get_view_nonce_attributes() {
236
+ $nonces = [
237
+ 'wp_rest' => 'data-view-rest-nonce',
238
+ ];
239
+
240
+ /**
241
+ * Filter to control nonce attributes replacement for HTML Cache.
242
+ *
243
+ * @since 5.0.0
244
+ *
245
+ * @param array $nonces List of action and field name where the nonce is stored.
246
+ * @param Context $context Context from the current view.
247
+ * @param View $view Which view instance we are currently rendering.
248
+ */
249
+ return apply_filters( 'tribe_events_views_v2_get_view_nonce_attributes', $nonces, $this->get_context(), $this );
250
+ }
251
+
252
+ /**
253
+ * Get the list of JSON properties we will do replacement for HTML Cache.
254
+ *
255
+ * @since 5.0.0
256
+ *
257
+ * @return array List of json properties that we are going to replace.
258
+ */
259
+ protected function get_view_nonce_json_properties() {
260
+ $nonces = [
261
+ 'wp_rest' => 'rest_nonce',
262
+ ];
263
+
264
+ /**
265
+ * Filter to control nonce json properties replacement for HTML Cache.
266
+ *
267
+ * @since 5.0.0
268
+ *
269
+ * @param array $nonces List of action and field name where the nonce is stored.
270
+ * @param Context $context Context from the current view.
271
+ * @param View $view Which view instance we are currently rendering.
272
+ */
273
+ return apply_filters( 'tribe_events_views_v2_get_view_nonce_json_properties', $nonces, $this->get_context(), $this );
274
+ }
275
+
276
+ /**
277
+ * Does string replacement on the HTML cached based on the possible places we look for cached nonce values to inject
278
+ * the correct string placeholder so we can remove it later.
279
+ *
280
+ * @since 5.0.0
281
+ *
282
+ * @param string $html HTML with the nonces to be replaced.
283
+ *
284
+ * @return string HTML after replacement is complete.
285
+ */
286
+ protected function extract_nonces_before_cache( $html ) {
287
+ $nonce_fields = $this->get_view_nonce_fields();
288
+ $nonce_attrs = $this->get_view_nonce_attributes();
289
+ $nonce_props = $this->get_view_nonce_json_properties();
290
+
291
+ foreach ( $nonce_fields as $action => $field ) {
292
+ $html = preg_replace( '!(<input[^>]+name="' . preg_quote( $field, '!' ) . '"[^>]+value=")[^"]*("[^>]*>)!', '\1%%NONCE:' . $action . '%%\2', $html );
293
+ $html = preg_replace( '!(<input[^>]+value=")[^"]*("[^>]+name="' . preg_quote( $field, '!' ) . '"[^>]*>)!', '\1%%NONCE:' . $action . '%%\2', $html );
294
+ }
295
+
296
+ foreach ( $nonce_attrs as $action => $attr ) {
297
+ $html = preg_replace( '!(' . preg_quote( $attr, '!' ) . '=")[^"]*(")!', '\1%%NONCE:' . $action . '%%\2', $html );
298
+ }
299
+
300
+ foreach ( $nonce_props as $action => $prop ) {
301
+ $html = preg_replace( '!("' . preg_quote( $prop, '!' ) . '":")[^"]*(")!', '\1%%NONCE:' . $action . '%%\2', $html );
302
+ }
303
+
304
+ return $html;
305
+ }
306
+
307
+ /**
308
+ * Does string replacement on the HTML cached based on the possible places we look for cached nonce values.
309
+ *
310
+ * @since 5.0.0
311
+ *
312
+ * @param string $html HTML with the nonces to be replaced.
313
+ *
314
+ * @return string HTML after replacement is complete.
315
+ */
316
+ protected function inject_nonces_into_cached_html( $html ) {
317
+ $nonce_fields = $this->get_view_nonce_fields();
318
+ $nonce_attrs = $this->get_view_nonce_attributes();
319
+ $nonce_props = $this->get_view_nonce_json_properties();
320
+
321
+ $nonce_actions = array_merge( array_keys( $nonce_fields ), array_keys( $nonce_attrs ), array_keys( $nonce_props ) );
322
+ $nonce_actions = array_unique( $nonce_actions );
323
+
324
+ foreach ( $nonce_actions as $nonce_action ) {
325
+ $nonce = $this->maybe_generate_nonce( $nonce_action );
326
+ $html = str_replace( "%%NONCE:{$nonce_action}%%", $nonce, $html );
327
+ }
328
+
329
+ return $html;
330
+ }
331
+
332
+ /**
333
+ * Get a generated nonce required for HTML cache replacement based on an action provided.
334
+ *
335
+ * @since 5.0.0
336
+ *
337
+ * @param string $action Which action will be used to generate the nonce.
338
+ *
339
+ * @return string Nonce based on action passed.
340
+ */
341
+ protected function maybe_generate_nonce( $action ) {
342
+ $generated_nonces = tribe_get_var( __METHOD__, [] );
343
+
344
+ if ( ! isset( $generated_nonces[ $action ] ) ) {
345
+ $generated_nonces[ $action ] = wp_create_nonce( $action );
346
+ tribe_set_var( __METHOD__, $generated_nonces );
347
+ }
348
+
349
+ return $generated_nonces[ $action ];
350
+ }
351
+ }
src/Tribe/Views/V2/Views/{List_Behavior.php → Traits/List_Behavior.php} RENAMED
@@ -7,7 +7,7 @@
7
  * @package Tribe\Events\Views\V2\Views
8
  */
9
 
10
- namespace Tribe\Events\Views\V2\Views;
11
 
12
  use Tribe__Context as Context;
13
  use Tribe__Date_Utils as Dates;
@@ -83,15 +83,36 @@ trait List_Behavior {
83
  $show_now = $show_now && $this->context->get( 'page' ) <= 1;
84
 
85
  if ( ! $is_past ) {
86
- $start = $first_event instanceof \WP_Post ? $first_event->dates->start_display : $user_date;
87
- $end = $last_event instanceof \WP_Post ? $last_event->dates->start_display : $user_date;
 
 
 
 
 
 
 
 
 
 
 
88
  } else {
89
  $start = $first_event instanceof \WP_Post ? $first_event->dates->start_display : $user_date;
90
  $end = $last_event instanceof \WP_Post ? $last_event->dates->start_display : $user_date;
91
  }
92
 
93
- $end_is_now = ( $is_past && 1 === $page )
94
- || $now->format( 'Y-m-d' ) === $end->format( 'Y-m-d' );
 
 
 
 
 
 
 
 
 
 
95
 
96
  // Do the events all have the same start dates?
97
  $diff_dates = count(
@@ -106,7 +127,7 @@ trait List_Behavior {
106
  )
107
  ) > 1;
108
 
109
- $show_end = ( $is_past && 1 === $page )
110
  || (
111
  $has_next_page
112
  && $diff_dates
@@ -117,17 +138,28 @@ trait List_Behavior {
117
  $start_format_w_year = $today->format( 'Y' ) !== $start->format( 'Y' );
118
  $start_label_format = tribe_get_date_format( $start_format_w_year );
119
 
120
- $start_time_label = date_i18n( $start_label_format, $start_timestamp_w_offset );
 
121
 
122
- $now_label = $now_text;
 
123
  if ( empty( $date_sorted_events ) || ! $has_next_page ) {
124
- $onwards_label_start = $show_now ? $now_text : $start_time_label;
125
- $now_label = sprintf(
 
 
126
  // translators: the placeholder is for the date range start, e.g. "Now" or "October 23".
127
  _x( '%s onwards', 'The datepicker range definition when no events are found.', 'the-events-calendar' ),
128
  $onwards_label_start
129
  );
130
- $show_now = true;
 
 
 
 
 
 
 
131
  }
132
 
133
  $end_timestamp_w_offset = $end->getTimestamp() + $end->getOffset();
@@ -137,9 +169,10 @@ trait List_Behavior {
137
 
138
  $template_vars['show_now'] = $show_now;
139
  $template_vars['now_label'] = $now_label;
 
140
  $template_vars['show_end'] = $show_end;
141
  $template_vars['selected_start_datetime'] = date_i18n( 'Y-m-d', $start_timestamp_w_offset );
142
- $template_vars['selected_start_date_mobile'] = $start->format( $compact_date_format );
143
  $template_vars['selected_start_date_label'] = $start_time_label;
144
  $template_vars['selected_end_datetime'] = date_i18n( 'Y-m-d', $end_timestamp_w_offset );
145
  $template_vars['selected_end_date_mobile'] = $end->format( $compact_date_format );
7
  * @package Tribe\Events\Views\V2\Views
8
  */
9
 
10
+ namespace Tribe\Events\Views\V2\Views\Traits;
11
 
12
  use Tribe__Context as Context;
13
  use Tribe__Date_Utils as Dates;
83
  $show_now = $show_now && $this->context->get( 'page' ) <= 1;
84
 
85
  if ( ! $is_past ) {
86
+ if ( $page === 1 ) {
87
+ // On the first page show the date the user has implicitly (today) or explicitly (w/ bar) selected.
88
+ $start = $user_date;
89
+ } else {
90
+ // On following pages use the date of the first event, if any.
91
+ $start = $first_event instanceof \WP_Post ? $first_event->dates->start_display : $user_date;
92
+ }
93
+ $end = $last_event instanceof \WP_Post ? $last_event->dates->start_display : $user_date;
94
+
95
+ // Never let the start of the range be lower than the top bar date.
96
+ if ( $start < $user_date ) {
97
+ $start = $user_date;
98
+ }
99
  } else {
100
  $start = $first_event instanceof \WP_Post ? $first_event->dates->start_display : $user_date;
101
  $end = $last_event instanceof \WP_Post ? $last_event->dates->start_display : $user_date;
102
  }
103
 
104
+ // Never let the start of the range exceed the start.
105
+ if ( $start > $end ) {
106
+ $end = $user_date;
107
+ }
108
+
109
+ $is_first_past_page = $is_past && 1 === $page;
110
+
111
+ if ( $is_first_past_page ) {
112
+ $end = $user_date;
113
+ }
114
+
115
+ $end_is_now = $now->format( 'Y-m-d' ) === $end->format( 'Y-m-d' );
116
 
117
  // Do the events all have the same start dates?
118
  $diff_dates = count(
127
  )
128
  ) > 1;
129
 
130
+ $show_end = ( $is_first_past_page )
131
  || (
132
  $has_next_page
133
  && $diff_dates
138
  $start_format_w_year = $today->format( 'Y' ) !== $start->format( 'Y' );
139
  $start_label_format = tribe_get_date_format( $start_format_w_year );
140
 
141
+ $start_time_label = date_i18n( $start_label_format, $start_timestamp_w_offset );
142
+ $start_date_mobile = $start->format( $compact_date_format );
143
 
144
+ $now_label = $now_text;
145
+ $now_label_mobile = $now_text;
146
  if ( empty( $date_sorted_events ) || ! $has_next_page ) {
147
+ $onwards_label_start = $show_now ? $now_text : $start_time_label;
148
+ $onwards_label_start_mobile = $show_now ? $now_text : $start_date_mobile;
149
+
150
+ $now_label = sprintf(
151
  // translators: the placeholder is for the date range start, e.g. "Now" or "October 23".
152
  _x( '%s onwards', 'The datepicker range definition when no events are found.', 'the-events-calendar' ),
153
  $onwards_label_start
154
  );
155
+
156
+ $now_label_mobile = sprintf(
157
+ // translators: the placeholder is for the date range start, e.g. "Now" or "1/1/2020".
158
+ _x( '%s onwards', 'The datepicker range definition when no events are found (for mobile).', 'the-events-calendar' ),
159
+ $onwards_label_start_mobile
160
+ );
161
+
162
+ $show_now = true;
163
  }
164
 
165
  $end_timestamp_w_offset = $end->getTimestamp() + $end->getOffset();
169
 
170
  $template_vars['show_now'] = $show_now;
171
  $template_vars['now_label'] = $now_label;
172
+ $template_vars['now_label_mobile'] = $now_label_mobile;
173
  $template_vars['show_end'] = $show_end;
174
  $template_vars['selected_start_datetime'] = date_i18n( 'Y-m-d', $start_timestamp_w_offset );
175
+ $template_vars['selected_start_date_mobile'] = $start_date_mobile;
176
  $template_vars['selected_start_date_label'] = $start_time_label;
177
  $template_vars['selected_end_datetime'] = date_i18n( 'Y-m-d', $end_timestamp_w_offset );
178
  $template_vars['selected_end_date_mobile'] = $end->format( $compact_date_format );
src/Tribe/iCal.php CHANGED
@@ -439,18 +439,18 @@ class Tribe__Events__iCal {
439
  $timezone = $row['timezone'];
440
 
441
  $ordered = [
442
- 'start' => array_column( $row['events'], 'start_year' ),
443
- 'end' => array_column( $row['events'], 'end_year' ),
444
  ];
445
 
446
  sort( $ordered['start'] );
447
  rsort( $ordered['end'] );
448
 
449
  $ordered['start'] = array_values( $ordered['start'] );
450
- $ordered['end'] = array_values( $ordered['end'] );
451
 
452
  $start = reset( $ordered['start'] );
453
- $end = reset( $ordered['end'] );
454
 
455
  if ( empty( $start ) || empty( $end ) ) {
456
  continue;
439
  $timezone = $row['timezone'];
440
 
441
  $ordered = [
442
+ 'start' => wp_list_pluck( $row['events'], 'start_year' ),
443
+ 'end' => wp_list_pluck( $row['events'], 'end_year' ),
444
  ];
445
 
446
  sort( $ordered['start'] );
447
  rsort( $ordered['end'] );
448
 
449
  $ordered['start'] = array_values( $ordered['start'] );
450
+ $ordered['end'] = array_values( $ordered['end'] );
451
 
452
  $start = reset( $ordered['start'] );
453
+ $end = reset( $ordered['end'] );
454
 
455
  if ( empty( $start ) || empty( $end ) ) {
456
  continue;
src/admin-views/tribe-options-general.php CHANGED
@@ -50,11 +50,11 @@ $general_tab_fields = Tribe__Main::array_insert_before_key(
50
  'liveFiltersUpdate' => [
51
  'type' => 'checkbox_bool',
52
  'label' => esc_html__( 'Enable live refresh', 'the-events-calendar' ),
53
- 'tooltip' => tribe_get_option( 'tribeDisableTribeBar', false ) == true ? esc_html__( 'This option is disabled when "Disable the Event Search Bar" is checked on the Display settings tab.', 'the-events-calendar' ) : esc_html__( 'Instantly updates the calendar view when searching for or filtering events.', 'the-events-calendar' ),
54
- 'attributes' => tribe_get_option( 'tribeDisableTribeBar', false ) == true ? [ 'disabled' => 'disabled' ] : null,
55
  'default' => true,
56
  'validation_type' => 'boolean',
57
- 'class' => tribe_get_option( 'tribeDisableTribeBar', false ) == true ? 'tribe-fieldset-disabled' : null,
58
  ],
59
  'showComments' => [
60
  'type' => 'checkbox_bool',
50
  'liveFiltersUpdate' => [
51
  'type' => 'checkbox_bool',
52
  'label' => esc_html__( 'Enable live refresh', 'the-events-calendar' ),
53
+ 'tooltip' => tribe_get_option( 'tribeDisableTribeBar', false ) == true && ! tribe_events_views_v2_is_enabled() ? esc_html__( 'This option is disabled when "Disable the Event Search Bar" is checked on the Display settings tab.', 'the-events-calendar' ) : esc_html__( 'Instantly updates the calendar view when searching for or filtering events.', 'the-events-calendar' ),
54
+ 'attributes' => tribe_get_option( 'tribeDisableTribeBar', false ) == true && ! tribe_events_views_v2_is_enabled() ? [ 'disabled' => 'disabled' ] : null,
55
  'default' => true,
56
  'validation_type' => 'boolean',
57
+ 'class' => tribe_get_option( 'tribeDisableTribeBar', false ) == true && ! tribe_events_views_v2_is_enabled() ? 'tribe-fieldset-disabled' : null,
58
  ],
59
  'showComments' => [
60
  'type' => 'checkbox_bool',
src/admin-views/tribe-options-upgrade.php CHANGED
@@ -54,7 +54,9 @@
54
  <p><?php esc_html_e( 'We\'ve redesigned all of the calendar views to give you and your users a better experience. Beyond a brand new look, we\'ve optimized every design for mobile and introduced key improvements for each view.', 'the-events-calendar' ); ?></p>
55
 
56
  <button type="button"><?php esc_html_e( 'Start your upgrade', 'the-events-calendar' ); ?></button>
57
- <a href="http://m.tri.be/updated-views" target="_blank" rel="noopener"><?php esc_html_e( 'Learn more about the upgrade', 'the-events-calendar' ); ?></a>
 
 
58
 
59
  <div class="step"><?php esc_html_e( 'Step 1 of 2', 'the-events-calendar' ); ?></div>
60
  </div>
54
  <p><?php esc_html_e( 'We\'ve redesigned all of the calendar views to give you and your users a better experience. Beyond a brand new look, we\'ve optimized every design for mobile and introduced key improvements for each view.', 'the-events-calendar' ); ?></p>
55
 
56
  <button type="button"><?php esc_html_e( 'Start your upgrade', 'the-events-calendar' ); ?></button>
57
+ <a href="http://m.tri.be/updated-views" target="_blank" rel="noopener" class="tribe-upgrade-absolute-text">
58
+ <?php esc_html_e( 'Learn more about the upgrade', 'the-events-calendar' ); ?>
59
+ </a>
60
 
61
  <div class="step"><?php esc_html_e( 'Step 1 of 2', 'the-events-calendar' ); ?></div>
62
  </div>
src/functions/template-tags/event.php CHANGED
@@ -99,8 +99,26 @@ if ( ! function_exists( 'tribe_get_event' ) ) {
99
  }
100
 
101
  $post = false;
 
102
  if ( ! $force ) {
103
- $cache_key = 'tribe_get_event_' . md5( json_encode( [ $event, $output, $filter ] ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  /** @var Tribe__Cache $cache */
105
  $cache = tribe( 'cache' );
106
  $post = $cache->get( $cache_key, Tribe__Cache_Listener::TRIGGER_SAVE_POST );
@@ -131,6 +149,23 @@ if ( ! function_exists( 'tribe_get_event' ) ) {
131
  $cache->set( $cache_key, $post, WEEK_IN_SECONDS, Tribe__Cache_Listener::TRIGGER_SAVE_POST );
132
  }
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  if ( OBJECT !== $output ) {
135
  $post = ARRAY_A === $output ? (array) $post : array_values( (array) $post );
136
  }
99
  }
100
 
101
  $post = false;
102
+
103
  if ( ! $force ) {
104
+ $cache_post = get_post( $event );
105
+ if ( empty( $cache_post ) ) {
106
+ return null;
107
+ }
108
+
109
+ $key_fields = [
110
+ $cache_post->ID,
111
+ $cache_post->post_modified,
112
+ // Use the `post_password` field as we show/hide some information depending on that.
113
+ $cache_post->post_password,
114
+ // We must include options on cache key, because options influence the hydrated data on the Event object.
115
+ wp_json_encode( Tribe__Settings_Manager::get_options() ),
116
+ wp_json_encode( [ get_option( 'start_of_week' ), get_option( 'timezone_string' ), get_option( 'gmt_offset' ) ] ),
117
+ $output,
118
+ $filter
119
+ ];
120
+
121
+ $cache_key = 'tribe_get_event_' . md5( wp_json_encode( $key_fields ) );
122
  /** @var Tribe__Cache $cache */
123
  $cache = tribe( 'cache' );
124
  $post = $cache->get( $cache_key, Tribe__Cache_Listener::TRIGGER_SAVE_POST );
149
  $cache->set( $cache_key, $post, WEEK_IN_SECONDS, Tribe__Cache_Listener::TRIGGER_SAVE_POST );
150
  }
151
 
152
+ /**
153
+ * Filters the event result after the event has been built from the function.
154
+ *
155
+ * Note: this value will not be cached and the caching of this value is a duty left to the filtering function.
156
+ *
157
+ * @since 5.0.0
158
+ *
159
+ * @param WP_Post $post The event post object to filter and return.
160
+ * @param int|WP_Post $event The event object to fetch.
161
+ * @param string|null $output The required return type. One of OBJECT, ARRAY_A, or ARRAY_N, which
162
+ * correspond to a `WP_Post` object, an associative array, or a numeric array,
163
+ * respectively. Defaults to `OBJECT`.
164
+ * @param string $filter Type of filter to apply. Accepts 'raw', a valid date string or
165
+ * object to localize the event in a specific time-frame.
166
+ */
167
+ $post = apply_filters( 'tribe_get_event_after', $post, $event, $output, $filter );
168
+
169
  if ( OBJECT !== $output ) {
170
  $post = ARRAY_A === $output ? (array) $post : array_values( (array) $post );
171
  }
src/functions/template-tags/general.php CHANGED
@@ -1037,6 +1037,8 @@ if ( class_exists( 'Tribe__Events__Main' ) ) {
1037
  * @return string The human-readable event schedule details formatted according to the current settings.
1038
  */
1039
  function tribe_events_event_schedule_details( $event = null, $before = '', $after = '', $html = true ) {
 
 
1040
  if ( is_null( $event ) ) {
1041
  global $post;
1042
  $event = $post;
@@ -1046,92 +1048,105 @@ if ( class_exists( 'Tribe__Events__Main' ) ) {
1046
  $event = get_post( $event );
1047
  }
1048
 
1049
- $inner = $html ? '<span class="tribe-event-date-start">' : '';
1050
- $format = '';
1051
- $date_without_year_format = tribe_get_date_format();
1052
- $date_with_year_format = tribe_get_date_format( true );
1053
- $time_format = get_option( 'time_format' );
1054
- $datetime_separator = tribe_get_option( 'dateTimeSeparator', ' @ ' );
1055
- $time_range_separator = tribe_get_option( 'timeRangeSeparator', ' - ' );
1056
 
1057
- $settings = array(
1058
- 'show_end_time' => true,
1059
- 'time' => true,
1060
- );
1061
 
1062
- $settings = wp_parse_args( apply_filters( 'tribe_events_event_schedule_details_formatting', $settings ), $settings );
1063
- if ( ! $settings['time'] ) {
1064
- $settings['show_end_time'] = false;
1065
- }
 
 
 
 
1066
 
1067
- /**
1068
- * @var $show_end_time
1069
- * @var $time
1070
- */
1071
- extract( $settings );
1072
 
1073
- $format = $date_with_year_format;
 
 
 
1074
 
1075
- /**
1076
- * If a yearless date format should be preferred.
1077
- *
1078
- * By default, this will be true if the event starts and ends in the current year.
1079
- *
1080
- * @param bool $use_yearless_format
1081
- * @param WP_Post $event
1082
- */
1083
- $use_yearless_format = apply_filters( 'tribe_events_event_schedule_details_use_yearless_format',
1084
- (
1085
- tribe_get_start_date( $event, false, 'Y' ) === date_i18n( 'Y' )
1086
- && tribe_get_end_date( $event, false, 'Y' ) === date_i18n( 'Y' )
1087
- ),
1088
- $event
1089
- );
1090
 
1091
- if ( $use_yearless_format ) {
1092
- $format = $date_without_year_format;
1093
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1094
 
1095
- if ( tribe_event_is_multiday( $event ) ) { // multi-date event
 
 
1096
 
1097
- $format2ndday = apply_filters( 'tribe_format_second_date_in_range', $format, $event );
1098
 
1099
- if ( tribe_event_is_all_day( $event ) ) {
1100
- $inner .= tribe_get_start_date( $event, true, $format );
1101
- $inner .= ( $html ? '</span>' : '' ) . $time_range_separator;
1102
- $inner .= $html ? '<span class="tribe-event-date-end">' : '';
 
 
 
 
 
1103
 
1104
- $end_date_full = tribe_get_end_date( $event, true, Tribe__Date_Utils::DBDATETIMEFORMAT );
1105
- $end_date_full_timestamp = strtotime( $end_date_full );
 
 
 
 
1106
 
1107
- // if the end date is <= the beginning of the day, consider it the previous day
1108
- if ( $end_date_full_timestamp <= strtotime( tribe_beginning_of_day( $end_date_full ) ) ) {
1109
- $end_date = tribe_format_date( $end_date_full_timestamp - DAY_IN_SECONDS, false, $format2ndday );
1110
  } else {
1111
- $end_date = tribe_get_end_date( $event, false, $format2ndday );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1112
  }
1113
-
1114
- $inner .= $end_date;
1115
- } else {
1116
- $inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
1117
- $inner .= ( $html ? '</span>' : '' ) . $time_range_separator;
1118
- $inner .= $html ? '<span class="tribe-event-date-end">' : '';
1119
- $inner .= tribe_get_end_date( $event, false, $format2ndday ) . ( $time ? $datetime_separator . tribe_get_end_date( $event, false, $time_format ) : '' );
1120
- }
1121
- } elseif ( tribe_event_is_all_day( $event ) ) { // all day event
1122
- $inner .= tribe_get_start_date( $event, true, $format );
1123
- } else { // single day event
1124
- if ( tribe_get_start_date( $event, false, 'g:i A' ) === tribe_get_end_date( $event, false, 'g:i A' ) ) { // Same start/end time
1125
- $inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
1126
- } else { // defined start/end time
1127
- $inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
1128
- $inner .= ( $html ? '</span>' : '' ) . ( $show_end_time ? $time_range_separator : '' );
1129
- $inner .= $html ? '<span class="tribe-event-time">' : '';
1130
- $inner .= ( $show_end_time ? tribe_get_end_date( $event, false, $time_format ) : '' );
1131
  }
1132
- }
1133
 
1134
- $inner .= $html ? '</span>' : '';
 
 
 
 
1135
 
1136
  /**
1137
  * Provides an opportunity to modify the *inner* schedule details HTML (ie before it is
@@ -1140,7 +1155,7 @@ if ( class_exists( 'Tribe__Events__Main' ) ) {
1140
  * @param string $inner_html the output HTML
1141
  * @param int $event_id post ID of the event we are interested in
1142
  */
1143
- $inner = apply_filters( 'tribe_events_event_schedule_details_inner', $inner, $event->ID );
1144
 
1145
  // Wrap the schedule text
1146
  $schedule = $before . $inner . $after;
@@ -1448,6 +1463,10 @@ if ( class_exists( 'Tribe__Events__Main' ) ) {
1448
  * @return string|null Will return null on Bad Post Instances
1449
  */
1450
  function tribe_events_get_the_excerpt( $post = null, $allowed_html = null, $skip_postdata_manipulation = false ) {
 
 
 
 
1451
  // If post is not numeric or instance of WP_Post it defaults to the current Post ID
1452
  if ( ! is_numeric( $post ) && ! $post instanceof WP_Post ) {
1453
  $post = get_the_ID();
@@ -1513,48 +1532,61 @@ if ( class_exists( 'Tribe__Events__Main' ) ) {
1513
  */
1514
  $remove_shortcodes = apply_filters( 'tribe_events_excerpt_shortcode_removal', true );
1515
 
1516
- // Get the Excerpt or content based on what is available
1517
- $excerpt = has_excerpt( $post->ID ) ? $post->post_excerpt : $post->post_content;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1518
 
1519
- // If shortcode filter is enabled let's process them
1520
- if ( $allow_shortcodes ) {
1521
- $excerpt = do_shortcode( $excerpt );
1522
- }
1523
 
1524
- // Remove all shortcode Content before removing HTML
1525
- if ( $remove_shortcodes ) {
1526
- $excerpt = preg_replace( '#\[.+\]#U', '', $excerpt );
1527
- }
1528
 
1529
- // Remove "all" HTML based on what is allowed
1530
- $excerpt = wp_kses( $excerpt, $allowed_html );
 
 
1531
 
1532
- if ( ! has_excerpt( $post->ID ) ) {
1533
- // Temporarily alter the global post in preparation for our filters.
1534
- $global_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null;
1535
- $GLOBALS['post'] = $post;
1536
 
1537
- // We will only trim Excerpt if it comes from Post Content
 
 
 
 
 
1538
 
1539
- /**
1540
- * Filter the number of words in an excerpt.
1541
- *
1542
- * @param int $number The number of words. Default 55.
1543
- */
1544
- $excerpt_length = apply_filters( 'excerpt_length', 55 );
1545
 
1546
- /**
1547
- * Filter the string in the "more" link displayed after a trimmed excerpt.
1548
- *
1549
- * @param string $more_string The string shown within the more link.
1550
- */
1551
- $excerpt_more = apply_filters( 'excerpt_more', ' [&hellip;]' );
1552
 
1553
- // Now we actually trim it
1554
- $excerpt = wp_trim_words( $excerpt, $excerpt_length, $excerpt_more );
 
1555
 
1556
- // Original post is back in action!
1557
- $GLOBALS['post'] = $global_post;
1558
  }
1559
 
1560
  if ( ! $skip_postdata_manipulation ) {
@@ -1568,7 +1600,7 @@ if ( class_exists( 'Tribe__Events__Main' ) ) {
1568
  * @param string $excerpt
1569
  * @param WP_Post $post
1570
  */
1571
- $excerpt = apply_filters( 'tribe_events_get_the_excerpt', wpautop( $excerpt ), $post );
1572
 
1573
  if ( ! $skip_postdata_manipulation ) {
1574
  wp_reset_postdata();
1037
  * @return string The human-readable event schedule details formatted according to the current settings.
1038
  */
1039
  function tribe_events_event_schedule_details( $event = null, $before = '', $after = '', $html = true ) {
1040
+ static $cache_var_name = __FUNCTION__;
1041
+
1042
  if ( is_null( $event ) ) {
1043
  global $post;
1044
  $event = $post;
1048
  $event = get_post( $event );
1049
  }
1050
 
1051
+ // if the post is password protected, don't return the schedule details
1052
+ if ( post_password_required( $event ) ) {
1053
+ return '';
1054
+ }
 
 
 
1055
 
1056
+ $cache_details = tribe_get_var( $cache_var_name, [] );
1057
+ $cache_details_key = "{$event->ID}:{$before}:{$after}:{$html}";
 
 
1058
 
1059
+ if ( ! isset( $cache_details[ $cache_details_key ] ) ) {
1060
+ $inner = $html ? '<span class="tribe-event-date-start">' : '';
1061
+ $format = '';
1062
+ $date_without_year_format = tribe_get_date_format();
1063
+ $date_with_year_format = tribe_get_date_format( true );
1064
+ $time_format = get_option( 'time_format' );
1065
+ $datetime_separator = tribe_get_option( 'dateTimeSeparator', ' @ ' );
1066
+ $time_range_separator = tribe_get_option( 'timeRangeSeparator', ' - ' );
1067
 
1068
+ $settings = array(
1069
+ 'show_end_time' => true,
1070
+ 'time' => true,
1071
+ );
 
1072
 
1073
+ $settings = wp_parse_args( apply_filters( 'tribe_events_event_schedule_details_formatting', $settings ), $settings );
1074
+ if ( ! $settings['time'] ) {
1075
+ $settings['show_end_time'] = false;
1076
+ }
1077
 
1078
+ /**
1079
+ * @var $show_end_time
1080
+ * @var $time
1081
+ */
1082
+ extract( $settings );
 
 
 
 
 
 
 
 
 
 
1083
 
1084
+ $format = $date_with_year_format;
1085
+
1086
+ /**
1087
+ * If a yearless date format should be preferred.
1088
+ *
1089
+ * By default, this will be true if the event starts and ends in the current year.
1090
+ *
1091
+ * @param bool $use_yearless_format
1092
+ * @param WP_Post $event
1093
+ */
1094
+ $use_yearless_format = apply_filters( 'tribe_events_event_schedule_details_use_yearless_format',
1095
+ (
1096
+ tribe_get_start_date( $event, false, 'Y' ) === date_i18n( 'Y' )
1097
+ && tribe_get_end_date( $event, false, 'Y' ) === date_i18n( 'Y' )
1098
+ ),
1099
+ $event
1100
+ );
1101
 
1102
+ if ( $use_yearless_format ) {
1103
+ $format = $date_without_year_format;
1104
+ }
1105
 
1106
+ if ( tribe_event_is_multiday( $event ) ) { // multi-date event
1107
 
1108
+ $format2ndday = apply_filters( 'tribe_format_second_date_in_range', $format, $event );
1109
+
1110
+ if ( tribe_event_is_all_day( $event ) ) {
1111
+ $inner .= tribe_get_start_date( $event, true, $format );
1112
+ $inner .= ( $html ? '</span>' : '' ) . $time_range_separator;
1113
+ $inner .= $html ? '<span class="tribe-event-date-end">' : '';
1114
+
1115
+ $end_date_full = tribe_get_end_date( $event, true, Tribe__Date_Utils::DBDATETIMEFORMAT );
1116
+ $end_date_full_timestamp = strtotime( $end_date_full );
1117
 
1118
+ // if the end date is <= the beginning of the day, consider it the previous day
1119
+ if ( $end_date_full_timestamp <= strtotime( tribe_beginning_of_day( $end_date_full ) ) ) {
1120
+ $end_date = tribe_format_date( $end_date_full_timestamp - DAY_IN_SECONDS, false, $format2ndday );
1121
+ } else {
1122
+ $end_date = tribe_get_end_date( $event, false, $format2ndday );
1123
+ }
1124
 
1125
+ $inner .= $end_date;
 
 
1126
  } else {
1127
+ $inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
1128
+ $inner .= ( $html ? '</span>' : '' ) . $time_range_separator;
1129
+ $inner .= $html ? '<span class="tribe-event-date-end">' : '';
1130
+ $inner .= tribe_get_end_date( $event, false, $format2ndday ) . ( $time ? $datetime_separator . tribe_get_end_date( $event, false, $time_format ) : '' );
1131
+ }
1132
+ } elseif ( tribe_event_is_all_day( $event ) ) { // all day event
1133
+ $inner .= tribe_get_start_date( $event, true, $format );
1134
+ } else { // single day event
1135
+ if ( tribe_get_start_date( $event, false, 'g:i A' ) === tribe_get_end_date( $event, false, 'g:i A' ) ) { // Same start/end time
1136
+ $inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
1137
+ } else { // defined start/end time
1138
+ $inner .= tribe_get_start_date( $event, false, $format ) . ( $time ? $datetime_separator . tribe_get_start_date( $event, false, $time_format ) : '' );
1139
+ $inner .= ( $html ? '</span>' : '' ) . ( $show_end_time ? $time_range_separator : '' );
1140
+ $inner .= $html ? '<span class="tribe-event-time">' : '';
1141
+ $inner .= ( $show_end_time ? tribe_get_end_date( $event, false, $time_format ) : '' );
1142
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1143
  }
 
1144
 
1145
+ $inner .= $html ? '</span>' : '';
1146
+
1147
+ $cache_details[ $cache_details_key ] = $inner;
1148
+ tribe_set_var( $cache_var_name, $cache_details );
1149
+ }
1150
 
1151
  /**
1152
  * Provides an opportunity to modify the *inner* schedule details HTML (ie before it is
1155
  * @param string $inner_html the output HTML
1156
  * @param int $event_id post ID of the event we are interested in
1157
  */
1158
+ $inner = apply_filters( 'tribe_events_event_schedule_details_inner', $cache_details[ $cache_details_key ], $event->ID );
1159
 
1160
  // Wrap the schedule text
1161
  $schedule = $before . $inner . $after;
1463
  * @return string|null Will return null on Bad Post Instances
1464
  */
1465
  function tribe_events_get_the_excerpt( $post = null, $allowed_html = null, $skip_postdata_manipulation = false ) {
1466
+ static $cache_var_name = __FUNCTION__;
1467
+
1468
+ $cache_excerpts = tribe_get_var( $cache_var_name, [] );
1469
+
1470
  // If post is not numeric or instance of WP_Post it defaults to the current Post ID
1471
  if ( ! is_numeric( $post ) && ! $post instanceof WP_Post ) {
1472
  $post = get_the_ID();
1532
  */
1533
  $remove_shortcodes = apply_filters( 'tribe_events_excerpt_shortcode_removal', true );
1534
 
1535
+ $cache_excerpts_key = implode( ':', [
1536
+ $post->ID,
1537
+ $skip_postdata_manipulation,
1538
+ $allow_shortcodes,
1539
+ $remove_shortcodes,
1540
+ json_encode( $allowed_html )
1541
+ ] );
1542
+
1543
+ if ( ! isset( $cache_excerpts[ $cache_excerpts_key ] ) ) {
1544
+ // Get the Excerpt or content based on what is available
1545
+ $excerpt = has_excerpt( $post->ID ) ? $post->post_excerpt : $post->post_content;
1546
+
1547
+ // If shortcode filter is enabled let's process them
1548
+ if ( $allow_shortcodes ) {
1549
+ $excerpt = do_shortcode( $excerpt );
1550
+ }
1551
 
1552
+ // Remove all shortcode Content before removing HTML
1553
+ if ( $remove_shortcodes ) {
1554
+ $excerpt = preg_replace( '#\[.+\]#U', '', $excerpt );
1555
+ }
1556
 
1557
+ // Remove "all" HTML based on what is allowed
1558
+ $excerpt = wp_kses( $excerpt, $allowed_html );
 
 
1559
 
1560
+ if ( ! has_excerpt( $post->ID ) ) {
1561
+ // Temporarily alter the global post in preparation for our filters.
1562
+ $global_post = isset( $GLOBALS['post'] ) ? $GLOBALS['post'] : null;
1563
+ $GLOBALS['post'] = $post;
1564
 
1565
+ // We will only trim Excerpt if it comes from Post Content
 
 
 
1566
 
1567
+ /**
1568
+ * Filter the number of words in an excerpt.
1569
+ *
1570
+ * @param int $number The number of words. Default 55.
1571
+ */
1572
+ $excerpt_length = apply_filters( 'excerpt_length', 55 );
1573
 
1574
+ /**
1575
+ * Filter the string in the "more" link displayed after a trimmed excerpt.
1576
+ *
1577
+ * @param string $more_string The string shown within the more link.
1578
+ */
1579
+ $excerpt_more = apply_filters( 'excerpt_more', ' [&hellip;]' );
1580
 
1581
+ // Now we actually trim it
1582
+ $excerpt = wp_trim_words( $excerpt, $excerpt_length, $excerpt_more );
 
 
 
 
1583
 
1584
+ // Original post is back in action!
1585
+ $GLOBALS['post'] = $global_post;
1586
+ }
1587
 
1588
+ $cache_excerpts[ $cache_excerpts_key ] = wpautop( $excerpt );
1589
+ tribe_set_var( $cache_var_name, $cache_excerpts );
1590
  }
1591
 
1592
  if ( ! $skip_postdata_manipulation ) {
1600
  * @param string $excerpt
1601
  * @param WP_Post $post
1602
  */
1603
+ $excerpt = apply_filters( 'tribe_events_get_the_excerpt', $cache_excerpts[ $cache_excerpts_key ], $post );
1604
 
1605
  if ( ! $skip_postdata_manipulation ) {
1606
  wp_reset_postdata();
src/resources/css/events-admin.css CHANGED
@@ -10,92 +10,71 @@
10
 
11
  /* = Post Type Listing
12
  =============================================*/
13
-
14
  .events-cal .tablenav select[name=m],
15
  .events-cal #post-query-submit {
16
  display: none;
17
  }
18
-
19
  .fixed .column-start-date,
20
  .fixed .column-end-date,
21
  .fixed .column-events-cats {
22
  width: 14%;
23
  }
24
-
25
  #additional-field-table input,
26
  #additional-field-table select,
27
  #additional-field-table textarea {
28
  width: 200px;
29
  }
30
-
31
  #additional-field-table tbody tr {
32
  height: 72px;
33
  }
34
-
35
  .tribe-restore-link + a {
36
  display: none;
37
  }
38
-
39
  /* = Post Type Editing
40
  =============================================*/
41
-
42
  .eventForm {
43
  margin-top: -20px;
44
  }
45
-
46
  .eventForm td {
47
  font-size: 12px;
48
  padding: 0 6px 10px 0;
49
  vertical-align: middle;
50
  }
51
-
52
  /* Add extra separation between form inputs when left aligned */
53
-
54
  .eventForm td input.alignleft, .eventForm td select.alignleft {
55
  margin-right: 0.3rem;
56
  }
57
-
58
  .eventForm #EventURL {
59
  width: 70%;
60
  }
61
-
62
  .eventForm #event-meta td {
63
  vertical-align: top;
64
  }
65
-
66
  .eventForm #event-meta td:first-child {
67
  line-height: 30px;
68
  }
69
-
70
  .eventForm #event-meta td div {
71
  margin-bottom: 10px;
72
  }
73
-
74
  .eventForm #event-meta td div:last-child {
75
  margin-bottom: 20px;
76
  }
77
-
78
  .eventForm textarea {
79
  width: 100%;
80
  }
81
-
82
  .eventForm h4 {
83
  font-size: 1.2em;
84
  margin: 1em 0 1em;
85
  }
86
-
87
  .eventForm h4.event-time {
88
  margin-top: 0;
89
  }
90
-
91
  .eventForm .tribe_sectionheader {
92
  padding-bottom: 5px;
93
  }
94
-
95
  .eventForm p {
96
  margin: 0 0 10px 0;
97
  }
98
-
99
  .eventForm input[type="text"],
100
  .eventForm input[type="password"],
101
  .eventForm input[type="color"],
@@ -117,34 +96,28 @@
117
  line-height: 20px;
118
  margin-left: 0;
119
  }
120
-
121
  .eventForm .event-dynamic-helper-text {
122
  color: #999;
123
  font-style: italic;
124
  padding: 0;
125
  }
126
-
127
  .eventForm .tribe-datetime-block .tribe-allday {
128
  margin: 10px 0 0;
129
  }
130
-
131
  .eventForm .tribe-datetime-block .tribe-field-start_date,
132
  .eventForm .tribe-datetime-block .tribe-field-start_time,
133
  .eventForm .tribe-datetime-block .tribe-field-end_date,
134
  .eventForm .tribe-datetime-block .tribe-field-end_time {
135
  height: 28px;
136
  }
137
-
138
  .eventForm .tribe-datetime-block .tribe-field-start_date,
139
  .eventForm .tribe-datetime-block .tribe-field-end_date {
140
  width: 100px;
141
  }
142
-
143
  .eventForm .tribe-datetime-block .tribe-field-start_time,
144
  .eventForm .tribe-datetime-block .tribe-field-end_time {
145
  width: 80px;
146
  }
147
-
148
  .eventForm .tribe-datetime-block .tribe-field-timezone {
149
  width: 100%;
150
 
@@ -153,74 +126,58 @@
153
  margin-top: -2px;
154
  display: none;
155
  }
156
-
157
  .eventForm .tribe-datetime-block .tribe-field-timezone.select2-container {
158
  display: inline-block;
159
  margin-top: -4px;
160
  }
161
-
162
  .eventForm .tribe-datetime-block .tribe-change-timezone {
163
  white-space: nowrap;
164
  }
165
-
166
  .eventForm .tribe-datetime-label {
167
  vertical-align: top;
168
  padding-top: 5px;
169
  }
170
-
171
  /* Apply a grey highlight to 'today' */
172
-
173
  .ui-datepicker-calendar .ui-datepicker-today a {
174
  background: linear-gradient(354deg, #ccc 0%, #eee 100%);
175
  color: black;
176
  }
177
-
178
  /* If today is also the current selected day, prefer the default blue highlight */
179
-
180
  .ui-datepicker-calendar .ui-datepicker-today.ui-datepicker-current-day a {
181
  background: linear-gradient( 354deg, rgba( 10,85,160,1.00 ) 0%, rgba( 18,136,235,1.00 ) 100% );
182
  color: #fff;
183
  }
184
-
185
  .ui-datepicker select.ui-datepicker-month {
186
  width: 8rem;
187
  }
188
-
189
  .tribe-community-event-info {
190
  width: 100%;
191
  margin: 10px;
192
  }
193
-
194
  .eventtable,
195
  #EventInfo {
196
  width: 100%;
197
  margin: 0;
198
  padding-top: 0;
199
  }
200
-
201
  #event_tickets,
202
  .eventtable.ticket_list.eventForm {
203
  table-layout: fixed;
204
  }
205
-
206
  #ticket_start_date,
207
  #ticket_end_date {
208
  width: 100px;
209
  }
210
-
211
  .form-table form input {
212
  border: none;
213
  }
214
-
215
  #submitLabel {
216
  display: block;
217
  }
218
-
219
  #submitLabel input {
220
  display: block;
221
  padding: 0;
222
  }
223
-
224
  #EventBriteDetailDiv h4,
225
  .tribe-community-event-info h4,
226
  .eventForm .tribe_sectionheader h4 {
@@ -228,102 +185,81 @@
228
  text-transform: uppercase;
229
  border-bottom: 1px solid #e5e5e5;
230
  }
231
-
232
  .tribe-events-error {
233
  display: none;
234
  }
235
-
236
  .tribe-events-multi-event-day {
237
  color: #0f81bb;
238
  }
239
-
240
  .ui-front {
241
  z-index: 1000000;
242
  }
243
-
244
  .events-cal .ui-widget-overlay.ui-front {
245
  z-index: 90;
246
  }
247
-
248
  .edit-linked-post-link {
249
  display: inline-block;
250
  margin-left: 10px;
251
  }
252
-
253
  .linked-post-wrapper tbody + tbody tr.saved_linked-post td,
254
  .linked-post-wrapper tbody + tfoot tr td {
255
  margin-top: 1em;
256
  padding-top: 1em;
257
  }
258
-
259
  .linked-post-wrapper .linked-post td:first-child {
260
  padding-left: 30px;
261
  }
262
-
263
  .move-linked-post-group {
264
  padding-right: .5em;
265
  cursor: move;
266
  }
267
-
268
  .tribe-delete-this {
269
  float: right;
270
  color: #444;
271
  }
272
-
273
  .tribe-delete-this:hover,
274
  .tribe-delete-this.hover-state {
275
  color: #a00;
276
  }
277
-
278
  .tribe-delete-this.tribe-confirm-delete-this {
279
  display : none;
280
  }
281
-
282
  .tribe_community_edit .edit-linked-post-link a {
283
  display: none;
284
  }
285
-
286
  .tribe-linked-post-error.error {
287
  display: inline;
288
  margin-left: 5px;
289
  padding: 5px 10px;
290
  }
291
-
292
  /* = Settings
293
  =============================================*/
294
-
295
  #tribe-field-toggle_blocks_editor_hidden_field {
296
  display: none;
297
  }
298
-
299
  /* upgrades */
300
-
301
  #modern-tribe-info.tribe-upgrade{
302
  padding: 0;
 
303
  }
304
-
305
  #modern-tribe-info.tribe-upgrade a, #modern-tribe-info.tribe-upgrade .dashicons {
306
  color: #334AFF;
307
  }
308
-
309
  #modern-tribe-info.tribe-upgrade h3 {
310
  font-size: 24px;
 
311
  }
312
-
313
  #modern-tribe-info.tribe-upgrade ul {
314
  list-style-type: none;
315
  margin-left: 0;
316
  }
317
-
318
  #modern-tribe-info.tribe-upgrade li > h4 {
319
  margin-bottom: 0;
320
  }
321
-
322
  #modern-tribe-info.tribe-upgrade li > p {
323
  margin-top: 0;
324
  padding-left: 1.5rem;
325
  }
326
-
327
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1,
328
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step2,
329
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-complete {
@@ -335,15 +271,12 @@
335
  -webkit-box-pack: justify;
336
  justify-content: space-between;
337
  }
338
-
339
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1.hidden, #modern-tribe-info.tribe-upgrade #tribe-upgrade-step2.hidden, #modern-tribe-info.tribe-upgrade #tribe-upgrade-complete.hidden {
340
  display: none;
341
  }
342
-
343
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 span {
344
  color: #334AFF;
345
  }
346
-
347
  #modern-tribe-info.tribe-upgrade .button, #modern-tribe-info.tribe-upgrade button {
348
  background: #334AFF;
349
  border-radius: 0.25rem;
@@ -359,22 +292,18 @@
359
  white-space: nowrap;
360
  width: 200px;
361
  }
362
-
363
  #modern-tribe-info.tribe-upgrade .button {
364
  height: 3rem;
365
  line-height: 1rem;
366
  text-align: center;
367
  }
368
-
369
  #modern-tribe-info.tribe-upgrade .content-container {
370
  max-width: 600px;
371
  padding: 2rem;
372
  }
373
-
374
  #modern-tribe-info.tribe-upgrade .image-container {
375
  text-align: right;
376
  }
377
-
378
  #modern-tribe-info.tribe-upgrade .image-container img {
379
  border-radius: 0.5rem;
380
  display: inline-block;
@@ -385,11 +314,9 @@
385
  vertical-align: top;
386
  width: 100%;
387
  }
388
-
389
  #modern-tribe-info.tribe-upgrade .screenshot {
390
  float: left;
391
  }
392
-
393
  #modern-tribe-info.tribe-upgrade .step {
394
  font-size: 0.9rem;
395
  font-weight: 200;
@@ -397,7 +324,6 @@
397
  text-align: center;
398
  width: 200px;
399
  }
400
-
401
  #upgrade-button {
402
  background: #334AFF;
403
  border-radius: 0.25rem;
@@ -411,16 +337,13 @@
411
  vertical-align: top;
412
  margin: 2px 0 0 0.75rem;
413
  }
414
-
415
  /* = Eventbrite
416
  =============================================*/
417
-
418
  .tribe-community-event-info small,
419
  #EventBriteDetailDiv small {
420
  font-size: 10px;
421
  color: #a3a3a3;
422
  }
423
-
424
  #eventBriteTicketing,
425
  #mainDonateRow {
426
  margin: -11px 6px 0;
@@ -435,121 +358,96 @@
435
  background: url(../images/bg_fade.png) repeat-x top left;
436
  background-color: #fff;
437
  }
438
-
439
  #eventBriteTicketing h2 {
440
  height: 80px;
441
  margin: 0;
442
  background: url(../images/eb_press_little.gif) no-repeat top right;
443
  }
444
-
445
  .tribe-community-event-info,
446
  table.eventForm {
447
  width: 100%;
448
  }
449
-
450
  /* = Recurrence
451
  =============================================*/
452
-
453
  #custom-recurrence-weeks label {
454
  display: block;
455
  float: left;
456
  width: 45px;
457
  margin-bottom: 3px;
458
  }
459
-
460
  #custom-recurrence-frequency input {
461
  width: 30px;
462
  }
463
-
464
  #custom-recurrence-years label {
465
  display: block;
466
  float: left;
467
  width: 50px;
468
  margin-bottom: 3px;
469
  }
470
-
471
  #recurrence-changed-row {
472
  display: none;
473
  color: red;
474
  }
475
-
476
  #rec-end-error {
477
  color: red;
478
  }
479
-
480
  #rec-days-error {
481
  color: red;
482
  }
483
-
484
  .rec-error {
485
  display: none;
486
  }
487
-
488
  #recurrence-pattern-description {
489
  font-style: italic;
490
  }
491
-
492
  .recurrence-pattern-description-row {
493
  display: none;
494
  }
495
-
496
  /* = Chosen
497
  =============================================*/
498
-
499
  .chosen,
500
  .tribe-chosen,
501
  .chzn-container {
502
  margin-right: 10px!important;
503
  }
504
-
505
  .events-dropdown,
506
  #eventsDefaultState,
507
  #defaultCountry,
508
  #StateProvinceSelect {
509
  min-width: 220px;
510
  }
511
-
512
  .multi-day-cutoff-dropdown {
513
  width: 100px !important;
514
  }
515
-
516
  /* fix for widgets + chosen support */
517
-
518
  .widget-liquid-right .widget,
519
  .inactive-sidebar .widget,
520
  .widget-liquid-right .sidebar-description {
521
  overflow: visible !important;
522
  }
523
-
524
  .tribe-aggregator-import-details {
525
  overflow: hidden;
526
  }
527
-
528
  .tribe-aggregator-import-details dt {
529
  clear: left;
530
  float: left;
531
  margin-right: .25rem;
532
  }
533
-
534
  .tribe-aggregator-import-details dd {
535
  margin-left: 0;
536
  }
537
-
538
  .tribe-aggregator-import-details .tribe-value {
539
  font-weight: bold;
540
  }
541
-
542
  .tribe-ea-eventbrite-disconnect {
543
  color: #a00;
544
  display: inline-block;
545
  margin-left: 1rem;
546
  }
547
-
548
  .tribe-ea-eventbrite-disconnect:active,
549
  .tribe-ea-eventbrite-disconnect:hover {
550
  color: #f00;
551
  }
552
-
553
  .tribe-ea-eventbrite-button {
554
  border-radius: 3px;
555
  color: #fff;
@@ -559,38 +457,31 @@ table.eventForm {
559
  -webkit-transition: background-color 0.5s ease;
560
  transition: background-color 0.5s ease;
561
  }
562
-
563
  .tribe-ea-eventbrite-button:active,
564
  .tribe-ea-eventbrite-button:hover {
565
  color: #fff;
566
  cursor: pointer;
567
  }
568
-
569
  .tribe-ea-eventbrite-button {
570
  background: #f6682f;
571
  }
572
-
573
  .tribe-ea-eventbrite-button:active,
574
  .tribe-ea-eventbrite-button:hover,
575
  .tribe-ea-eventbrite-button:focus {
576
  background: #c85b2f;
577
  }
578
-
579
  /*
580
  Meetup
581
  */
582
-
583
  .tribe-ea-meetup-disconnect {
584
  color: #a00;
585
  display: inline-block;
586
  margin-left: 1rem;
587
  }
588
-
589
  .tribe-ea-meetup-disconnect:active,
590
  .tribe-ea-meetup-disconnect:hover {
591
  color: #f00;
592
  }
593
-
594
  .tribe-ea-meetup-button {
595
  border-radius: 3px;
596
  color: #fff;
@@ -600,26 +491,21 @@ table.eventForm {
600
  -webkit-transition: background-color 0.5s ease;
601
  transition: background-color 0.5s ease;
602
  }
603
-
604
  .tribe-ea-meetup-button:active,
605
  .tribe-ea-meetup-button:hover {
606
  color: #fff;
607
  cursor: pointer;
608
  }
609
-
610
  .tribe-ea-meetup-button {
611
  background: #f41940;
612
  }
613
-
614
  .tribe-ea-meetup-button:active,
615
  .tribe-ea-meetup-button:hover,
616
  .tribe-ea-meetup-button:focus {
617
  background: #f41940;
618
  }
619
-
620
  /* = Event Aggregator Status
621
  =============================================*/
622
-
623
  .event-aggregator-status {
624
  background-color: #fff;
625
  width: 100%;
@@ -627,75 +513,60 @@ table.eventForm {
627
  border-spacing: 0;
628
  margin-bottom: 16px;
629
  }
630
-
631
  .event-aggregator-status tbody tr:nth-child(even) td {
632
  background-color: #f9f9f9;
633
  }
634
-
635
  .event-aggregator-status th {
636
  text-align: left;
637
  border-bottom: 1px solid #e4e5e6;
638
  }
639
-
640
  .event-aggregator-status th, .event-aggregator-status td {
641
  padding: 8px 12px;
642
  background-color: #fff;
643
  }
644
-
645
  .event-aggregator-status td.label {
646
  width: 220px;
647
  /* @todo: responsive breakpoint? */
648
  }
649
-
650
  .event-aggregator-status td.label img {
651
  width: 18px;
652
  height: 18px;
653
  margin-right: 6px;
654
  float: left;
655
  }
656
-
657
  .event-aggregator-status td.indicator {
658
  width: 20px;
659
  }
660
-
661
  .event-aggregator-status td.indicator.good {
662
  color: #38b042;
663
  }
664
-
665
  .event-aggregator-status td.indicator.bad {
666
  color: #ed5047;
667
  }
668
-
669
  .event-aggregator-status td.indicator.warning {
670
  color: #f3ae46;
671
  }
672
-
673
  @media (max-width: 782px) {
674
-
675
  .eventForm .tribe-datetime-block .tribe-field-start_date,
676
  .eventForm .tribe-datetime-block .tribe-field-end_date {
677
  width: 63%;
678
  display: inline-block
679
  }
680
-
681
  .eventForm .tribe-datetime-block .tribe-field-start_time,
682
  .eventForm .tribe-datetime-block .tribe-field-end_time {
683
  width: 35%;
684
  display: inline-block
685
  }
686
-
687
  .eventForm .tribe-datetime-block .tribe-datetime-separator {
688
  width: 100%;
689
  display: block;
690
  text-align: center;
691
  padding: 5px 0
692
  }
693
-
694
  .eventForm .tribe-datetime-block .tribe-field-timezone.select2-container {
695
  display: table;
696
  margin: 10px auto 0
697
  }
698
-
699
  .eventForm .tribe-datetime-block .tribe-change-timezone {
700
  width: 100%;
701
  display: block;
@@ -703,10 +574,22 @@ table.eventForm {
703
  padding: 5px 0
704
  }
705
  }
706
-
707
  @media( min-width: 1193px ) {
708
-
709
  .eventForm .tribe-datetime-block .tribe-field-timezone {
710
  width: calc(100% - 400px)
711
  }
712
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
 
11
  /* = Post Type Listing
12
  =============================================*/
 
13
  .events-cal .tablenav select[name=m],
14
  .events-cal #post-query-submit {
15
  display: none;
16
  }
 
17
  .fixed .column-start-date,
18
  .fixed .column-end-date,
19
  .fixed .column-events-cats {
20
  width: 14%;
21
  }
 
22
  #additional-field-table input,
23
  #additional-field-table select,
24
  #additional-field-table textarea {
25
  width: 200px;
26
  }
 
27
  #additional-field-table tbody tr {
28
  height: 72px;
29
  }
 
30
  .tribe-restore-link + a {
31
  display: none;
32
  }
 
33
  /* = Post Type Editing
34
  =============================================*/
 
35
  .eventForm {
36
  margin-top: -20px;
37
  }
 
38
  .eventForm td {
39
  font-size: 12px;
40
  padding: 0 6px 10px 0;
41
  vertical-align: middle;
42
  }
 
43
  /* Add extra separation between form inputs when left aligned */
 
44
  .eventForm td input.alignleft, .eventForm td select.alignleft {
45
  margin-right: 0.3rem;
46
  }
 
47
  .eventForm #EventURL {
48
  width: 70%;
49
  }
 
50
  .eventForm #event-meta td {
51
  vertical-align: top;
52
  }
 
53
  .eventForm #event-meta td:first-child {
54
  line-height: 30px;
55
  }
 
56
  .eventForm #event-meta td div {
57
  margin-bottom: 10px;
58
  }
 
59
  .eventForm #event-meta td div:last-child {
60
  margin-bottom: 20px;
61
  }
 
62
  .eventForm textarea {
63
  width: 100%;
64
  }
 
65
  .eventForm h4 {
66
  font-size: 1.2em;
67
  margin: 1em 0 1em;
68
  }
 
69
  .eventForm h4.event-time {
70
  margin-top: 0;
71
  }
 
72
  .eventForm .tribe_sectionheader {
73
  padding-bottom: 5px;
74
  }
 
75
  .eventForm p {
76
  margin: 0 0 10px 0;
77
  }
 
78
  .eventForm input[type="text"],
79
  .eventForm input[type="password"],
80
  .eventForm input[type="color"],
96
  line-height: 20px;
97
  margin-left: 0;
98
  }
 
99
  .eventForm .event-dynamic-helper-text {
100
  color: #999;
101
  font-style: italic;
102
  padding: 0;
103
  }
 
104
  .eventForm .tribe-datetime-block .tribe-allday {
105
  margin: 10px 0 0;
106
  }
 
107
  .eventForm .tribe-datetime-block .tribe-field-start_date,
108
  .eventForm .tribe-datetime-block .tribe-field-start_time,
109
  .eventForm .tribe-datetime-block .tribe-field-end_date,
110
  .eventForm .tribe-datetime-block .tribe-field-end_time {
111
  height: 28px;
112
  }
 
113
  .eventForm .tribe-datetime-block .tribe-field-start_date,
114
  .eventForm .tribe-datetime-block .tribe-field-end_date {
115
  width: 100px;
116
  }
 
117
  .eventForm .tribe-datetime-block .tribe-field-start_time,
118
  .eventForm .tribe-datetime-block .tribe-field-end_time {
119
  width: 80px;
120
  }
 
121
  .eventForm .tribe-datetime-block .tribe-field-timezone {
122
  width: 100%;
123
 
126
  margin-top: -2px;
127
  display: none;
128
  }
 
129
  .eventForm .tribe-datetime-block .tribe-field-timezone.select2-container {
130
  display: inline-block;
131
  margin-top: -4px;
132
  }
 
133
  .eventForm .tribe-datetime-block .tribe-change-timezone {
134
  white-space: nowrap;
135
  }
 
136
  .eventForm .tribe-datetime-label {
137
  vertical-align: top;
138
  padding-top: 5px;
139
  }
 
140
  /* Apply a grey highlight to 'today' */
 
141
  .ui-datepicker-calendar .ui-datepicker-today a {
142
  background: linear-gradient(354deg, #ccc 0%, #eee 100%);
143
  color: black;
144
  }
 
145
  /* If today is also the current selected day, prefer the default blue highlight */
 
146
  .ui-datepicker-calendar .ui-datepicker-today.ui-datepicker-current-day a {
147
  background: linear-gradient( 354deg, rgba( 10,85,160,1.00 ) 0%, rgba( 18,136,235,1.00 ) 100% );
148
  color: #fff;
149
  }
 
150
  .ui-datepicker select.ui-datepicker-month {
151
  width: 8rem;
152
  }
 
153
  .tribe-community-event-info {
154
  width: 100%;
155
  margin: 10px;
156
  }
 
157
  .eventtable,
158
  #EventInfo {
159
  width: 100%;
160
  margin: 0;
161
  padding-top: 0;
162
  }
 
163
  #event_tickets,
164
  .eventtable.ticket_list.eventForm {
165
  table-layout: fixed;
166
  }
 
167
  #ticket_start_date,
168
  #ticket_end_date {
169
  width: 100px;
170
  }
 
171
  .form-table form input {
172
  border: none;
173
  }
 
174
  #submitLabel {
175
  display: block;
176
  }
 
177
  #submitLabel input {
178
  display: block;
179
  padding: 0;
180
  }
 
181
  #EventBriteDetailDiv h4,
182
  .tribe-community-event-info h4,
183
  .eventForm .tribe_sectionheader h4 {
185
  text-transform: uppercase;
186
  border-bottom: 1px solid #e5e5e5;
187
  }
 
188
  .tribe-events-error {
189
  display: none;
190
  }
 
191
  .tribe-events-multi-event-day {
192
  color: #0f81bb;
193
  }
 
194
  .ui-front {
195
  z-index: 1000000;
196
  }
 
197
  .events-cal .ui-widget-overlay.ui-front {
198
  z-index: 90;
199
  }
 
200
  .edit-linked-post-link {
201
  display: inline-block;
202
  margin-left: 10px;
203
  }
 
204
  .linked-post-wrapper tbody + tbody tr.saved_linked-post td,
205
  .linked-post-wrapper tbody + tfoot tr td {
206
  margin-top: 1em;
207
  padding-top: 1em;
208
  }
 
209
  .linked-post-wrapper .linked-post td:first-child {
210
  padding-left: 30px;
211
  }
 
212
  .move-linked-post-group {
213
  padding-right: .5em;
214
  cursor: move;
215
  }
 
216
  .tribe-delete-this {
217
  float: right;
218
  color: #444;
219
  }
 
220
  .tribe-delete-this:hover,
221
  .tribe-delete-this.hover-state {
222
  color: #a00;
223
  }
 
224
  .tribe-delete-this.tribe-confirm-delete-this {
225
  display : none;
226
  }
 
227
  .tribe_community_edit .edit-linked-post-link a {
228
  display: none;
229
  }
 
230
  .tribe-linked-post-error.error {
231
  display: inline;
232
  margin-left: 5px;
233
  padding: 5px 10px;
234
  }
 
235
  /* = Settings
236
  =============================================*/
 
237
  #tribe-field-toggle_blocks_editor_hidden_field {
238
  display: none;
239
  }
 
240
  /* upgrades */
 
241
  #modern-tribe-info.tribe-upgrade{
242
  padding: 0;
243
+ position: relative;
244
  }
 
245
  #modern-tribe-info.tribe-upgrade a, #modern-tribe-info.tribe-upgrade .dashicons {
246
  color: #334AFF;
247
  }
 
248
  #modern-tribe-info.tribe-upgrade h3 {
249
  font-size: 24px;
250
+ line-height: 1.4em;
251
  }
 
252
  #modern-tribe-info.tribe-upgrade ul {
253
  list-style-type: none;
254
  margin-left: 0;
255
  }
 
256
  #modern-tribe-info.tribe-upgrade li > h4 {
257
  margin-bottom: 0;
258
  }
 
259
  #modern-tribe-info.tribe-upgrade li > p {
260
  margin-top: 0;
261
  padding-left: 1.5rem;
262
  }
 
263
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1,
264
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step2,
265
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-complete {
271
  -webkit-box-pack: justify;
272
  justify-content: space-between;
273
  }
 
274
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1.hidden, #modern-tribe-info.tribe-upgrade #tribe-upgrade-step2.hidden, #modern-tribe-info.tribe-upgrade #tribe-upgrade-complete.hidden {
275
  display: none;
276
  }
 
277
  #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 span {
278
  color: #334AFF;
279
  }
 
280
  #modern-tribe-info.tribe-upgrade .button, #modern-tribe-info.tribe-upgrade button {
281
  background: #334AFF;
282
  border-radius: 0.25rem;
292
  white-space: nowrap;
293
  width: 200px;
294
  }
 
295
  #modern-tribe-info.tribe-upgrade .button {
296
  height: 3rem;
297
  line-height: 1rem;
298
  text-align: center;
299
  }
 
300
  #modern-tribe-info.tribe-upgrade .content-container {
301
  max-width: 600px;
302
  padding: 2rem;
303
  }
 
304
  #modern-tribe-info.tribe-upgrade .image-container {
305
  text-align: right;
306
  }
 
307
  #modern-tribe-info.tribe-upgrade .image-container img {
308
  border-radius: 0.5rem;
309
  display: inline-block;
314
  vertical-align: top;
315
  width: 100%;
316
  }
 
317
  #modern-tribe-info.tribe-upgrade .screenshot {
318
  float: left;
319
  }
 
320
  #modern-tribe-info.tribe-upgrade .step {
321
  font-size: 0.9rem;
322
  font-weight: 200;
324
  text-align: center;
325
  width: 200px;
326
  }
 
327
  #upgrade-button {
328
  background: #334AFF;
329
  border-radius: 0.25rem;
337
  vertical-align: top;
338
  margin: 2px 0 0 0.75rem;
339
  }
 
340
  /* = Eventbrite
341
  =============================================*/
 
342
  .tribe-community-event-info small,
343
  #EventBriteDetailDiv small {
344
  font-size: 10px;
345
  color: #a3a3a3;
346
  }
 
347
  #eventBriteTicketing,
348
  #mainDonateRow {
349
  margin: -11px 6px 0;
358
  background: url(../images/bg_fade.png) repeat-x top left;
359
  background-color: #fff;
360
  }
 
361
  #eventBriteTicketing h2 {
362
  height: 80px;
363
  margin: 0;
364
  background: url(../images/eb_press_little.gif) no-repeat top right;
365
  }
 
366
  .tribe-community-event-info,
367
  table.eventForm {
368
  width: 100%;
369
  }
 
370
  /* = Recurrence
371
  =============================================*/
 
372
  #custom-recurrence-weeks label {
373
  display: block;
374
  float: left;
375
  width: 45px;
376
  margin-bottom: 3px;
377
  }
 
378
  #custom-recurrence-frequency input {
379
  width: 30px;
380
  }
 
381
  #custom-recurrence-years label {
382
  display: block;
383
  float: left;
384
  width: 50px;
385
  margin-bottom: 3px;
386
  }
 
387
  #recurrence-changed-row {
388
  display: none;
389
  color: red;
390
  }
 
391
  #rec-end-error {
392
  color: red;
393
  }
 
394
  #rec-days-error {
395
  color: red;
396
  }
 
397
  .rec-error {
398
  display: none;
399
  }
 
400
  #recurrence-pattern-description {
401
  font-style: italic;
402
  }
 
403
  .recurrence-pattern-description-row {
404
  display: none;
405
  }
 
406
  /* = Chosen
407
  =============================================*/
 
408
  .chosen,
409
  .tribe-chosen,
410
  .chzn-container {
411
  margin-right: 10px!important;
412
  }
 
413
  .events-dropdown,
414
  #eventsDefaultState,
415
  #defaultCountry,
416
  #StateProvinceSelect {
417
  min-width: 220px;
418
  }
 
419
  .multi-day-cutoff-dropdown {
420
  width: 100px !important;
421
  }
 
422
  /* fix for widgets + chosen support */
 
423
  .widget-liquid-right .widget,
424
  .inactive-sidebar .widget,
425
  .widget-liquid-right .sidebar-description {
426
  overflow: visible !important;
427
  }
 
428
  .tribe-aggregator-import-details {
429
  overflow: hidden;
430
  }
 
431
  .tribe-aggregator-import-details dt {
432
  clear: left;
433
  float: left;
434
  margin-right: .25rem;
435
  }
 
436
  .tribe-aggregator-import-details dd {
437
  margin-left: 0;
438
  }
 
439
  .tribe-aggregator-import-details .tribe-value {
440
  font-weight: bold;
441
  }
 
442
  .tribe-ea-eventbrite-disconnect {
443
  color: #a00;
444
  display: inline-block;
445
  margin-left: 1rem;
446
  }
 
447
  .tribe-ea-eventbrite-disconnect:active,
448
  .tribe-ea-eventbrite-disconnect:hover {
449
  color: #f00;
450
  }
 
451
  .tribe-ea-eventbrite-button {
452
  border-radius: 3px;
453
  color: #fff;
457
  -webkit-transition: background-color 0.5s ease;
458
  transition: background-color 0.5s ease;
459
  }
 
460
  .tribe-ea-eventbrite-button:active,
461
  .tribe-ea-eventbrite-button:hover {
462
  color: #fff;
463
  cursor: pointer;
464
  }
 
465
  .tribe-ea-eventbrite-button {
466
  background: #f6682f;
467
  }
 
468
  .tribe-ea-eventbrite-button:active,
469
  .tribe-ea-eventbrite-button:hover,
470
  .tribe-ea-eventbrite-button:focus {
471
  background: #c85b2f;
472
  }
 
473
  /*
474
  Meetup
475
  */
 
476
  .tribe-ea-meetup-disconnect {
477
  color: #a00;
478
  display: inline-block;
479
  margin-left: 1rem;
480
  }
 
481
  .tribe-ea-meetup-disconnect:active,
482
  .tribe-ea-meetup-disconnect:hover {
483
  color: #f00;
484
  }
 
485
  .tribe-ea-meetup-button {
486
  border-radius: 3px;
487
  color: #fff;
491
  -webkit-transition: background-color 0.5s ease;
492
  transition: background-color 0.5s ease;
493
  }
 
494
  .tribe-ea-meetup-button:active,
495
  .tribe-ea-meetup-button:hover {
496
  color: #fff;
497
  cursor: pointer;
498
  }
 
499
  .tribe-ea-meetup-button {
500
  background: #f41940;
501
  }
 
502
  .tribe-ea-meetup-button:active,
503
  .tribe-ea-meetup-button:hover,
504
  .tribe-ea-meetup-button:focus {
505
  background: #f41940;
506
  }
 
507
  /* = Event Aggregator Status
508
  =============================================*/
 
509
  .event-aggregator-status {
510
  background-color: #fff;
511
  width: 100%;
513
  border-spacing: 0;
514
  margin-bottom: 16px;
515
  }
 
516
  .event-aggregator-status tbody tr:nth-child(even) td {
517
  background-color: #f9f9f9;
518
  }
 
519
  .event-aggregator-status th {
520
  text-align: left;
521
  border-bottom: 1px solid #e4e5e6;
522
  }
 
523
  .event-aggregator-status th, .event-aggregator-status td {
524
  padding: 8px 12px;
525
  background-color: #fff;
526
  }
 
527
  .event-aggregator-status td.label {
528
  width: 220px;
529
  /* @todo: responsive breakpoint? */
530
  }
 
531
  .event-aggregator-status td.label img {
532
  width: 18px;
533
  height: 18px;
534
  margin-right: 6px;
535
  float: left;
536
  }
 
537
  .event-aggregator-status td.indicator {
538
  width: 20px;
539
  }
 
540
  .event-aggregator-status td.indicator.good {
541
  color: #38b042;
542
  }
 
543
  .event-aggregator-status td.indicator.bad {
544
  color: #ed5047;
545
  }
 
546
  .event-aggregator-status td.indicator.warning {
547
  color: #f3ae46;
548
  }
 
549
  @media (max-width: 782px) {
 
550
  .eventForm .tribe-datetime-block .tribe-field-start_date,
551
  .eventForm .tribe-datetime-block .tribe-field-end_date {
552
  width: 63%;
553
  display: inline-block
554
  }
 
555
  .eventForm .tribe-datetime-block .tribe-field-start_time,
556
  .eventForm .tribe-datetime-block .tribe-field-end_time {
557
  width: 35%;
558
  display: inline-block
559
  }
 
560
  .eventForm .tribe-datetime-block .tribe-datetime-separator {
561
  width: 100%;
562
  display: block;
563
  text-align: center;
564
  padding: 5px 0
565
  }
 
566
  .eventForm .tribe-datetime-block .tribe-field-timezone.select2-container {
567
  display: table;
568
  margin: 10px auto 0
569
  }
 
570
  .eventForm .tribe-datetime-block .tribe-change-timezone {
571
  width: 100%;
572
  display: block;
574
  padding: 5px 0
575
  }
576
  }
 
577
  @media( min-width: 1193px ) {
 
578
  .eventForm .tribe-datetime-block .tribe-field-timezone {
579
  width: calc(100% - 400px)
580
  }
581
+ }
582
+ @media (min-width: 480px) {
583
+ #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 .tribe-upgrade-absolute-text, #modern-tribe-info.tribe-upgrade #tribe-upgrade-step2 .tribe-upgrade-absolute-text, #modern-tribe-info.tribe-upgrade #tribe-upgrade-complete .tribe-upgrade-absolute-text {
584
+ position: absolute;
585
+ word-wrap: break-word;
586
+ white-space: nowrap;
587
+ bottom: 80px;
588
+ }
589
+ }
590
+ @media (max-width: 480px) {
591
+ #modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 .tribe-upgrade-absolute-text, #modern-tribe-info.tribe-upgrade #tribe-upgrade-step2 .tribe-upgrade-absolute-text, #modern-tribe-info.tribe-upgrade #tribe-upgrade-complete .tribe-upgrade-absolute-text {
592
+ display: block;
593
+ margin: 15px 10px;
594
+ }
595
+ }
src/resources/css/events-admin.min.css CHANGED
@@ -1 +1 @@
1
- .events-cal #post-query-submit,.events-cal .tablenav select[name=m]{display:none}.fixed .column-end-date,.fixed .column-events-cats,.fixed .column-start-date{width:14%}#additional-field-table input,#additional-field-table select,#additional-field-table textarea{width:200px}#additional-field-table tbody tr{height:72px}.tribe-restore-link+a{display:none}.eventForm{margin-top:-20px}.eventForm td{font-size:12px;padding:0 6px 10px 0;vertical-align:middle}.eventForm td input.alignleft,.eventForm td select.alignleft{margin-right:.3rem}.eventForm #EventURL{width:70%}.eventForm #event-meta td{vertical-align:top}.eventForm #event-meta td:first-child{line-height:30px}.eventForm #event-meta td div{margin-bottom:10px}.eventForm #event-meta td div:last-child{margin-bottom:20px}.eventForm textarea{width:100%}.eventForm h4{font-size:1.2em;margin:1em 0}.eventForm h4.event-time{margin-top:0}.eventForm .tribe_sectionheader{padding-bottom:5px}.eventForm p{margin:0 0 10px}.eventForm input[type=color],.eventForm input[type=date],.eventForm input[type=datetime-local],.eventForm input[type=datetime],.eventForm input[type=email],.eventForm input[type=month],.eventForm input[type=number],.eventForm input[type=password],.eventForm input[type=search],.eventForm input[type=tel],.eventForm input[type=text],.eventForm input[type=time],.eventForm input[type=url],.eventForm input[type=week]{background-image:none;border:1px solid #ccc;border-radius:3px;line-height:20px;margin-left:0}.eventForm .event-dynamic-helper-text{color:#999;font-style:italic;padding:0}.eventForm .tribe-datetime-block .tribe-allday{margin:10px 0 0}.eventForm .tribe-datetime-block .tribe-field-end_date,.eventForm .tribe-datetime-block .tribe-field-end_time,.eventForm .tribe-datetime-block .tribe-field-start_date,.eventForm .tribe-datetime-block .tribe-field-start_time{height:28px}.eventForm .tribe-datetime-block .tribe-field-end_date,.eventForm .tribe-datetime-block .tribe-field-start_date{width:100px}.eventForm .tribe-datetime-block .tribe-field-end_time,.eventForm .tribe-datetime-block .tribe-field-start_time{width:80px}.eventForm .tribe-datetime-block .tribe-field-timezone{width:100%;max-width:199px;min-width:100px;margin-top:-2px;display:none}.eventForm .tribe-datetime-block .tribe-field-timezone.select2-container{display:inline-block;margin-top:-4px}.eventForm .tribe-datetime-block .tribe-change-timezone{white-space:nowrap}.eventForm .tribe-datetime-label{vertical-align:top;padding-top:5px}.ui-datepicker-calendar .ui-datepicker-today a{background:linear-gradient(354deg,#ccc,#eee);color:#000}.ui-datepicker-calendar .ui-datepicker-today.ui-datepicker-current-day a{background:linear-gradient(354deg,#0a55a0,#1288eb);color:#fff}.ui-datepicker select.ui-datepicker-month{width:8rem}.tribe-community-event-info{width:100%;margin:10px}#EventInfo,.eventtable{width:100%;margin:0;padding-top:0}#event_tickets,.eventtable.ticket_list.eventForm{table-layout:fixed}#ticket_end_date,#ticket_start_date{width:100px}.form-table form input{border:none}#submitLabel{display:block}#submitLabel input{display:block;padding:0}#EventBriteDetailDiv h4,.eventForm .tribe_sectionheader h4,.tribe-community-event-info h4{padding-bottom:6px;text-transform:uppercase;border-bottom:1px solid #e5e5e5}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}.ui-front{z-index:1000000}.events-cal .ui-widget-overlay.ui-front{z-index:90}.edit-linked-post-link{display:inline-block;margin-left:10px}.linked-post-wrapper tbody+tbody tr.saved_linked-post td,.linked-post-wrapper tbody+tfoot tr td{margin-top:1em;padding-top:1em}.linked-post-wrapper .linked-post td:first-child{padding-left:30px}.move-linked-post-group{padding-right:.5em;cursor:move}.tribe-delete-this{float:right;color:#444}.tribe-delete-this.hover-state,.tribe-delete-this:hover{color:#a00}.tribe-delete-this.tribe-confirm-delete-this,.tribe_community_edit .edit-linked-post-link a{display:none}.tribe-linked-post-error.error{display:inline;margin-left:5px;padding:5px 10px}#tribe-field-toggle_blocks_editor_hidden_field{display:none}#modern-tribe-info.tribe-upgrade{padding:0}#modern-tribe-info.tribe-upgrade .dashicons,#modern-tribe-info.tribe-upgrade a{color:#334aff}#modern-tribe-info.tribe-upgrade h3{font-size:24px}#modern-tribe-info.tribe-upgrade ul{list-style-type:none;margin-left:0}#modern-tribe-info.tribe-upgrade li>h4{margin-bottom:0}#modern-tribe-info.tribe-upgrade li>p{margin-top:0;padding-left:1.5rem}#modern-tribe-info.tribe-upgrade #tribe-upgrade-complete,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step2{display:flex;flex-direction:row;justify-content:space-between}#modern-tribe-info.tribe-upgrade #tribe-upgrade-complete.hidden,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1.hidden,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step2.hidden{display:none}#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 span{color:#334aff}#modern-tribe-info.tribe-upgrade .button,#modern-tribe-info.tribe-upgrade button{background:#334aff;border-radius:.25rem;border:0;box-shadow:0 2px #000;color:#fff;cursor:pointer;font-size:1rem;line-height:1.2;margin:2rem 1.5rem .25rem .25rem;padding:1rem .5rem;text-decoration:none;white-space:nowrap;width:200px}#modern-tribe-info.tribe-upgrade .button{height:3rem;line-height:1rem;text-align:center}#modern-tribe-info.tribe-upgrade .content-container{max-width:600px;padding:2rem}#modern-tribe-info.tribe-upgrade .image-container{text-align:right}#modern-tribe-info.tribe-upgrade .image-container img{border-radius:.5rem;display:inline-block;filter:drop-shadow(0 0 6px #ccc);height:auto;margin:0;vertical-align:top;width:100%}#modern-tribe-info.tribe-upgrade .screenshot{float:left}#modern-tribe-info.tribe-upgrade .step{font-size:.9rem;font-weight:200;padding-top:.5rem;text-align:center;width:200px}#upgrade-button{background:#334aff;border-radius:.25rem;border:0;box-shadow:0 2px #000;color:#fff;cursor:pointer;font-size:.8rem;height:1.6rem;padding-right:.8rem;vertical-align:top;margin:2px 0 0 .75rem}#EventBriteDetailDiv small,.tribe-community-event-info small{font-size:10px;color:#a3a3a3}#eventBriteTicketing,#mainDonateRow{margin:-11px 6px 0;padding:10px 15px;border:1px solid #e2e2e2;border-radius:3px;-webkit-border-top-left-radius:0;-moz-border-radius-topleft:0;-webkit-border-top-right-radius:0;-moz-border-radius-topright:0;-khtml-border-radius:3px;background:url(../images/bg_fade.png) repeat-x 0 0;background-color:#fff}#eventBriteTicketing h2{height:80px;margin:0;background:url(../images/eb_press_little.gif) no-repeat 100% 0}.tribe-community-event-info,table.eventForm{width:100%}#custom-recurrence-weeks label{display:block;float:left;width:45px;margin-bottom:3px}#custom-recurrence-frequency input{width:30px}#custom-recurrence-years label{display:block;float:left;width:50px;margin-bottom:3px}#recurrence-changed-row{display:none;color:red}#rec-days-error,#rec-end-error{color:red}.rec-error{display:none}#recurrence-pattern-description{font-style:italic}.recurrence-pattern-description-row{display:none}.chosen,.chzn-container,.tribe-chosen{margin-right:10px!important}#defaultCountry,#eventsDefaultState,#StateProvinceSelect,.events-dropdown{min-width:220px}.multi-day-cutoff-dropdown{width:100px!important}.inactive-sidebar .widget,.widget-liquid-right .sidebar-description,.widget-liquid-right .widget{overflow:visible!important}.tribe-aggregator-import-details{overflow:hidden}.tribe-aggregator-import-details dt{clear:left;float:left;margin-right:.25rem}.tribe-aggregator-import-details dd{margin-left:0}.tribe-aggregator-import-details .tribe-value{font-weight:700}.tribe-ea-eventbrite-disconnect{color:#a00;display:inline-block;margin-left:1rem}.tribe-ea-eventbrite-disconnect:active,.tribe-ea-eventbrite-disconnect:hover{color:red}.tribe-ea-eventbrite-button{border-radius:3px;color:#fff;display:inline-block;padding:.5rem 1.5rem;text-decoration:none;transition:background-color .5s ease}.tribe-ea-eventbrite-button:active,.tribe-ea-eventbrite-button:hover{color:#fff;cursor:pointer}.tribe-ea-eventbrite-button{background:#f6682f}.tribe-ea-eventbrite-button:active,.tribe-ea-eventbrite-button:focus,.tribe-ea-eventbrite-button:hover{background:#c85b2f}.tribe-ea-meetup-disconnect{color:#a00;display:inline-block;margin-left:1rem}.tribe-ea-meetup-disconnect:active,.tribe-ea-meetup-disconnect:hover{color:red}.tribe-ea-meetup-button{border-radius:3px;color:#fff;display:inline-block;padding:.5rem 1.5rem;text-decoration:none;transition:background-color .5s ease}.tribe-ea-meetup-button:active,.tribe-ea-meetup-button:hover{color:#fff;cursor:pointer}.tribe-ea-meetup-button,.tribe-ea-meetup-button:active,.tribe-ea-meetup-button:focus,.tribe-ea-meetup-button:hover{background:#f41940}.event-aggregator-status{background-color:#fff;width:100%;border:2px solid #e4e5e6;border-spacing:0;margin-bottom:16px}.event-aggregator-status tbody tr:nth-child(2n) td{background-color:#f9f9f9}.event-aggregator-status th{text-align:left;border-bottom:1px solid #e4e5e6}.event-aggregator-status td,.event-aggregator-status th{padding:8px 12px;background-color:#fff}.event-aggregator-status td.label{width:220px}.event-aggregator-status td.label img{width:18px;height:18px;margin-right:6px;float:left}.event-aggregator-status td.indicator{width:20px}.event-aggregator-status td.indicator.good{color:#38b042}.event-aggregator-status td.indicator.bad{color:#ed5047}.event-aggregator-status td.indicator.warning{color:#f3ae46}@media (max-width:782px){.eventForm .tribe-datetime-block .tribe-field-end_date,.eventForm .tribe-datetime-block .tribe-field-start_date{width:63%;display:inline-block}.eventForm .tribe-datetime-block .tribe-field-end_time,.eventForm .tribe-datetime-block .tribe-field-start_time{width:35%;display:inline-block}.eventForm .tribe-datetime-block .tribe-datetime-separator{width:100%;display:block;text-align:center;padding:5px 0}.eventForm .tribe-datetime-block .tribe-field-timezone.select2-container{display:table;margin:10px auto 0}.eventForm .tribe-datetime-block .tribe-change-timezone{width:100%;display:block;text-align:center;padding:5px 0}}@media(min-width:1193px){.eventForm .tribe-datetime-block .tribe-field-timezone{width:calc(100% - 400px)}}
1
+ .events-cal #post-query-submit,.events-cal .tablenav select[name=m]{display:none}.fixed .column-end-date,.fixed .column-events-cats,.fixed .column-start-date{width:14%}#additional-field-table input,#additional-field-table select,#additional-field-table textarea{width:200px}#additional-field-table tbody tr{height:72px}.tribe-restore-link+a{display:none}.eventForm{margin-top:-20px}.eventForm td{font-size:12px;padding:0 6px 10px 0;vertical-align:middle}.eventForm td input.alignleft,.eventForm td select.alignleft{margin-right:.3rem}.eventForm #EventURL{width:70%}.eventForm #event-meta td{vertical-align:top}.eventForm #event-meta td:first-child{line-height:30px}.eventForm #event-meta td div{margin-bottom:10px}.eventForm #event-meta td div:last-child{margin-bottom:20px}.eventForm textarea{width:100%}.eventForm h4{font-size:1.2em;margin:1em 0}.eventForm h4.event-time{margin-top:0}.eventForm .tribe_sectionheader{padding-bottom:5px}.eventForm p{margin:0 0 10px}.eventForm input[type=color],.eventForm input[type=date],.eventForm input[type=datetime-local],.eventForm input[type=datetime],.eventForm input[type=email],.eventForm input[type=month],.eventForm input[type=number],.eventForm input[type=password],.eventForm input[type=search],.eventForm input[type=tel],.eventForm input[type=text],.eventForm input[type=time],.eventForm input[type=url],.eventForm input[type=week]{background-image:none;border:1px solid #ccc;border-radius:3px;line-height:20px;margin-left:0}.eventForm .event-dynamic-helper-text{color:#999;font-style:italic;padding:0}.eventForm .tribe-datetime-block .tribe-allday{margin:10px 0 0}.eventForm .tribe-datetime-block .tribe-field-end_date,.eventForm .tribe-datetime-block .tribe-field-end_time,.eventForm .tribe-datetime-block .tribe-field-start_date,.eventForm .tribe-datetime-block .tribe-field-start_time{height:28px}.eventForm .tribe-datetime-block .tribe-field-end_date,.eventForm .tribe-datetime-block .tribe-field-start_date{width:100px}.eventForm .tribe-datetime-block .tribe-field-end_time,.eventForm .tribe-datetime-block .tribe-field-start_time{width:80px}.eventForm .tribe-datetime-block .tribe-field-timezone{width:100%;max-width:199px;min-width:100px;margin-top:-2px;display:none}.eventForm .tribe-datetime-block .tribe-field-timezone.select2-container{display:inline-block;margin-top:-4px}.eventForm .tribe-datetime-block .tribe-change-timezone{white-space:nowrap}.eventForm .tribe-datetime-label{vertical-align:top;padding-top:5px}.ui-datepicker-calendar .ui-datepicker-today a{background:linear-gradient(354deg,#ccc,#eee);color:#000}.ui-datepicker-calendar .ui-datepicker-today.ui-datepicker-current-day a{background:linear-gradient(354deg,#0a55a0,#1288eb);color:#fff}.ui-datepicker select.ui-datepicker-month{width:8rem}.tribe-community-event-info{width:100%;margin:10px}#EventInfo,.eventtable{width:100%;margin:0;padding-top:0}#event_tickets,.eventtable.ticket_list.eventForm{table-layout:fixed}#ticket_end_date,#ticket_start_date{width:100px}.form-table form input{border:none}#submitLabel{display:block}#submitLabel input{display:block;padding:0}#EventBriteDetailDiv h4,.eventForm .tribe_sectionheader h4,.tribe-community-event-info h4{padding-bottom:6px;text-transform:uppercase;border-bottom:1px solid #e5e5e5}.tribe-events-error{display:none}.tribe-events-multi-event-day{color:#0f81bb}.ui-front{z-index:1000000}.events-cal .ui-widget-overlay.ui-front{z-index:90}.edit-linked-post-link{display:inline-block;margin-left:10px}.linked-post-wrapper tbody+tbody tr.saved_linked-post td,.linked-post-wrapper tbody+tfoot tr td{margin-top:1em;padding-top:1em}.linked-post-wrapper .linked-post td:first-child{padding-left:30px}.move-linked-post-group{padding-right:.5em;cursor:move}.tribe-delete-this{float:right;color:#444}.tribe-delete-this.hover-state,.tribe-delete-this:hover{color:#a00}.tribe-delete-this.tribe-confirm-delete-this,.tribe_community_edit .edit-linked-post-link a{display:none}.tribe-linked-post-error.error{display:inline;margin-left:5px;padding:5px 10px}#tribe-field-toggle_blocks_editor_hidden_field{display:none}#modern-tribe-info.tribe-upgrade{padding:0;position:relative}#modern-tribe-info.tribe-upgrade .dashicons,#modern-tribe-info.tribe-upgrade a{color:#334aff}#modern-tribe-info.tribe-upgrade h3{font-size:24px;line-height:1.4em}#modern-tribe-info.tribe-upgrade ul{list-style-type:none;margin-left:0}#modern-tribe-info.tribe-upgrade li>h4{margin-bottom:0}#modern-tribe-info.tribe-upgrade li>p{margin-top:0;padding-left:1.5rem}#modern-tribe-info.tribe-upgrade #tribe-upgrade-complete,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step2{display:flex;flex-direction:row;justify-content:space-between}#modern-tribe-info.tribe-upgrade #tribe-upgrade-complete.hidden,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1.hidden,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step2.hidden{display:none}#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 span{color:#334aff}#modern-tribe-info.tribe-upgrade .button,#modern-tribe-info.tribe-upgrade button{background:#334aff;border-radius:.25rem;border:0;box-shadow:0 2px #000;color:#fff;cursor:pointer;font-size:1rem;line-height:1.2;margin:2rem 1.5rem .25rem .25rem;padding:1rem .5rem;text-decoration:none;white-space:nowrap;width:200px}#modern-tribe-info.tribe-upgrade .button{height:3rem;line-height:1rem;text-align:center}#modern-tribe-info.tribe-upgrade .content-container{max-width:600px;padding:2rem}#modern-tribe-info.tribe-upgrade .image-container{text-align:right}#modern-tribe-info.tribe-upgrade .image-container img{border-radius:.5rem;display:inline-block;filter:drop-shadow(0 0 6px #ccc);height:auto;margin:0;vertical-align:top;width:100%}#modern-tribe-info.tribe-upgrade .screenshot{float:left}#modern-tribe-info.tribe-upgrade .step{font-size:.9rem;font-weight:200;padding-top:.5rem;text-align:center;width:200px}#upgrade-button{background:#334aff;border-radius:.25rem;border:0;box-shadow:0 2px #000;color:#fff;cursor:pointer;font-size:.8rem;height:1.6rem;padding-right:.8rem;vertical-align:top;margin:2px 0 0 .75rem}#EventBriteDetailDiv small,.tribe-community-event-info small{font-size:10px;color:#a3a3a3}#eventBriteTicketing,#mainDonateRow{margin:-11px 6px 0;padding:10px 15px;border:1px solid #e2e2e2;border-radius:3px;-webkit-border-top-left-radius:0;-moz-border-radius-topleft:0;-webkit-border-top-right-radius:0;-moz-border-radius-topright:0;-khtml-border-radius:3px;background:url(../images/bg_fade.png) repeat-x 0 0;background-color:#fff}#eventBriteTicketing h2{height:80px;margin:0;background:url(../images/eb_press_little.gif) no-repeat 100% 0}.tribe-community-event-info,table.eventForm{width:100%}#custom-recurrence-weeks label{display:block;float:left;width:45px;margin-bottom:3px}#custom-recurrence-frequency input{width:30px}#custom-recurrence-years label{display:block;float:left;width:50px;margin-bottom:3px}#recurrence-changed-row{display:none;color:red}#rec-days-error,#rec-end-error{color:red}.rec-error{display:none}#recurrence-pattern-description{font-style:italic}.recurrence-pattern-description-row{display:none}.chosen,.chzn-container,.tribe-chosen{margin-right:10px!important}#defaultCountry,#eventsDefaultState,#StateProvinceSelect,.events-dropdown{min-width:220px}.multi-day-cutoff-dropdown{width:100px!important}.inactive-sidebar .widget,.widget-liquid-right .sidebar-description,.widget-liquid-right .widget{overflow:visible!important}.tribe-aggregator-import-details{overflow:hidden}.tribe-aggregator-import-details dt{clear:left;float:left;margin-right:.25rem}.tribe-aggregator-import-details dd{margin-left:0}.tribe-aggregator-import-details .tribe-value{font-weight:700}.tribe-ea-eventbrite-disconnect{color:#a00;display:inline-block;margin-left:1rem}.tribe-ea-eventbrite-disconnect:active,.tribe-ea-eventbrite-disconnect:hover{color:red}.tribe-ea-eventbrite-button{border-radius:3px;color:#fff;display:inline-block;padding:.5rem 1.5rem;text-decoration:none;transition:background-color .5s ease}.tribe-ea-eventbrite-button:active,.tribe-ea-eventbrite-button:hover{color:#fff;cursor:pointer}.tribe-ea-eventbrite-button{background:#f6682f}.tribe-ea-eventbrite-button:active,.tribe-ea-eventbrite-button:focus,.tribe-ea-eventbrite-button:hover{background:#c85b2f}.tribe-ea-meetup-disconnect{color:#a00;display:inline-block;margin-left:1rem}.tribe-ea-meetup-disconnect:active,.tribe-ea-meetup-disconnect:hover{color:red}.tribe-ea-meetup-button{border-radius:3px;color:#fff;display:inline-block;padding:.5rem 1.5rem;text-decoration:none;transition:background-color .5s ease}.tribe-ea-meetup-button:active,.tribe-ea-meetup-button:hover{color:#fff;cursor:pointer}.tribe-ea-meetup-button,.tribe-ea-meetup-button:active,.tribe-ea-meetup-button:focus,.tribe-ea-meetup-button:hover{background:#f41940}.event-aggregator-status{background-color:#fff;width:100%;border:2px solid #e4e5e6;border-spacing:0;margin-bottom:16px}.event-aggregator-status tbody tr:nth-child(2n) td{background-color:#f9f9f9}.event-aggregator-status th{text-align:left;border-bottom:1px solid #e4e5e6}.event-aggregator-status td,.event-aggregator-status th{padding:8px 12px;background-color:#fff}.event-aggregator-status td.label{width:220px}.event-aggregator-status td.label img{width:18px;height:18px;margin-right:6px;float:left}.event-aggregator-status td.indicator{width:20px}.event-aggregator-status td.indicator.good{color:#38b042}.event-aggregator-status td.indicator.bad{color:#ed5047}.event-aggregator-status td.indicator.warning{color:#f3ae46}@media (max-width:782px){.eventForm .tribe-datetime-block .tribe-field-end_date,.eventForm .tribe-datetime-block .tribe-field-start_date{width:63%;display:inline-block}.eventForm .tribe-datetime-block .tribe-field-end_time,.eventForm .tribe-datetime-block .tribe-field-start_time{width:35%;display:inline-block}.eventForm .tribe-datetime-block .tribe-datetime-separator{width:100%;display:block;text-align:center;padding:5px 0}.eventForm .tribe-datetime-block .tribe-field-timezone.select2-container{display:table;margin:10px auto 0}.eventForm .tribe-datetime-block .tribe-change-timezone{width:100%;display:block;text-align:center;padding:5px 0}}@media(min-width:1193px){.eventForm .tribe-datetime-block .tribe-field-timezone{width:calc(100% - 400px)}}@media (min-width:480px){#modern-tribe-info.tribe-upgrade #tribe-upgrade-complete .tribe-upgrade-absolute-text,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 .tribe-upgrade-absolute-text,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step2 .tribe-upgrade-absolute-text{position:absolute;word-wrap:break-word;white-space:nowrap;bottom:80px}}@media (max-width:480px){#modern-tribe-info.tribe-upgrade #tribe-upgrade-complete .tribe-upgrade-absolute-text,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step1 .tribe-upgrade-absolute-text,#modern-tribe-info.tribe-upgrade #tribe-upgrade-step2 .tribe-upgrade-absolute-text{display:block;margin:15px 10px}}
src/resources/css/views-full.css CHANGED
@@ -413,6 +413,11 @@
413
  line-height: 1.42;
414
  }
415
 
 
 
 
 
 
416
  .tribe-events .tribe-events-c-breadcrumbs__list-item-link {
417
  color: #727272;
418
  -webkit-transition: color 0.2s ease;
@@ -579,6 +584,10 @@
579
  margin-top: 8px;
580
  }
581
 
 
 
 
 
582
  /* -----------------------------------------------------------------------------
583
  * Theme Overrides - Enfold
584
  * ----------------------------------------------------------------------------- */
@@ -793,6 +802,14 @@
793
  background-color: #FFFFFF;
794
  }
795
 
 
 
 
 
 
 
 
 
796
  .tribe-events .tribe-events-c-events-bar__search-button:hover .tribe-events-c-events-bar__search-button-icon, .tribe-events .tribe-events-c-events-bar__search-button:focus .tribe-events-c-events-bar__search-button-icon {
797
  opacity: 0.8;
798
  }
@@ -901,6 +918,10 @@
901
  margin-right: 12px;
902
  }
903
 
 
 
 
 
904
  /* Navigation */
905
 
906
  /* -----------------------------------------------------------------------------
@@ -936,16 +957,27 @@
936
  white-space: pre;
937
  }
938
 
 
 
 
 
 
 
 
 
 
 
 
 
 
939
  .tribe-events .tribe-events-c-nav__prev:hover,
940
  .tribe-events .tribe-events-c-nav__prev:focus,
941
  .tribe-events .tribe-events-c-nav__next:hover,
942
- .tribe-events .tribe-events-c-nav__next:focus,
943
- .tribe-events .tribe-events-c-nav__today:hover,
944
- .tribe-events .tribe-events-c-nav__today:focus {
945
  color: rgba(20,24,39, 0.8);
946
  }
947
 
948
- .tribe-events .tribe-events-c-nav__prev:active, .tribe-events .tribe-events-c-nav__next:active, .tribe-events .tribe-events-c-nav__today:active {
949
  color: #141827;
950
  }
951
 
@@ -964,6 +996,13 @@
964
  width: 7px;
965
  }
966
 
 
 
 
 
 
 
 
967
  .tribe-events .tribe-events-c-nav__prev:hover:before, .tribe-events .tribe-events-c-nav__prev:focus:before {
968
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E");
969
  opacity: 0.8;
@@ -987,6 +1026,13 @@
987
  width: 7px;
988
  }
989
 
 
 
 
 
 
 
 
990
  .tribe-events .tribe-events-c-nav__next:hover:after, .tribe-events .tribe-events-c-nav__next:focus:after {
991
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E");
992
  opacity: 0.8;
@@ -1082,11 +1128,23 @@
1082
  *
1083
  * ----------------------------------------------------------------------------- */
1084
 
 
 
 
 
 
 
 
 
1085
  .tribe-events .tribe-events-c-search__input--icon {
1086
  background-repeat: no-repeat;
1087
  background-position: right center;
1088
  }
1089
 
 
 
 
 
1090
  .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input {
1091
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");
1092
  background-size: 16px;
@@ -1122,6 +1180,10 @@
1122
  background-position: right center;
1123
  }
1124
 
 
 
 
 
1125
  #top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input {
1126
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");
1127
  background-size: 16px;
@@ -1220,6 +1282,11 @@
1220
  width: 10px;
1221
  }
1222
 
 
 
 
 
 
1223
  .tribe-events .tribe-events-c-top-bar__datepicker-button--open:after {
1224
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827' fill-rule='nonzero'/%3E%3C/svg%3E");
1225
  }
@@ -1276,6 +1343,60 @@
1276
  *
1277
  * ----------------------------------------------------------------------------- */
1278
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1279
  .tribe-events .tribe-events-c-view-selector__button {
1280
  text-align: left;
1281
  }
@@ -1301,6 +1422,12 @@
1301
  width: calc(100% - 8px);
1302
  }
1303
 
 
 
 
 
 
 
1304
  .tribe-events .tribe-events-c-view-selector__button--active:before {
1305
  display: block;
1306
  }
@@ -1383,6 +1510,11 @@
1383
  width: 3px;
1384
  }
1385
 
 
 
 
 
 
1386
  .tribe-events .tribe-events-calendar-list__event-venue {
1387
  font-style: normal;
1388
  }
@@ -1412,6 +1544,11 @@
1412
  opacity: 0.9;
1413
  }
1414
 
 
 
 
 
 
1415
  .tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:hover .tribe-events-calendar-list__event-datetime-recurring-icon, .tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:focus .tribe-events-calendar-list__event-datetime-recurring-icon {
1416
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3C3.753 4.717 1.66 7 1.66 9.827c0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913c.099.109.158.239.198.37 0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E");
1417
  }
@@ -1555,6 +1692,10 @@
1555
  text-align: center;
1556
  }
1557
 
 
 
 
 
1558
  .tribe-events {
1559
 
1560
  /* -----------------------------------------------------------------------------
@@ -1570,6 +1711,27 @@
1570
  border-radius: 4px;
1571
  }
1572
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1573
  .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date,
1574
  .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link {
1575
  color: #334AFF;
@@ -1823,6 +1985,11 @@
1823
  width: 3px;
1824
  }
1825
 
 
 
 
 
 
1826
  .tribe-events .tribe-events-calendar-day__event-venue {
1827
  font-style: normal;
1828
  }
@@ -1841,6 +2008,11 @@
1841
  opacity: 0.9;
1842
  }
1843
 
 
 
 
 
 
1844
  .tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:hover .tribe-events-calendar-day__event-datetime-recurring-icon, .tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:focus .tribe-events-calendar-day__event-datetime-recurring-icon {
1845
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3C3.753 4.717 1.66 7 1.66 9.827c0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913c.099.109.158.239.198.37 0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E");
1846
  }
@@ -1880,172 +2052,3 @@
1880
  height: 1px;
1881
  margin-left: 20px;
1882
  }
1883
-
1884
- @media (min-width: 768px) {
1885
-
1886
- .tribe-events .tribe-events-c-breadcrumbs__list {
1887
- font-size: 42px;
1888
- line-height: 1.38
1889
- }
1890
-
1891
- .admin-bar .tribe-events .datepicker {
1892
- margin-top: 16px
1893
- }
1894
-
1895
- .tribe-events .tribe-events-c-events-bar--border {
1896
- border: 1px solid #E4E4E4
1897
- }
1898
-
1899
- .tribe-events .tribe-events-c-events-bar__filters {
1900
- border-right: 1px solid #E4E4E4
1901
- }
1902
-
1903
- .tribe-events .tribe-events-c-messages__message-list {
1904
- text-align: center
1905
- }
1906
-
1907
- .tribe-events .tribe-events-c-nav__prev,
1908
- .tribe-events .tribe-events-c-nav__next {
1909
- color: #727272
1910
- }
1911
-
1912
- .tribe-events .tribe-events-c-nav__prev:before {
1913
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E");
1914
- height: 14px;
1915
- margin-right: 15px;
1916
- width: 9px
1917
- }
1918
-
1919
- .tribe-events .tribe-events-c-nav__next:after {
1920
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E");
1921
- height: 14px;
1922
- margin-left: 15px;
1923
- width: 9px
1924
- }
1925
-
1926
- .tribe-events .tribe-events-c-search__input-control {
1927
- border-right: 1px solid #E4E4E4
1928
- }
1929
-
1930
- .tribe-events .tribe-events-c-search__input-control:last-child {
1931
- border-right: 0
1932
- }
1933
-
1934
- .tribe-events .tribe-events-c-search__input--icon {
1935
- background-position: 16px center
1936
- }
1937
-
1938
- #top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input--icon {
1939
- background-position: 16px center
1940
- }
1941
-
1942
- .tribe-events .tribe-events-c-top-bar__datepicker-button:after {
1943
- height: 7px;
1944
- width: 12px
1945
- }
1946
-
1947
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:before {
1948
- content: none
1949
- }
1950
-
1951
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:after {
1952
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z' fill='%23141827' fill-rule='nonzero'/%3E%3C/svg%3E");
1953
- background-repeat: no-repeat;
1954
- background-size: contain;
1955
- content: '';
1956
- display: block;
1957
- -webkit-box-flex: 0;
1958
- flex: none;
1959
- height: 6px;
1960
- margin-left: 8px;
1961
- width: 10px
1962
- }
1963
-
1964
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button--active:after {
1965
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827' fill-rule='nonzero'/%3E%3C/svg%3E")
1966
- }
1967
-
1968
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text {
1969
- color: #141827;
1970
- font-family: "Helvetica Neue", Helvetica, -apple-system, BlinkMacSystemFont, Roboto, Arial, sans-serif;
1971
- font-size: 14px;
1972
- line-height: 1.62;
1973
- font-weight: 400;
1974
- font-weight: 700
1975
- }
1976
-
1977
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content {
1978
- box-shadow: 0 2px 5px 0 rgba(0,0,0, 0.14)
1979
- }
1980
-
1981
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content {
1982
- border: 0;
1983
- border-radius: 0;
1984
- box-shadow: none
1985
- }
1986
-
1987
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link {
1988
- background-color: transparent
1989
- }
1990
-
1991
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link:after {
1992
- background-color: #141827;
1993
- bottom: -1px;
1994
- content: '';
1995
- display: block;
1996
- height: 2px;
1997
- position: absolute;
1998
- width: 100%
1999
- }
2000
-
2001
- .tribe-events .tribe-events-c-view-selector__button:before {
2002
- width: calc(100% - 16px);
2003
- -webkit-transform: none;
2004
- transform: none
2005
- }
2006
-
2007
- .tribe-events .tribe-events-calendar-list__event-row--featured .tribe-events-calendar-list__event-date-tag-datetime:after {
2008
- right: -1px;
2009
- width: 4px
2010
- }
2011
-
2012
- .tribe-events .tribe-events-calendar-list__event-datetime-featured-text {
2013
- color: #334AFF;
2014
- font-weight: 700
2015
- }
2016
-
2017
- .tribe-events .tribe-events-calendar-month__header-column-title {
2018
- text-align: left
2019
- }
2020
-
2021
- .tribe-events .tribe-events-calendar-month__day {
2022
- border-radius: 0
2023
- }
2024
-
2025
- .tribe-events .tribe-events-calendar-month__day:after {
2026
- background-color: transparent;
2027
- bottom: 0;
2028
- content: '';
2029
- display: block;
2030
- height: 2px;
2031
- left: -1px;
2032
- position: absolute;
2033
- -webkit-transition: background-color 0.2s ease;
2034
- transition: background-color 0.2s ease;
2035
- width: calc(100% + 2px)
2036
- }
2037
-
2038
- .tribe-events .tribe-events-calendar-month__day:hover:after {
2039
- background-color: #141827
2040
- }
2041
-
2042
- .tribe-events .tribe-events-calendar-day__event--featured:after {
2043
- left: calc(11.111% - 24px);
2044
- width: 4px
2045
- }
2046
-
2047
- .tribe-events .tribe-events-calendar-day__event-datetime-featured-text {
2048
- color: #334AFF;
2049
- font-weight: 700
2050
- }
2051
- }
413
  line-height: 1.42;
414
  }
415
 
416
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-breadcrumbs__list {
417
+ font-size: 42px;
418
+ line-height: 1.38;
419
+ }
420
+
421
  .tribe-events .tribe-events-c-breadcrumbs__list-item-link {
422
  color: #727272;
423
  -webkit-transition: color 0.2s ease;
584
  margin-top: 8px;
585
  }
586
 
587
+ .admin-bar .tribe-events.tribe-common--breakpoint-medium .datepicker {
588
+ margin-top: 16px;
589
+ }
590
+
591
  /* -----------------------------------------------------------------------------
592
  * Theme Overrides - Enfold
593
  * ----------------------------------------------------------------------------- */
802
  background-color: #FFFFFF;
803
  }
804
 
805
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar--border {
806
+ border: 1px solid #E4E4E4;
807
+ }
808
+
809
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters {
810
+ border-right: 1px solid #E4E4E4;
811
+ }
812
+
813
  .tribe-events .tribe-events-c-events-bar__search-button:hover .tribe-events-c-events-bar__search-button-icon, .tribe-events .tribe-events-c-events-bar__search-button:focus .tribe-events-c-events-bar__search-button-icon {
814
  opacity: 0.8;
815
  }
918
  margin-right: 12px;
919
  }
920
 
921
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-messages__message-list {
922
+ text-align: center;
923
+ }
924
+
925
  /* Navigation */
926
 
927
  /* -----------------------------------------------------------------------------
957
  white-space: pre;
958
  }
959
 
960
+ .tribe-events .tribe-events-c-nav__today:hover,
961
+ .tribe-events .tribe-events-c-nav__today:focus {
962
+ color: rgba(20,24,39, 0.8);
963
+ }
964
+
965
+ .tribe-events .tribe-events-c-nav__today:active {
966
+ color: #141827;
967
+ }
968
+
969
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__prev, .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__next {
970
+ color: #727272;
971
+ }
972
+
973
  .tribe-events .tribe-events-c-nav__prev:hover,
974
  .tribe-events .tribe-events-c-nav__prev:focus,
975
  .tribe-events .tribe-events-c-nav__next:hover,
976
+ .tribe-events .tribe-events-c-nav__next:focus {
 
 
977
  color: rgba(20,24,39, 0.8);
978
  }
979
 
980
+ .tribe-events .tribe-events-c-nav__prev:active, .tribe-events .tribe-events-c-nav__next:active {
981
  color: #141827;
982
  }
983
 
996
  width: 7px;
997
  }
998
 
999
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__prev:before {
1000
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E");
1001
+ height: 14px;
1002
+ margin-right: 15px;
1003
+ width: 9px;
1004
+ }
1005
+
1006
  .tribe-events .tribe-events-c-nav__prev:hover:before, .tribe-events .tribe-events-c-nav__prev:focus:before {
1007
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E");
1008
  opacity: 0.8;
1026
  width: 7px;
1027
  }
1028
 
1029
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__next:after {
1030
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E");
1031
+ height: 14px;
1032
+ margin-left: 15px;
1033
+ width: 9px;
1034
+ }
1035
+
1036
  .tribe-events .tribe-events-c-nav__next:hover:after, .tribe-events .tribe-events-c-nav__next:focus:after {
1037
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E");
1038
  opacity: 0.8;
1128
  *
1129
  * ----------------------------------------------------------------------------- */
1130
 
1131
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-control {
1132
+ border-right: 1px solid #E4E4E4;
1133
+ }
1134
+
1135
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-control:last-child {
1136
+ border-right: 0;
1137
+ }
1138
+
1139
  .tribe-events .tribe-events-c-search__input--icon {
1140
  background-repeat: no-repeat;
1141
  background-position: right center;
1142
  }
1143
 
1144
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input--icon {
1145
+ background-position: 16px center;
1146
+ }
1147
+
1148
  .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input {
1149
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");
1150
  background-size: 16px;
1180
  background-position: right center;
1181
  }
1182
 
1183
+ #top.tribe-theme-enfold .tribe-events.tribe-common--breakpoint-medium .tribe-events-c-search__input--icon {
1184
+ background-position: 16px center;
1185
+ }
1186
+
1187
  #top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input {
1188
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");
1189
  background-size: 16px;
1282
  width: 10px;
1283
  }
1284
 
1285
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker-button:after {
1286
+ height: 7px;
1287
+ width: 12px;
1288
+ }
1289
+
1290
  .tribe-events .tribe-events-c-top-bar__datepicker-button--open:after {
1291
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827' fill-rule='nonzero'/%3E%3C/svg%3E");
1292
  }
1343
  *
1344
  * ----------------------------------------------------------------------------- */
1345
 
1346
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:before {
1347
+ content: none;
1348
+ }
1349
+
1350
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:after {
1351
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z' fill='%23141827' fill-rule='nonzero'/%3E%3C/svg%3E");
1352
+ background-repeat: no-repeat;
1353
+ background-size: contain;
1354
+ content: '';
1355
+ display: block;
1356
+ -webkit-box-flex: 0;
1357
+ flex: none;
1358
+ height: 6px;
1359
+ margin-left: 8px;
1360
+ width: 10px;
1361
+ }
1362
+
1363
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button--active:after {
1364
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827' fill-rule='nonzero'/%3E%3C/svg%3E");
1365
+ }
1366
+
1367
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text {
1368
+ color: #141827;
1369
+ font-family: "Helvetica Neue", Helvetica, -apple-system, BlinkMacSystemFont, Roboto, Arial, sans-serif;
1370
+ font-size: 14px;
1371
+ line-height: 1.62;
1372
+ font-weight: 400;
1373
+ font-weight: 700;
1374
+ }
1375
+
1376
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content {
1377
+ box-shadow: 0 2px 5px 0 rgba(0,0,0, 0.14);
1378
+ }
1379
+
1380
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content {
1381
+ border: 0;
1382
+ border-radius: 0;
1383
+ box-shadow: none;
1384
+ }
1385
+
1386
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link {
1387
+ background-color: transparent;
1388
+ }
1389
+
1390
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link:after {
1391
+ background-color: #141827;
1392
+ bottom: -1px;
1393
+ content: '';
1394
+ display: block;
1395
+ height: 2px;
1396
+ position: absolute;
1397
+ width: 100%;
1398
+ }
1399
+
1400
  .tribe-events .tribe-events-c-view-selector__button {
1401
  text-align: left;
1402
  }
1422
  width: calc(100% - 8px);
1423
  }
1424
 
1425
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__button:before {
1426
+ width: calc(100% - 16px);
1427
+ -webkit-transform: none;
1428
+ transform: none;
1429
+ }
1430
+
1431
  .tribe-events .tribe-events-c-view-selector__button--active:before {
1432
  display: block;
1433
  }
1510
  width: 3px;
1511
  }
1512
 
1513
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row--featured .tribe-events-calendar-list__event-date-tag-datetime:after {
1514
+ right: -1px;
1515
+ width: 4px;
1516
+ }
1517
+
1518
  .tribe-events .tribe-events-calendar-list__event-venue {
1519
  font-style: normal;
1520
  }
1544
  opacity: 0.9;
1545
  }
1546
 
1547
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-datetime-featured-text {
1548
+ color: #334AFF;
1549
+ font-weight: 700;
1550
+ }
1551
+
1552
  .tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:hover .tribe-events-calendar-list__event-datetime-recurring-icon, .tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:focus .tribe-events-calendar-list__event-datetime-recurring-icon {
1553
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3C3.753 4.717 1.66 7 1.66 9.827c0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913c.099.109.158.239.198.37 0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E");
1554
  }
1692
  text-align: center;
1693
  }
1694
 
1695
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__header-column-title {
1696
+ text-align: left;
1697
+ }
1698
+
1699
  .tribe-events {
1700
 
1701
  /* -----------------------------------------------------------------------------
1711
  border-radius: 4px;
1712
  }
1713
 
1714
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day {
1715
+ border-radius: 0;
1716
+ }
1717
+
1718
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day:after {
1719
+ background-color: transparent;
1720
+ bottom: 0;
1721
+ content: '';
1722
+ display: block;
1723
+ height: 2px;
1724
+ left: -1px;
1725
+ position: absolute;
1726
+ -webkit-transition: background-color 0.2s ease;
1727
+ transition: background-color 0.2s ease;
1728
+ width: calc(100% + 2px);
1729
+ }
1730
+
1731
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day:hover:after {
1732
+ background-color: #141827;
1733
+ }
1734
+
1735
  .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date,
1736
  .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link {
1737
  color: #334AFF;
1985
  width: 3px;
1986
  }
1987
 
1988
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event--featured:after {
1989
+ left: calc(11.111% - 24px);
1990
+ width: 4px;
1991
+ }
1992
+
1993
  .tribe-events .tribe-events-calendar-day__event-venue {
1994
  font-style: normal;
1995
  }
2008
  opacity: 0.9;
2009
  }
2010
 
2011
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-datetime-featured-text {
2012
+ color: #334AFF;
2013
+ font-weight: 700;
2014
+ }
2015
+
2016
  .tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:hover .tribe-events-calendar-day__event-datetime-recurring-icon, .tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:focus .tribe-events-calendar-day__event-datetime-recurring-icon {
2017
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3C3.753 4.717 1.66 7 1.66 9.827c0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913c.099.109.158.239.198.37 0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E");
2018
  }
2052
  height: 1px;
2053
  margin-left: 20px;
2054
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/resources/css/views-full.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-events .tribe-events-c-breadcrumbs__list{font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:24px;line-height:1.42}.tribe-events .tribe-events-c-breadcrumbs__list-item-link{color:#727272;transition:color .2s ease}.tribe-events .tribe-events-c-breadcrumbs__list-item-link:visited{color:#727272}.tribe-events .tribe-events-c-breadcrumbs__list-item-link:focus,.tribe-events .tribe-events-c-breadcrumbs__list-item-link:hover{color:#141827}.tribe-events .datepicker{background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tribe-events .datepicker:after,.tribe-events .datepicker:before{content:none}.tribe-events .datepicker .datepicker-switch:active,.tribe-events .datepicker .datepicker-switch:focus,.tribe-events .datepicker .datepicker-switch:hover,.tribe-events .datepicker .next:active,.tribe-events .datepicker .next:focus,.tribe-events .datepicker .next:hover,.tribe-events .datepicker .prev:active,.tribe-events .datepicker .prev:focus,.tribe-events .datepicker .prev:hover{background-color:#fff}.tribe-events .datepicker .datepicker-switch{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400}.tribe-events .datepicker .datepicker-switch:focus,.tribe-events .datepicker .datepicker-switch:hover{color:rgba(20,24,39,.8)}.tribe-events .datepicker .datepicker-switch:active{color:rgba(20,24,39,.9)}.tribe-events .datepicker .dow{font-size:11px;line-height:1.5}.tribe-events .datepicker .day,.tribe-events .datepicker .dow{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:400}.tribe-events .datepicker .day{font-size:16px;line-height:1.62}.tribe-events .datepicker .month,.tribe-events .datepicker .year{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400}.tribe-events .datepicker .past{color:rgba(20,24,39,.62)}.tribe-events .datepicker .day,.tribe-events .datepicker .month,.tribe-events .datepicker .year{border-radius:4px}.tribe-events .datepicker .day.focused,.tribe-events .datepicker .day:focus,.tribe-events .datepicker .day:hover,.tribe-events .datepicker .month.focused,.tribe-events .datepicker .month:focus,.tribe-events .datepicker .month:hover,.tribe-events .datepicker .year.focused,.tribe-events .datepicker .year:focus,.tribe-events .datepicker .year:hover{background:#f7f6f6}.tribe-events .datepicker .day.current,.tribe-events .datepicker .day.current.focused,.tribe-events .datepicker .day.current:focus,.tribe-events .datepicker .day.current:hover,.tribe-events .datepicker .month.current,.tribe-events .datepicker .month.current.focused,.tribe-events .datepicker .month.current:focus,.tribe-events .datepicker .month.current:hover,.tribe-events .datepicker .year.current,.tribe-events .datepicker .year.current.focused,.tribe-events .datepicker .year.current:focus,.tribe-events .datepicker .year.current:hover{background:rgba(51,74,255,.07)}.tribe-events .datepicker .day.active,.tribe-events .datepicker .day.active.focused,.tribe-events .datepicker .day.active:focus,.tribe-events .datepicker .day.active:hover,.tribe-events .datepicker .month.active,.tribe-events .datepicker .month.active.focused,.tribe-events .datepicker .month.active:focus,.tribe-events .datepicker .month.active:hover,.tribe-events .datepicker .year.active,.tribe-events .datepicker .year.active.focused,.tribe-events .datepicker .year.active:focus,.tribe-events .datepicker .year.active:hover{color:#fff;background:#334aff;text-shadow:none}.admin-bar .tribe-events .datepicker{margin-top:8px}.tribe-theme-enfold .tribe-events .datepicker{border:1px solid #d5d5d5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch{color:#141827!important}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch:focus,.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch:hover{color:rgba(20,24,39,.8)!important}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch:active{color:rgba(20,24,39,.9)!important}.tribe-theme-enfold .tribe-events .datepicker .day{background-color:#fff}.tribe-theme-enfold .tribe-events .datepicker .day.new,.tribe-theme-enfold .tribe-events .datepicker .day.old{opacity:1}.tribe-theme-enfold .tribe-events .datepicker .day,.tribe-theme-enfold .tribe-events .datepicker .month,.tribe-theme-enfold .tribe-events .datepicker .year{color:#141827;background-color:#fff}.tribe-theme-enfold .tribe-events .datepicker .day.focused,.tribe-theme-enfold .tribe-events .datepicker .day:focus,.tribe-theme-enfold .tribe-events .datepicker .day:hover,.tribe-theme-enfold .tribe-events .datepicker .month.focused,.tribe-theme-enfold .tribe-events .datepicker .month:focus,.tribe-theme-enfold .tribe-events .datepicker .month:hover,.tribe-theme-enfold .tribe-events .datepicker .year.focused,.tribe-theme-enfold .tribe-events .datepicker .year:focus,.tribe-theme-enfold .tribe-events .datepicker .year:hover{background:#f7f6f6}.tribe-theme-enfold .tribe-events .datepicker .day.past,.tribe-theme-enfold .tribe-events .datepicker .month.past,.tribe-theme-enfold .tribe-events .datepicker .year.past{color:rgba(20,24,39,.62)}.tribe-theme-enfold .tribe-events .datepicker .day.current,.tribe-theme-enfold .tribe-events .datepicker .day.current.focused,.tribe-theme-enfold .tribe-events .datepicker .day.current:focus,.tribe-theme-enfold .tribe-events .datepicker .day.current:hover,.tribe-theme-enfold .tribe-events .datepicker .month.current,.tribe-theme-enfold .tribe-events .datepicker .month.current.focused,.tribe-theme-enfold .tribe-events .datepicker .month.current:focus,.tribe-theme-enfold .tribe-events .datepicker .month.current:hover,.tribe-theme-enfold .tribe-events .datepicker .year.current,.tribe-theme-enfold .tribe-events .datepicker .year.current.focused,.tribe-theme-enfold .tribe-events .datepicker .year.current:focus,.tribe-theme-enfold .tribe-events .datepicker .year.current:hover{background:rgba(51,74,255,.07)}.tribe-theme-enfold .tribe-events .datepicker .day.active,.tribe-theme-enfold .tribe-events .datepicker .day.active.focused,.tribe-theme-enfold .tribe-events .datepicker .day.active:focus,.tribe-theme-enfold .tribe-events .datepicker .day.active:hover,.tribe-theme-enfold .tribe-events .datepicker .month.active,.tribe-theme-enfold .tribe-events .datepicker .month.active.focused,.tribe-theme-enfold .tribe-events .datepicker .month.active:focus,.tribe-theme-enfold .tribe-events .datepicker .month.active:hover,.tribe-theme-enfold .tribe-events .datepicker .year.active,.tribe-theme-enfold .tribe-events .datepicker .year.active.focused,.tribe-theme-enfold .tribe-events .datepicker .year.active:focus,.tribe-theme-enfold .tribe-events .datepicker .year.active:hover{color:#fff;background:#334aff}.tribe-theme-avada .tribe-events .datepicker{border:1px solid #d5d5d5;border-radius:4px}.tribe-theme-avada .tribe-events .datepicker tbody td{border:0}.tribe-theme-avada .tribe-events .datepicker .datepicker-switch,.tribe-theme-avada .tribe-events .datepicker .datepicker-switch:hover,.tribe-theme-avada .tribe-events .datepicker .next,.tribe-theme-avada .tribe-events .datepicker .next:hover,.tribe-theme-avada .tribe-events .datepicker .prev,.tribe-theme-avada .tribe-events .datepicker .prev:hover{background-color:#fff}.tribe-theme-avada .tribe-events .datepicker .day.new,.tribe-theme-avada .tribe-events .datepicker .day.old{background-color:transparent!important;color:#141827!important}.tribe-theme-avada .tribe-events .datepicker .day.new.focused,.tribe-theme-avada .tribe-events .datepicker .day.new:focus,.tribe-theme-avada .tribe-events .datepicker .day.new:hover,.tribe-theme-avada .tribe-events .datepicker .day.old.focused,.tribe-theme-avada .tribe-events .datepicker .day.old:focus,.tribe-theme-avada .tribe-events .datepicker .day.old:hover{background:#f7f6f6!important}.tribe-theme-avada .tribe-events .datepicker .day,.tribe-theme-avada .tribe-events .datepicker .month{background-color:transparent;color:#141827}.tribe-theme-avada .tribe-events .datepicker .day.focused,.tribe-theme-avada .tribe-events .datepicker .day:focus,.tribe-theme-avada .tribe-events .datepicker .day:hover,.tribe-theme-avada .tribe-events .datepicker .month.focused,.tribe-theme-avada .tribe-events .datepicker .month:focus,.tribe-theme-avada .tribe-events .datepicker .month:hover{background:#f7f6f6}.tribe-theme-avada .tribe-events .datepicker .day.past,.tribe-theme-avada .tribe-events .datepicker .month.past{color:rgba(20,24,39,.62)!important}.tribe-theme-avada .tribe-events .datepicker .day.current,.tribe-theme-avada .tribe-events .datepicker .day.current.focused,.tribe-theme-avada .tribe-events .datepicker .day.current:focus,.tribe-theme-avada .tribe-events .datepicker .day.current:hover,.tribe-theme-avada .tribe-events .datepicker .month.current,.tribe-theme-avada .tribe-events .datepicker .month.current.focused,.tribe-theme-avada .tribe-events .datepicker .month.current:focus,.tribe-theme-avada .tribe-events .datepicker .month.current:hover{background:rgba(51,74,255,.07)}.tribe-theme-avada .tribe-events .datepicker .day.active,.tribe-theme-avada .tribe-events .datepicker .day.active.focused,.tribe-theme-avada .tribe-events .datepicker .day.active:focus,.tribe-theme-avada .tribe-events .datepicker .day.active:hover,.tribe-theme-avada .tribe-events .datepicker .month.active,.tribe-theme-avada .tribe-events .datepicker .month.active.focused,.tribe-theme-avada .tribe-events .datepicker .month.active:focus,.tribe-theme-avada .tribe-events .datepicker .month.active:hover{color:#fff!important;background:#334aff!important}.tribe-events .tribe-events-c-day-marker:after{background-color:#d5d5d5;content:"";display:block;flex:auto;height:1px;margin-left:20px}.tribe-events .tribe-events-c-events-bar{background-color:#fff}.tribe-events .tribe-events-c-events-bar__search-button:focus .tribe-events-c-events-bar__search-button-icon,.tribe-events .tribe-events-c-events-bar__search-button:hover .tribe-events-c-events-bar__search-button-icon{opacity:.8}.tribe-events .tribe-events-c-events-bar__search-button:active .tribe-events-c-events-bar__search-button-icon{opacity:.9}.tribe-events .tribe-events-c-events-bar__search-button:before{background-color:#334aff;content:"";display:none;height:2px;pointer-events:none;position:absolute;top:100%;transform:translateY(4px);width:calc(100% - 8px)}.tribe-events .tribe-events-c-events-bar__search-button--active:before{display:block}.tribe-events .tribe-events-c-events-bar__tab{border-radius:4px}.tribe-events .tribe-events-c-events-bar__tab:active .tribe-events-c-events-bar__tab-text,.tribe-events .tribe-events-c-events-bar__tab:focus .tribe-events-c-events-bar__tab-text,.tribe-events .tribe-events-c-events-bar__tab:hover .tribe-events-c-events-bar__tab-text{font-weight:700}.tribe-events .tribe-events-c-events-bar__tab--active,.tribe-events .tribe-events-c-events-bar__tab--active:focus,.tribe-events .tribe-events-c-events-bar__tab--active:hover{background-color:#f7f6f6}.tribe-events .tribe-events-c-events-bar__tab--active .tribe-events-c-events-bar__tab-text{font-weight:700}.tribe-theme-twentyseventeen .tribe-events .tribe-events-c-events-bar__tab--active,.tribe-theme-twentyseventeen .tribe-events .tribe-events-c-events-bar__tab--active:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-c-events-bar__tab--active:hover{background-color:#f7f6f6}.tribe-events .tribe-events-c-messages__message{background-color:rgba(20,24,39,.07);border-radius:4px}.tribe-events .tribe-events-c-messages__message--notice:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 23'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath stroke='%23141827' d='M.5 2.5h20v20H.5z'/%3E%3Cpath stroke='%23334AFF' stroke-linecap='round' d='M7.583 11.583l5.834 5.834m0-5.834l-5.834 5.834'/%3E%3Cpath stroke='%23141827' stroke-linecap='round' d='M4.5.5v4m12-4v4'/%3E%3Cpath stroke='%23141827' stroke-linecap='square' d='M.5 7.5h20'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-size:22px;display:inline-block;content:"";min-width:22px;height:24px;margin-right:12px}.tribe-events .tribe-events-c-nav{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-c-nav__list{list-style:none}.tribe-events .tribe-events-c-nav__next-label-plural,.tribe-events .tribe-events-c-nav__prev-label-plural{white-space:pre}.tribe-events .tribe-events-c-nav__next:focus,.tribe-events .tribe-events-c-nav__next:hover,.tribe-events .tribe-events-c-nav__prev:focus,.tribe-events .tribe-events-c-nav__prev:hover,.tribe-events .tribe-events-c-nav__today:focus,.tribe-events .tribe-events-c-nav__today:hover{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-c-nav__next:active,.tribe-events .tribe-events-c-nav__prev:active,.tribe-events .tribe-events-c-nav__today:active{color:#141827}.tribe-events .tribe-events-c-nav__next:disabled,.tribe-events .tribe-events-c-nav__prev:disabled{background-color:transparent;color:#d5d5d5}.tribe-events .tribe-events-c-nav__prev:before{background-repeat:no-repeat;background-size:contain;content:"";height:12px;margin-right:8px;width:7px}.tribe-events .tribe-events-c-nav__prev:before,.tribe-events .tribe-events-c-nav__prev:focus:before,.tribe-events .tribe-events-c-nav__prev:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-nav__prev:focus:before,.tribe-events .tribe-events-c-nav__prev:hover:before{opacity:.8}.tribe-events .tribe-events-c-nav__prev:active:before{opacity:1}.tribe-events .tribe-events-c-nav__prev:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-nav__next:after{background-repeat:no-repeat;background-size:contain;content:"";height:12px;margin-left:8px;width:7px}.tribe-events .tribe-events-c-nav__next:after,.tribe-events .tribe-events-c-nav__next:focus:after,.tribe-events .tribe-events-c-nav__next:hover:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-nav__next:focus:after,.tribe-events .tribe-events-c-nav__next:hover:after{opacity:.8}.tribe-events .tribe-events-c-nav__next:active:after{opacity:1}.tribe-events .tribe-events-c-nav__next:disabled:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-small-cta__stock{color:#727272}.tribe-events .tribe-events-c-search__input--icon{background-repeat:no-repeat;background-position:100%}.tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");background-size:16px}.tribe-events .tribe-events-c-search__input-control--keyword-focus .tribe-events-c-search__input,.tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23727272' fill-rule='evenodd'/%3E%3C/svg%3E");background-size:10px 15px}.tribe-events .tribe-events-c-search__input-control--location-focus .tribe-events-c-search__input,.tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23334AFF' fill-rule='evenodd'/%3E%3C/svg%3E")}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input--icon{background-repeat:no-repeat;background-position:100%}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");background-size:16px}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword-focus .tribe-events-c-search__input,#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23334AFF'/%3E%3C/svg%3E")}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23727272' fill-rule='evenodd'/%3E%3C/svg%3E");background-size:10px 15px}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--location-focus .tribe-events-c-search__input,#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23334AFF' fill-rule='evenodd'/%3E%3C/svg%3E")}.tooltipster-base.tribe-events-tooltip-theme{background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box{background-color:transparent;border:0;border-radius:0;box-shadow:none}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box .tooltipster-content{color:#141827;overflow:inherit}.tribe-events .tribe-events-c-top-bar__datepicker-button{transition:opacity .2s ease}.tribe-events .tribe-events-c-top-bar__datepicker-button:focus,.tribe-events .tribe-events-c-top-bar__datepicker-button:hover{opacity:.8}.tribe-events .tribe-events-c-top-bar__datepicker-button:active{opacity:.9}.tribe-events .tribe-events-c-top-bar__datepicker-button:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;margin-left:8px;height:6px;width:10px}.tribe-events .tribe-events-c-top-bar__datepicker-button--open:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-view-selector__button{text-align:left}.tribe-events .tribe-events-c-view-selector__button:focus .tribe-events-c-view-selector__button-icon,.tribe-events .tribe-events-c-view-selector__button:hover .tribe-events-c-view-selector__button-icon{opacity:.8}.tribe-events .tribe-events-c-view-selector__button:active .tribe-events-c-view-selector__button-icon{opacity:.9}.tribe-events .tribe-events-c-view-selector__button:before{background-color:#334aff;content:"";display:none;height:2px;pointer-events:none;position:absolute;top:100%;transform:translateY(4px);width:calc(100% - 8px)}.tribe-events .tribe-events-c-view-selector__button--active:before{display:block}.tribe-events .tribe-events-c-view-selector__content{border:1px solid #e4e4e4;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link{background-color:#f7f6f6}.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-text{font-weight:700}.tribe-events .tribe-events-c-view-selector__list-item-link{border-radius:4px}.tribe-events .tribe-events-c-view-selector__list-item-link:focus .tribe-events-c-view-selector__list-item-icon,.tribe-events .tribe-events-c-view-selector__list-item-link:hover .tribe-events-c-view-selector__list-item-icon{opacity:.8}.tribe-events .tribe-events-c-view-selector__list-item-link:focus .tribe-events-c-view-selector__list-item-text,.tribe-events .tribe-events-c-view-selector__list-item-link:hover .tribe-events-c-view-selector__list-item-text{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-c-view-selector__list-item-text{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400}.tribe-events .tribe-events-calendar-list__event-row--featured .tribe-events-calendar-list__event-date-tag-datetime:after{background-color:#334aff;content:"";height:100%;right:calc(100% - 3px);position:absolute;width:3px}.tribe-events .tribe-events-calendar-list__event-venue{font-style:normal}.tribe-events .tribe-events-calendar-list__event-date-tag-weekday{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5;color:#727272;text-transform:uppercase}.tribe-events .tribe-events-calendar-list__event-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-list__event-featured-image-link:focus,.tribe-events .tribe-events-calendar-list__event-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-list__event-featured-image-link:active{opacity:.9}.tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:focus .tribe-events-calendar-list__event-datetime-recurring-icon,.tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:hover .tribe-events-calendar-list__event-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-list__month-separator:after{background-color:#d5d5d5;content:"";display:block;flex:auto;height:1px;margin-left:20px}.tribe-events .tribe-events-calendar-list-nav{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__calendar-event{opacity:.5}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link:focus,.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link:active{opacity:.9}.tribe-events .tribe-events-calendar-month__calendar-event-datetime{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5;color:#727272}.tribe-events .tribe-events-calendar-month__calendar-event--featured:before{background-color:#334aff;content:"";height:100%;left:7px;position:absolute;width:2px}.tribe-events .tribe-events-calendar-month__calendar-event--featured:last-child:before{height:calc(100% - 16px)}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-link:focus .tribe-events-calendar-month__calendar-event-datetime-recurring-icon,.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-link:hover .tribe-events-calendar-month__calendar-event-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link:focus,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link:active{opacity:.9}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-link:focus .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-link:hover .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-month__header-column{text-transform:uppercase}.tribe-events .tribe-events-calendar-month__header-column-title{color:#727272;text-align:center}.tribe-events .tribe-events-calendar-month__day{border-radius:4px}.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date,.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:focus,.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:hover{color:rgba(51,74,255,.8)}.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:active{color:rgba(51,74,255,.9)}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__day-date{opacity:.4}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__mobile-events-icon--event{background-color:#141827;opacity:.5}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");opacity:.5}.tribe-events .tribe-events-calendar-month__day-cell--mobile:focus,.tribe-events .tribe-events-calendar-month__day-cell--mobile:hover{background-color:#f7f6f6}.tribe-events .tribe-events-calendar-month__day-cell--selected,.tribe-events .tribe-events-calendar-month__day-cell--selected:focus,.tribe-events .tribe-events-calendar-month__day-cell--selected:hover{background-color:#334aff}.tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__day-date{color:#fff;opacity:1}.tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__mobile-events-icon--event{background-color:#fff;opacity:1}.tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23FFF'/%3E%3C/svg%3E");opacity:1}.tribe-events .tribe-events-calendar-month__day-date-link{color:#141827;transition:color .2s ease}.tribe-events .tribe-events-calendar-month__day-date-link:focus,.tribe-events .tribe-events-calendar-month__day-date-link:hover{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-calendar-month__day-date-link:active{color:rgba(20,24,39,.9)}.tribe-events .tribe-events-calendar-month__mobile-events-icon--event{background-color:#334aff}.tribe-events .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:hover{color:rgba(51,74,255,.8)}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:active{color:rgba(51,74,255,.9)}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-cell--selected:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-cell--selected:hover{background-color:#334aff}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-date-link:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-date-link:hover{color:rgba(20,24,39,.8)}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-date-link:active{color:rgba(20,24,39,.9)}.tribe-theme-twentytwenty .tribe-events .tribe-events-calendar-month__day-cell--selected{background-color:#334aff}.tribe-theme-avada #main .tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__day-date{color:#fff}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event+.tribe-events-calendar-month-mobile-events__mobile-event{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime{color:#727272}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-featured-text{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-recurring-link:focus .tribe-events-calendar-month-mobile-events__mobile-event-datetime-icon,.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-recurring-link:hover .tribe-events-calendar-month-mobile-events__mobile-event-datetime-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-month__more-events{border-top:1px solid #e4e4e4}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__more-events-link{opacity:.5}.tribe-events .tribe-events-calendar-month__multiday-event--start .tribe-events-calendar-month__multiday-event-bar{border-top-left-radius:9.5px;border-bottom-left-radius:9.5px}.tribe-events .tribe-events-calendar-month__multiday-event--end .tribe-events-calendar-month__multiday-event-bar{border-top-right-radius:9.5px;border-bottom-right-radius:9.5px}.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner{background-color:rgba(51,74,255,.24);transition:background-color .2s ease}.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner--focus,.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner--hover,.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner:focus,.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner:hover{background-color:rgba(51,74,255,.34)}.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner{background-color:#f7f6f6}.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner--focus,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner--hover,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner:focus,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner:hover{background-color:#f0eeee}.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-featured-icon,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-title{opacity:.5}.tribe-events .tribe-events-calendar-month__multiday-event-bar-title{font-weight:400;text-overflow:ellipsis}.tribe-theme-avada #main .tribe-events .tribe-events-calendar-month__multiday-event-bar-title{font-weight:400}.tribe-events .tribe-events-calendar-day__event--featured{position:relative}.tribe-events .tribe-events-calendar-day__event--featured:after{background-color:#334aff;content:"";height:100%;left:21px;position:absolute;width:3px}.tribe-events .tribe-events-calendar-day__event-venue{font-style:normal}.tribe-events .tribe-events-calendar-day__event-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-day__event-featured-image-link:focus,.tribe-events .tribe-events-calendar-day__event-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-day__event-featured-image-link:active{opacity:.9}.tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:focus .tribe-events-calendar-day__event-datetime-recurring-icon,.tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:hover .tribe-events-calendar-day__event-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-day-nav{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-calendar-day__time-separator:after,.tribe-events .tribe-events-calendar-day__type-separator:after{background-color:#d5d5d5;content:"";display:block;flex:auto;height:1px;margin-left:20px}@media (min-width:768px){.tribe-events .tribe-events-c-breadcrumbs__list{font-size:42px;line-height:1.38}.admin-bar .tribe-events .datepicker{margin-top:16px}.tribe-events .tribe-events-c-events-bar--border{border:1px solid #e4e4e4}.tribe-events .tribe-events-c-events-bar__filters{border-right:1px solid #e4e4e4}.tribe-events .tribe-events-c-messages__message-list{text-align:center}.tribe-events .tribe-events-c-nav__next,.tribe-events .tribe-events-c-nav__prev{color:#727272}.tribe-events .tribe-events-c-nav__prev:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E");height:14px;margin-right:15px;width:9px}.tribe-events .tribe-events-c-nav__next:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E");height:14px;margin-left:15px;width:9px}.tribe-events .tribe-events-c-search__input-control{border-right:1px solid #e4e4e4}.tribe-events .tribe-events-c-search__input-control:last-child{border-right:0}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input--icon,.tribe-events .tribe-events-c-search__input--icon{background-position:16px}.tribe-events .tribe-events-c-top-bar__datepicker-button:after{height:7px;width:12px}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:before{content:none}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;flex:none;height:6px;margin-left:8px;width:10px}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button--active:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content{box-shadow:0 2px 5px 0 rgba(0,0,0,.14)}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content{border:0;border-radius:0;box-shadow:none}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link{background-color:transparent}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link:after{background-color:#141827;bottom:-1px;content:"";display:block;height:2px;position:absolute;width:100%}.tribe-events .tribe-events-c-view-selector__button:before{width:calc(100% - 16px);transform:none}.tribe-events .tribe-events-calendar-list__event-row--featured .tribe-events-calendar-list__event-date-tag-datetime:after{right:-1px;width:4px}.tribe-events .tribe-events-calendar-list__event-datetime-featured-text{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-month__header-column-title{text-align:left}.tribe-events .tribe-events-calendar-month__day{border-radius:0}.tribe-events .tribe-events-calendar-month__day:after{background-color:transparent;bottom:0;content:"";display:block;height:2px;left:-1px;position:absolute;transition:background-color .2s ease;width:calc(100% + 2px)}.tribe-events .tribe-events-calendar-month__day:hover:after{background-color:#141827}.tribe-events .tribe-events-calendar-day__event--featured:after{left:calc(11.111% - 24px);width:4px}.tribe-events .tribe-events-calendar-day__event-datetime-featured-text{color:#334aff;font-weight:700}}
1
+ .tribe-events .tribe-events-c-breadcrumbs__list{font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:24px;line-height:1.42}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-breadcrumbs__list{font-size:42px;line-height:1.38}.tribe-events .tribe-events-c-breadcrumbs__list-item-link{color:#727272;transition:color .2s ease}.tribe-events .tribe-events-c-breadcrumbs__list-item-link:visited{color:#727272}.tribe-events .tribe-events-c-breadcrumbs__list-item-link:focus,.tribe-events .tribe-events-c-breadcrumbs__list-item-link:hover{color:#141827}.tribe-events .datepicker{background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tribe-events .datepicker:after,.tribe-events .datepicker:before{content:none}.tribe-events .datepicker .datepicker-switch:active,.tribe-events .datepicker .datepicker-switch:focus,.tribe-events .datepicker .datepicker-switch:hover,.tribe-events .datepicker .next:active,.tribe-events .datepicker .next:focus,.tribe-events .datepicker .next:hover,.tribe-events .datepicker .prev:active,.tribe-events .datepicker .prev:focus,.tribe-events .datepicker .prev:hover{background-color:#fff}.tribe-events .datepicker .datepicker-switch{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:16px;line-height:1.62;font-weight:400}.tribe-events .datepicker .datepicker-switch:focus,.tribe-events .datepicker .datepicker-switch:hover{color:rgba(20,24,39,.8)}.tribe-events .datepicker .datepicker-switch:active{color:rgba(20,24,39,.9)}.tribe-events .datepicker .dow{font-size:11px;line-height:1.5}.tribe-events .datepicker .day,.tribe-events .datepicker .dow{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-weight:400}.tribe-events .datepicker .day{font-size:16px;line-height:1.62}.tribe-events .datepicker .month,.tribe-events .datepicker .year{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:12px;line-height:1.38;font-weight:400}.tribe-events .datepicker .past{color:rgba(20,24,39,.62)}.tribe-events .datepicker .day,.tribe-events .datepicker .month,.tribe-events .datepicker .year{border-radius:4px}.tribe-events .datepicker .day.focused,.tribe-events .datepicker .day:focus,.tribe-events .datepicker .day:hover,.tribe-events .datepicker .month.focused,.tribe-events .datepicker .month:focus,.tribe-events .datepicker .month:hover,.tribe-events .datepicker .year.focused,.tribe-events .datepicker .year:focus,.tribe-events .datepicker .year:hover{background:#f7f6f6}.tribe-events .datepicker .day.current,.tribe-events .datepicker .day.current.focused,.tribe-events .datepicker .day.current:focus,.tribe-events .datepicker .day.current:hover,.tribe-events .datepicker .month.current,.tribe-events .datepicker .month.current.focused,.tribe-events .datepicker .month.current:focus,.tribe-events .datepicker .month.current:hover,.tribe-events .datepicker .year.current,.tribe-events .datepicker .year.current.focused,.tribe-events .datepicker .year.current:focus,.tribe-events .datepicker .year.current:hover{background:rgba(51,74,255,.07)}.tribe-events .datepicker .day.active,.tribe-events .datepicker .day.active.focused,.tribe-events .datepicker .day.active:focus,.tribe-events .datepicker .day.active:hover,.tribe-events .datepicker .month.active,.tribe-events .datepicker .month.active.focused,.tribe-events .datepicker .month.active:focus,.tribe-events .datepicker .month.active:hover,.tribe-events .datepicker .year.active,.tribe-events .datepicker .year.active.focused,.tribe-events .datepicker .year.active:focus,.tribe-events .datepicker .year.active:hover{color:#fff;background:#334aff;text-shadow:none}.admin-bar .tribe-events .datepicker{margin-top:8px}.admin-bar .tribe-events.tribe-common--breakpoint-medium .datepicker{margin-top:16px}.tribe-theme-enfold .tribe-events .datepicker{border:1px solid #d5d5d5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch{color:#141827!important}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch:focus,.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch:hover{color:rgba(20,24,39,.8)!important}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch:active{color:rgba(20,24,39,.9)!important}.tribe-theme-enfold .tribe-events .datepicker .day{background-color:#fff}.tribe-theme-enfold .tribe-events .datepicker .day.new,.tribe-theme-enfold .tribe-events .datepicker .day.old{opacity:1}.tribe-theme-enfold .tribe-events .datepicker .day,.tribe-theme-enfold .tribe-events .datepicker .month,.tribe-theme-enfold .tribe-events .datepicker .year{color:#141827;background-color:#fff}.tribe-theme-enfold .tribe-events .datepicker .day.focused,.tribe-theme-enfold .tribe-events .datepicker .day:focus,.tribe-theme-enfold .tribe-events .datepicker .day:hover,.tribe-theme-enfold .tribe-events .datepicker .month.focused,.tribe-theme-enfold .tribe-events .datepicker .month:focus,.tribe-theme-enfold .tribe-events .datepicker .month:hover,.tribe-theme-enfold .tribe-events .datepicker .year.focused,.tribe-theme-enfold .tribe-events .datepicker .year:focus,.tribe-theme-enfold .tribe-events .datepicker .year:hover{background:#f7f6f6}.tribe-theme-enfold .tribe-events .datepicker .day.past,.tribe-theme-enfold .tribe-events .datepicker .month.past,.tribe-theme-enfold .tribe-events .datepicker .year.past{color:rgba(20,24,39,.62)}.tribe-theme-enfold .tribe-events .datepicker .day.current,.tribe-theme-enfold .tribe-events .datepicker .day.current.focused,.tribe-theme-enfold .tribe-events .datepicker .day.current:focus,.tribe-theme-enfold .tribe-events .datepicker .day.current:hover,.tribe-theme-enfold .tribe-events .datepicker .month.current,.tribe-theme-enfold .tribe-events .datepicker .month.current.focused,.tribe-theme-enfold .tribe-events .datepicker .month.current:focus,.tribe-theme-enfold .tribe-events .datepicker .month.current:hover,.tribe-theme-enfold .tribe-events .datepicker .year.current,.tribe-theme-enfold .tribe-events .datepicker .year.current.focused,.tribe-theme-enfold .tribe-events .datepicker .year.current:focus,.tribe-theme-enfold .tribe-events .datepicker .year.current:hover{background:rgba(51,74,255,.07)}.tribe-theme-enfold .tribe-events .datepicker .day.active,.tribe-theme-enfold .tribe-events .datepicker .day.active.focused,.tribe-theme-enfold .tribe-events .datepicker .day.active:focus,.tribe-theme-enfold .tribe-events .datepicker .day.active:hover,.tribe-theme-enfold .tribe-events .datepicker .month.active,.tribe-theme-enfold .tribe-events .datepicker .month.active.focused,.tribe-theme-enfold .tribe-events .datepicker .month.active:focus,.tribe-theme-enfold .tribe-events .datepicker .month.active:hover,.tribe-theme-enfold .tribe-events .datepicker .year.active,.tribe-theme-enfold .tribe-events .datepicker .year.active.focused,.tribe-theme-enfold .tribe-events .datepicker .year.active:focus,.tribe-theme-enfold .tribe-events .datepicker .year.active:hover{color:#fff;background:#334aff}.tribe-theme-avada .tribe-events .datepicker{border:1px solid #d5d5d5;border-radius:4px}.tribe-theme-avada .tribe-events .datepicker tbody td{border:0}.tribe-theme-avada .tribe-events .datepicker .datepicker-switch,.tribe-theme-avada .tribe-events .datepicker .datepicker-switch:hover,.tribe-theme-avada .tribe-events .datepicker .next,.tribe-theme-avada .tribe-events .datepicker .next:hover,.tribe-theme-avada .tribe-events .datepicker .prev,.tribe-theme-avada .tribe-events .datepicker .prev:hover{background-color:#fff}.tribe-theme-avada .tribe-events .datepicker .day.new,.tribe-theme-avada .tribe-events .datepicker .day.old{background-color:transparent!important;color:#141827!important}.tribe-theme-avada .tribe-events .datepicker .day.new.focused,.tribe-theme-avada .tribe-events .datepicker .day.new:focus,.tribe-theme-avada .tribe-events .datepicker .day.new:hover,.tribe-theme-avada .tribe-events .datepicker .day.old.focused,.tribe-theme-avada .tribe-events .datepicker .day.old:focus,.tribe-theme-avada .tribe-events .datepicker .day.old:hover{background:#f7f6f6!important}.tribe-theme-avada .tribe-events .datepicker .day,.tribe-theme-avada .tribe-events .datepicker .month{background-color:transparent;color:#141827}.tribe-theme-avada .tribe-events .datepicker .day.focused,.tribe-theme-avada .tribe-events .datepicker .day:focus,.tribe-theme-avada .tribe-events .datepicker .day:hover,.tribe-theme-avada .tribe-events .datepicker .month.focused,.tribe-theme-avada .tribe-events .datepicker .month:focus,.tribe-theme-avada .tribe-events .datepicker .month:hover{background:#f7f6f6}.tribe-theme-avada .tribe-events .datepicker .day.past,.tribe-theme-avada .tribe-events .datepicker .month.past{color:rgba(20,24,39,.62)!important}.tribe-theme-avada .tribe-events .datepicker .day.current,.tribe-theme-avada .tribe-events .datepicker .day.current.focused,.tribe-theme-avada .tribe-events .datepicker .day.current:focus,.tribe-theme-avada .tribe-events .datepicker .day.current:hover,.tribe-theme-avada .tribe-events .datepicker .month.current,.tribe-theme-avada .tribe-events .datepicker .month.current.focused,.tribe-theme-avada .tribe-events .datepicker .month.current:focus,.tribe-theme-avada .tribe-events .datepicker .month.current:hover{background:rgba(51,74,255,.07)}.tribe-theme-avada .tribe-events .datepicker .day.active,.tribe-theme-avada .tribe-events .datepicker .day.active.focused,.tribe-theme-avada .tribe-events .datepicker .day.active:focus,.tribe-theme-avada .tribe-events .datepicker .day.active:hover,.tribe-theme-avada .tribe-events .datepicker .month.active,.tribe-theme-avada .tribe-events .datepicker .month.active.focused,.tribe-theme-avada .tribe-events .datepicker .month.active:focus,.tribe-theme-avada .tribe-events .datepicker .month.active:hover{color:#fff!important;background:#334aff!important}.tribe-events .tribe-events-c-day-marker:after{background-color:#d5d5d5;content:"";display:block;flex:auto;height:1px;margin-left:20px}.tribe-events .tribe-events-c-events-bar{background-color:#fff}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar--border{border:1px solid #e4e4e4}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters{border-right:1px solid #e4e4e4}.tribe-events .tribe-events-c-events-bar__search-button:focus .tribe-events-c-events-bar__search-button-icon,.tribe-events .tribe-events-c-events-bar__search-button:hover .tribe-events-c-events-bar__search-button-icon{opacity:.8}.tribe-events .tribe-events-c-events-bar__search-button:active .tribe-events-c-events-bar__search-button-icon{opacity:.9}.tribe-events .tribe-events-c-events-bar__search-button:before{background-color:#334aff;content:"";display:none;height:2px;pointer-events:none;position:absolute;top:100%;transform:translateY(4px);width:calc(100% - 8px)}.tribe-events .tribe-events-c-events-bar__search-button--active:before{display:block}.tribe-events .tribe-events-c-events-bar__tab{border-radius:4px}.tribe-events .tribe-events-c-events-bar__tab:active .tribe-events-c-events-bar__tab-text,.tribe-events .tribe-events-c-events-bar__tab:focus .tribe-events-c-events-bar__tab-text,.tribe-events .tribe-events-c-events-bar__tab:hover .tribe-events-c-events-bar__tab-text{font-weight:700}.tribe-events .tribe-events-c-events-bar__tab--active,.tribe-events .tribe-events-c-events-bar__tab--active:focus,.tribe-events .tribe-events-c-events-bar__tab--active:hover{background-color:#f7f6f6}.tribe-events .tribe-events-c-events-bar__tab--active .tribe-events-c-events-bar__tab-text{font-weight:700}.tribe-theme-twentyseventeen .tribe-events .tribe-events-c-events-bar__tab--active,.tribe-theme-twentyseventeen .tribe-events .tribe-events-c-events-bar__tab--active:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-c-events-bar__tab--active:hover{background-color:#f7f6f6}.tribe-events .tribe-events-c-messages__message{background-color:rgba(20,24,39,.07);border-radius:4px}.tribe-events .tribe-events-c-messages__message--notice:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 21 23'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath stroke='%23141827' d='M.5 2.5h20v20H.5z'/%3E%3Cpath stroke='%23334AFF' stroke-linecap='round' d='M7.583 11.583l5.834 5.834m0-5.834l-5.834 5.834'/%3E%3Cpath stroke='%23141827' stroke-linecap='round' d='M4.5.5v4m12-4v4'/%3E%3Cpath stroke='%23141827' stroke-linecap='square' d='M.5 7.5h20'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-size:22px;display:inline-block;content:"";min-width:22px;height:24px;margin-right:12px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-messages__message-list{text-align:center}.tribe-events .tribe-events-c-nav{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-c-nav__list{list-style:none}.tribe-events .tribe-events-c-nav__next-label-plural,.tribe-events .tribe-events-c-nav__prev-label-plural{white-space:pre}.tribe-events .tribe-events-c-nav__today:focus,.tribe-events .tribe-events-c-nav__today:hover{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-c-nav__today:active{color:#141827}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__next,.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__prev{color:#727272}.tribe-events .tribe-events-c-nav__next:focus,.tribe-events .tribe-events-c-nav__next:hover,.tribe-events .tribe-events-c-nav__prev:focus,.tribe-events .tribe-events-c-nav__prev:hover{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-c-nav__next:active,.tribe-events .tribe-events-c-nav__prev:active{color:#141827}.tribe-events .tribe-events-c-nav__next:disabled,.tribe-events .tribe-events-c-nav__prev:disabled{background-color:transparent;color:#d5d5d5}.tribe-events .tribe-events-c-nav__prev:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";height:12px;margin-right:8px;width:7px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__prev:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23727272'/%3E%3C/svg%3E");height:14px;margin-right:15px;width:9px}.tribe-events .tribe-events-c-nav__prev:focus:before,.tribe-events .tribe-events-c-nav__prev:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E");opacity:.8}.tribe-events .tribe-events-c-nav__prev:active:before{opacity:1}.tribe-events .tribe-events-c-nav__prev:disabled:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-nav__next:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";height:12px;margin-left:8px;width:7px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__next:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E");height:14px;margin-left:15px;width:9px}.tribe-events .tribe-events-c-nav__next:focus:after,.tribe-events .tribe-events-c-nav__next:hover:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E");opacity:.8}.tribe-events .tribe-events-c-nav__next:active:after{opacity:1}.tribe-events .tribe-events-c-nav__next:disabled:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23D5D5D5'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-small-cta__stock{color:#727272}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-control{border-right:1px solid #e4e4e4}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-control:last-child{border-right:0}.tribe-events .tribe-events-c-search__input--icon{background-repeat:no-repeat;background-position:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input--icon{background-position:16px}.tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");background-size:16px}.tribe-events .tribe-events-c-search__input-control--keyword-focus .tribe-events-c-search__input,.tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23727272' fill-rule='evenodd'/%3E%3C/svg%3E");background-size:10px 15px}.tribe-events .tribe-events-c-search__input-control--location-focus .tribe-events-c-search__input,.tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23334AFF' fill-rule='evenodd'/%3E%3C/svg%3E")}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input--icon{background-repeat:no-repeat;background-position:100%}#top.tribe-theme-enfold .tribe-events.tribe-common--breakpoint-medium .tribe-events-c-search__input--icon{background-position:16px}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23727272'/%3E%3C/svg%3E");background-size:16px}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword-focus .tribe-events-c-search__input,#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--keyword .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23334AFF'/%3E%3C/svg%3E")}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23727272' fill-rule='evenodd'/%3E%3C/svg%3E");background-size:10px 15px}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--location-focus .tribe-events-c-search__input,#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input-control--location .tribe-events-c-search__input:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='16' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M8.682 1.548a5.166 5.166 0 0 0-7.375 0C-3.073 5.984 4.959 15.36 4.994 15.36c.051-.001 8.092-9.35 3.688-13.812zM4.994 2.833c1.27 0 2.301 1.043 2.301 2.331 0 1.287-1.03 2.33-2.301 2.33-1.272 0-2.3-1.043-2.3-2.33 0-1.288 1.028-2.331 2.3-2.331z' fill='%23334AFF' fill-rule='evenodd'/%3E%3C/svg%3E")}.tooltipster-base.tribe-events-tooltip-theme{background-color:#fff;border:1px solid #d5d5d5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box{background-color:transparent;border:0;border-radius:0;box-shadow:none}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box .tooltipster-content{color:#141827;overflow:inherit}.tribe-events .tribe-events-c-top-bar__datepicker-button{transition:opacity .2s ease}.tribe-events .tribe-events-c-top-bar__datepicker-button:focus,.tribe-events .tribe-events-c-top-bar__datepicker-button:hover{opacity:.8}.tribe-events .tribe-events-c-top-bar__datepicker-button:active{opacity:.9}.tribe-events .tribe-events-c-top-bar__datepicker-button:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;margin-left:8px;height:6px;width:10px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker-button:after{height:7px;width:12px}.tribe-events .tribe-events-c-top-bar__datepicker-button--open:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:before{content:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21.85L6 5.64 10.79.85 11.94 2 6 7.94.06 2z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;content:"";display:block;flex:none;height:6px;margin-left:8px;width:10px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button--active:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.21 7.15L6 2.36l4.79 4.79L11.94 6 6 .06.06 6z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400;font-weight:700}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content{box-shadow:0 2px 5px 0 rgba(0,0,0,.14)}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content{border:0;border-radius:0;box-shadow:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link{background-color:transparent}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link:after{background-color:#141827;bottom:-1px;content:"";display:block;height:2px;position:absolute;width:100%}.tribe-events .tribe-events-c-view-selector__button{text-align:left}.tribe-events .tribe-events-c-view-selector__button:focus .tribe-events-c-view-selector__button-icon,.tribe-events .tribe-events-c-view-selector__button:hover .tribe-events-c-view-selector__button-icon{opacity:.8}.tribe-events .tribe-events-c-view-selector__button:active .tribe-events-c-view-selector__button-icon{opacity:.9}.tribe-events .tribe-events-c-view-selector__button:before{background-color:#334aff;content:"";display:none;height:2px;pointer-events:none;position:absolute;top:100%;transform:translateY(4px);width:calc(100% - 8px)}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__button:before{width:calc(100% - 16px);transform:none}.tribe-events .tribe-events-c-view-selector__button--active:before{display:block}.tribe-events .tribe-events-c-view-selector__content{border:1px solid #e4e4e4;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.14)}.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-link{background-color:#f7f6f6}.tribe-events .tribe-events-c-view-selector__list-item--active .tribe-events-c-view-selector__list-item-text{font-weight:700}.tribe-events .tribe-events-c-view-selector__list-item-link{border-radius:4px}.tribe-events .tribe-events-c-view-selector__list-item-link:focus .tribe-events-c-view-selector__list-item-icon,.tribe-events .tribe-events-c-view-selector__list-item-link:hover .tribe-events-c-view-selector__list-item-icon{opacity:.8}.tribe-events .tribe-events-c-view-selector__list-item-link:focus .tribe-events-c-view-selector__list-item-text,.tribe-events .tribe-events-c-view-selector__list-item-link:hover .tribe-events-c-view-selector__list-item-text{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-c-view-selector__list-item-text{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:14px;line-height:1.62;font-weight:400}.tribe-events .tribe-events-calendar-list__event-row--featured .tribe-events-calendar-list__event-date-tag-datetime:after{background-color:#334aff;content:"";height:100%;right:calc(100% - 3px);position:absolute;width:3px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row--featured .tribe-events-calendar-list__event-date-tag-datetime:after{right:-1px;width:4px}.tribe-events .tribe-events-calendar-list__event-venue{font-style:normal}.tribe-events .tribe-events-calendar-list__event-date-tag-weekday{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5;color:#727272;text-transform:uppercase}.tribe-events .tribe-events-calendar-list__event-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-list__event-featured-image-link:focus,.tribe-events .tribe-events-calendar-list__event-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-list__event-featured-image-link:active{opacity:.9}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-datetime-featured-text{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:focus .tribe-events-calendar-list__event-datetime-recurring-icon,.tribe-events .tribe-events-calendar-list__event-datetime-recurring-link:hover .tribe-events-calendar-list__event-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-list__month-separator:after{background-color:#d5d5d5;content:"";display:block;flex:auto;height:1px;margin-left:20px}.tribe-events .tribe-events-calendar-list-nav{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__calendar-event{opacity:.5}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link:focus,.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link:active{opacity:.9}.tribe-events .tribe-events-calendar-month__calendar-event-datetime{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5;color:#727272}.tribe-events .tribe-events-calendar-month__calendar-event--featured:before{background-color:#334aff;content:"";height:100%;left:7px;position:absolute;width:2px}.tribe-events .tribe-events-calendar-month__calendar-event--featured:last-child:before{height:calc(100% - 16px)}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-link:focus .tribe-events-calendar-month__calendar-event-datetime-recurring-icon,.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-link:hover .tribe-events-calendar-month__calendar-event-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link:focus,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link:active{opacity:.9}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime{color:#141827;font-family:Helvetica Neue,Helvetica,-apple-system,BlinkMacSystemFont,Roboto,Arial,sans-serif;font-size:11px;font-weight:400;line-height:1.5}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-link:focus .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-link:hover .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-month__header-column{text-transform:uppercase}.tribe-events .tribe-events-calendar-month__header-column-title{color:#727272;text-align:center}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__header-column-title{text-align:left}.tribe-events .tribe-events-calendar-month__day{border-radius:4px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day{border-radius:0}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day:after{background-color:transparent;bottom:0;content:"";display:block;height:2px;left:-1px;position:absolute;transition:background-color .2s ease;width:calc(100% + 2px)}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day:hover:after{background-color:#141827}.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date,.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:focus,.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:hover{color:rgba(51,74,255,.8)}.tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:active{color:rgba(51,74,255,.9)}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__day-date{opacity:.4}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__mobile-events-icon--event{background-color:#141827;opacity:.5}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");opacity:.5}.tribe-events .tribe-events-calendar-month__day-cell--mobile:focus,.tribe-events .tribe-events-calendar-month__day-cell--mobile:hover{background-color:#f7f6f6}.tribe-events .tribe-events-calendar-month__day-cell--selected,.tribe-events .tribe-events-calendar-month__day-cell--selected:focus,.tribe-events .tribe-events-calendar-month__day-cell--selected:hover{background-color:#334aff}.tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__day-date{color:#fff;opacity:1}.tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__mobile-events-icon--event{background-color:#fff;opacity:1}.tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23FFF'/%3E%3C/svg%3E");opacity:1}.tribe-events .tribe-events-calendar-month__day-date-link{color:#141827;transition:color .2s ease}.tribe-events .tribe-events-calendar-month__day-date-link:focus,.tribe-events .tribe-events-calendar-month__day-date-link:hover{color:rgba(20,24,39,.8)}.tribe-events .tribe-events-calendar-month__day-date-link:active{color:rgba(20,24,39,.9)}.tribe-events .tribe-events-calendar-month__mobile-events-icon--event{background-color:#334aff}.tribe-events .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:hover{color:rgba(51,74,255,.8)}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day--current .tribe-events-calendar-month__day-date-link:active{color:rgba(51,74,255,.9)}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-cell--selected:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-cell--selected:hover{background-color:#334aff}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-date-link:focus,.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-date-link:hover{color:rgba(20,24,39,.8)}.tribe-theme-twentyseventeen .tribe-events .tribe-events-calendar-month__day-date-link:active{color:rgba(20,24,39,.9)}.tribe-theme-twentytwenty .tribe-events .tribe-events-calendar-month__day-cell--selected{background-color:#334aff}.tribe-theme-avada #main .tribe-events .tribe-events-calendar-month__day-cell--selected .tribe-events-calendar-month__day-date{color:#fff}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event+.tribe-events-calendar-month-mobile-events__mobile-event{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime{color:#727272}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-featured-text{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-recurring-link:focus .tribe-events-calendar-month-mobile-events__mobile-event-datetime-icon,.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-recurring-link:hover .tribe-events-calendar-month-mobile-events__mobile-event-datetime-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-month__more-events{border-top:1px solid #e4e4e4}.tribe-events .tribe-events-calendar-month__day--past .tribe-events-calendar-month__more-events-link{opacity:.5}.tribe-events .tribe-events-calendar-month__multiday-event--start .tribe-events-calendar-month__multiday-event-bar{border-top-left-radius:9.5px;border-bottom-left-radius:9.5px}.tribe-events .tribe-events-calendar-month__multiday-event--end .tribe-events-calendar-month__multiday-event-bar{border-top-right-radius:9.5px;border-bottom-right-radius:9.5px}.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner{background-color:rgba(51,74,255,.24);transition:background-color .2s ease}.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner--focus,.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner--hover,.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner:focus,.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner:hover{background-color:rgba(51,74,255,.34)}.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner{background-color:#f7f6f6}.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner--focus,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner--hover,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner:focus,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-inner:hover{background-color:#f0eeee}.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-featured-icon,.tribe-events .tribe-events-calendar-month__multiday-event--past .tribe-events-calendar-month__multiday-event-bar-title{opacity:.5}.tribe-events .tribe-events-calendar-month__multiday-event-bar-title{font-weight:400;text-overflow:ellipsis}.tribe-theme-avada #main .tribe-events .tribe-events-calendar-month__multiday-event-bar-title{font-weight:400}.tribe-events .tribe-events-calendar-day__event--featured{position:relative}.tribe-events .tribe-events-calendar-day__event--featured:after{background-color:#334aff;content:"";height:100%;left:21px;position:absolute;width:3px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event--featured:after{left:calc(11.111% - 24px);width:4px}.tribe-events .tribe-events-calendar-day__event-venue{font-style:normal}.tribe-events .tribe-events-calendar-day__event-featured-image-link{transition:opacity .2s ease}.tribe-events .tribe-events-calendar-day__event-featured-image-link:focus,.tribe-events .tribe-events-calendar-day__event-featured-image-link:hover{opacity:.8}.tribe-events .tribe-events-calendar-day__event-featured-image-link:active{opacity:.9}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-datetime-featured-text{color:#334aff;font-weight:700}.tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:focus .tribe-events-calendar-day__event-datetime-recurring-icon,.tribe-events .tribe-events-calendar-day__event-datetime-recurring-link:hover .tribe-events-calendar-day__event-datetime-recurring-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M13.333 3.826c0 .065 0 .13-.02.174 0 .022-.02.065-.02.087a.9.9 0 0 1-.197.37L10.45 7.37a.797.797 0 0 1-.592.26.797.797 0 0 1-.593-.26c-.316-.348-.316-.935 0-1.305l1.225-1.348H6.3c-2.547 0-4.64 2.283-4.64 5.11 0 1.369.474 2.651 1.363 3.608.316.348.316.935 0 1.304A.797.797 0 0 1 2.43 15a.797.797 0 0 1-.593-.26C.652 13.434 0 11.695 0 9.847c0-3.826 2.825-6.935 6.301-6.935h4.208L9.284 1.565c-.316-.348-.316-.935 0-1.304.316-.348.85-.348 1.185 0l2.647 2.913a.952.952 0 0 1 .198.37c0 .021.02.065.02.086v.196zM20 10.152c0 3.826-2.825 6.935-6.301 6.935H9.49l1.225 1.348c.336.348.336.935 0 1.304a.797.797 0 0 1-.593.261.83.83 0 0 1-.592-.26l-2.627-2.936a.948.948 0 0 1-.198-.37c0-.021-.02-.064-.02-.086-.02-.065-.02-.109-.02-.174 0-.065 0-.13.02-.174 0-.022.02-.065.02-.087a.9.9 0 0 1 .198-.37L9.55 12.63c.316-.347.849-.347 1.185 0 .336.348.336.935 0 1.305L9.51 15.283h4.208c2.548 0 4.641-2.283 4.641-5.11 0-1.369-.474-2.651-1.362-3.608a.97.97 0 0 1 0-1.304c.316-.348.849-.348 1.185 0C19.348 6.543 20 8.283 20 10.152z' fill='%23334AFF'/%3E%3C/svg%3E")}.tribe-events .tribe-events-calendar-day-nav{border-top:1px solid #d5d5d5}.tribe-events .tribe-events-calendar-day__time-separator:after,.tribe-events .tribe-events-calendar-day__type-separator:after{background-color:#d5d5d5;content:"";display:block;flex:auto;height:1px;margin-left:20px}
src/resources/css/views-skeleton.css CHANGED
@@ -391,8 +391,17 @@
391
  .tribe-events .tribe-events-l-container {
392
  padding-bottom: 80px;
393
  padding-top: 64px;
 
394
  }
395
 
 
 
 
 
 
 
 
 
396
  /* Components */
397
 
398
  /* -----------------------------------------------------------------------------
@@ -417,6 +426,10 @@
417
  width: 100%;
418
  }
419
 
 
 
 
 
420
  .tribe-events .tribe-events-c-breadcrumbs__list {
421
  display: -webkit-box;
422
  display: flex;
@@ -441,6 +454,12 @@
441
  margin: 0 6px;
442
  }
443
 
 
 
 
 
 
 
444
  /* Datepicker */
445
 
446
  /* -----------------------------------------------------------------------------
@@ -463,6 +482,10 @@
463
  padding: 0 16px 16px;
464
  }
465
 
 
 
 
 
466
  .tribe-events .datepicker table {
467
  border-collapse: collapse;
468
  }
@@ -471,6 +494,7 @@
471
  .tribe-events .datepicker .prev,
472
  .tribe-events .datepicker .next {
473
  padding: 20px 0;
 
474
  }
475
 
476
  .tribe-events .datepicker .prev .tribe-common-svgicon, .tribe-events .datepicker .next .tribe-common-svgicon {
@@ -541,6 +565,10 @@
541
  margin-top: 8px;
542
  }
543
 
 
 
 
 
544
  /* -----------------------------------------------------------------------------
545
  * Theme Overrides - Divi
546
  * ----------------------------------------------------------------------------- */
@@ -636,6 +664,12 @@
636
  display: flex;
637
  }
638
 
 
 
 
 
 
 
639
  .tribe-events .tribe-events-c-events-bar__views {
640
  display: -webkit-box;
641
  display: flex;
@@ -656,6 +690,25 @@
656
  z-index: 30;
657
  }
658
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
659
  .tribe-events .tribe-events-c-events-bar__search-form {
660
  width: 100%;
661
  }
@@ -670,11 +723,43 @@
670
  margin-right: -12px;
671
  }
672
 
 
 
 
 
673
  .tribe-events .tribe-events-c-events-bar__filters-button {
674
  display: none !important;
675
  visibility: hidden;
676
  }
677
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
  .tribe-events .tribe-events-c-events-bar__search-button {
679
  display: inline-block;
680
  margin-right: 8px;
@@ -682,6 +767,11 @@
682
  position: relative;
683
  }
684
 
 
 
 
 
 
685
  .tribe-events .tribe-events-c-events-bar__search-button-icon {
686
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E");
687
  display: block;
@@ -705,6 +795,11 @@
705
  padding-bottom: 12px;
706
  }
707
 
 
 
 
 
 
708
  .tribe-events .tribe-events-c-events-bar__tab {
709
  -webkit-box-align: center;
710
  align-items: center;
@@ -820,6 +915,12 @@
820
  width: 100%;
821
  }
822
 
 
 
 
 
 
 
823
  /* Navigation */
824
 
825
  /* -----------------------------------------------------------------------------
@@ -846,6 +947,10 @@
846
  padding-top: 20px;
847
  }
848
 
 
 
 
 
849
  .tribe-events .tribe-events-c-nav__list {
850
  display: -webkit-box;
851
  display: flex;
@@ -861,6 +966,10 @@
861
  width: 33.33%;
862
  }
863
 
 
 
 
 
864
  .tribe-events .tribe-events-c-nav__list-item--prev {
865
  -webkit-box-pack: start;
866
  justify-content: flex-start;
@@ -876,6 +985,11 @@
876
  justify-content: center;
877
  }
878
 
 
 
 
 
 
879
  .tribe-events .tribe-events-c-nav__prev-label-plural,
880
  .tribe-events .tribe-events-c-nav__next-label-plural {
881
  border: 0;
@@ -888,6 +1002,14 @@
888
  width: 1px;
889
  }
890
 
 
 
 
 
 
 
 
 
891
  .tribe-events .tribe-events-c-nav__prev,
892
  .tribe-events .tribe-events-c-nav__next {
893
  -webkit-box-align: center;
@@ -1003,18 +1125,58 @@
1003
  *
1004
  * ----------------------------------------------------------------------------- */
1005
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1006
  .tribe-events .tribe-events-c-search__button {
1007
  margin-top: 24px;
1008
  }
1009
 
 
 
 
 
 
 
1010
  /* -----------------------------------------------------------------------------
1011
  * Theme Overrides - Enfold
1012
  * ----------------------------------------------------------------------------- */
1013
 
 
 
 
 
1014
  /* -----------------------------------------------------------------------------
1015
  * Theme Overrides - Avada
1016
  * ----------------------------------------------------------------------------- */
1017
 
 
 
 
 
1018
  /* Tooltip */
1019
 
1020
  /* -----------------------------------------------------------------------------
@@ -1061,6 +1223,24 @@
1061
  * ----------------------------------------------------------------------------- */
1062
  }
1063
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1064
  .tribe-events .tribe-events-c-top-bar__nav-list {
1065
  display: -webkit-box;
1066
  display: flex;
@@ -1080,6 +1260,19 @@
1080
  display: block;
1081
  }
1082
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1083
  .tribe-events .tribe-events-c-top-bar__datepicker-form {
1084
  -webkit-box-align: center;
1085
  align-items: center;
@@ -1093,6 +1286,25 @@
1093
  position: relative;
1094
  }
1095
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1096
  .tribe-events .tribe-events-c-top-bar__datepicker-button {
1097
  -webkit-box-align: center;
1098
  align-items: center;
@@ -1110,10 +1322,26 @@
1110
  width: 363px;
1111
  }
1112
 
1113
- .tribe-events .tribe-events-c-top-bar__actions {
1114
- display: none !important;
1115
- visibility: hidden;
1116
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1117
 
1118
  /* -----------------------------------------------------------------------------
1119
  * Theme Overrides - Enfold
@@ -1202,6 +1430,80 @@
1202
  width: 29px;
1203
  }
1204
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1205
  .tribe-events .tribe-events-c-view-selector__button {
1206
  -webkit-box-align: center;
1207
  align-items: center;
@@ -1212,12 +1514,21 @@
1212
  width: 100%;
1213
  }
1214
 
 
 
 
 
1215
  .tribe-events .tribe-events-c-view-selector__button-icon {
1216
  display: block;
1217
  height: 21px;
1218
  width: 21px;
1219
  }
1220
 
 
 
 
 
 
1221
  .tribe-events .tribe-events-c-view-selector__content {
1222
  display: none;
1223
  background-color: #FFFFFF;
@@ -1230,6 +1541,11 @@
1230
  z-index: 30;
1231
  }
1232
 
 
 
 
 
 
1233
  .tribe-events .tribe-events-c-view-selector__list-item-link {
1234
  -webkit-box-align: center;
1235
  align-items: center;
@@ -1288,21 +1604,57 @@
1288
  position: relative;
1289
  }
1290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1291
  .tribe-events .tribe-events-header__messages {
1292
  margin-bottom: 16px;
1293
  width: 100%;
1294
  }
1295
 
 
 
 
 
 
 
1296
  .tribe-events .tribe-events-header__events-bar {
1297
  -webkit-box-flex: 0;
1298
  flex: none;
1299
  }
1300
 
 
 
 
 
 
1301
  .tribe-events .tribe-events-header__top-bar {
1302
  -webkit-box-flex: 1;
1303
  flex: auto;
1304
  }
1305
 
 
 
 
 
1306
  /* List */
1307
 
1308
  /**
@@ -1322,14 +1674,34 @@
1322
  margin-top: 32px;
1323
  }
1324
 
 
 
 
 
 
 
 
 
 
 
 
 
1325
  .tribe-events .tribe-events-calendar-list__event-row:last-child {
1326
  margin-bottom: 40px;
1327
  }
1328
 
 
 
 
 
1329
  .tribe-events .tribe-events-calendar-list__month-separator + .tribe-events-calendar-list__event-row {
1330
  margin-top: 20px;
1331
  }
1332
 
 
 
 
 
1333
  .tribe-events .tribe-events-calendar-list__event-date-tag {
1334
  -webkit-box-flex: 0;
1335
  flex: none;
@@ -1337,6 +1709,11 @@
1337
  position: relative;
1338
  }
1339
 
 
 
 
 
 
1340
  .tribe-events .tribe-events-calendar-list__event-date-tag-datetime {
1341
  display: -webkit-box;
1342
  display: flex;
@@ -1357,18 +1734,36 @@
1357
  width: calc(75% + 21px);
1358
  }
1359
 
 
 
 
 
 
1360
  .tribe-events .tribe-events-calendar-list__event {
1361
  -webkit-box-orient: vertical;
1362
  -webkit-box-direction: normal;
1363
  flex-direction: column;
1364
  }
1365
 
 
 
 
 
 
 
 
 
1366
  .tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
1367
  -webkit-box-flex: 0;
1368
  flex: none;
1369
  margin-bottom: 16px;
1370
  }
1371
 
 
 
 
 
 
1372
  .tribe-events .tribe-events-calendar-list__event-featured-image-link,
1373
  .tribe-events .tribe-events-calendar-list__event-featured-image {
1374
  display: block;
@@ -1379,15 +1774,23 @@
1379
  flex: none;
1380
  }
1381
 
 
 
 
 
1382
  .tribe-events .tribe-events-calendar-list__event-header > *:last-child {
1383
  margin-bottom: 0;
1384
  }
1385
 
1386
  .tribe-events .tribe-events-calendar-list__event-datetime-wrapper,
1387
  .tribe-events .tribe-events-calendar-list__event-title {
1388
- margin-bottom: 8px;
1389
  }
1390
 
 
 
 
 
1391
  .tribe-events .tribe-events-calendar-list__event-datetime-wrapper:last-child, .tribe-events .tribe-events-calendar-list__event-title:last-child {
1392
  margin-bottom: 0;
1393
  }
@@ -1397,6 +1800,16 @@
1397
  margin-right: 4px;
1398
  }
1399
 
 
 
 
 
 
 
 
 
 
 
1400
  .tribe-events .tribe-events-calendar-list__event-datetime-recurring-icon {
1401
  display: inline-block;
1402
  margin-left: 4px;
@@ -1406,15 +1819,24 @@
1406
  margin-bottom: 8px;
1407
  }
1408
 
1409
- .tribe-events .tribe-events-calendar-list__event-description {
1410
- display: none !important;
1411
- visibility: hidden;
1412
- }
 
 
 
 
 
1413
 
1414
  .tribe-events .tribe-events-calendar-list__event-cost {
1415
  margin-top: 12px;
1416
  }
1417
 
 
 
 
 
1418
  /* -----------------------------------------------------------------------------
1419
  * Month Separator
1420
  * ----------------------------------------------------------------------------- */
@@ -1439,6 +1861,10 @@
1439
  padding-top: 24px;
1440
  }
1441
 
 
 
 
 
1442
  /* Month */
1443
 
1444
  /**
@@ -1456,15 +1882,27 @@
1456
  margin-bottom: 8px;
1457
  }
1458
 
 
 
 
 
1459
  /* -----------------------------------------------------------------------------
1460
  * Calendar Body
1461
  * ----------------------------------------------------------------------------- */
1462
 
 
 
 
 
1463
  .tribe-events .tribe-events-calendar-month__week {
1464
  display: -webkit-box;
1465
  display: flex;
1466
  }
1467
 
 
 
 
 
1468
  /* -----------------------------------------------------------------------------
1469
  * Calendar Event
1470
  * ----------------------------------------------------------------------------- */
@@ -1565,6 +2003,10 @@
1565
  margin-bottom: 0;
1566
  }
1567
 
 
 
 
 
1568
  .tribe-events .tribe-events-calendar-month__calendar-event-tooltip-cost {
1569
  margin-top: 16px;
1570
  }
@@ -1602,6 +2044,20 @@
1602
  padding-bottom: 16px;
1603
  }
1604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1605
  .tribe-events {
1606
 
1607
  /* -----------------------------------------------------------------------------
@@ -1621,6 +2077,15 @@
1621
  width: 14.285%;
1622
  }
1623
 
 
 
 
 
 
 
 
 
 
1624
  .tribe-events .tribe-events-calendar-month__day-cell {
1625
  height: 100%;
1626
  width: 100%;
@@ -1637,6 +2102,30 @@
1637
  text-align: center;
1638
  }
1639
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1640
  .tribe-events .tribe-events-calendar-month__events {
1641
  -webkit-box-flex: 1;
1642
  flex: auto;
@@ -1661,6 +2150,11 @@
1661
  * Mobile Events
1662
  * ----------------------------------------------------------------------------- */
1663
 
 
 
 
 
 
1664
  .tribe-events .tribe-events-calendar-month-mobile-events__mobile-day {
1665
  display: none;
1666
  }
@@ -1707,6 +2201,10 @@
1707
  margin-right: 8px;
1708
  }
1709
 
 
 
 
 
1710
  .tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-cost {
1711
  margin-top: 8px;
1712
  }
@@ -1737,6 +2235,12 @@
1737
  * Multiday Event
1738
  * ----------------------------------------------------------------------------- */
1739
 
 
 
 
 
 
 
1740
  .tribe-events .tribe-events-calendar-month__multiday-event--width-2 .tribe-events-calendar-month__multiday-event-bar {
1741
  width: calc(200% + 1px);
1742
  }
@@ -1770,6 +2274,8 @@
1770
  }
1771
 
1772
  .tribe-events .tribe-events-calendar-month__multiday-event-hidden-title {
 
 
1773
  white-space: nowrap;
1774
  }
1775
 
@@ -1805,6 +2311,7 @@
1805
  .tribe-events .tribe-events-calendar-month__multiday-event-bar-title {
1806
  -webkit-box-flex: 0;
1807
  flex: none;
 
1808
  max-width: 100%;
1809
  overflow: hidden;
1810
  white-space: nowrap;
@@ -1818,6 +2325,11 @@
1818
  padding-top: 20px;
1819
  }
1820
 
 
 
 
 
 
1821
  /* Day */
1822
 
1823
  /**
@@ -1837,24 +2349,70 @@
1837
  padding-left: 54px;
1838
  }
1839
 
 
 
 
 
 
 
1840
  .tribe-events .tribe-events-calendar-day__event:last-child {
1841
  margin-bottom: 40px;
1842
  }
1843
 
 
 
 
 
 
 
 
 
 
 
1844
  .tribe-events .tribe-events-calendar-day__time-separator + .tribe-events-calendar-day__event,
1845
  .tribe-events .tribe-events-calendar-day__type-separator + .tribe-events-calendar-day__event {
1846
  margin-top: 20px;
1847
  }
1848
 
 
 
 
 
1849
  .tribe-events .tribe-events-calendar-day__event-content {
1850
  -webkit-box-flex: 0;
1851
  flex: none;
1852
  }
1853
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1854
  .tribe-events .tribe-events-calendar-day__event-featured-image-wrapper {
1855
  margin-bottom: 16px;
1856
  }
1857
 
 
 
 
 
 
 
 
1858
  .tribe-events .tribe-events-calendar-day__event-featured-image-link,
1859
  .tribe-events .tribe-events-calendar-list__event-featured-image {
1860
  display: block;
@@ -1864,15 +2422,25 @@
1864
  position: relative;
1865
  }
1866
 
 
 
 
 
 
 
1867
  .tribe-events .tribe-events-calendar-day__event-header > *:last-child {
1868
  margin-bottom: 0;
1869
  }
1870
 
1871
  .tribe-events .tribe-events-calendar-day__event-datetime-wrapper,
1872
  .tribe-events .tribe-events-calendar-day__event-title {
1873
- margin-bottom: 8px;
1874
  }
1875
 
 
 
 
 
1876
  .tribe-events .tribe-events-calendar-day__event-datetime-wrapper:last-child, .tribe-events .tribe-events-calendar-day__event-title:last-child {
1877
  margin-bottom: 0;
1878
  }
@@ -1882,6 +2450,16 @@
1882
  margin-right: 4px;
1883
  }
1884
 
 
 
 
 
 
 
 
 
 
 
1885
  .tribe-events .tribe-events-calendar-day__event-datetime-recurring-icon {
1886
  display: inline-block;
1887
  margin-left: 4px;
@@ -1891,15 +2469,24 @@
1891
  margin-bottom: 8px;
1892
  }
1893
 
1894
- .tribe-events .tribe-events-calendar-day__event-description {
1895
- display: none !important;
1896
- visibility: hidden;
1897
- }
 
 
 
 
 
1898
 
1899
  .tribe-events .tribe-events-calendar-day__event-cost {
1900
  margin-top: 12px;
1901
  }
1902
 
 
 
 
 
1903
  /* -------------------------------------------------------------------------
1904
  * Theme Overrides - Twenty Nineteen
1905
  * ------------------------------------------------------------------------- */
@@ -1914,11 +2501,26 @@
1914
  margin-bottom: 40px;
1915
  }
1916
 
 
 
 
 
 
 
 
 
 
 
1917
  .tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
1918
  .tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
1919
  margin-top: 20px;
1920
  }
1921
 
 
 
 
 
 
1922
  /* -----------------------------------------------------------------------------
1923
  * Nav
1924
  * ----------------------------------------------------------------------------- */
@@ -1927,6 +2529,10 @@
1927
  padding-top: 24px;
1928
  }
1929
 
 
 
 
 
1930
  /* -----------------------------------------------------------------------------
1931
  * Time separator
1932
  * ----------------------------------------------------------------------------- */
@@ -1958,610 +2564,3 @@
1958
  -webkit-box-flex: 0;
1959
  flex: none;
1960
  }
1961
-
1962
- @media (min-width: 768px) {
1963
-
1964
- .tribe-events .tribe-events-l-container {
1965
- padding-bottom: 160px;
1966
- padding-top: 96px
1967
- }
1968
-
1969
- .tribe-events .tribe-events-c-breadcrumbs {
1970
- margin-bottom: 48px
1971
- }
1972
-
1973
- .tribe-events .tribe-events-c-breadcrumbs__list-item:not(:last-child):after {
1974
- height: 16px;
1975
- width: 10px;
1976
- margin: 0 10px
1977
- }
1978
-
1979
- .tribe-events .datepicker {
1980
- margin-top: 16px
1981
- }
1982
-
1983
- .admin-bar .tribe-events .datepicker {
1984
- margin-top: 16px
1985
- }
1986
-
1987
- .tribe-events .tribe-events-c-events-bar {
1988
- -webkit-box-orient: horizontal;
1989
- -webkit-box-direction: normal;
1990
- flex-direction: row
1991
- }
1992
-
1993
- .tribe-events .tribe-events-c-events-bar__search-filters-container {
1994
- -webkit-box-align: center;
1995
- align-items: center;
1996
- display: -webkit-box;
1997
- display: flex;
1998
- -webkit-box-flex: 1;
1999
- flex: auto;
2000
- padding: 0;
2001
- position: static;
2002
- z-index: auto
2003
- }
2004
-
2005
- .tribe-events .tribe-events-c-events-bar__search {
2006
- display: -webkit-box;
2007
- display: flex;
2008
- -webkit-box-flex: 1;
2009
- flex: auto
2010
- }
2011
-
2012
- .tribe-events .tribe-events-c-events-bar__filters {
2013
- margin: 12px 0
2014
- }
2015
-
2016
- .tribe-events .tribe-events-c-events-bar__filters-button {
2017
- -webkit-box-align: center;
2018
- align-items: center;
2019
- display: -webkit-box !important;
2020
- display: flex !important;
2021
- margin: -12px 0;
2022
- padding: 20px 24px;
2023
- visibility: visible
2024
- }
2025
-
2026
- .tribe-events .tribe-events-c-events-bar__filters-button:hover:before, .tribe-events .tribe-events-c-events-bar__filters-button:focus:before, .tribe-events .tribe-events-c-events-bar__filters-button:active:before {
2027
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0M3 15v-2' stroke='%23141827'/%3E%3Ccircle cx='3' cy='9' r='3' stroke='%23141827'/%3E%3Cpath d='M12 9v6' stroke='%23141827'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)' stroke='%23141827'/%3E%3C/g%3E%3C/svg%3E");
2028
- }
2029
-
2030
- .tribe-events .tribe-events-c-events-bar__filters-button:before {
2031
- background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0M3 15v-2' stroke='%23727272'/%3E%3Ccircle cx='3' cy='9' r='3' stroke='%23727272'/%3E%3Cpath d='M12 9v6' stroke='%23727272'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)' stroke='%23727272'/%3E%3C/g%3E%3C/svg%3E");
2032
- background-repeat: no-repeat;
2033
- background-size: contain;
2034
- background-size: 17px;
2035
- content: '';
2036
- display: inline-block;
2037
- -webkit-box-flex: 0;
2038
- flex: none;
2039
- height: 17px;
2040
- margin-right: 8px;
2041
- width: 17px
2042
- }
2043
-
2044
- .tribe-events .tribe-events-c-events-bar__search-button {
2045
- display: none !important;
2046
- visibility: hidden
2047
- }
2048
-
2049
- .tribe-events .tribe-events-c-events-bar__tabs {
2050
- display: none !important;
2051
- visibility: hidden
2052
- }
2053
-
2054
- .tribe-events .tribe-events-c-messages__message {
2055
- -webkit-box-pack: center;
2056
- justify-content: center;
2057
- padding: 16px
2058
- }
2059
-
2060
- .tribe-events .tribe-events-c-nav {
2061
- padding-top: 28px
2062
- }
2063
-
2064
- .tribe-events .tribe-events-c-nav__list-item {
2065
- width: 50%
2066
- }
2067
-
2068
- .tribe-events .tribe-events-c-nav__list-item--today {
2069
- display: none !important;
2070
- visibility: hidden
2071
- }
2072
-
2073
- .tribe-events .tribe-events-c-nav__prev-label-plural,
2074
- .tribe-events .tribe-events-c-nav__next-label-plural {
2075
- clip: auto;
2076
- width: auto;
2077
- height: auto;
2078
- margin: 0;
2079
- position: static
2080
- }
2081
-
2082
- .tribe-events .tribe-events-c-search {
2083
- display: -webkit-box;
2084
- display: flex;
2085
- -webkit-box-align: center;
2086
- align-items: center
2087
- }
2088
-
2089
- .tribe-events .tribe-events-c-search__input-group {
2090
- -webkit-box-align: center;
2091
- align-items: center;
2092
- display: -webkit-box;
2093
- display: flex;
2094
- -webkit-box-flex: 1;
2095
- flex: auto
2096
- }
2097
-
2098
- .tribe-events .tribe-events-c-search__input-control {
2099
- -webkit-box-flex: 1;
2100
- flex: auto;
2101
- margin: 12px 0
2102
- }
2103
-
2104
- .tribe-events .tribe-events-c-search__input {
2105
- margin: -12px 0
2106
- }
2107
-
2108
- .tribe-events .tribe-events-c-search__button {
2109
- -webkit-box-flex: 0;
2110
- flex: none;
2111
- margin-top: 0
2112
- }
2113
-
2114
- #top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input {
2115
- margin: -12px 0
2116
- }
2117
-
2118
- .tribe-theme-avada .tribe-events .tribe-events-c-search__input {
2119
- margin: -12px 0
2120
- }
2121
-
2122
- .tribe-events .tribe-events-c-top-bar {
2123
- -webkit-box-align: center;
2124
- align-items: center;
2125
- display: -webkit-box;
2126
- display: flex;
2127
- -webkit-box-orient: horizontal;
2128
- -webkit-box-direction: normal;
2129
- flex-direction: row;
2130
- flex-wrap: wrap
2131
- }
2132
-
2133
- .tribe-events .tribe-events-c-top-bar__nav {
2134
- display: block !important;
2135
- -webkit-box-flex: 0;
2136
- flex: none;
2137
- visibility: visible
2138
- }
2139
-
2140
- .tribe-events .tribe-events-c-top-bar__nav-link:before {
2141
- height: 18px;
2142
- width: 11px
2143
- }
2144
-
2145
- .tribe-events .tribe-events-c-top-bar__today-button {
2146
- display: block !important;
2147
- -webkit-box-flex: 0;
2148
- flex: none;
2149
- margin-right: 15px;
2150
- visibility: visible
2151
- }
2152
-
2153
- .tribe-events .tribe-events-c-top-bar__datepicker {
2154
- margin: 0;
2155
- padding: 0
2156
- }
2157
-
2158
- .tribe-events .tribe-events-c-top-bar__datepicker-container {
2159
- max-width: none;
2160
- min-width: 363px
2161
- }
2162
-
2163
- .tribe-events .tribe-events-c-top-bar__datepicker-submit {
2164
- display: block !important;
2165
- -webkit-box-flex: 0;
2166
- flex: none;
2167
- margin-left: 15px;
2168
- visibility: visible
2169
- }
2170
-
2171
- .tribe-events .tribe-events-c-top-bar__actions {
2172
- display: block !important;
2173
- -webkit-box-flex: 0;
2174
- flex: none;
2175
- margin-left: auto;
2176
- visibility: visible
2177
- }
2178
-
2179
- .tribe-events .tribe-events-c-view-selector {
2180
- width: auto
2181
- }
2182
-
2183
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button {
2184
- height: 100%;
2185
- padding: 20px 24px
2186
- }
2187
-
2188
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-icon {
2189
- display: none !important;
2190
- visibility: hidden
2191
- }
2192
-
2193
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text {
2194
- clip: auto;
2195
- width: auto;
2196
- height: auto;
2197
- margin: 0;
2198
- position: static;
2199
-
2200
- -webkit-box-flex: 1;
2201
-
2202
- flex: auto
2203
- }
2204
-
2205
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content {
2206
- left: 0;
2207
- padding: 8px;
2208
- right: auto;
2209
- -webkit-transform: translateY(8px);
2210
- transform: translateY(8px);
2211
- width: auto
2212
- }
2213
-
2214
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-link {
2215
- padding: 4px 32px 4px 16px
2216
- }
2217
-
2218
- .tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-icon {
2219
- display: none !important;
2220
- visibility: hidden
2221
- }
2222
-
2223
- .tribe-events .tribe-events-c-view-selector--tabs {
2224
- width: auto
2225
- }
2226
-
2227
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__button {
2228
- display: none !important;
2229
- visibility: hidden
2230
- }
2231
-
2232
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content {
2233
- display: block;
2234
- height: 100%;
2235
- padding: 0 12px;
2236
- position: static;
2237
- -webkit-transform: none;
2238
- transform: none
2239
- }
2240
-
2241
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list {
2242
- display: -webkit-box;
2243
- display: flex;
2244
- height: 100%
2245
- }
2246
-
2247
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item {
2248
- margin: 0 12px
2249
- }
2250
-
2251
- .tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item-link {
2252
- height: 100%;
2253
- padding: 20px 0;
2254
- position: relative
2255
- }
2256
-
2257
- .tribe-events .tribe-events-c-view-selector__button {
2258
- padding: 8px
2259
- }
2260
-
2261
- .tribe-events .tribe-events-c-view-selector__button-icon {
2262
- height: 23px;
2263
- width: 23px
2264
- }
2265
-
2266
- .tribe-events .tribe-events-c-view-selector__content {
2267
- -webkit-transform: translateY(12px);
2268
- transform: translateY(12px)
2269
- }
2270
-
2271
- .tribe-events .tribe-events-header {
2272
- margin: 0;
2273
- padding: 0
2274
- }
2275
-
2276
- .tribe-events .tribe-events-header--has-event-search {
2277
- background-color: transparent;
2278
- -webkit-box-orient: horizontal;
2279
- -webkit-box-direction: normal;
2280
- flex-direction: row
2281
- }
2282
-
2283
- .tribe-events .tribe-events-header--has-event-search .tribe-events-header__events-bar {
2284
- margin-left: 0;
2285
- width: 100%
2286
- }
2287
-
2288
- .tribe-events .tribe-events-header--has-event-search .tribe-events-header__top-bar {
2289
- width: 100%
2290
- }
2291
-
2292
- .tribe-events .tribe-events-header__messages {
2293
- margin-bottom: 32px;
2294
- -webkit-box-ordinal-group: 2;
2295
- order: 1
2296
- }
2297
-
2298
- .tribe-events .tribe-events-header__events-bar {
2299
- margin-bottom: 32px;
2300
- margin-left: 16px
2301
- }
2302
-
2303
- .tribe-events .tribe-events-header__top-bar {
2304
- margin-bottom: 32px
2305
- }
2306
-
2307
- .tribe-events .tribe-events-calendar-list__event-row {
2308
- margin-bottom: 40px;
2309
- margin-top: 48px;
2310
- margin-left: -24px;
2311
- margin-right: -24px
2312
- }
2313
-
2314
- .tribe-events .tribe-events-calendar-list__event-row > .tribe-common-g-col {
2315
- padding-left: 24px;
2316
- padding-right: 24px
2317
- }
2318
-
2319
- .tribe-events .tribe-events-calendar-list__event-row:last-child {
2320
- margin-bottom: 64px
2321
- }
2322
-
2323
- .tribe-events .tribe-events-calendar-list__month-separator + .tribe-events-calendar-list__event-row {
2324
- margin-top: 40px
2325
- }
2326
-
2327
- .tribe-events .tribe-events-calendar-list__event-date-tag {
2328
- min-width: 90px;
2329
- width: 11.111%
2330
- }
2331
-
2332
- .tribe-events .tribe-events-calendar-list__event-wrapper {
2333
- -webkit-box-flex: 1;
2334
- flex: 1 1 88.888%
2335
- }
2336
-
2337
- .tribe-events .tribe-events-calendar-list__event {
2338
- -webkit-box-orient: horizontal;
2339
- -webkit-box-direction: reverse;
2340
- flex-direction: row-reverse;
2341
- -webkit-box-pack: end;
2342
- justify-content: flex-end
2343
- }
2344
-
2345
- .tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
2346
- margin-bottom: 0;
2347
- width: 37.5%
2348
- }
2349
-
2350
- .tribe-events .tribe-events-calendar-list__event-details {
2351
- width: 62.5%
2352
- }
2353
-
2354
- .tribe-events .tribe-events-calendar-list__event-datetime-wrapper,
2355
- .tribe-events .tribe-events-calendar-list__event-title {
2356
- margin-bottom: 16px
2357
- }
2358
-
2359
- .tribe-events .tribe-events-calendar-list__event-datetime-featured-text {
2360
- clip: auto;
2361
- width: auto;
2362
- height: auto;
2363
- margin: 0;
2364
- position: static;
2365
-
2366
- margin-right: 8px
2367
- }
2368
-
2369
- .tribe-events .tribe-events-calendar-list__event-venue {
2370
- margin-bottom: 16px
2371
- }
2372
-
2373
- .tribe-events .tribe-events-calendar-list__event-description {
2374
- display: block !important;
2375
- margin-top: 16px;
2376
- visibility: visible
2377
- }
2378
-
2379
- .tribe-events .tribe-events-calendar-list__event-cost {
2380
- margin-top: 16px
2381
- }
2382
-
2383
- .tribe-events .tribe-events-calendar-list-nav {
2384
- padding-top: 32px
2385
- }
2386
-
2387
- .tribe-events .tribe-events-calendar-month {
2388
- margin: 0
2389
- }
2390
-
2391
- .tribe-events .tribe-events-calendar-month__body {
2392
- border-top: 1px solid #E4E4E4
2393
- }
2394
-
2395
- .tribe-events .tribe-events-calendar-month__week {
2396
- border-left: 1px solid #E4E4E4
2397
- }
2398
-
2399
- .tribe-events .tribe-events-calendar-month__header-column-title-mobile {
2400
- display: none !important;
2401
- visibility: hidden
2402
- }
2403
-
2404
- .tribe-events .tribe-events-calendar-month__header-column-title-desktop {
2405
- display: block !important;
2406
- visibility: visible
2407
- }
2408
-
2409
- .tribe-events .tribe-events-calendar-month__day {
2410
- border-color: #E4E4E4;
2411
- border-style: solid;
2412
- border-width: 0 1px 1px 0;
2413
- height: auto;
2414
- min-height: 168px;
2415
- overflow: visible
2416
- }
2417
-
2418
- .tribe-events .tribe-events-calendar-month__day-cell--mobile {
2419
- display: none !important;
2420
- visibility: hidden
2421
- }
2422
-
2423
- .tribe-events .tribe-events-calendar-month__day-cell--desktop {
2424
- display: -webkit-box !important;
2425
- display: flex !important;
2426
- -webkit-box-orient: vertical;
2427
- -webkit-box-direction: normal;
2428
- flex-direction: column;
2429
- visibility: visible
2430
- }
2431
-
2432
- .tribe-events .tribe-events-calendar-month__day-date {
2433
- -webkit-box-flex: 0;
2434
- flex: none;
2435
- padding: 8px 16px
2436
- }
2437
-
2438
- .tribe-events .tribe-events-calendar-month-mobile-events {
2439
- display: none !important;
2440
- visibility: hidden
2441
- }
2442
-
2443
- .tribe-events .tribe-events-calendar-month__multiday-event-wrapper {
2444
- height: 19px;
2445
- margin-bottom: 4px;
2446
- position: relative
2447
- }
2448
-
2449
- .tribe-events .tribe-events-calendar-month-nav {
2450
- display: none !important;
2451
- visibility: hidden
2452
- }
2453
-
2454
- .tribe-events .tribe-events-calendar-day__event {
2455
- margin-bottom: 40px;
2456
- margin-top: 48px;
2457
- padding-left: 0
2458
- }
2459
-
2460
- .tribe-events .tribe-events-calendar-day__event:last-child {
2461
- margin-bottom: 64px
2462
- }
2463
-
2464
- .tribe-events .tribe-events-calendar-day__event:before {
2465
- content: '';
2466
- min-width: 90px;
2467
- width: 11.111%
2468
- }
2469
-
2470
- .tribe-events .tribe-events-calendar-day__time-separator + .tribe-events-calendar-day__event,
2471
- .tribe-events .tribe-events-calendar-day__type-separator + .tribe-events-calendar-day__event {
2472
- margin-top: 40px
2473
- }
2474
-
2475
- .tribe-events .tribe-events-calendar-day__event-content {
2476
- display: -webkit-box;
2477
- display: flex;
2478
- -webkit-box-orient: horizontal;
2479
- -webkit-box-direction: reverse;
2480
- flex-direction: row-reverse;
2481
- -webkit-box-pack: end;
2482
- justify-content: flex-end;
2483
- -webkit-box-flex: 1;
2484
- flex: 1 1 88.888%;
2485
- margin-left: -24px;
2486
- margin-right: -24px
2487
- }
2488
-
2489
- .tribe-events .tribe-events-calendar-day__event-content > * {
2490
- padding-left: 24px;
2491
- padding-right: 24px
2492
- }
2493
-
2494
- .tribe-events .tribe-events-calendar-day__event-featured-image-wrapper {
2495
- -webkit-box-flex: 0;
2496
- flex: none;
2497
- margin-bottom: 0;
2498
- width: 37.5%
2499
- }
2500
-
2501
- .tribe-events .tribe-events-calendar-day__event-details {
2502
- -webkit-box-flex: 0;
2503
- flex: none;
2504
- width: 62.5%
2505
- }
2506
-
2507
- .tribe-events .tribe-events-calendar-day__event-datetime-wrapper,
2508
- .tribe-events .tribe-events-calendar-day__event-title {
2509
- margin-bottom: 16px
2510
- }
2511
-
2512
- .tribe-events .tribe-events-calendar-day__event-datetime-featured-text {
2513
- clip: auto;
2514
- width: auto;
2515
- height: auto;
2516
- margin: 0;
2517
- position: static;
2518
-
2519
- margin-right: 8px
2520
- }
2521
-
2522
- .tribe-events .tribe-events-calendar-day__event-venue {
2523
- margin-bottom: 16px
2524
- }
2525
-
2526
- .tribe-events .tribe-events-calendar-day__event-description {
2527
- display: block !important;
2528
- margin-top: 16px;
2529
- visibility: visible
2530
- }
2531
-
2532
- .tribe-events .tribe-events-calendar-day__event-cost {
2533
- margin-top: 16px
2534
- }
2535
-
2536
- .tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event {
2537
- margin-bottom: 40px;
2538
- margin-top: 48px;
2539
- padding-left: 0
2540
- }
2541
-
2542
- .tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event:last-child {
2543
- margin-bottom: 64px
2544
- }
2545
-
2546
- .tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
2547
- .tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
2548
- margin-top: 40px
2549
- }
2550
-
2551
- .tribe-events .tribe-events-calendar-day-nav {
2552
- padding-top: 32px
2553
- }
2554
- }
2555
-
2556
- @media (min-width: 960px) {
2557
-
2558
- .tribe-events .tribe-events-c-top-bar__datepicker-mobile {
2559
- display: none !important;
2560
- visibility: hidden
2561
- }
2562
-
2563
- .tribe-events .tribe-events-c-top-bar__datepicker-desktop {
2564
- display: block !important;
2565
- visibility: visible
2566
- }
2567
- }
391
  .tribe-events .tribe-events-l-container {
392
  padding-bottom: 80px;
393
  padding-top: 64px;
394
+ min-height: 600px;
395
  }
396
 
397
+ /* min height on container to show datepicker when no results, as some themes have containers with overflow hidden */
398
+
399
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-l-container {
400
+ padding-bottom: 160px;
401
+ padding-top: 96px;
402
+ min-height: 700px; /* min height on container to show datepicker when no results, as some themes have containers with overflow hidden */
403
+ }
404
+
405
  /* Components */
406
 
407
  /* -----------------------------------------------------------------------------
426
  width: 100%;
427
  }
428
 
429
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-breadcrumbs {
430
+ margin-bottom: 48px;
431
+ }
432
+
433
  .tribe-events .tribe-events-c-breadcrumbs__list {
434
  display: -webkit-box;
435
  display: flex;
454
  margin: 0 6px;
455
  }
456
 
457
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-breadcrumbs__list-item:not(:last-child):after {
458
+ height: 16px;
459
+ width: 10px;
460
+ margin: 0 10px;
461
+ }
462
+
463
  /* Datepicker */
464
 
465
  /* -----------------------------------------------------------------------------
482
  padding: 0 16px 16px;
483
  }
484
 
485
+ .tribe-common--breakpoint-medium.tribe-events .datepicker {
486
+ margin-top: 16px;
487
+ }
488
+
489
  .tribe-events .datepicker table {
490
  border-collapse: collapse;
491
  }
494
  .tribe-events .datepicker .prev,
495
  .tribe-events .datepicker .next {
496
  padding: 20px 0;
497
+ vertical-align: middle;
498
  }
499
 
500
  .tribe-events .datepicker .prev .tribe-common-svgicon, .tribe-events .datepicker .next .tribe-common-svgicon {
565
  margin-top: 8px;
566
  }
567
 
568
+ .admin-bar .tribe-events.tribe-common--breakpoint-medium .datepicker {
569
+ margin-top: 16px;
570
+ }
571
+
572
  /* -----------------------------------------------------------------------------
573
  * Theme Overrides - Divi
574
  * ----------------------------------------------------------------------------- */
664
  display: flex;
665
  }
666
 
667
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar {
668
+ -webkit-box-orient: horizontal;
669
+ -webkit-box-direction: normal;
670
+ flex-direction: row;
671
+ }
672
+
673
  .tribe-events .tribe-events-c-events-bar__views {
674
  display: -webkit-box;
675
  display: flex;
690
  z-index: 30;
691
  }
692
 
693
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__search-filters-container {
694
+ -webkit-box-align: center;
695
+ align-items: center;
696
+ display: -webkit-box;
697
+ display: flex;
698
+ -webkit-box-flex: 1;
699
+ flex: auto;
700
+ padding: 0;
701
+ position: static;
702
+ z-index: auto;
703
+ }
704
+
705
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__search {
706
+ display: -webkit-box;
707
+ display: flex;
708
+ -webkit-box-flex: 1;
709
+ flex: auto;
710
+ }
711
+
712
  .tribe-events .tribe-events-c-events-bar__search-form {
713
  width: 100%;
714
  }
723
  margin-right: -12px;
724
  }
725
 
726
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters {
727
+ margin: 12px 0;
728
+ }
729
+
730
  .tribe-events .tribe-events-c-events-bar__filters-button {
731
  display: none !important;
732
  visibility: hidden;
733
  }
734
 
735
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button {
736
+ -webkit-box-align: center;
737
+ align-items: center;
738
+ display: -webkit-box !important;
739
+ display: flex !important;
740
+ margin: -12px 0;
741
+ padding: 20px 24px;
742
+ visibility: visible;
743
+ }
744
+
745
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:hover:before, .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:focus:before, .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:active:before {
746
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0M3 15v-2' stroke='%23141827'/%3E%3Ccircle cx='3' cy='9' r='3' stroke='%23141827'/%3E%3Cpath d='M12 9v6' stroke='%23141827'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)' stroke='%23141827'/%3E%3C/g%3E%3C/svg%3E");
747
+ }
748
+
749
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:before {
750
+ background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0M3 15v-2' stroke='%23727272'/%3E%3Ccircle cx='3' cy='9' r='3' stroke='%23727272'/%3E%3Cpath d='M12 9v6' stroke='%23727272'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)' stroke='%23727272'/%3E%3C/g%3E%3C/svg%3E");
751
+ background-repeat: no-repeat;
752
+ background-size: contain;
753
+ background-size: 17px;
754
+ content: '';
755
+ display: inline-block;
756
+ -webkit-box-flex: 0;
757
+ flex: none;
758
+ height: 17px;
759
+ margin-right: 8px;
760
+ width: 17px;
761
+ }
762
+
763
  .tribe-events .tribe-events-c-events-bar__search-button {
764
  display: inline-block;
765
  margin-right: 8px;
767
  position: relative;
768
  }
769
 
770
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__search-button {
771
+ display: none !important;
772
+ visibility: hidden;
773
+ }
774
+
775
  .tribe-events .tribe-events-c-events-bar__search-button-icon {
776
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E");
777
  display: block;
795
  padding-bottom: 12px;
796
  }
797
 
798
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__tabs {
799
+ display: none !important;
800
+ visibility: hidden;
801
+ }
802
+
803
  .tribe-events .tribe-events-c-events-bar__tab {
804
  -webkit-box-align: center;
805
  align-items: center;
915
  width: 100%;
916
  }
917
 
918
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-messages__message {
919
+ -webkit-box-pack: center;
920
+ justify-content: center;
921
+ padding: 16px;
922
+ }
923
+
924
  /* Navigation */
925
 
926
  /* -----------------------------------------------------------------------------
947
  padding-top: 20px;
948
  }
949
 
950
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav {
951
+ padding-top: 28px;
952
+ }
953
+
954
  .tribe-events .tribe-events-c-nav__list {
955
  display: -webkit-box;
956
  display: flex;
966
  width: 33.33%;
967
  }
968
 
969
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__list-item {
970
+ width: 50%;
971
+ }
972
+
973
  .tribe-events .tribe-events-c-nav__list-item--prev {
974
  -webkit-box-pack: start;
975
  justify-content: flex-start;
985
  justify-content: center;
986
  }
987
 
988
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__list-item--today {
989
+ display: none !important;
990
+ visibility: hidden;
991
+ }
992
+
993
  .tribe-events .tribe-events-c-nav__prev-label-plural,
994
  .tribe-events .tribe-events-c-nav__next-label-plural {
995
  border: 0;
1002
  width: 1px;
1003
  }
1004
 
1005
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__prev-label-plural, .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__next-label-plural {
1006
+ clip: auto;
1007
+ width: auto;
1008
+ height: auto;
1009
+ margin: 0;
1010
+ position: static;
1011
+ }
1012
+
1013
  .tribe-events .tribe-events-c-nav__prev,
1014
  .tribe-events .tribe-events-c-nav__next {
1015
  -webkit-box-align: center;
1125
  *
1126
  * ----------------------------------------------------------------------------- */
1127
 
1128
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search {
1129
+ display: -webkit-box;
1130
+ display: flex;
1131
+ -webkit-box-align: center;
1132
+ align-items: center;
1133
+ }
1134
+
1135
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-group {
1136
+ -webkit-box-align: center;
1137
+ align-items: center;
1138
+ display: -webkit-box;
1139
+ display: flex;
1140
+ -webkit-box-flex: 1;
1141
+ flex: auto;
1142
+ }
1143
+
1144
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-control {
1145
+ -webkit-box-flex: 1;
1146
+ flex: auto;
1147
+ margin: 12px 0;
1148
+ }
1149
+
1150
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input {
1151
+ margin: -12px 0;
1152
+ }
1153
+
1154
  .tribe-events .tribe-events-c-search__button {
1155
  margin-top: 24px;
1156
  }
1157
 
1158
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__button {
1159
+ -webkit-box-flex: 0;
1160
+ flex: none;
1161
+ margin-top: 0;
1162
+ }
1163
+
1164
  /* -----------------------------------------------------------------------------
1165
  * Theme Overrides - Enfold
1166
  * ----------------------------------------------------------------------------- */
1167
 
1168
+ #top.tribe-theme-enfold .tribe-events.tribe-common--breakpoint-medium .tribe-events-c-search__input {
1169
+ margin: -12px 0;
1170
+ }
1171
+
1172
  /* -----------------------------------------------------------------------------
1173
  * Theme Overrides - Avada
1174
  * ----------------------------------------------------------------------------- */
1175
 
1176
+ .tribe-theme-avada .tribe-events.tribe-common--breakpoint-medium .tribe-events-c-search__input {
1177
+ margin: -12px 0;
1178
+ }
1179
+
1180
  /* Tooltip */
1181
 
1182
  /* -----------------------------------------------------------------------------
1223
  * ----------------------------------------------------------------------------- */
1224
  }
1225
 
1226
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar {
1227
+ -webkit-box-align: center;
1228
+ align-items: center;
1229
+ display: -webkit-box;
1230
+ display: flex;
1231
+ -webkit-box-orient: horizontal;
1232
+ -webkit-box-direction: normal;
1233
+ flex-direction: row;
1234
+ flex-wrap: wrap;
1235
+ }
1236
+
1237
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__nav {
1238
+ display: block !important;
1239
+ -webkit-box-flex: 0;
1240
+ flex: none;
1241
+ visibility: visible;
1242
+ }
1243
+
1244
  .tribe-events .tribe-events-c-top-bar__nav-list {
1245
  display: -webkit-box;
1246
  display: flex;
1260
  display: block;
1261
  }
1262
 
1263
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__nav-link:before {
1264
+ height: 18px;
1265
+ width: 11px;
1266
+ }
1267
+
1268
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__today-button {
1269
+ display: block !important;
1270
+ -webkit-box-flex: 0;
1271
+ flex: none;
1272
+ margin-right: 15px;
1273
+ visibility: visible;
1274
+ }
1275
+
1276
  .tribe-events .tribe-events-c-top-bar__datepicker-form {
1277
  -webkit-box-align: center;
1278
  align-items: center;
1286
  position: relative;
1287
  }
1288
 
1289
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker {
1290
+ margin: 0;
1291
+ padding: 0;
1292
+ }
1293
+
1294
+ .tribe-events .tribe-events-c-top-bar__datepicker-separator {
1295
+ white-space: pre;
1296
+ }
1297
+
1298
+ .tribe-common--breakpoint-full.tribe-events .tribe-events-c-top-bar__datepicker-mobile {
1299
+ display: none !important;
1300
+ visibility: hidden;
1301
+ }
1302
+
1303
+ .tribe-common--breakpoint-full.tribe-events .tribe-events-c-top-bar__datepicker-desktop {
1304
+ display: block !important;
1305
+ visibility: visible
1306
+ }
1307
+
1308
  .tribe-events .tribe-events-c-top-bar__datepicker-button {
1309
  -webkit-box-align: center;
1310
  align-items: center;
1322
  width: 363px;
1323
  }
1324
 
1325
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker-container {
1326
+ max-width: none;
1327
+ min-width: 363px;
1328
+ }
1329
+
1330
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker-submit {
1331
+ display: block !important;
1332
+ -webkit-box-flex: 0;
1333
+ flex: none;
1334
+ margin-left: 15px;
1335
+ visibility: visible;
1336
+ }
1337
+
1338
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__actions {
1339
+ display: block !important;
1340
+ -webkit-box-flex: 0;
1341
+ flex: none;
1342
+ margin-left: auto;
1343
+ visibility: visible;
1344
+ }
1345
 
1346
  /* -----------------------------------------------------------------------------
1347
  * Theme Overrides - Enfold
1430
  width: 29px;
1431
  }
1432
 
1433
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector {
1434
+ width: auto;
1435
+ }
1436
+
1437
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button {
1438
+ height: 100%;
1439
+ padding: 20px 24px;
1440
+ }
1441
+
1442
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-icon {
1443
+ display: none !important;
1444
+ visibility: hidden;
1445
+ }
1446
+
1447
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text {
1448
+ clip: auto;
1449
+ width: auto;
1450
+ height: auto;
1451
+ margin: 0;
1452
+ position: static;
1453
+
1454
+ -webkit-box-flex: 1;
1455
+
1456
+ flex: auto;
1457
+ }
1458
+
1459
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content {
1460
+ left: 0;
1461
+ padding: 8px;
1462
+ right: auto;
1463
+ -webkit-transform: translateY(8px);
1464
+ transform: translateY(8px);
1465
+ width: auto;
1466
+ }
1467
+
1468
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-link {
1469
+ padding: 4px 32px 4px 16px;
1470
+ }
1471
+
1472
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-icon {
1473
+ display: none !important;
1474
+ visibility: hidden;
1475
+ }
1476
+
1477
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__button {
1478
+ display: none !important;
1479
+ visibility: hidden;
1480
+ }
1481
+
1482
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content {
1483
+ display: block;
1484
+ height: 100%;
1485
+ padding: 0 12px;
1486
+ position: static;
1487
+ -webkit-transform: none;
1488
+ transform: none;
1489
+ }
1490
+
1491
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list {
1492
+ display: -webkit-box;
1493
+ display: flex;
1494
+ height: 100%;
1495
+ }
1496
+
1497
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item {
1498
+ margin: 0 12px;
1499
+ }
1500
+
1501
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item-link {
1502
+ height: 100%;
1503
+ padding: 20px 0;
1504
+ position: relative;
1505
+ }
1506
+
1507
  .tribe-events .tribe-events-c-view-selector__button {
1508
  -webkit-box-align: center;
1509
  align-items: center;
1514
  width: 100%;
1515
  }
1516
 
1517
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__button {
1518
+ padding: 8px;
1519
+ }
1520
+
1521
  .tribe-events .tribe-events-c-view-selector__button-icon {
1522
  display: block;
1523
  height: 21px;
1524
  width: 21px;
1525
  }
1526
 
1527
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__button-icon {
1528
+ height: 23px;
1529
+ width: 23px;
1530
+ }
1531
+
1532
  .tribe-events .tribe-events-c-view-selector__content {
1533
  display: none;
1534
  background-color: #FFFFFF;
1541
  z-index: 30;
1542
  }
1543
 
1544
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__content {
1545
+ -webkit-transform: translateY(12px);
1546
+ transform: translateY(12px);
1547
+ }
1548
+
1549
  .tribe-events .tribe-events-c-view-selector__list-item-link {
1550
  -webkit-box-align: center;
1551
  align-items: center;
1604
  position: relative;
1605
  }
1606
 
1607
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header {
1608
+ margin: 0;
1609
+ padding: 0;
1610
+ }
1611
+
1612
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header--has-event-search {
1613
+ background-color: transparent;
1614
+ -webkit-box-orient: horizontal;
1615
+ -webkit-box-direction: normal;
1616
+ flex-direction: row;
1617
+ }
1618
+
1619
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header--has-event-search .tribe-events-header__events-bar {
1620
+ margin-left: 0;
1621
+ width: 100%;
1622
+ }
1623
+
1624
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header--has-event-search .tribe-events-header__top-bar {
1625
+ width: 100%;
1626
+ }
1627
+
1628
  .tribe-events .tribe-events-header__messages {
1629
  margin-bottom: 16px;
1630
  width: 100%;
1631
  }
1632
 
1633
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header__messages {
1634
+ margin-bottom: 32px;
1635
+ -webkit-box-ordinal-group: 2;
1636
+ order: 1;
1637
+ }
1638
+
1639
  .tribe-events .tribe-events-header__events-bar {
1640
  -webkit-box-flex: 0;
1641
  flex: none;
1642
  }
1643
 
1644
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header__events-bar {
1645
+ margin-bottom: 32px;
1646
+ margin-left: 16px;
1647
+ }
1648
+
1649
  .tribe-events .tribe-events-header__top-bar {
1650
  -webkit-box-flex: 1;
1651
  flex: auto;
1652
  }
1653
 
1654
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-header__top-bar {
1655
+ margin-bottom: 32px;
1656
+ }
1657
+
1658
  /* List */
1659
 
1660
  /**
1674
  margin-top: 32px;
1675
  }
1676
 
1677
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row {
1678
+ margin-bottom: 40px;
1679
+ margin-top: 48px;
1680
+ margin-left: -24px;
1681
+ margin-right: -24px;
1682
+ }
1683
+
1684
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row > .tribe-common-g-col {
1685
+ padding-left: 24px;
1686
+ padding-right: 24px;
1687
+ }
1688
+
1689
  .tribe-events .tribe-events-calendar-list__event-row:last-child {
1690
  margin-bottom: 40px;
1691
  }
1692
 
1693
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row:last-child {
1694
+ margin-bottom: 64px;
1695
+ }
1696
+
1697
  .tribe-events .tribe-events-calendar-list__month-separator + .tribe-events-calendar-list__event-row {
1698
  margin-top: 20px;
1699
  }
1700
 
1701
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__month-separator + .tribe-events-calendar-list__event-row {
1702
+ margin-top: 40px;
1703
+ }
1704
+
1705
  .tribe-events .tribe-events-calendar-list__event-date-tag {
1706
  -webkit-box-flex: 0;
1707
  flex: none;
1709
  position: relative;
1710
  }
1711
 
1712
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-date-tag {
1713
+ min-width: 90px;
1714
+ width: 11.111%;
1715
+ }
1716
+
1717
  .tribe-events .tribe-events-calendar-list__event-date-tag-datetime {
1718
  display: -webkit-box;
1719
  display: flex;
1734
  width: calc(75% + 21px);
1735
  }
1736
 
1737
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-wrapper {
1738
+ -webkit-box-flex: 1;
1739
+ flex: 1 1 88.888%;
1740
+ }
1741
+
1742
  .tribe-events .tribe-events-calendar-list__event {
1743
  -webkit-box-orient: vertical;
1744
  -webkit-box-direction: normal;
1745
  flex-direction: column;
1746
  }
1747
 
1748
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event {
1749
+ -webkit-box-orient: horizontal;
1750
+ -webkit-box-direction: reverse;
1751
+ flex-direction: row-reverse;
1752
+ -webkit-box-pack: end;
1753
+ justify-content: flex-end;
1754
+ }
1755
+
1756
  .tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
1757
  -webkit-box-flex: 0;
1758
  flex: none;
1759
  margin-bottom: 16px;
1760
  }
1761
 
1762
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper {
1763
+ margin-bottom: 0;
1764
+ width: 37.5%;
1765
+ }
1766
+
1767
  .tribe-events .tribe-events-calendar-list__event-featured-image-link,
1768
  .tribe-events .tribe-events-calendar-list__event-featured-image {
1769
  display: block;
1774
  flex: none;
1775
  }
1776
 
1777
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-details {
1778
+ width: 62.5%;
1779
+ }
1780
+
1781
  .tribe-events .tribe-events-calendar-list__event-header > *:last-child {
1782
  margin-bottom: 0;
1783
  }
1784
 
1785
  .tribe-events .tribe-events-calendar-list__event-datetime-wrapper,
1786
  .tribe-events .tribe-events-calendar-list__event-title {
1787
+ margin: 0 0 8px;
1788
  }
1789
 
1790
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-datetime-wrapper, .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-title {
1791
+ margin: 0 0 16px;
1792
+ }
1793
+
1794
  .tribe-events .tribe-events-calendar-list__event-datetime-wrapper:last-child, .tribe-events .tribe-events-calendar-list__event-title:last-child {
1795
  margin-bottom: 0;
1796
  }
1800
  margin-right: 4px;
1801
  }
1802
 
1803
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-datetime-featured-text {
1804
+ clip: auto;
1805
+ width: auto;
1806
+ height: auto;
1807
+ margin: 0;
1808
+ position: static;
1809
+
1810
+ margin-right: 8px;
1811
+ }
1812
+
1813
  .tribe-events .tribe-events-calendar-list__event-datetime-recurring-icon {
1814
  display: inline-block;
1815
  margin-left: 4px;
1819
  margin-bottom: 8px;
1820
  }
1821
 
1822
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-venue {
1823
+ margin-bottom: 16px;
1824
+ }
1825
+
1826
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-description {
1827
+ display: block !important;
1828
+ margin-top: 16px;
1829
+ visibility: visible;
1830
+ }
1831
 
1832
  .tribe-events .tribe-events-calendar-list__event-cost {
1833
  margin-top: 12px;
1834
  }
1835
 
1836
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-cost {
1837
+ margin-top: 16px;
1838
+ }
1839
+
1840
  /* -----------------------------------------------------------------------------
1841
  * Month Separator
1842
  * ----------------------------------------------------------------------------- */
1861
  padding-top: 24px;
1862
  }
1863
 
1864
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list-nav {
1865
+ padding-top: 32px;
1866
+ }
1867
+
1868
  /* Month */
1869
 
1870
  /**
1882
  margin-bottom: 8px;
1883
  }
1884
 
1885
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month {
1886
+ margin: 0;
1887
+ }
1888
+
1889
  /* -----------------------------------------------------------------------------
1890
  * Calendar Body
1891
  * ----------------------------------------------------------------------------- */
1892
 
1893
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__body {
1894
+ border-top: 1px solid #E4E4E4;
1895
+ }
1896
+
1897
  .tribe-events .tribe-events-calendar-month__week {
1898
  display: -webkit-box;
1899
  display: flex;
1900
  }
1901
 
1902
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__week {
1903
+ border-left: 1px solid #E4E4E4;
1904
+ }
1905
+
1906
  /* -----------------------------------------------------------------------------
1907
  * Calendar Event
1908
  * ----------------------------------------------------------------------------- */
2003
  margin-bottom: 0;
2004
  }
2005
 
2006
+ .tribe-events .tribe-events-calendar-month__calendar-event-title {
2007
+ margin: 0;
2008
+ }
2009
+
2010
  .tribe-events .tribe-events-calendar-month__calendar-event-tooltip-cost {
2011
  margin-top: 16px;
2012
  }
2044
  padding-bottom: 16px;
2045
  }
2046
 
2047
+ .tribe-events .tribe-events-calendar-month__header-column-title {
2048
+ margin: 0;
2049
+ }
2050
+
2051
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__header-column-title-mobile {
2052
+ display: none !important;
2053
+ visibility: hidden;
2054
+ }
2055
+
2056
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__header-column-title-desktop {
2057
+ display: block !important;
2058
+ visibility: visible
2059
+ }
2060
+
2061
  .tribe-events {
2062
 
2063
  /* -----------------------------------------------------------------------------
2077
  width: 14.285%;
2078
  }
2079
 
2080
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day {
2081
+ border-color: #E4E4E4;
2082
+ border-style: solid;
2083
+ border-width: 0 1px 1px 0;
2084
+ height: auto;
2085
+ min-height: 168px;
2086
+ overflow: visible;
2087
+ }
2088
+
2089
  .tribe-events .tribe-events-calendar-month__day-cell {
2090
  height: 100%;
2091
  width: 100%;
2102
  text-align: center;
2103
  }
2104
 
2105
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day-cell--mobile {
2106
+ display: none !important;
2107
+ visibility: hidden;
2108
+ }
2109
+
2110
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day-cell--desktop {
2111
+ display: -webkit-box !important;
2112
+ display: flex !important;
2113
+ -webkit-box-orient: vertical;
2114
+ -webkit-box-direction: normal;
2115
+ flex-direction: column;
2116
+ visibility: visible;
2117
+ }
2118
+
2119
+ .tribe-events .tribe-events-calendar-month__day-date {
2120
+ margin: 0;
2121
+ }
2122
+
2123
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day-date {
2124
+ -webkit-box-flex: 0;
2125
+ flex: none;
2126
+ padding: 8px 16px;
2127
+ }
2128
+
2129
  .tribe-events .tribe-events-calendar-month__events {
2130
  -webkit-box-flex: 1;
2131
  flex: auto;
2150
  * Mobile Events
2151
  * ----------------------------------------------------------------------------- */
2152
 
2153
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month-mobile-events {
2154
+ display: none !important;
2155
+ visibility: hidden;
2156
+ }
2157
+
2158
  .tribe-events .tribe-events-calendar-month-mobile-events__mobile-day {
2159
  display: none;
2160
  }
2201
  margin-right: 8px;
2202
  }
2203
 
2204
+ .tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-title {
2205
+ margin: 0;
2206
+ }
2207
+
2208
  .tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-cost {
2209
  margin-top: 8px;
2210
  }
2235
  * Multiday Event
2236
  * ----------------------------------------------------------------------------- */
2237
 
2238
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__multiday-event-wrapper {
2239
+ height: 19px;
2240
+ margin-bottom: 4px;
2241
+ position: relative;
2242
+ }
2243
+
2244
  .tribe-events .tribe-events-calendar-month__multiday-event--width-2 .tribe-events-calendar-month__multiday-event-bar {
2245
  width: calc(200% + 1px);
2246
  }
2274
  }
2275
 
2276
  .tribe-events .tribe-events-calendar-month__multiday-event-hidden-title {
2277
+ margin: 0;
2278
+ overflow: hidden;
2279
  white-space: nowrap;
2280
  }
2281
 
2311
  .tribe-events .tribe-events-calendar-month__multiday-event-bar-title {
2312
  -webkit-box-flex: 0;
2313
  flex: none;
2314
+ margin: 0;
2315
  max-width: 100%;
2316
  overflow: hidden;
2317
  white-space: nowrap;
2325
  padding-top: 20px;
2326
  }
2327
 
2328
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month-nav {
2329
+ display: none !important;
2330
+ visibility: hidden;
2331
+ }
2332
+
2333
  /* Day */
2334
 
2335
  /**
2349
  padding-left: 54px;
2350
  }
2351
 
2352
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event {
2353
+ margin-bottom: 40px;
2354
+ margin-top: 48px;
2355
+ padding-left: 0;
2356
+ }
2357
+
2358
  .tribe-events .tribe-events-calendar-day__event:last-child {
2359
  margin-bottom: 40px;
2360
  }
2361
 
2362
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event:last-child {
2363
+ margin-bottom: 64px;
2364
+ }
2365
+
2366
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event:before {
2367
+ content: '';
2368
+ min-width: 90px;
2369
+ width: 11.111%;
2370
+ }
2371
+
2372
  .tribe-events .tribe-events-calendar-day__time-separator + .tribe-events-calendar-day__event,
2373
  .tribe-events .tribe-events-calendar-day__type-separator + .tribe-events-calendar-day__event {
2374
  margin-top: 20px;
2375
  }
2376
 
2377
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__time-separator + .tribe-events-calendar-day__event, .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__type-separator + .tribe-events-calendar-day__event {
2378
+ margin-top: 40px;
2379
+ }
2380
+
2381
  .tribe-events .tribe-events-calendar-day__event-content {
2382
  -webkit-box-flex: 0;
2383
  flex: none;
2384
  }
2385
 
2386
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-content {
2387
+ display: -webkit-box;
2388
+ display: flex;
2389
+ -webkit-box-orient: horizontal;
2390
+ -webkit-box-direction: reverse;
2391
+ flex-direction: row-reverse;
2392
+ -webkit-box-pack: end;
2393
+ justify-content: flex-end;
2394
+ -webkit-box-flex: 1;
2395
+ flex: 1 1 88.888%;
2396
+ margin-left: -24px;
2397
+ margin-right: -24px;
2398
+ }
2399
+
2400
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-content > * {
2401
+ padding-left: 24px;
2402
+ padding-right: 24px;
2403
+ }
2404
+
2405
  .tribe-events .tribe-events-calendar-day__event-featured-image-wrapper {
2406
  margin-bottom: 16px;
2407
  }
2408
 
2409
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-featured-image-wrapper {
2410
+ -webkit-box-flex: 0;
2411
+ flex: none;
2412
+ margin-bottom: 0;
2413
+ width: 37.5%;
2414
+ }
2415
+
2416
  .tribe-events .tribe-events-calendar-day__event-featured-image-link,
2417
  .tribe-events .tribe-events-calendar-list__event-featured-image {
2418
  display: block;
2422
  position: relative;
2423
  }
2424
 
2425
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-details {
2426
+ -webkit-box-flex: 0;
2427
+ flex: none;
2428
+ width: 62.5%;
2429
+ }
2430
+
2431
  .tribe-events .tribe-events-calendar-day__event-header > *:last-child {
2432
  margin-bottom: 0;
2433
  }
2434
 
2435
  .tribe-events .tribe-events-calendar-day__event-datetime-wrapper,
2436
  .tribe-events .tribe-events-calendar-day__event-title {
2437
+ margin: 0 0 8px;
2438
  }
2439
 
2440
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-datetime-wrapper, .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-title {
2441
+ margin: 0 0 16px;
2442
+ }
2443
+
2444
  .tribe-events .tribe-events-calendar-day__event-datetime-wrapper:last-child, .tribe-events .tribe-events-calendar-day__event-title:last-child {
2445
  margin-bottom: 0;
2446
  }
2450
  margin-right: 4px;
2451
  }
2452
 
2453
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-datetime-featured-text {
2454
+ clip: auto;
2455
+ width: auto;
2456
+ height: auto;
2457
+ margin: 0;
2458
+ position: static;
2459
+
2460
+ margin-right: 8px;
2461
+ }
2462
+
2463
  .tribe-events .tribe-events-calendar-day__event-datetime-recurring-icon {
2464
  display: inline-block;
2465
  margin-left: 4px;
2469
  margin-bottom: 8px;
2470
  }
2471
 
2472
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-venue {
2473
+ margin-bottom: 16px;
2474
+ }
2475
+
2476
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-description {
2477
+ display: block !important;
2478
+ margin-top: 16px;
2479
+ visibility: visible;
2480
+ }
2481
 
2482
  .tribe-events .tribe-events-calendar-day__event-cost {
2483
  margin-top: 12px;
2484
  }
2485
 
2486
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-cost {
2487
+ margin-top: 16px;
2488
+ }
2489
+
2490
  /* -------------------------------------------------------------------------
2491
  * Theme Overrides - Twenty Nineteen
2492
  * ------------------------------------------------------------------------- */
2501
  margin-bottom: 40px;
2502
  }
2503
 
2504
+ .tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .entry.tribe-events-calendar-day__event {
2505
+ margin-bottom: 40px;
2506
+ margin-top: 48px;
2507
+ padding-left: 0;
2508
+ }
2509
+
2510
+ .tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .entry.tribe-events-calendar-day__event:last-child {
2511
+ margin-bottom: 64px;
2512
+ }
2513
+
2514
  .tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
2515
  .tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
2516
  margin-top: 20px;
2517
  }
2518
 
2519
+ .tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
2520
+ .tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
2521
+ margin-top: 40px;
2522
+ }
2523
+
2524
  /* -----------------------------------------------------------------------------
2525
  * Nav
2526
  * ----------------------------------------------------------------------------- */
2529
  padding-top: 24px;
2530
  }
2531
 
2532
+ .tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day-nav {
2533
+ padding-top: 32px;
2534
+ }
2535
+
2536
  /* -----------------------------------------------------------------------------
2537
  * Time separator
2538
  * ----------------------------------------------------------------------------- */
2564
  -webkit-box-flex: 0;
2565
  flex: none;
2566
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/resources/css/views-skeleton.min.css CHANGED
@@ -1 +1 @@
1
- .tribe-events-view{position:relative}.tribe-events .tribe-events-l-container{padding-bottom:80px;padding-top:64px}.tribe-events .tribe-events-c-breadcrumbs{margin-bottom:24px;width:100%}.tribe-events .tribe-events-c-breadcrumbs__list{display:flex;flex-wrap:wrap}.tribe-events .tribe-events-c-breadcrumbs__list-item{display:inline-flex;align-items:center}.tribe-events .tribe-events-c-breadcrumbs__list-item:not(:last-child):after{content:"";background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;display:inline-block;height:10px;width:6px;margin:0 6px}.tribe-events .datepicker{margin-top:8px;padding:0 16px 16px}.tribe-events .datepicker table{border-collapse:collapse}.tribe-events .datepicker .datepicker-switch,.tribe-events .datepicker .next,.tribe-events .datepicker .prev{padding:20px 0}.tribe-events .datepicker .next .tribe-common-svgicon,.tribe-events .datepicker .prev .tribe-common-svgicon{display:block;height:14px;width:9px}.tribe-events .datepicker .prev:active .tribe-common-svgicon,.tribe-events .datepicker .prev:focus .tribe-common-svgicon,.tribe-events .datepicker .prev:hover .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .datepicker .prev .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");margin-right:auto}.tribe-events .datepicker .next:active .tribe-common-svgicon,.tribe-events .datepicker .next:focus .tribe-common-svgicon,.tribe-events .datepicker .next:hover .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .datepicker .next .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");margin-left:auto}.tribe-events .datepicker .datepicker-months td,.tribe-events .datepicker .datepicker-months th,.tribe-events .datepicker .datepicker-years td,.tribe-events .datepicker .datepicker-years th{padding:0}.tribe-events .datepicker .datepicker-months .datepicker-switch,.tribe-events .datepicker .datepicker-months .next,.tribe-events .datepicker .datepicker-months .prev,.tribe-events .datepicker .datepicker-years .datepicker-switch,.tribe-events .datepicker .datepicker-years .next,.tribe-events .datepicker .datepicker-years .prev{padding:20px 0 8px}.tribe-events .datepicker .dow{padding:0;width:14.285%}.tribe-events .datepicker .day{padding:11px 0;width:48px}.tribe-events .datepicker .month,.tribe-events .datepicker .year{height:auto;margin:0;padding:15px 0;width:25%}.admin-bar .tribe-events .datepicker{margin-top:8px}.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-switch,.tribe-theme-divi #content-area .tribe-events .datepicker .next,.tribe-theme-divi #content-area .tribe-events .datepicker .prev{padding:20px 0}.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-months .datepicker-switch,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-months .next,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-months .prev,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-years .datepicker-switch,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-years .next,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-years .prev{padding:20px 0 8px}.tribe-theme-divi #content-area .tribe-events .datepicker .dow{padding:0}.tribe-theme-divi #content-area .tribe-events .datepicker .day{padding:11px 0}.tribe-theme-enfold .tribe-events .datepicker{min-width:0;padding:0 16px 16px}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch{cursor:pointer!important}.tribe-theme-avada .tribe-events .datepicker{padding:0 16px 16px}.tribe-theme-avada .tribe-events .datepicker .datepicker-months td{padding:0}.tribe-events .tribe-events-c-day-marker{align-items:center;display:flex}.tribe-events .tribe-events-c-day-marker__date{flex:none}.tribe-events .tribe-events-c-events-bar{display:flex}.tribe-events .tribe-events-c-events-bar__views{display:flex;flex:none;justify-content:center}.tribe-events .tribe-events-c-events-bar__search-filters-container{background-color:#fff;display:none;left:0;padding:12px 21px;position:absolute;right:0;top:calc(100% - 12px);z-index:30}.tribe-events .tribe-events-c-events-bar__search-form{width:100%}.tribe-events .tribe-events-c-events-bar__filters{display:flex;flex:none;justify-content:flex-end;margin-right:-12px}.tribe-events .tribe-events-c-events-bar__filters-button{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-events-bar__search-button{display:inline-block;margin-right:8px;padding:4px;position:relative}.tribe-events .tribe-events-c-events-bar__search-button-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E");display:block;height:21px;width:21px}.tribe-events .tribe-events-c-events-bar__search-button-icon--filter{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='22'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23141827' fill-rule='nonzero' d='M30.128 21.41c.22.221.554.247.743.058l.6-.6c.19-.189.163-.524-.057-.744l-6.557-6.557c-.55-.55-1.83.743-1.278 1.295l6.549 6.549z'/%3E%3Ccircle cx='18.777' cy='8.777' r='7.564' stroke='%23141827' stroke-width='1.5' transform='rotate(4 18.777 8.777)'/%3E%3Cpath fill='%23141827' fill-rule='nonzero' d='M7.442 9.533C7.75 9.533 8 9.293 8 9v-.467A.547.547 0 0 0 7.442 8H.558A.547.547 0 0 0 0 8.533V9c0 .293.25.533.558.533h6.884zM9.533 2.5c.257 0 .467-.24.467-.533v-.434C10 1.24 9.79 1 9.533 1H.467C.21 1 0 1.24 0 1.533v.434c0 .293.21.533.467.533h9.066zM.535 16.533h3.93c.294 0 .535-.24.535-.533v-.467A.536.536 0 0 0 4.465 15H.535a.536.536 0 0 0-.535.533V16c0 .293.24.533.535.533z'/%3E%3C/g%3E%3C/svg%3E");width:31px}.tribe-events .tribe-events-c-events-bar__search-button-icon--filter+.tribe-events-c-events-bar__search-button-icon{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-events-bar__tabs{display:flex;padding-bottom:12px}.tribe-events .tribe-events-c-events-bar__tab{align-items:center;display:flex;flex:1 1 50%;flex-direction:column;margin:0 4px;padding:16px 0}.tribe-events .tribe-events-c-events-bar__tab:active .tribe-common-svgicon--search,.tribe-events .tribe-events-c-events-bar__tab:focus .tribe-common-svgicon--search,.tribe-events .tribe-events-c-events-bar__tab:hover .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab:active .tribe-common-svgicon--filters,.tribe-events .tribe-events-c-events-bar__tab:focus .tribe-common-svgicon--filters,.tribe-events .tribe-events-c-events-bar__tab:hover .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab:first-of-type{margin-left:0}.tribe-events .tribe-events-c-events-bar__tab:last-of-type{margin-right:0}.tribe-events .tribe-events-c-events-bar__tab--active .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab--active .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab-icon{height:16px;margin-bottom:4px;width:16px}.tribe-events .tribe-events-c-ical{margin-top:20px;text-align:right}.tribe-events .tribe-events-view-loader{align-items:flex-start;justify-content:center;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;z-index:100;background-color:hsla(0,0%,100%,.6)}.tribe-events .tribe-events-c-messages{display:flex;flex-direction:column}.tribe-events .tribe-events-c-messages__message{align-items:center;display:flex;padding:12px;width:100%}.tribe-events .tribe-events-c-nav{padding-top:20px}.tribe-events .tribe-events-c-nav__list{display:flex;width:100%;flex-wrap:wrap;justify-content:space-between}.tribe-events .tribe-events-c-nav__list-item{display:flex;width:33.33%}.tribe-events .tribe-events-c-nav__list-item--prev{justify-content:flex-start}.tribe-events .tribe-events-c-nav__list-item--next{justify-content:flex-end}.tribe-events .tribe-events-c-nav__list-item--today{justify-content:center}.tribe-events .tribe-events-c-nav__next-label-plural,.tribe-events .tribe-events-c-nav__prev-label-plural{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-events .tribe-events-c-nav__next,.tribe-events .tribe-events-c-nav__prev{align-items:center;display:flex;flex:none;flex-wrap:wrap;justify-content:center}.tribe-events .tribe-events-c-promo{margin-top:20px}.tribe-events .tribe-events-c-read-more{margin-top:12px}.tribe-events .tribe-events-c-small-cta>*{margin-left:8px}.tribe-events .tribe-events-c-small-cta>:first-child{margin-left:0}.tribe-events .tribe-events-c-small-cta__link{cursor:pointer}.tribe-events .tribe-events-c-small-cta__stock{margin-left:4px}.tribe-events .tribe-events-c-search__button{margin-top:24px}.tooltipster-base.tribe-events-tooltip-theme{height:auto!important;padding:24px;max-width:254px}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box{margin:0}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box .tooltipster-content{padding:0;word-break:break-word}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-arrow{display:none}.tribe-events .tribe-events-c-top-bar__nav-list{display:flex}.tribe-events .tribe-events-c-top-bar__nav-list-item{flex:none;padding-right:15px}.tribe-events .tribe-events-c-top-bar__nav-list-item>*{vertical-align:middle}.tribe-events .tribe-events-c-top-bar__nav-link{display:block}.tribe-events .tribe-events-c-top-bar__datepicker-form{align-items:center;display:flex}.tribe-events .tribe-events-c-top-bar__datepicker{flex:auto;position:relative}.tribe-events .tribe-events-c-top-bar__datepicker-button{align-items:center;display:flex;flex:none}.tribe-events .tribe-events-c-top-bar__datepicker-container{bottom:0;left:0;max-width:calc(100% + 66px);position:absolute;width:363px}.tribe-events .tribe-events-c-top-bar__actions{display:none!important;visibility:hidden}#top.tribe-theme-enfold .tribe-events .tribe-events-c-top-bar__datepicker-input,.tribe-theme-avada .tribe-events .tribe-events-c-top-bar__datepicker-input{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-events .tribe-events-c-view-selector{position:relative;width:29px}.tribe-events .tribe-events-c-view-selector__button{align-items:center;display:flex;padding:4px;position:relative;width:100%}.tribe-events .tribe-events-c-view-selector__button-icon{display:block;height:21px;width:21px}.tribe-events .tribe-events-c-view-selector__content{display:none;background-color:#fff;padding:12px 6px;position:absolute;right:0;top:100%;transform:translateY(16px);z-index:30}.tribe-events .tribe-events-c-view-selector__list-item-link{align-items:center;display:flex;padding:8px 24px 8px 12px}.tribe-events .tribe-events-c-view-selector__list-item-icon{flex:none;height:18px;margin-right:12px;width:18px}.tribe-events .tribe-events-c-view-selector__list-item-text{flex:auto}.tribe-events .tribe-events-header{align-items:center;background-color:#fff;display:flex;flex-direction:row-reverse;flex-wrap:wrap;justify-content:space-between;margin:0 -21px;padding:0 21px 16px;position:relative}.tribe-events .tribe-events-header__messages{margin-bottom:16px;width:100%}.tribe-events .tribe-events-header__events-bar{flex:none}.tribe-events .tribe-events-header__top-bar{flex:auto}.tribe-events .tribe-events-calendar-list__event-row{flex-wrap:nowrap;margin-bottom:24px;margin-top:32px}.tribe-events .tribe-events-calendar-list__event-row:last-child{margin-bottom:40px}.tribe-events .tribe-events-calendar-list__month-separator+.tribe-events-calendar-list__event-row{margin-top:20px}.tribe-events .tribe-events-calendar-list__event-date-tag{flex:none;width:54px;position:relative}.tribe-events .tribe-events-calendar-list__event-date-tag-datetime{display:flex;flex-direction:column;height:100%;text-align:center}.tribe-events .tribe-events-calendar-list__event-date-tag-weekday{margin-bottom:-4px}.tribe-events .tribe-events-calendar-list__event-wrapper{flex:1;width:calc(75% + 21px)}.tribe-events .tribe-events-calendar-list__event{flex-direction:column}.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper{flex:none;margin-bottom:16px}.tribe-events .tribe-events-calendar-list__event-featured-image,.tribe-events .tribe-events-calendar-list__event-featured-image-link{display:block}.tribe-events .tribe-events-calendar-list__event-details{flex:none}.tribe-events .tribe-events-calendar-list__event-header>:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-list__event-datetime-wrapper,.tribe-events .tribe-events-calendar-list__event-title{margin-bottom:8px}.tribe-events .tribe-events-calendar-list__event-datetime-wrapper:last-child,.tribe-events .tribe-events-calendar-list__event-title:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-list__event-datetime-featured-icon{display:inline-block;margin-right:4px}.tribe-events .tribe-events-calendar-list__event-datetime-recurring-icon{display:inline-block;margin-left:4px}.tribe-events .tribe-events-calendar-list__event-venue{margin-bottom:8px}.tribe-events .tribe-events-calendar-list__event-description{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-list__event-cost{margin-top:12px}.tribe-events .tribe-events-calendar-list__month-separator{display:flex;align-items:center}.tribe-events .tribe-events-calendar-list__month-separator-text{flex:none}.tribe-events .tribe-events-calendar-list-nav{padding-top:24px}.tribe-events .tribe-events-calendar-month{margin-bottom:8px}.tribe-events .tribe-events-calendar-month__week{display:flex}.tribe-events .tribe-events-calendar-month__calendar-event{margin:8px 0;padding:0 16px;position:relative}.tribe-events .tribe-events-calendar-month__calendar-event:first-child{margin-top:0}.tribe-events .tribe-events-calendar-month__calendar-event:last-child{margin-bottom:0;padding-bottom:16px}.tribe-events .tribe-events-calendar-month__multiday-event-wrapper+.tribe-events-calendar-month__calendar-event{margin-top:0}.tribe-events .tribe-events-calendar-month__multiday-event-wrapper+.tribe-events-calendar-month__calendar-event--featured{margin-top:8px}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-featured-icon,.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-icon{display:inline-block}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-featured-icon{margin-right:4px}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-icon{margin-left:2px}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-wrapper{margin-bottom:4px}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image,.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link{display:block}.tribe-events .tribe-events-calendar-month__calendar-event-datetime>*{vertical-align:middle}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-wrapper{margin-bottom:12px;width:206px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-wrapper:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link{display:block}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime{margin-bottom:4px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-featured-icon,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon{display:inline-block}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-featured-icon{margin-right:4px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon{margin-left:2px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-title{margin-bottom:4px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-description{margin-bottom:8px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-description:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-cost{margin-top:16px}.tribe-theme-twentynineteen .entry .tribe-events .tribe-events-calendar-month__calendar-event,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-month__calendar-event{margin:8px 0;padding:0 16px;position:relative}.tribe-theme-twentynineteen .entry .tribe-events .tribe-events-calendar-month__calendar-event:first-child,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-month__calendar-event:first-child{margin-top:0}.tribe-theme-twentynineteen .entry .tribe-events .tribe-events-calendar-month__calendar-event:last-child,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-month__calendar-event:last-child{margin-bottom:0;padding-bottom:16px}.tribe-events .tribe-events-calendar-month__header-row{display:flex}.tribe-events .tribe-events-calendar-month__header-column{width:14.285%;padding-bottom:16px}.tribe-events .tribe-events-calendar-month__day{height:48px;overflow:hidden;position:relative;width:14.285%}.tribe-events .tribe-events-calendar-month__day-cell{height:100%;width:100%}.tribe-events .tribe-events-calendar-month__day-cell--mobile{align-items:center;display:flex;flex-direction:column;text-align:center}.tribe-events .tribe-events-calendar-month__events{flex:auto}.tribe-events .tribe-events-calendar-month__mobile-events-icon--event{background-color:#141827;border-radius:50%;height:8px;width:8px}.tribe-events .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;height:10px;width:8px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-day{display:none}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-day--show{display:block}.tribe-events .tribe-events-calendar-month-mobile-events__day-marker{padding-top:16px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event{padding:12px 0}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event--featured{padding-bottom:20px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-featured-image-wrapper{margin-bottom:12px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime{margin-bottom:4px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime>*{vertical-align:middle}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-featured-icon{display:inline-block;margin-right:4px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-recurring-icon{display:inline-block;margin-left:4px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-featured-text{margin-right:8px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-cost{margin-top:8px}.tribe-events .tribe-events-calendar-month-mobile-events__more-events{padding:4px 0 20px}.tribe-events .tribe-events-calendar-month__more-events{display:flex;flex:none;margin:0 16px;padding:8px 0 16px}.tribe-events .tribe-events-calendar-month__more-events-link{flex:none}.tribe-events .tribe-events-calendar-month__multiday-event--width-2 .tribe-events-calendar-month__multiday-event-bar{width:calc(200% + 1px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-3 .tribe-events-calendar-month__multiday-event-bar{width:calc(300% + 2px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-4 .tribe-events-calendar-month__multiday-event-bar{width:calc(400% + 3px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-5 .tribe-events-calendar-month__multiday-event-bar{width:calc(500% + 4px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-6 .tribe-events-calendar-month__multiday-event-bar{width:calc(600% + 5px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-7 .tribe-events-calendar-month__multiday-event-bar{width:calc(700% + 6px)}.tribe-events .tribe-events-calendar-month__multiday-event-hidden{height:100%;opacity:0;position:absolute;width:100%;z-index:5}.tribe-events .tribe-events-calendar-month__multiday-event-hidden-title{white-space:nowrap}.tribe-events .tribe-events-calendar-month__multiday-event-hidden-link{display:block;height:100%}.tribe-events .tribe-events-calendar-month__multiday-event-bar{background-color:#fff;overflow:hidden;position:relative;width:100%;z-index:2}.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner{align-items:center;cursor:pointer;display:flex;flex-wrap:nowrap;padding:1px 16px}.tribe-events .tribe-events-calendar-month__multiday-event-bar-featured-icon{flex:none;margin-right:5px}.tribe-events .tribe-events-calendar-month__multiday-event-bar-title{flex:none;max-width:100%;overflow:hidden;white-space:nowrap}.tribe-events .tribe-events-calendar-month-nav{padding-top:20px}.tribe-events .tribe-events-calendar-day__event{margin-bottom:24px;margin-top:32px;padding-left:54px}.tribe-events .tribe-events-calendar-day__event:last-child{margin-bottom:40px}.tribe-events .tribe-events-calendar-day__time-separator+.tribe-events-calendar-day__event,.tribe-events .tribe-events-calendar-day__type-separator+.tribe-events-calendar-day__event{margin-top:20px}.tribe-events .tribe-events-calendar-day__event-content{flex:none}.tribe-events .tribe-events-calendar-day__event-featured-image-wrapper{margin-bottom:16px}.tribe-events .tribe-events-calendar-day__event-featured-image-link,.tribe-events .tribe-events-calendar-list__event-featured-image{display:block}.tribe-events .tribe-events-calendar-day__event-details{position:relative}.tribe-events .tribe-events-calendar-day__event-header>:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-day__event-datetime-wrapper,.tribe-events .tribe-events-calendar-day__event-title{margin-bottom:8px}.tribe-events .tribe-events-calendar-day__event-datetime-wrapper:last-child,.tribe-events .tribe-events-calendar-day__event-title:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-day__event-datetime-featured-icon{display:inline-block;margin-right:4px}.tribe-events .tribe-events-calendar-day__event-datetime-recurring-icon{display:inline-block;margin-left:4px}.tribe-events .tribe-events-calendar-day__event-venue{margin-bottom:8px}.tribe-events .tribe-events-calendar-day__event-description{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-day__event-cost{margin-top:12px}.tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event{margin-bottom:24px;margin-top:32px;padding-left:54px}.tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event:last-child{margin-bottom:40px}.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__time-separator+.entry.tribe-events-calendar-day__event,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__type-separator+.entry.tribe-events-calendar-day__event{margin-top:20px}.tribe-events .tribe-events-calendar-day-nav{padding-top:24px}.tribe-events .tribe-events-calendar-day__time-separator{display:flex;align-items:center}.tribe-events .tribe-events-calendar-day__time-separator-text{flex:none}.tribe-events .tribe-events-calendar-day__type-separator{display:flex;align-items:center}.tribe-events .tribe-events-calendar-day__type-separator-text{flex:none}@media (min-width:768px){.tribe-events .tribe-events-l-container{padding-bottom:160px;padding-top:96px}.tribe-events .tribe-events-c-breadcrumbs{margin-bottom:48px}.tribe-events .tribe-events-c-breadcrumbs__list-item:not(:last-child):after{height:16px;width:10px;margin:0 10px}.admin-bar .tribe-events .datepicker,.tribe-events .datepicker{margin-top:16px}.tribe-events .tribe-events-c-events-bar{flex-direction:row}.tribe-events .tribe-events-c-events-bar__search-filters-container{align-items:center;display:flex;flex:auto;padding:0;position:static;z-index:auto}.tribe-events .tribe-events-c-events-bar__search{display:flex;flex:auto}.tribe-events .tribe-events-c-events-bar__filters{margin:12px 0}.tribe-events .tribe-events-c-events-bar__filters-button{align-items:center;display:flex!important;margin:-12px 0;padding:20px 24px;visibility:visible}.tribe-events .tribe-events-c-events-bar__filters-button:active:before,.tribe-events .tribe-events-c-events-bar__filters-button:focus:before,.tribe-events .tribe-events-c-events-bar__filters-button:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__filters-button:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;background-size:17px;content:"";display:inline-block;flex:none;height:17px;margin-right:8px;width:17px}.tribe-events .tribe-events-c-events-bar__search-button,.tribe-events .tribe-events-c-events-bar__tabs{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-messages__message{justify-content:center;padding:16px}.tribe-events .tribe-events-c-nav{padding-top:28px}.tribe-events .tribe-events-c-nav__list-item{width:50%}.tribe-events .tribe-events-c-nav__list-item--today{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-nav__next-label-plural,.tribe-events .tribe-events-c-nav__prev-label-plural{clip:auto;width:auto;height:auto;margin:0;position:static}.tribe-events .tribe-events-c-search{display:flex;align-items:center}.tribe-events .tribe-events-c-search__input-group{align-items:center;display:flex;flex:auto}.tribe-events .tribe-events-c-search__input-control{flex:auto;margin:12px 0}.tribe-events .tribe-events-c-search__input{margin:-12px 0}.tribe-events .tribe-events-c-search__button{flex:none;margin-top:0}#top.tribe-theme-enfold .tribe-events .tribe-events-c-search__input,.tribe-theme-avada .tribe-events .tribe-events-c-search__input{margin:-12px 0}.tribe-events .tribe-events-c-top-bar{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap}.tribe-events .tribe-events-c-top-bar__nav{display:block!important;flex:none;visibility:visible}.tribe-events .tribe-events-c-top-bar__nav-link:before{height:18px;width:11px}.tribe-events .tribe-events-c-top-bar__today-button{display:block!important;flex:none;margin-right:15px;visibility:visible}.tribe-events .tribe-events-c-top-bar__datepicker{margin:0;padding:0}.tribe-events .tribe-events-c-top-bar__datepicker-container{max-width:none;min-width:363px}.tribe-events .tribe-events-c-top-bar__datepicker-submit{display:block!important;flex:none;margin-left:15px;visibility:visible}.tribe-events .tribe-events-c-top-bar__actions{display:block!important;flex:none;margin-left:auto;visibility:visible}.tribe-events .tribe-events-c-view-selector{width:auto}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button{height:100%;padding:20px 24px}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-icon{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text{clip:auto;width:auto;height:auto;margin:0;position:static;flex:auto}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content{left:0;padding:8px;right:auto;transform:translateY(8px);width:auto}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-link{padding:4px 32px 4px 16px}.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-icon{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-view-selector--tabs{width:auto}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__button{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content{display:block;height:100%;padding:0 12px;position:static;transform:none}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list{display:flex;height:100%}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item{margin:0 12px}.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item-link{height:100%;padding:20px 0;position:relative}.tribe-events .tribe-events-c-view-selector__button{padding:8px}.tribe-events .tribe-events-c-view-selector__button-icon{height:23px;width:23px}.tribe-events .tribe-events-c-view-selector__content{transform:translateY(12px)}.tribe-events .tribe-events-header{margin:0;padding:0}.tribe-events .tribe-events-header--has-event-search{background-color:transparent;flex-direction:row}.tribe-events .tribe-events-header--has-event-search .tribe-events-header__events-bar{margin-left:0;width:100%}.tribe-events .tribe-events-header--has-event-search .tribe-events-header__top-bar{width:100%}.tribe-events .tribe-events-header__messages{margin-bottom:32px;order:1}.tribe-events .tribe-events-header__events-bar{margin-bottom:32px;margin-left:16px}.tribe-events .tribe-events-header__top-bar{margin-bottom:32px}.tribe-events .tribe-events-calendar-list__event-row{margin:48px -24px 40px}.tribe-events .tribe-events-calendar-list__event-row>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-events .tribe-events-calendar-list__event-row:last-child{margin-bottom:64px}.tribe-events .tribe-events-calendar-list__month-separator+.tribe-events-calendar-list__event-row{margin-top:40px}.tribe-events .tribe-events-calendar-list__event-date-tag{min-width:90px;width:11.111%}.tribe-events .tribe-events-calendar-list__event-wrapper{flex:1 1 88.888%}.tribe-events .tribe-events-calendar-list__event{flex-direction:row-reverse;justify-content:flex-end}.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper{margin-bottom:0;width:37.5%}.tribe-events .tribe-events-calendar-list__event-details{width:62.5%}.tribe-events .tribe-events-calendar-list__event-datetime-wrapper,.tribe-events .tribe-events-calendar-list__event-title{margin-bottom:16px}.tribe-events .tribe-events-calendar-list__event-datetime-featured-text{clip:auto;width:auto;height:auto;margin:0;position:static;margin-right:8px}.tribe-events .tribe-events-calendar-list__event-venue{margin-bottom:16px}.tribe-events .tribe-events-calendar-list__event-description{display:block!important;margin-top:16px;visibility:visible}.tribe-events .tribe-events-calendar-list__event-cost{margin-top:16px}.tribe-events .tribe-events-calendar-list-nav{padding-top:32px}.tribe-events .tribe-events-calendar-month{margin:0}.tribe-events .tribe-events-calendar-month__body{border-top:1px solid #e4e4e4}.tribe-events .tribe-events-calendar-month__week{border-left:1px solid #e4e4e4}.tribe-events .tribe-events-calendar-month__header-column-title-mobile{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-month__header-column-title-desktop{display:block!important;visibility:visible}.tribe-events .tribe-events-calendar-month__day{border-color:#e4e4e4;border-style:solid;border-width:0 1px 1px 0;height:auto;min-height:168px;overflow:visible}.tribe-events .tribe-events-calendar-month__day-cell--mobile{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-month__day-cell--desktop{display:flex!important;flex-direction:column;visibility:visible}.tribe-events .tribe-events-calendar-month__day-date{flex:none;padding:8px 16px}.tribe-events .tribe-events-calendar-month-mobile-events{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-month__multiday-event-wrapper{height:19px;margin-bottom:4px;position:relative}.tribe-events .tribe-events-calendar-month-nav{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-day__event{margin-bottom:40px;margin-top:48px;padding-left:0}.tribe-events .tribe-events-calendar-day__event:last-child{margin-bottom:64px}.tribe-events .tribe-events-calendar-day__event:before{content:"";min-width:90px;width:11.111%}.tribe-events .tribe-events-calendar-day__time-separator+.tribe-events-calendar-day__event,.tribe-events .tribe-events-calendar-day__type-separator+.tribe-events-calendar-day__event{margin-top:40px}.tribe-events .tribe-events-calendar-day__event-content{display:flex;flex-direction:row-reverse;justify-content:flex-end;flex:1 1 88.888%;margin-left:-24px;margin-right:-24px}.tribe-events .tribe-events-calendar-day__event-content>*{padding-left:24px;padding-right:24px}.tribe-events .tribe-events-calendar-day__event-featured-image-wrapper{flex:none;margin-bottom:0;width:37.5%}.tribe-events .tribe-events-calendar-day__event-details{flex:none;width:62.5%}.tribe-events .tribe-events-calendar-day__event-datetime-wrapper,.tribe-events .tribe-events-calendar-day__event-title{margin-bottom:16px}.tribe-events .tribe-events-calendar-day__event-datetime-featured-text{clip:auto;width:auto;height:auto;margin:0;position:static;margin-right:8px}.tribe-events .tribe-events-calendar-day__event-venue{margin-bottom:16px}.tribe-events .tribe-events-calendar-day__event-description{display:block!important;margin-top:16px;visibility:visible}.tribe-events .tribe-events-calendar-day__event-cost{margin-top:16px}.tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event{margin-bottom:40px;margin-top:48px;padding-left:0}.tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event:last-child{margin-bottom:64px}.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__time-separator+.entry.tribe-events-calendar-day__event,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__type-separator+.entry.tribe-events-calendar-day__event{margin-top:40px}.tribe-events .tribe-events-calendar-day-nav{padding-top:32px}}@media (min-width:960px){.tribe-events .tribe-events-c-top-bar__datepicker-mobile{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-top-bar__datepicker-desktop{display:block!important;visibility:visible}}
1
+ .tribe-events-view{position:relative}.tribe-events .tribe-events-l-container{padding-bottom:80px;padding-top:64px;min-height:600px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-l-container{padding-bottom:160px;padding-top:96px;min-height:700px}.tribe-events .tribe-events-c-breadcrumbs{margin-bottom:24px;width:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-breadcrumbs{margin-bottom:48px}.tribe-events .tribe-events-c-breadcrumbs__list{display:flex;flex-wrap:wrap}.tribe-events .tribe-events-c-breadcrumbs__list-item{display:inline-flex;align-items:center}.tribe-events .tribe-events-c-breadcrumbs__list-item:not(:last-child):after{content:"";background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23727272'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;display:inline-block;height:10px;width:6px;margin:0 6px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-breadcrumbs__list-item:not(:last-child):after{height:16px;width:10px;margin:0 10px}.tribe-events .datepicker{margin-top:8px;padding:0 16px 16px}.tribe-common--breakpoint-medium.tribe-events .datepicker{margin-top:16px}.tribe-events .datepicker table{border-collapse:collapse}.tribe-events .datepicker .datepicker-switch,.tribe-events .datepicker .next,.tribe-events .datepicker .prev{padding:20px 0;vertical-align:middle}.tribe-events .datepicker .next .tribe-common-svgicon,.tribe-events .datepicker .prev .tribe-common-svgicon{display:block;height:14px;width:9px}.tribe-events .datepicker .prev:active .tribe-common-svgicon,.tribe-events .datepicker .prev:focus .tribe-common-svgicon,.tribe-events .datepicker .prev:hover .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .datepicker .prev .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.916 17.841L10 19.757l-9.9-9.9L10-.041l1.916 1.916-7.983 7.984z' fill='%23BABABA'/%3E%3C/svg%3E");margin-right:auto}.tribe-events .datepicker .next:active .tribe-common-svgicon,.tribe-events .datepicker .next:focus .tribe-common-svgicon,.tribe-events .datepicker .next:hover .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .datepicker .next .tribe-common-svgicon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='12' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M.084 2.159L2 .243l9.9 9.9L2 20.041.084 18.126l7.983-7.984z' fill='%23BABABA'/%3E%3C/svg%3E");margin-left:auto}.tribe-events .datepicker .datepicker-months td,.tribe-events .datepicker .datepicker-months th,.tribe-events .datepicker .datepicker-years td,.tribe-events .datepicker .datepicker-years th{padding:0}.tribe-events .datepicker .datepicker-months .datepicker-switch,.tribe-events .datepicker .datepicker-months .next,.tribe-events .datepicker .datepicker-months .prev,.tribe-events .datepicker .datepicker-years .datepicker-switch,.tribe-events .datepicker .datepicker-years .next,.tribe-events .datepicker .datepicker-years .prev{padding:20px 0 8px}.tribe-events .datepicker .dow{padding:0;width:14.285%}.tribe-events .datepicker .day{padding:11px 0;width:48px}.tribe-events .datepicker .month,.tribe-events .datepicker .year{height:auto;margin:0;padding:15px 0;width:25%}.admin-bar .tribe-events .datepicker{margin-top:8px}.admin-bar .tribe-events.tribe-common--breakpoint-medium .datepicker{margin-top:16px}.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-switch,.tribe-theme-divi #content-area .tribe-events .datepicker .next,.tribe-theme-divi #content-area .tribe-events .datepicker .prev{padding:20px 0}.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-months .datepicker-switch,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-months .next,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-months .prev,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-years .datepicker-switch,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-years .next,.tribe-theme-divi #content-area .tribe-events .datepicker .datepicker-years .prev{padding:20px 0 8px}.tribe-theme-divi #content-area .tribe-events .datepicker .dow{padding:0}.tribe-theme-divi #content-area .tribe-events .datepicker .day{padding:11px 0}.tribe-theme-enfold .tribe-events .datepicker{min-width:0;padding:0 16px 16px}.tribe-theme-enfold .tribe-events .datepicker .datepicker-switch{cursor:pointer!important}.tribe-theme-avada .tribe-events .datepicker{padding:0 16px 16px}.tribe-theme-avada .tribe-events .datepicker .datepicker-months td{padding:0}.tribe-events .tribe-events-c-day-marker{align-items:center;display:flex}.tribe-events .tribe-events-c-day-marker__date{flex:none}.tribe-events .tribe-events-c-events-bar{display:flex}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar{flex-direction:row}.tribe-events .tribe-events-c-events-bar__views{display:flex;flex:none;justify-content:center}.tribe-events .tribe-events-c-events-bar__search-filters-container{background-color:#fff;display:none;left:0;padding:12px 21px;position:absolute;right:0;top:calc(100% - 12px);z-index:30}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__search-filters-container{align-items:center;display:flex;flex:auto;padding:0;position:static;z-index:auto}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__search{display:flex;flex:auto}.tribe-events .tribe-events-c-events-bar__search-form{width:100%}.tribe-events .tribe-events-c-events-bar__filters{display:flex;flex:none;justify-content:flex-end;margin-right:-12px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters{margin:12px 0}.tribe-events .tribe-events-c-events-bar__filters-button{display:none!important;visibility:hidden}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button{align-items:center;display:flex!important;margin:-12px 0;padding:20px 24px;visibility:visible}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:active:before,.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:focus:before,.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:hover:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__filters-button:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23727272' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;background-size:17px;content:"";display:inline-block;flex:none;height:17px;margin-right:8px;width:17px}.tribe-events .tribe-events-c-events-bar__search-button{display:inline-block;margin-right:8px;padding:4px;position:relative}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__search-button{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-events-bar__search-button-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E");display:block;height:21px;width:21px}.tribe-events .tribe-events-c-events-bar__search-button-icon--filter{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='22'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cpath fill='%23141827' fill-rule='nonzero' d='M30.128 21.41c.22.221.554.247.743.058l.6-.6c.19-.189.163-.524-.057-.744l-6.557-6.557c-.55-.55-1.83.743-1.278 1.295l6.549 6.549z'/%3E%3Ccircle cx='18.777' cy='8.777' r='7.564' stroke='%23141827' stroke-width='1.5' transform='rotate(4 18.777 8.777)'/%3E%3Cpath fill='%23141827' fill-rule='nonzero' d='M7.442 9.533C7.75 9.533 8 9.293 8 9v-.467A.547.547 0 0 0 7.442 8H.558A.547.547 0 0 0 0 8.533V9c0 .293.25.533.558.533h6.884zM9.533 2.5c.257 0 .467-.24.467-.533v-.434C10 1.24 9.79 1 9.533 1H.467C.21 1 0 1.24 0 1.533v.434c0 .293.21.533.467.533h9.066zM.535 16.533h3.93c.294 0 .535-.24.535-.533v-.467A.536.536 0 0 0 4.465 15H.535a.536.536 0 0 0-.535.533V16c0 .293.24.533.535.533z'/%3E%3C/g%3E%3C/svg%3E");width:31px}.tribe-events .tribe-events-c-events-bar__search-button-icon--filter+.tribe-events-c-events-bar__search-button-icon{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-events-bar__tabs{display:flex;padding-bottom:12px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-events-bar__tabs{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-events-bar__tab{align-items:center;display:flex;flex:1 1 50%;flex-direction:column;margin:0 4px;padding:16px 0}.tribe-events .tribe-events-c-events-bar__tab:active .tribe-common-svgicon--search,.tribe-events .tribe-events-c-events-bar__tab:focus .tribe-common-svgicon--search,.tribe-events .tribe-events-c-events-bar__tab:hover .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab:active .tribe-common-svgicon--filters,.tribe-events .tribe-events-c-events-bar__tab:focus .tribe-common-svgicon--filters,.tribe-events .tribe-events-c-events-bar__tab:hover .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab:first-of-type{margin-left:0}.tribe-events .tribe-events-c-events-bar__tab:last-of-type{margin-right:0}.tribe-events .tribe-events-c-events-bar__tab--active .tribe-common-svgicon--search{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='20' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M20 18.711l-6.044-6.044a7.782 7.782 0 0 0 1.688-4.845c0-2.089-.822-4.044-2.288-5.533C11.866.822 9.91 0 7.822 0S3.778.822 2.29 2.289A7.801 7.801 0 0 0 0 7.822c0 2.09.822 4.045 2.289 5.534a7.801 7.801 0 0 0 5.533 2.288c1.778 0 3.467-.6 4.845-1.688L18.71 20 20 18.711zM3.578 12.067c-2.334-2.334-2.334-6.156 0-8.49a5.968 5.968 0 0 1 4.244-1.755c1.6 0 3.111.622 4.245 1.756 2.333 2.333 2.333 6.155 0 8.489a5.968 5.968 0 0 1-4.245 1.755c-1.6 0-3.11-.622-4.244-1.755z' fill='%23141827'/%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab--active .tribe-common-svgicon--filters{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='17' height='17'%3E%3Cg fill='none' fill-rule='evenodd' stroke='%23141827' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' transform='translate(1 1)'%3E%3Cpath d='M3 3V0m0 15v-2'/%3E%3Ccircle cx='3' cy='9' r='3'/%3E%3Cpath d='M12 9v6'/%3E%3Ccircle cx='12' cy='3' r='3' transform='matrix(1 0 0 -1 0 6)'/%3E%3C/g%3E%3C/svg%3E")}.tribe-events .tribe-events-c-events-bar__tab-icon{height:16px;margin-bottom:4px;width:16px}.tribe-events .tribe-events-c-ical{margin-top:20px;text-align:right}.tribe-events .tribe-events-view-loader{align-items:flex-start;justify-content:center;display:flex;position:absolute;top:0;right:0;bottom:0;left:0;z-index:100;background-color:hsla(0,0%,100%,.6)}.tribe-events .tribe-events-c-messages{display:flex;flex-direction:column}.tribe-events .tribe-events-c-messages__message{align-items:center;display:flex;padding:12px;width:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-messages__message{justify-content:center;padding:16px}.tribe-events .tribe-events-c-nav{padding-top:20px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav{padding-top:28px}.tribe-events .tribe-events-c-nav__list{display:flex;width:100%;flex-wrap:wrap;justify-content:space-between}.tribe-events .tribe-events-c-nav__list-item{display:flex;width:33.33%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__list-item{width:50%}.tribe-events .tribe-events-c-nav__list-item--prev{justify-content:flex-start}.tribe-events .tribe-events-c-nav__list-item--next{justify-content:flex-end}.tribe-events .tribe-events-c-nav__list-item--today{justify-content:center}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__list-item--today{display:none!important;visibility:hidden}.tribe-events .tribe-events-c-nav__next-label-plural,.tribe-events .tribe-events-c-nav__prev-label-plural{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__next-label-plural,.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-nav__prev-label-plural{clip:auto;width:auto;height:auto;margin:0;position:static}.tribe-events .tribe-events-c-nav__next,.tribe-events .tribe-events-c-nav__prev{align-items:center;display:flex;flex:none;flex-wrap:wrap;justify-content:center}.tribe-events .tribe-events-c-promo{margin-top:20px}.tribe-events .tribe-events-c-read-more{margin-top:12px}.tribe-events .tribe-events-c-small-cta>*{margin-left:8px}.tribe-events .tribe-events-c-small-cta>:first-child{margin-left:0}.tribe-events .tribe-events-c-small-cta__link{cursor:pointer}.tribe-events .tribe-events-c-small-cta__stock{margin-left:4px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search{display:flex;align-items:center}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-group{align-items:center;display:flex;flex:auto}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input-control{flex:auto;margin:12px 0}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__input{margin:-12px 0}.tribe-events .tribe-events-c-search__button{margin-top:24px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-search__button{flex:none;margin-top:0}#top.tribe-theme-enfold .tribe-events.tribe-common--breakpoint-medium .tribe-events-c-search__input,.tribe-theme-avada .tribe-events.tribe-common--breakpoint-medium .tribe-events-c-search__input{margin:-12px 0}.tooltipster-base.tribe-events-tooltip-theme{height:auto!important;padding:24px;max-width:254px}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box{margin:0}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-box .tooltipster-content{padding:0;word-break:break-word}.tooltipster-base.tribe-events-tooltip-theme .tooltipster-arrow{display:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar{align-items:center;display:flex;flex-direction:row;flex-wrap:wrap}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__nav{display:block!important;flex:none;visibility:visible}.tribe-events .tribe-events-c-top-bar__nav-list{display:flex}.tribe-events .tribe-events-c-top-bar__nav-list-item{flex:none;padding-right:15px}.tribe-events .tribe-events-c-top-bar__nav-list-item>*{vertical-align:middle}.tribe-events .tribe-events-c-top-bar__nav-link{display:block}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__nav-link:before{height:18px;width:11px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__today-button{display:block!important;flex:none;margin-right:15px;visibility:visible}.tribe-events .tribe-events-c-top-bar__datepicker-form{align-items:center;display:flex}.tribe-events .tribe-events-c-top-bar__datepicker{flex:auto;position:relative}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker{margin:0;padding:0}.tribe-events .tribe-events-c-top-bar__datepicker-separator{white-space:pre}.tribe-common--breakpoint-full.tribe-events .tribe-events-c-top-bar__datepicker-mobile{display:none!important;visibility:hidden}.tribe-common--breakpoint-full.tribe-events .tribe-events-c-top-bar__datepicker-desktop{display:block!important;visibility:visible}.tribe-events .tribe-events-c-top-bar__datepicker-button{align-items:center;display:flex;flex:none}.tribe-events .tribe-events-c-top-bar__datepicker-container{bottom:0;left:0;max-width:calc(100% + 66px);position:absolute;width:363px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker-container{max-width:none;min-width:363px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__datepicker-submit{display:block!important;flex:none;margin-left:15px;visibility:visible}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-top-bar__actions{display:block!important;flex:none;margin-left:auto;visibility:visible}#top.tribe-theme-enfold .tribe-events .tribe-events-c-top-bar__datepicker-input,.tribe-theme-avada .tribe-events .tribe-events-c-top-bar__datepicker-input{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tribe-events .tribe-events-c-view-selector{position:relative;width:29px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector{width:auto}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button{height:100%;padding:20px 24px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-icon{display:none!important;visibility:hidden}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__button-text{clip:auto;width:auto;height:auto;margin:0;position:static;flex:auto}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__content{left:0;padding:8px;right:auto;transform:translateY(8px);width:auto}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-link{padding:4px 32px 4px 16px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--labels .tribe-events-c-view-selector__list-item-icon,.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__button{display:none!important;visibility:hidden}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__content{display:block;height:100%;padding:0 12px;position:static;transform:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list{display:flex;height:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item{margin:0 12px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector--tabs .tribe-events-c-view-selector__list-item-link{height:100%;padding:20px 0;position:relative}.tribe-events .tribe-events-c-view-selector__button{align-items:center;display:flex;padding:4px;position:relative;width:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__button{padding:8px}.tribe-events .tribe-events-c-view-selector__button-icon{display:block;height:21px;width:21px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__button-icon{height:23px;width:23px}.tribe-events .tribe-events-c-view-selector__content{display:none;background-color:#fff;padding:12px 6px;position:absolute;right:0;top:100%;transform:translateY(16px);z-index:30}.tribe-common--breakpoint-medium.tribe-events .tribe-events-c-view-selector__content{transform:translateY(12px)}.tribe-events .tribe-events-c-view-selector__list-item-link{align-items:center;display:flex;padding:8px 24px 8px 12px}.tribe-events .tribe-events-c-view-selector__list-item-icon{flex:none;height:18px;margin-right:12px;width:18px}.tribe-events .tribe-events-c-view-selector__list-item-text{flex:auto}.tribe-events .tribe-events-header{align-items:center;background-color:#fff;display:flex;flex-direction:row-reverse;flex-wrap:wrap;justify-content:space-between;margin:0 -21px;padding:0 21px 16px;position:relative}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header{margin:0;padding:0}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header--has-event-search{background-color:transparent;flex-direction:row}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header--has-event-search .tribe-events-header__events-bar{margin-left:0;width:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header--has-event-search .tribe-events-header__top-bar{width:100%}.tribe-events .tribe-events-header__messages{margin-bottom:16px;width:100%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header__messages{margin-bottom:32px;order:1}.tribe-events .tribe-events-header__events-bar{flex:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header__events-bar{margin-bottom:32px;margin-left:16px}.tribe-events .tribe-events-header__top-bar{flex:auto}.tribe-common--breakpoint-medium.tribe-events .tribe-events-header__top-bar{margin-bottom:32px}.tribe-events .tribe-events-calendar-list__event-row{flex-wrap:nowrap;margin-bottom:24px;margin-top:32px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row{margin:48px -24px 40px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row>.tribe-common-g-col{padding-left:24px;padding-right:24px}.tribe-events .tribe-events-calendar-list__event-row:last-child{margin-bottom:40px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-row:last-child{margin-bottom:64px}.tribe-events .tribe-events-calendar-list__month-separator+.tribe-events-calendar-list__event-row{margin-top:20px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__month-separator+.tribe-events-calendar-list__event-row{margin-top:40px}.tribe-events .tribe-events-calendar-list__event-date-tag{flex:none;width:54px;position:relative}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-date-tag{min-width:90px;width:11.111%}.tribe-events .tribe-events-calendar-list__event-date-tag-datetime{display:flex;flex-direction:column;height:100%;text-align:center}.tribe-events .tribe-events-calendar-list__event-date-tag-weekday{margin-bottom:-4px}.tribe-events .tribe-events-calendar-list__event-wrapper{flex:1;width:calc(75% + 21px)}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-wrapper{flex:1 1 88.888%}.tribe-events .tribe-events-calendar-list__event{flex-direction:column}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event{flex-direction:row-reverse;justify-content:flex-end}.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper{flex:none;margin-bottom:16px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-featured-image-wrapper{margin-bottom:0;width:37.5%}.tribe-events .tribe-events-calendar-list__event-featured-image,.tribe-events .tribe-events-calendar-list__event-featured-image-link{display:block}.tribe-events .tribe-events-calendar-list__event-details{flex:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-details{width:62.5%}.tribe-events .tribe-events-calendar-list__event-header>:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-list__event-datetime-wrapper,.tribe-events .tribe-events-calendar-list__event-title{margin:0 0 8px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-datetime-wrapper,.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-title{margin:0 0 16px}.tribe-events .tribe-events-calendar-list__event-datetime-wrapper:last-child,.tribe-events .tribe-events-calendar-list__event-title:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-list__event-datetime-featured-icon{display:inline-block;margin-right:4px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-datetime-featured-text{clip:auto;width:auto;height:auto;margin:0;position:static;margin-right:8px}.tribe-events .tribe-events-calendar-list__event-datetime-recurring-icon{display:inline-block;margin-left:4px}.tribe-events .tribe-events-calendar-list__event-venue{margin-bottom:8px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-venue{margin-bottom:16px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-description{display:block!important;margin-top:16px;visibility:visible}.tribe-events .tribe-events-calendar-list__event-cost{margin-top:12px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list__event-cost{margin-top:16px}.tribe-events .tribe-events-calendar-list__month-separator{display:flex;align-items:center}.tribe-events .tribe-events-calendar-list__month-separator-text{flex:none}.tribe-events .tribe-events-calendar-list-nav{padding-top:24px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-list-nav{padding-top:32px}.tribe-events .tribe-events-calendar-month{margin-bottom:8px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month{margin:0}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__body{border-top:1px solid #e4e4e4}.tribe-events .tribe-events-calendar-month__week{display:flex}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__week{border-left:1px solid #e4e4e4}.tribe-events .tribe-events-calendar-month__calendar-event{margin:8px 0;padding:0 16px;position:relative}.tribe-events .tribe-events-calendar-month__calendar-event:first-child{margin-top:0}.tribe-events .tribe-events-calendar-month__calendar-event:last-child{margin-bottom:0;padding-bottom:16px}.tribe-events .tribe-events-calendar-month__multiday-event-wrapper+.tribe-events-calendar-month__calendar-event{margin-top:0}.tribe-events .tribe-events-calendar-month__multiday-event-wrapper+.tribe-events-calendar-month__calendar-event--featured{margin-top:8px}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-featured-icon,.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-icon{display:inline-block}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-featured-icon{margin-right:4px}.tribe-events .tribe-events-calendar-month__calendar-event-datetime-recurring-icon{margin-left:2px}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-wrapper{margin-bottom:4px}.tribe-events .tribe-events-calendar-month__calendar-event-featured-image,.tribe-events .tribe-events-calendar-month__calendar-event-featured-image-link{display:block}.tribe-events .tribe-events-calendar-month__calendar-event-datetime>*{vertical-align:middle}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-wrapper{margin-bottom:12px;width:206px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-wrapper:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-featured-image-link{display:block}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime{margin-bottom:4px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-featured-icon,.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon{display:inline-block}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-featured-icon{margin-right:4px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-datetime-recurring-icon{margin-left:2px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-title{margin-bottom:4px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-description{margin-bottom:8px}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-description:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-month__calendar-event-title{margin:0}.tribe-events .tribe-events-calendar-month__calendar-event-tooltip-cost{margin-top:16px}.tribe-theme-twentynineteen .entry .tribe-events .tribe-events-calendar-month__calendar-event,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-month__calendar-event{margin:8px 0;padding:0 16px;position:relative}.tribe-theme-twentynineteen .entry .tribe-events .tribe-events-calendar-month__calendar-event:first-child,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-month__calendar-event:first-child{margin-top:0}.tribe-theme-twentynineteen .entry .tribe-events .tribe-events-calendar-month__calendar-event:last-child,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-month__calendar-event:last-child{margin-bottom:0;padding-bottom:16px}.tribe-events .tribe-events-calendar-month__header-row{display:flex}.tribe-events .tribe-events-calendar-month__header-column{width:14.285%;padding-bottom:16px}.tribe-events .tribe-events-calendar-month__header-column-title{margin:0}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__header-column-title-mobile{display:none!important;visibility:hidden}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__header-column-title-desktop{display:block!important;visibility:visible}.tribe-events .tribe-events-calendar-month__day{height:48px;overflow:hidden;position:relative;width:14.285%}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day{border-color:#e4e4e4;border-style:solid;border-width:0 1px 1px 0;height:auto;min-height:168px;overflow:visible}.tribe-events .tribe-events-calendar-month__day-cell{height:100%;width:100%}.tribe-events .tribe-events-calendar-month__day-cell--mobile{align-items:center;display:flex;flex-direction:column;text-align:center}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day-cell--mobile{display:none!important;visibility:hidden}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day-cell--desktop{display:flex!important;flex-direction:column;visibility:visible}.tribe-events .tribe-events-calendar-month__day-date{margin:0}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__day-date{flex:none;padding:8px 16px}.tribe-events .tribe-events-calendar-month__events{flex:auto}.tribe-events .tribe-events-calendar-month__mobile-events-icon--event{background-color:#141827;border-radius:50%;height:8px;width:8px}.tribe-events .tribe-events-calendar-month__mobile-events-icon--featured{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='20' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h16v20l-7.902-5.122L0 20z' fill='%23141827'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:contain;height:10px;width:8px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month-mobile-events{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-day{display:none}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-day--show{display:block}.tribe-events .tribe-events-calendar-month-mobile-events__day-marker{padding-top:16px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event{padding:12px 0}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event--featured{padding-bottom:20px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-featured-image-wrapper{margin-bottom:12px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime{margin-bottom:4px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime>*{vertical-align:middle}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-featured-icon{display:inline-block;margin-right:4px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-recurring-icon{display:inline-block;margin-left:4px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-datetime-featured-text{margin-right:8px}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-title{margin:0}.tribe-events .tribe-events-calendar-month-mobile-events__mobile-event-cost{margin-top:8px}.tribe-events .tribe-events-calendar-month-mobile-events__more-events{padding:4px 0 20px}.tribe-events .tribe-events-calendar-month__more-events{display:flex;flex:none;margin:0 16px;padding:8px 0 16px}.tribe-events .tribe-events-calendar-month__more-events-link{flex:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month__multiday-event-wrapper{height:19px;margin-bottom:4px;position:relative}.tribe-events .tribe-events-calendar-month__multiday-event--width-2 .tribe-events-calendar-month__multiday-event-bar{width:calc(200% + 1px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-3 .tribe-events-calendar-month__multiday-event-bar{width:calc(300% + 2px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-4 .tribe-events-calendar-month__multiday-event-bar{width:calc(400% + 3px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-5 .tribe-events-calendar-month__multiday-event-bar{width:calc(500% + 4px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-6 .tribe-events-calendar-month__multiday-event-bar{width:calc(600% + 5px)}.tribe-events .tribe-events-calendar-month__multiday-event--width-7 .tribe-events-calendar-month__multiday-event-bar{width:calc(700% + 6px)}.tribe-events .tribe-events-calendar-month__multiday-event-hidden{height:100%;opacity:0;position:absolute;width:100%;z-index:5}.tribe-events .tribe-events-calendar-month__multiday-event-hidden-title{margin:0;overflow:hidden;white-space:nowrap}.tribe-events .tribe-events-calendar-month__multiday-event-hidden-link{display:block;height:100%}.tribe-events .tribe-events-calendar-month__multiday-event-bar{background-color:#fff;overflow:hidden;position:relative;width:100%;z-index:2}.tribe-events .tribe-events-calendar-month__multiday-event-bar-inner{align-items:center;cursor:pointer;display:flex;flex-wrap:nowrap;padding:1px 16px}.tribe-events .tribe-events-calendar-month__multiday-event-bar-featured-icon{flex:none;margin-right:5px}.tribe-events .tribe-events-calendar-month__multiday-event-bar-title{flex:none;margin:0;max-width:100%;overflow:hidden;white-space:nowrap}.tribe-events .tribe-events-calendar-month-nav{padding-top:20px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-month-nav{display:none!important;visibility:hidden}.tribe-events .tribe-events-calendar-day__event{margin-bottom:24px;margin-top:32px;padding-left:54px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event{margin-bottom:40px;margin-top:48px;padding-left:0}.tribe-events .tribe-events-calendar-day__event:last-child{margin-bottom:40px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event:last-child{margin-bottom:64px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event:before{content:"";min-width:90px;width:11.111%}.tribe-events .tribe-events-calendar-day__time-separator+.tribe-events-calendar-day__event,.tribe-events .tribe-events-calendar-day__type-separator+.tribe-events-calendar-day__event{margin-top:20px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__time-separator+.tribe-events-calendar-day__event,.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__type-separator+.tribe-events-calendar-day__event{margin-top:40px}.tribe-events .tribe-events-calendar-day__event-content{flex:none}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-content{display:flex;flex-direction:row-reverse;justify-content:flex-end;flex:1 1 88.888%;margin-left:-24px;margin-right:-24px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-content>*{padding-left:24px;padding-right:24px}.tribe-events .tribe-events-calendar-day__event-featured-image-wrapper{margin-bottom:16px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-featured-image-wrapper{flex:none;margin-bottom:0;width:37.5%}.tribe-events .tribe-events-calendar-day__event-featured-image-link,.tribe-events .tribe-events-calendar-list__event-featured-image{display:block}.tribe-events .tribe-events-calendar-day__event-details{position:relative}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-details{flex:none;width:62.5%}.tribe-events .tribe-events-calendar-day__event-header>:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-day__event-datetime-wrapper,.tribe-events .tribe-events-calendar-day__event-title{margin:0 0 8px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-datetime-wrapper,.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-title{margin:0 0 16px}.tribe-events .tribe-events-calendar-day__event-datetime-wrapper:last-child,.tribe-events .tribe-events-calendar-day__event-title:last-child{margin-bottom:0}.tribe-events .tribe-events-calendar-day__event-datetime-featured-icon{display:inline-block;margin-right:4px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-datetime-featured-text{clip:auto;width:auto;height:auto;margin:0;position:static;margin-right:8px}.tribe-events .tribe-events-calendar-day__event-datetime-recurring-icon{display:inline-block;margin-left:4px}.tribe-events .tribe-events-calendar-day__event-venue{margin-bottom:8px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-venue{margin-bottom:16px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-description{display:block!important;margin-top:16px;visibility:visible}.tribe-events .tribe-events-calendar-day__event-cost{margin-top:12px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day__event-cost{margin-top:16px}.tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event{margin-bottom:24px;margin-top:32px;padding-left:54px}.tribe-theme-twentynineteen .tribe-events .entry.tribe-events-calendar-day__event:last-child{margin-bottom:40px}.tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .entry.tribe-events-calendar-day__event{margin-bottom:40px;margin-top:48px;padding-left:0}.tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .entry.tribe-events-calendar-day__event:last-child{margin-bottom:64px}.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__time-separator+.entry.tribe-events-calendar-day__event,.tribe-theme-twentynineteen .tribe-events .tribe-events-calendar-day__type-separator+.entry.tribe-events-calendar-day__event{margin-top:20px}.tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .tribe-events-calendar-day__time-separator+.entry.tribe-events-calendar-day__event,.tribe-theme-twentynineteen .tribe-events.tribe-common--breakpoint-medium .tribe-events-calendar-day__type-separator+.entry.tribe-events-calendar-day__event{margin-top:40px}.tribe-events .tribe-events-calendar-day-nav{padding-top:24px}.tribe-common--breakpoint-medium.tribe-events .tribe-events-calendar-day-nav{padding-top:32px}.tribe-events .tribe-events-calendar-day__time-separator{display:flex;align-items:center}.tribe-events .tribe-events-calendar-day__time-separator-text{flex:none}.tribe-events .tribe-events-calendar-day__type-separator{display:flex;align-items:center}.tribe-events .tribe-events-calendar-day__type-separator-text{flex:none}
src/resources/js/views/README.md ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # The Events Calendar JavaScript
2
+
3
+ The Events Calendar uses JavaScript to support the functionalities of the views. Below is a breakdown of the main categories of JavaScript we have to support our plugin.
4
+
5
+ ## Utilities
6
+
7
+ We have two main utility JavaScript files that are by various other scripts: Viewport and Accordion. These can be extended by other Modern Tribe plugins or custom scripts.
8
+
9
+ ### Viewport
10
+
11
+ The Viewport JavaScript file mainly listens for the window resize event. On window resize, the `isMobile` state is set and a custom event `resize.tribeEvents` is fired on the document element. This custom event is used throughout the application and can be hooked onto to run custom user-defined scripts.
12
+
13
+ ### Accordion
14
+
15
+ The Accordion JavaScript file offers 2 different ways of using the accordion functionality.
16
+
17
+ The first method is to add the `data-js="tribe-events-accordion-trigger"` and `aria-controls` attributes to the accordion trigger. The `aria-controls` attribute points to the `id` of the content element. The script binds onto the trigger and listen for clicks. When clicked, the content element will be toggled open or closed.
18
+
19
+ The second method is to manually initialize the accordion via the `tribe.events.views.accordion.initAccordion` and `tribe.events.views.accordion.initAccordionA11yAttrs` functions. This method still requires the `aria-controls` attribute to point to the `id` of the content element, but does not require the `data-js="tribe-events-accordion-trigger"` attribute. Don't forget to deinit the accordion via the `tribe.events.views.accordion.deinitAccordion` and `tribe.events.views.accordion.deinitAccordionA11yAttrs` functions.
20
+
21
+ ## Breakpoints
22
+
23
+ The Breakpoints JavaScript is responsible for applying the correct container query classes to the container. See the [PostCSS README.md from The Events Calendar](https://github.com/moderntribe/the-events-calendar/blob/master/src/resources/postcss/README.md) on container queries for more information on the classes. The breakpoint values can also be filtered to customize the breakpoints.
24
+
25
+ This script is loaded in the header rather than the footer to prevent flash of unstyled content.
26
+
27
+ ## Manager
28
+
29
+ The Manager JavaScript is responsible for all of the AJAX requests within the application. The datepicker selections, events bar actions, and view and page navigations are all run by this script.
30
+
31
+ There are a number of custom events that are fired on the container, but there are 2 events that can handle most cases when creating custom JavaScript off of the Manager.
32
+
33
+ The first is the `afterSetup.tribeEvents` event. This is fired when the container is loaded and the Manager script is ready. The event is also fired after an AJAX request is successful and the new container has been loaded. This is where you can hook into to perform any setup needed for your script.
34
+
35
+ The second is the `beforeAjaxSuccess.tribeEvents` event. The event fired when an AJAX response has been received but before the existing container is replaced. This is where you can perform any clean-up tasks on the existing container and remove event listeners to prevent memory leaks.
36
+
37
+ ## Extendable
38
+
39
+ Extendable JavaScript files are scripts that can be extended by other Modern Tribe plugins or custom scripts.
40
+
41
+ ### Multiday Events
42
+
43
+ The Multiday Events JavaScript allows linking of hidden multiday events (via `opacity: 0`) to the visible bar that represents the multiday event. Hover and focus events on the hidden events will reflect on the visible event bar. This is a fairly specific use case, but can be extended if needed.
44
+
45
+ Multiday events are currently only supported in Month View. The script will not run on other views. To expand to another view, hook into the `afterMultidayEventsInitAllowedViews.tribeEvents` on the container and modify the `tribeEventsMultidayEventsAllowedViews` data. You should also add the view and selector prefix to the `tribe.events.views.multidayEvents.selectorPrefixes` object. For example, if you want to use the Multiday Events script on list view, you may add:
46
+
47
+ ```
48
+ tribe.events.views.multidayEvents.selectorPrefixes.list = '.tribe-events-calendar-list__';
49
+ ```
50
+
51
+ The views should contain multiday event elements with the selector prefix and selector suffixes. See the month view multiday events for an example. Classes with `multiday-event-bar-inner--hover` and `multiday-event-bar-inner--focus` as suffixes are added on `hover` and `focus` events, respectively. These can be used to style the multiday event bar.
52
+
53
+ ### Tooltips
54
+
55
+ The Tooltips JavaScript allows users to add their own custom tooltips using the existing tooltip script.
56
+
57
+ The tooltips have custom classes applied to them. To add your own class, hook into the `afterTooltipInitTheme.tribeEvents` event on the container and modify the `tribeEventsTooltipTheme` data. This allows you to add styles using your own classes.
58
+
59
+ To add a tooltip, you will need two components: the target and the tooltip contents. The target should have the attributes `data-js="tribe-events-tooltip"` and `data-tooltip-content` applied to it. The `data-tooltip-content` value should be the `id` of the element that will be the tooltip contents. The tooltip content element should have the `id` attribute assigned to it. It also helps to add the `role="tooltip"` aria attribute for accessibility.
60
+
61
+ Once that is set up, the tooltips should work. To hide the tooltip contents on the page, add a wrapper element around the tooltip contents and add `display: none;` and `visibility: hidden;` styles.
62
+
63
+ ## Views JavaScript
64
+
65
+ The remaining JavaScript files power various different parts of the views.
66
+
67
+ ### Datepicker
68
+
69
+ The Datepicker JavaScript powers the datepicker. This includes the date selection on list and day view and month selection on month view.
70
+
71
+ ### Events Bar Inputs
72
+
73
+ The Events Bar Inputs JavaScript adds and removes classes to the events bar inputs based on whether the input contains content or not.
74
+
75
+ ### Events Bar
76
+
77
+ The Events Bar JavaScript powers the mobile and desktop versions of the events bar.
78
+
79
+ ### Month Grid
80
+
81
+ The Month Grid JavaScript initializes the mobile month grid and allows for keyboard navigation for accessibility.
82
+
83
+ ### Month Mobile Events
84
+
85
+ The Month Mobile Events JavaScript allows users to view the selected day's events on mobile month view.
86
+
87
+ ### Navigation Scroll
88
+
89
+ The Navigation Scroll JavaScript scrolls the viewport to the top if the user is 25% down the page after a successful AJAX request.
90
+
91
+ ### View Selector
92
+
93
+ The View Selector JavaScript powers the view selector in both tab and accordion view.
src/resources/js/views/accordion.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.accordion = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -270,6 +270,7 @@ tribe.events.views.accordion = {};
270
  obj.unbindEvents = function( event, jqXHR, settings ) {
271
  var $container = event.data.container;
272
  obj.unbindAccordionEvents( $container );
 
273
  };
274
 
275
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.accordion
27
  *
28
  * @return {void}
29
  */
270
  obj.unbindEvents = function( event, jqXHR, settings ) {
271
  var $container = event.data.container;
272
  obj.unbindAccordionEvents( $container );
273
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.unbindEvents );
274
  };
275
 
276
  /**
src/resources/js/views/breakpoints.js ADDED
@@ -0,0 +1,214 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Makes sure we have all the required levels on the Tribe Object
3
+ *
4
+ * @since 5.0.0
5
+ *
6
+ * @type {PlainObject}
7
+ */
8
+ tribe.events = tribe.events || {};
9
+ tribe.events.views = tribe.events.views || {};
10
+
11
+ /**
12
+ * Configures Breakpoints Object in the Global Tribe variable
13
+ *
14
+ * @since 5.0.0
15
+ *
16
+ * @type {PlainObject}
17
+ */
18
+ tribe.events.views.breakpoints = {};
19
+
20
+ /**
21
+ * Initializes in a Strict env the code that manages the Event Views
22
+ *
23
+ * @since 5.0.0
24
+ *
25
+ * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.breakpoints
27
+ *
28
+ * @return {void}
29
+ */
30
+ ( function( $, obj ) {
31
+ 'use strict';
32
+ var $document = $( document );
33
+
34
+ /**
35
+ * Selectors used for configuration and setup
36
+ *
37
+ * @since 5.0.0
38
+ *
39
+ * @type {PlainObject}
40
+ */
41
+ obj.selectors = {
42
+ container: '[data-js="tribe-events-view"]',
43
+ dataScript: '[data-js="tribe-events-view-data"]',
44
+ breakpointClassPrefix: 'tribe-common--breakpoint-',
45
+ };
46
+
47
+ /**
48
+ * Object of breakpoints
49
+ *
50
+ * @since 5.0.0
51
+ *
52
+ * @type {PlainObject}
53
+ */
54
+ obj.breakpoints = {};
55
+
56
+ /**
57
+ * Sets container classes based on breakpoint
58
+ *
59
+ * @since 5.0.0
60
+ *
61
+ * @param {jQuery} $container jQuery object of view container.
62
+ * @param {object} data data object passed from 'afterSetup.tribeEvents' event.
63
+ *
64
+ * @return {void}
65
+ */
66
+ obj.setContainerClasses = function( $container, data ) {
67
+ var breakpoints = Object.keys( data.breakpoints );
68
+
69
+ breakpoints.forEach( function( breakpoint ) {
70
+ var className = obj.selectors.breakpointClassPrefix + breakpoint;
71
+ obj.breakpoints[ breakpoint ] = data.breakpoints[ breakpoint ];
72
+
73
+ if ( $container.outerWidth() < data.breakpoints[ breakpoint ] ) {
74
+ $container.removeClass( className );
75
+ } else {
76
+ $container.addClass( className );
77
+ }
78
+ } );
79
+ };
80
+
81
+ /**
82
+ * Handles resize event for window
83
+ *
84
+ * @since 5.0.0
85
+ *
86
+ * @param {Event} event event object for 'resize' event
87
+ *
88
+ * @return {void}
89
+ */
90
+ obj.handleResize = function( event ) {
91
+ obj.setContainerClasses( event.data.container, event.data.data );
92
+ };
93
+
94
+ /**
95
+ * Unbinds events for container
96
+ *
97
+ * @since 5.0.0
98
+ *
99
+ * @param {jQuery} $container jQuery object of view container
100
+ *
101
+ * @return {void}
102
+ */
103
+ obj.unbindEvents = function( $container ) {
104
+ $container
105
+ .off( 'resize.tribeEvents', obj.handleResize )
106
+ .off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
107
+ };
108
+
109
+ /**
110
+ * Binds events for container
111
+ *
112
+ * @since 5.0.0
113
+ *
114
+ * @param {jQuery} $container jQuery object of view container.
115
+ * @param {object} data data object passed from 'afterSetup.tribeEvents' event.
116
+ *
117
+ * @return {void}
118
+ */
119
+ obj.bindEvents = function( $container, data ) {
120
+ $container
121
+ .on( 'resize.tribeEvents', { container: $container, data: data }, obj.handleResize )
122
+ .on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
123
+ };
124
+
125
+ /**
126
+ * Deinitialize breakpoints JS
127
+ *
128
+ * @since 5.0.0
129
+ *
130
+ * @param {Event} event event object for 'beforeAjaxSuccess.tribeEvents' event
131
+ * @param {jqXHR} jqXHR Request object
132
+ * @param {PlainObject} settings Settings that this request was made with
133
+ *
134
+ * @return {void}
135
+ */
136
+ obj.deinit = function( event, jqXHR, settings ) {
137
+ obj.unbindEvents( event.data.container );
138
+ };
139
+
140
+ /**
141
+ * Common initialization tasks
142
+ *
143
+ * @since 5.0.0
144
+ *
145
+ * @param {jQuery} $container jQuery object of view container.
146
+ * @param {object} data data object passed from 'afterSetup.tribeEvents' event.
147
+ *
148
+ * @return {void}
149
+ */
150
+ obj.initTasks = function( $container, data ) {
151
+ obj.bindEvents( $container, data );
152
+ obj.setContainerClasses( $container, data );
153
+
154
+ var state = { initialized: true };
155
+ $container.data( 'tribeEventsBreakpoints', state );
156
+ };
157
+
158
+ /**
159
+ * Initialize breakpoints JS
160
+ *
161
+ * @since 5.0.0
162
+ *
163
+ * @param {Event} event event object for 'afterSetup.tribeEvents' event
164
+ * @param {integer} index jQuery.each index param from 'afterSetup.tribeEvents' event.
165
+ * @param {jQuery} $container jQuery object of view container.
166
+ * @param {object} data data object passed from 'afterSetup.tribeEvents' event.
167
+ *
168
+ * @return {void}
169
+ */
170
+ obj.init = function( event, index, $container, data ) {
171
+ var state = $container.data( 'tribeEventsBreakpoints' );
172
+ if ( state && state.initialized ) {
173
+ return;
174
+ }
175
+
176
+ obj.initTasks( $container, data );
177
+ };
178
+
179
+ /**
180
+ * Setup breakpoints JS
181
+ *
182
+ * @since 5.0.0
183
+ *
184
+ * @param {HTMLElement} script HTML element of the script tag calling setup
185
+ *
186
+ * @return {void}
187
+ */
188
+ obj.setup = function( script ) {
189
+ var $container = $( script ).prev( obj.selectors.container );
190
+ var $data = $container.find( obj.selectors.dataScript );
191
+ var data = {};
192
+
193
+ // If we have data element set it up.
194
+ if ( $data.length ) {
195
+ data = JSON.parse( $.trim( $data.text() ) );
196
+ }
197
+
198
+ obj.initTasks( $container, data );
199
+ };
200
+
201
+ /**
202
+ * Handles the initialization of breakpoints when Document is ready
203
+ *
204
+ * @since 5.0.0
205
+ *
206
+ * @return {void}
207
+ */
208
+ obj.ready = function() {
209
+ $document.on( 'afterSetup.tribeEvents', obj.selectors.container, obj.init );
210
+ };
211
+
212
+ // Configure on document ready
213
+ $document.ready( obj.ready );
214
+ } )( jQuery, tribe.events.views.breakpoints );
src/resources/js/views/datepicker.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.datepicker = {};
23
  * @since 4.9.5
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -79,6 +79,17 @@ tribe.events.views.datepicker = {};
79
  },
80
  };
81
 
 
 
 
 
 
 
 
 
 
 
 
82
  /**
83
  * Date object representing today
84
  *
@@ -211,10 +222,6 @@ tribe.events.views.datepicker = {};
211
 
212
  $forms.prepend( $input );
213
  }
214
-
215
- $container
216
- .find( obj.selectors.input )
217
- .bootstrapDatepicker( 'hide' );
218
  }
219
  };
220
 
@@ -252,8 +259,18 @@ tribe.events.views.datepicker = {};
252
  */
253
  obj.handleChangeMonth = function( event ) {
254
  var $container = event.data.container;
255
- var month = event.date.getMonth() + 1;
256
- var year = event.date.getFullYear();
 
 
 
 
 
 
 
 
 
 
257
 
258
  var paddedMonth = obj.padNumber( month );
259
 
@@ -262,6 +279,23 @@ tribe.events.views.datepicker = {};
262
  obj.submitRequest( $container, dateValue );
263
  };
264
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  /**
266
  * Handle datepicker show event
267
  *
@@ -564,18 +598,10 @@ tribe.events.views.datepicker = {};
564
 
565
  var $input = $container.find( obj.selectors.input );
566
  var $datepickerButton = $container.find( obj.selectors.button );
567
- var isMonthView = 'month' === event.data.viewSlug;
568
- var changeEvent = isMonthView ? 'changeMonth' : 'changeDate';
569
- var changeHandler = isMonthView ? obj.handleChangeMonth : obj.handleChangeDate;
570
 
571
- $input
572
- .bootstrapDatepicker( 'destroy' )
573
- .off( changeEvent, changeHandler )
574
- .off( 'show', obj.handleShow )
575
- .off( 'hide', obj.handleHide );
576
- $datepickerButton
577
- .off( 'mousedown', obj.handleMousedown )
578
- .off( 'click', obj.handleClick );
579
 
580
  $container.trigger( 'afterDatepickerDeinit.tribeEvents', [ jqXHR, settings ] );
581
  };
@@ -637,6 +663,12 @@ tribe.events.views.datepicker = {};
637
  .on( 'show', { datepickerButton: $datepickerButton }, obj.handleShow )
638
  .on( 'hide', { datepickerButton: $datepickerButton, input: $input, observer: obj.observer }, obj.handleHide );
639
 
 
 
 
 
 
 
640
  $datepickerButton
641
  .on( 'touchstart mousedown', { target: $datepickerButton }, obj.handleMousedown )
642
  .on( 'click', { target: $datepickerButton, input: $input }, obj.handleClick )
23
  * @since 4.9.5
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.datepicker
27
  *
28
  * @return {void}
29
  */
79
  },
80
  };
81
 
82
+ /**
83
+ * Object of key codes
84
+ *
85
+ * @since 5.0.0
86
+ *
87
+ * @type {PlainObject}
88
+ */
89
+ obj.keyCode = {
90
+ ENTER: 13,
91
+ };
92
+
93
  /**
94
  * Date object representing today
95
  *
222
 
223
  $forms.prepend( $input );
224
  }
 
 
 
 
225
  }
226
  };
227
 
259
  */
260
  obj.handleChangeMonth = function( event ) {
261
  var $container = event.data.container;
262
+ var month, year;
263
+
264
+ if ( event.date ) {
265
+ month = event.date.getMonth() + 1;
266
+ year = event.date.getFullYear();
267
+ } else {
268
+ var date = $container
269
+ .find( obj.selectors.input )
270
+ .bootstrapDatepicker( 'getDate' );
271
+ month = date.getMonth() + 1;
272
+ year = date.getFullYear();
273
+ }
274
 
275
  var paddedMonth = obj.padNumber( month );
276
 
279
  obj.submitRequest( $container, dateValue );
280
  };
281
 
282
+ /**
283
+ * Handle datepicker keydown event
284
+ *
285
+ * @since 5.0.0
286
+ *
287
+ * @param {Event} event event object for 'keydown' event
288
+ *
289
+ * @return {void}
290
+ */
291
+ obj.handleKeyDown = function(event) {
292
+ if ( event.keyCode !== obj.keyCode.ENTER ) {
293
+ return;
294
+ }
295
+
296
+ event.data.input.bootstrapDatepicker().trigger( 'changeMonth' );
297
+ }
298
+
299
  /**
300
  * Handle datepicker show event
301
  *
598
 
599
  var $input = $container.find( obj.selectors.input );
600
  var $datepickerButton = $container.find( obj.selectors.button );
 
 
 
601
 
602
+ $input.bootstrapDatepicker( 'destroy' ).off();
603
+ $datepickerButton.off();
604
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
 
 
 
 
 
605
 
606
  $container.trigger( 'afterDatepickerDeinit.tribeEvents', [ jqXHR, settings ] );
607
  };
663
  .on( 'show', { datepickerButton: $datepickerButton }, obj.handleShow )
664
  .on( 'hide', { datepickerButton: $datepickerButton, input: $input, observer: obj.observer }, obj.handleHide );
665
 
666
+ if ( isMonthView ) {
667
+ $input
668
+ .bootstrapDatepicker()
669
+ .on( 'keydown', { input: $input }, obj.handleKeyDown );
670
+ }
671
+
672
  $datepickerButton
673
  .on( 'touchstart mousedown', { target: $datepickerButton }, obj.handleMousedown )
674
  .on( 'click', { target: $datepickerButton, input: $input }, obj.handleClick )
src/resources/js/views/events-bar-inputs.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.eventsBarInputs = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -132,6 +132,7 @@ tribe.events.views.eventsBarInputs = {};
132
  obj.unbindEvents = function( event, jqXHR, settings ) {
133
  var $container = event.data.container;
134
  obj.unbindInputEvents( $container );
 
135
  };
136
 
137
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.eventsBarInputs
27
  *
28
  * @return {void}
29
  */
132
  obj.unbindEvents = function( event, jqXHR, settings ) {
133
  var $container = event.data.container;
134
  obj.unbindInputEvents( $container );
135
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.unbindEvents );
136
  };
137
 
138
  /**
src/resources/js/views/events-bar.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.eventsBar = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -222,8 +222,7 @@ tribe.events.views.eventsBar = {};
222
  $( tab )
223
  .removeAttr( 'aria-selected' )
224
  .removeAttr( 'tabindex' )
225
- .off( 'keydown', obj.handleTabKeydown )
226
- .off( 'click', obj.handleTabClick );
227
  } );
228
  $container
229
  .find( obj.selectors.tabPanel )
@@ -444,9 +443,11 @@ tribe.events.views.eventsBar = {};
444
  if ( $eventsBar.length ) {
445
  var state = $eventsBar.data( 'tribeEventsState' );
446
  var $filtersButton = $container.find( obj.selectors.filtersButton );
 
 
447
 
448
  // If viewport is mobile and mobile state is not initialized
449
- if ( tribe.events.views.viewport.state.isMobile && ! state.mobileInitialized ) {
450
  if ( $filtersButton.length ) {
451
  obj.initTablist( $container );
452
  obj.deinitFiltersAccordion( $container );
@@ -457,7 +458,7 @@ tribe.events.views.eventsBar = {};
457
  $eventsBar.data( 'tribeEventsState', state );
458
 
459
  // If viewport is desktop and desktop state is not initialized
460
- } else if ( ! tribe.events.views.viewport.state.isMobile && ! state.desktopInitialized ) {
461
  if ( $filtersButton.length ) {
462
  obj.deinitTablist( $container );
463
  obj.initFiltersAccordion( $container );
@@ -515,12 +516,13 @@ tribe.events.views.eventsBar = {};
515
  *
516
  * @since 4.9.7
517
  *
 
 
518
  * @return {void}
519
  */
520
- obj.unbindEvents = function() {
521
- $document
522
- .off( 'resize.tribeEvents', obj.handleResize )
523
- .off( 'click', obj.handleClick );
524
  };
525
 
526
  /**
@@ -533,9 +535,8 @@ tribe.events.views.eventsBar = {};
533
  * @return {void}
534
  */
535
  obj.bindEvents = function( $container ) {
536
- $document
537
- .on( 'resize.tribeEvents', { container: $container }, obj.handleResize )
538
- .on( 'click', { container: $container }, obj.handleClick );
539
  };
540
 
541
  /**
@@ -552,7 +553,8 @@ tribe.events.views.eventsBar = {};
552
  obj.deinit = function( event, jqXHR, settings ) {
553
  var $container = event.data.container;
554
  obj.deinitEventsBar( $container );
555
- obj.unbindEvents();
 
556
  };
557
 
558
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.eventsBar
27
  *
28
  * @return {void}
29
  */
222
  $( tab )
223
  .removeAttr( 'aria-selected' )
224
  .removeAttr( 'tabindex' )
225
+ .off();
 
226
  } );
227
  $container
228
  .find( obj.selectors.tabPanel )
443
  if ( $eventsBar.length ) {
444
  var state = $eventsBar.data( 'tribeEventsState' );
445
  var $filtersButton = $container.find( obj.selectors.filtersButton );
446
+ var containerState = $container.data( 'tribeEventsState' );
447
+ var isMobile = ( containerState && containerState.isMobile ) || true; // fallback to true if container state is undefined
448
 
449
  // If viewport is mobile and mobile state is not initialized
450
+ if ( isMobile && ! state.mobileInitialized ) {
451
  if ( $filtersButton.length ) {
452
  obj.initTablist( $container );
453
  obj.deinitFiltersAccordion( $container );
458
  $eventsBar.data( 'tribeEventsState', state );
459
 
460
  // If viewport is desktop and desktop state is not initialized
461
+ } else if ( ! isMobile && ! state.desktopInitialized ) {
462
  if ( $filtersButton.length ) {
463
  obj.deinitTablist( $container );
464
  obj.initFiltersAccordion( $container );
516
  *
517
  * @since 4.9.7
518
  *
519
+ * @param {jQuery} $container jQuery object of view container
520
+ *
521
  * @return {void}
522
  */
523
+ obj.unbindEvents = function( $container ) {
524
+ $container.off( 'resize.tribeEvents', obj.handleResize );
525
+ $document.off( 'click', obj.handleClick );
 
526
  };
527
 
528
  /**
535
  * @return {void}
536
  */
537
  obj.bindEvents = function( $container ) {
538
+ $container.on( 'resize.tribeEvents', { container: $container }, obj.handleResize );
539
+ $document.on( 'click', { container: $container }, obj.handleClick );
 
540
  };
541
 
542
  /**
553
  obj.deinit = function( event, jqXHR, settings ) {
554
  var $container = event.data.container;
555
  obj.deinitEventsBar( $container );
556
+ obj.unbindEvents( $container );
557
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
558
  };
559
 
560
  /**
src/resources/js/views/manager.js CHANGED
@@ -88,6 +88,37 @@ tribe.events.views.manager = {};
88
  */
89
  obj.$containers = $();
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  /**
92
  * Setup the container for views management
93
  *
@@ -95,8 +126,8 @@ tribe.events.views.manager = {};
95
  *
96
  * @todo Requirement to setup other JS modules after hijacking Click and Submit
97
  *
98
- * @param {integer} index jQuery.each index param
99
- * @param {Element} container Which element we are going to setup
100
  *
101
  * @return {void}
102
  */
@@ -116,14 +147,11 @@ tribe.events.views.manager = {};
116
  $container.find( obj.selectors.link ).on( 'click.tribeEvents', obj.onLinkClick );
117
 
118
  // Only catch the submit if properly setup on a form
119
- if ( $form ) {
120
  $form.on( 'submit.tribeEvents', obj.onSubmit );
121
  }
122
 
123
  $container.trigger( 'afterSetup.tribeEvents', [ index, $container, data ] );
124
-
125
- // Binds and action to the container that will update the URL based on backed
126
- $container.on( 'updateUrl.tribeEvents', obj.onUpdateUrl );
127
  };
128
 
129
  /**
@@ -200,16 +228,14 @@ tribe.events.views.manager = {};
200
  *
201
  * @since 4.9.4
202
  *
203
- * @param {Event} event DOM Event related to the Click action
204
  *
205
  * @return {void}
206
  */
207
- obj.onUpdateUrl = function( event ) {
208
- var $container = $( this );
209
-
210
  // When handling popstate (broswer back/next) it will not handle this part.
211
  if ( obj.doingPopstate ) {
212
- return false;
213
  }
214
 
215
  // Bail when we dont manage URLs
@@ -270,6 +296,7 @@ tribe.events.views.manager = {};
270
  var currentUrl = window.location.href;
271
  var nonce = $link.data( 'view-rest-nonce' );
272
  var shouldManageUrl = obj.shouldManageUrl( $container );
 
273
 
274
  // Fetch nonce from container if the link doesnt have any
275
  if ( ! nonce ) {
@@ -277,12 +304,16 @@ tribe.events.views.manager = {};
277
  }
278
 
279
  var data = {
280
- prev_url: currentUrl,
281
- url: url,
282
  should_manage_url: shouldManageUrl,
283
- _wpnonce: nonce
284
  };
285
 
 
 
 
 
286
  obj.request( data, $container );
287
 
288
  $container.trigger( 'afterOnLinkClick.tribeEvents', event );
@@ -350,15 +381,12 @@ tribe.events.views.manager = {};
350
  obj.currentAjaxRequest.abort();
351
  }
352
 
353
- var containerData = obj.getContainerData( $container );
354
-
355
  // Flag that we are doing popstate globally.
356
  obj.doingPopstate = true;
357
 
358
  $container.trigger( 'beforePopState.tribeEvents', event );
359
 
360
  var nonce = $container.data( 'view-rest-nonce' );
361
- var shouldManageUrl = obj.shouldManageUrl( $container );
362
 
363
  var data = {
364
  url: url,
@@ -513,18 +541,21 @@ tribe.events.views.manager = {};
513
 
514
  var $html = $( data );
515
 
 
 
 
516
  // Replace the current container with the new Data.
517
  $container.replaceWith( $html );
518
  $container = $html;
519
 
520
  // Setup the container with the data received.
521
- obj.setup( 0, $html );
522
 
523
  // Update the global set of containers with all of the manager object.
524
  obj.selectContainers();
525
 
526
  // Trigger the browser pushState
527
- $container.trigger( 'updateUrl.tribeEvents' );
528
 
529
  $container.trigger( 'afterAjaxSuccess.tribeEvents', [ data, textStatus, jqXHR ] );
530
 
88
  */
89
  obj.$containers = $();
90
 
91
+ /**
92
+ * Clean up the container and event listeners
93
+ *
94
+ * @since 5.0.0
95
+ *
96
+ * @param {jQuery} container Which element we are going to clean up
97
+ *
98
+ * @return {void}
99
+ */
100
+ obj.cleanup = function( container ) {
101
+ var $container = $( container );
102
+ var $form = $container.find( obj.selectors.form );
103
+ var $data = $container.find( obj.selectors.dataScript );
104
+ var data = {};
105
+
106
+ // If we have data element set it up.
107
+ if ( $data.length ) {
108
+ data = JSON.parse( $.trim( $data.text() ) );
109
+ }
110
+
111
+ $container.trigger( 'beforeCleanup.tribeEvents', [ $container, data ] );
112
+
113
+ $container.find( obj.selectors.link ).off( 'click.tribeEvents', obj.onLinkClick );
114
+
115
+ if ( $form.length ) {
116
+ $form.off( 'submit.tribeEvents', obj.onSubmit );
117
+ }
118
+
119
+ $container.trigger( 'afterCleanup.tribeEvents', [ $container, data ] );
120
+ };
121
+
122
  /**
123
  * Setup the container for views management
124
  *
126
  *
127
  * @todo Requirement to setup other JS modules after hijacking Click and Submit
128
  *
129
+ * @param {integer} index jQuery.each index param
130
+ * @param {Element|jQuery} container Which element we are going to setup
131
  *
132
  * @return {void}
133
  */
147
  $container.find( obj.selectors.link ).on( 'click.tribeEvents', obj.onLinkClick );
148
 
149
  // Only catch the submit if properly setup on a form
150
+ if ( $form.length ) {
151
  $form.on( 'submit.tribeEvents', obj.onSubmit );
152
  }
153
 
154
  $container.trigger( 'afterSetup.tribeEvents', [ index, $container, data ] );
 
 
 
155
  };
156
 
157
  /**
228
  *
229
  * @since 4.9.4
230
  *
231
+ * @param {jQuery} $container Which element we are updating the URL from.
232
  *
233
  * @return {void}
234
  */
235
+ obj.updateUrl = function( $container ) {
 
 
236
  // When handling popstate (broswer back/next) it will not handle this part.
237
  if ( obj.doingPopstate ) {
238
+ return;
239
  }
240
 
241
  // Bail when we dont manage URLs
296
  var currentUrl = window.location.href;
297
  var nonce = $link.data( 'view-rest-nonce' );
298
  var shouldManageUrl = obj.shouldManageUrl( $container );
299
+ var shortcodeId = $container.data( 'view-shortcode' );
300
 
301
  // Fetch nonce from container if the link doesnt have any
302
  if ( ! nonce ) {
304
  }
305
 
306
  var data = {
307
+ prev_url: encodeURI( decodeURI( currentUrl ) ),
308
+ url: encodeURI( decodeURI( url ) ),
309
  should_manage_url: shouldManageUrl,
310
+ _wpnonce: nonce,
311
  };
312
 
313
+ if ( shortcodeId ) {
314
+ data['shortcode'] = shortcodeId;
315
+ }
316
+
317
  obj.request( data, $container );
318
 
319
  $container.trigger( 'afterOnLinkClick.tribeEvents', event );
381
  obj.currentAjaxRequest.abort();
382
  }
383
 
 
 
384
  // Flag that we are doing popstate globally.
385
  obj.doingPopstate = true;
386
 
387
  $container.trigger( 'beforePopState.tribeEvents', event );
388
 
389
  var nonce = $container.data( 'view-rest-nonce' );
 
390
 
391
  var data = {
392
  url: url,
541
 
542
  var $html = $( data );
543
 
544
+ // Clean up the container and event listeners
545
+ obj.cleanup( $container );
546
+
547
  // Replace the current container with the new Data.
548
  $container.replaceWith( $html );
549
  $container = $html;
550
 
551
  // Setup the container with the data received.
552
+ obj.setup( 0, $container );
553
 
554
  // Update the global set of containers with all of the manager object.
555
  obj.selectContainers();
556
 
557
  // Trigger the browser pushState
558
+ obj.updateUrl( $container );
559
 
560
  $container.trigger( 'afterAjaxSuccess.tribeEvents', [ data, textStatus, jqXHR ] );
561
 
src/resources/js/views/month-grid.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.monthGrid = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -331,9 +331,7 @@ tribe.events.views.monthGrid = {};
331
  * @return {void}
332
  */
333
  obj.unbindEvents = function( $grid ) {
334
- $grid
335
- .off( 'keydown', obj.handleKeydown )
336
- .off( 'click', obj.handleClick );
337
  };
338
 
339
  /**
@@ -363,8 +361,10 @@ tribe.events.views.monthGrid = {};
363
  * @return {void}
364
  */
365
  obj.deinit = function( event, jqXHR, settings ) {
366
- var $grid = event.data.container.find( obj.selectors.grid );
 
367
  obj.unbindEvents( $grid );
 
368
  };
369
 
370
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.monthGrid
27
  *
28
  * @return {void}
29
  */
331
  * @return {void}
332
  */
333
  obj.unbindEvents = function( $grid ) {
334
+ $grid.off();
 
 
335
  };
336
 
337
  /**
361
  * @return {void}
362
  */
363
  obj.deinit = function( event, jqXHR, settings ) {
364
+ var $container = event.data.container;
365
+ var $grid = $container.find( obj.selectors.grid );
366
  obj.unbindEvents( $grid );
367
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
368
  };
369
 
370
  /**
src/resources/js/views/month-mobile-events.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.monthMobileEvents = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -199,8 +199,11 @@ tribe.events.views.monthMobileEvents = {};
199
  */
200
  obj.initState = function( $container ) {
201
  var $mobileEvents = $container.find( obj.selectors.mobileEvents );
 
 
 
202
  var state = {
203
- desktopInitialized: ! tribe.events.views.viewport.state.isMobile,
204
  };
205
 
206
  $mobileEvents.data( 'tribeEventsState', state );
@@ -216,13 +219,16 @@ tribe.events.views.monthMobileEvents = {};
216
  * @return {void}
217
  */
218
  obj.handleResize = function( event ) {
219
- var $mobileEvents = event.data.container.find( obj.selectors.mobileEvents );
 
220
  var state = $mobileEvents.data( 'tribeEventsState' );
 
 
221
 
222
- if ( ! tribe.events.views.viewport.state.isMobile && ! state.desktopInitialized ) {
223
- obj.closeAllEvents( event.data.container );
224
  state.desktopInitialized = true;
225
- } else if ( tribe.events.views.viewport.state.isMobile && state.desktopInitialized ) {
226
  state.desktopInitialized = false;
227
  }
228
 
@@ -243,7 +249,9 @@ tribe.events.views.monthMobileEvents = {};
243
  obj.deinit = function( event, jqXHR, settings ) {
244
  var $container = event.data.container;
245
  obj.unbindCalendarEvents( $container );
246
- $document.off( 'resize.tribeEvents', obj.handleResize );
 
 
247
  };
248
 
249
  /**
@@ -267,8 +275,9 @@ tribe.events.views.monthMobileEvents = {};
267
 
268
  obj.initState( $container );
269
  obj.bindCalendarEvents( $container );
270
- $document.on( 'resize.tribeEvents', { container: $container }, obj.handleResize );
271
- $container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
 
272
  };
273
 
274
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.monthMobileEvents
27
  *
28
  * @return {void}
29
  */
199
  */
200
  obj.initState = function( $container ) {
201
  var $mobileEvents = $container.find( obj.selectors.mobileEvents );
202
+ var containerState = $container.data( 'tribeEventsState' );
203
+ var isMobile = ( containerState && containerState.isMobile ) || true; // fallback to true if container state is undefined
204
+
205
  var state = {
206
+ desktopInitialized: ! isMobile,
207
  };
208
 
209
  $mobileEvents.data( 'tribeEventsState', state );
219
  * @return {void}
220
  */
221
  obj.handleResize = function( event ) {
222
+ var $container = event.data.container;
223
+ var $mobileEvents = $container.find( obj.selectors.mobileEvents );
224
  var state = $mobileEvents.data( 'tribeEventsState' );
225
+ var containerState = $container.data( 'tribeEventsState' );
226
+ var isMobile = ( containerState && containerState.isMobile ) || true; // fallback to true if container state is undefined
227
 
228
+ if ( ! isMobile && ! state.desktopInitialized ) {
229
+ obj.closeAllEvents( $container );
230
  state.desktopInitialized = true;
231
+ } else if ( isMobile && state.desktopInitialized ) {
232
  state.desktopInitialized = false;
233
  }
234
 
249
  obj.deinit = function( event, jqXHR, settings ) {
250
  var $container = event.data.container;
251
  obj.unbindCalendarEvents( $container );
252
+ $container
253
+ .off( 'resize.tribeEvents', obj.handleResize )
254
+ .off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
255
  };
256
 
257
  /**
275
 
276
  obj.initState( $container );
277
  obj.bindCalendarEvents( $container );
278
+ $container
279
+ .on( 'resize.tribeEvents', { container: $container }, obj.handleResize )
280
+ .on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
281
  };
282
 
283
  /**
src/resources/js/views/multiday-events.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.multidayEvents = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -122,10 +122,7 @@ tribe.events.views.multidayEvents = {};
122
  var $hiddenMultidayEvents = $container.find( obj.selectors.hiddenMultidayEvent );
123
 
124
  $hiddenMultidayEvents.each( function( hiddenIndex, hiddenMultidayEvent ) {
125
- var $hiddenMultidayEvent = $( hiddenMultidayEvent );
126
- $hiddenMultidayEvent
127
- .off( 'mouseenter mouseleave', obj.toggleHoverClass )
128
- .off( 'focus blur', obj.toggleFocusClass );
129
  } );
130
  };
131
 
@@ -201,6 +198,7 @@ tribe.events.views.multidayEvents = {};
201
  var $container = event.data.container;
202
  obj.deinitSelectors();
203
  obj.unbindMultidayEvents( $container );
 
204
  };
205
 
206
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.multidayEvents
27
  *
28
  * @return {void}
29
  */
122
  var $hiddenMultidayEvents = $container.find( obj.selectors.hiddenMultidayEvent );
123
 
124
  $hiddenMultidayEvents.each( function( hiddenIndex, hiddenMultidayEvent ) {
125
+ $( hiddenMultidayEvent ).off();
 
 
 
126
  } );
127
  };
128
 
198
  var $container = event.data.container;
199
  obj.deinitSelectors();
200
  obj.unbindMultidayEvents( $container );
201
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.unbindEvents );
202
  };
203
 
204
  /**
src/resources/js/views/tooltip.js CHANGED
@@ -237,13 +237,9 @@ tribe.events.views.tooltip = {};
237
  .find( obj.selectors.tooltipTrigger )
238
  .each( function( index, trigger ) {
239
  $( trigger )
240
- .off( 'focus', obj.handleOriginFocus )
241
- .off( 'blur', obj.handleOriginBlur )
242
- .off( 'mouseenter touchstart', obj.handleOriginHoverIn )
243
- .off( 'mouseleave touchleave', obj.handleOriginHoverOut )
244
  .tooltipster( 'instance' )
245
- .off( 'close', obj.handleInstanceClose )
246
- .off( 'closing', obj.handleInstanceClosing );
247
  } );
248
  };
249
 
@@ -310,6 +306,7 @@ tribe.events.views.tooltip = {};
310
  obj.deinit = function( event, jqXHR, settings ) {
311
  var $container = event.data.container;
312
  obj.deinitTooltips( $container );
 
313
  };
314
 
315
  /**
237
  .find( obj.selectors.tooltipTrigger )
238
  .each( function( index, trigger ) {
239
  $( trigger )
240
+ .off()
 
 
 
241
  .tooltipster( 'instance' )
242
+ .off();
 
243
  } );
244
  };
245
 
306
  obj.deinit = function( event, jqXHR, settings ) {
307
  var $container = event.data.container;
308
  obj.deinitTooltips( $container );
309
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
310
  };
311
 
312
  /**
src/resources/js/views/view-selector.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.viewSelector = {};
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -159,15 +159,18 @@ tribe.events.views.viewSelector = {};
159
 
160
  // If view selector is tabs (has 3 or less options)
161
  if ( isTabs ) {
 
 
 
162
  // If viewport is mobile and mobile state is not initialized
163
- if ( tribe.events.views.viewport.state.isMobile && ! state.mobileInitialized ) {
164
  obj.initViewSelectorAccordion( $container );
165
  state.desktopInitialized = false;
166
  state.mobileInitialized = true;
167
  $viewSelector.data( 'tribeEventsState', state );
168
 
169
  // If viewport is desktop and desktop state is not initialized
170
- } else if ( ! tribe.events.views.viewport.state.isMobile && ! state.desktopInitialized ) {
171
  obj.deinitViewSelectorAccordion( $container );
172
  state.mobileInitialized = false;
173
  state.desktopInitialized = true;
@@ -250,9 +253,9 @@ tribe.events.views.viewSelector = {};
250
  */
251
  obj.unbindEvents = function( $container ) {
252
  $document
253
- .off( 'resize.tribeEvents', obj.handleResize )
254
  .off( 'click', obj.handleClick );
255
  $container
 
256
  .find( obj.selectors.viewSelectorButton )
257
  .off( 'click', obj.handleViewSelectorButtonClick );
258
  };
@@ -269,9 +272,8 @@ tribe.events.views.viewSelector = {};
269
  obj.bindEvents = function( $container ) {
270
  var $viewSelectorButton = $container.find( obj.selectors.viewSelectorButton );
271
 
272
- $document
273
- .on( 'resize.tribeEvents', { container: $container }, obj.handleResize )
274
- .on( 'click', { container: $container }, obj.handleClick );
275
  $viewSelectorButton.on( 'click', { target: $viewSelectorButton }, obj.handleViewSelectorButtonClick );
276
  };
277
 
@@ -290,6 +292,7 @@ tribe.events.views.viewSelector = {};
290
  var $container = event.data.container;
291
  obj.deinitViewSelector( $container );
292
  obj.unbindEvents( $container );
 
293
  };
294
 
295
  /**
23
  * @since 4.9.4
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.viewSelector
27
  *
28
  * @return {void}
29
  */
159
 
160
  // If view selector is tabs (has 3 or less options)
161
  if ( isTabs ) {
162
+ var containerState = $container.data( 'tribeEventsState' );
163
+ var isMobile = ( containerState && containerState.isMobile ) || true; // fallback to true if container state is undefined
164
+
165
  // If viewport is mobile and mobile state is not initialized
166
+ if ( isMobile && ! state.mobileInitialized ) {
167
  obj.initViewSelectorAccordion( $container );
168
  state.desktopInitialized = false;
169
  state.mobileInitialized = true;
170
  $viewSelector.data( 'tribeEventsState', state );
171
 
172
  // If viewport is desktop and desktop state is not initialized
173
+ } else if ( ! isMobile && ! state.desktopInitialized ) {
174
  obj.deinitViewSelectorAccordion( $container );
175
  state.mobileInitialized = false;
176
  state.desktopInitialized = true;
253
  */
254
  obj.unbindEvents = function( $container ) {
255
  $document
 
256
  .off( 'click', obj.handleClick );
257
  $container
258
+ .off( 'resize.tribeEvents', obj.handleResize )
259
  .find( obj.selectors.viewSelectorButton )
260
  .off( 'click', obj.handleViewSelectorButtonClick );
261
  };
272
  obj.bindEvents = function( $container ) {
273
  var $viewSelectorButton = $container.find( obj.selectors.viewSelectorButton );
274
 
275
+ $document.on( 'click', { container: $container }, obj.handleClick );
276
+ $container.on( 'resize.tribeEvents', { container: $container }, obj.handleResize );
 
277
  $viewSelectorButton.on( 'click', { target: $viewSelectorButton }, obj.handleViewSelectorButtonClick );
278
  };
279
 
292
  var $container = event.data.container;
293
  obj.deinitViewSelector( $container );
294
  obj.unbindEvents( $container );
295
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
296
  };
297
 
298
  /**
src/resources/js/views/viewport.js CHANGED
@@ -23,7 +23,7 @@ tribe.events.views.viewport = {};
23
  * @since 4.9.7
24
  *
25
  * @param {PlainObject} $ jQuery
26
- * @param {PlainObject} obj tribe.events.views.manager
27
  *
28
  * @return {void}
29
  */
@@ -40,43 +40,55 @@ tribe.events.views.viewport = {};
40
  * @type {PlainObject}
41
  */
42
  obj.options = {
43
- MOBILE_BREAKPOINT: 768,
44
  };
45
 
46
  /**
47
- * Object of state
48
  *
49
  * @since 4.9.7
50
  *
51
- * @type {PlainObject}
 
 
52
  */
53
- obj.state = {
54
- isMobile: true,
 
 
 
 
 
 
 
55
  };
56
 
57
  /**
58
- * Set viewport state
59
  *
60
  * @since 4.9.7
61
  *
 
 
62
  * @return {void}
63
  */
64
- obj.setViewport = function() {
65
- obj.state.isMobile = window.innerWidth < obj.options.MOBILE_BREAKPOINT;
66
- $document.trigger( 'resize.tribeEvents' );
 
67
  };
68
 
69
  /**
70
- * Handles window resize event
71
  *
72
- * @since 4.9.7
73
  *
74
- * @param {Event} event event object for 'resize' event
75
  *
76
  * @return {void}
77
  */
78
- obj.handleResize = function( event ) {
79
- obj.setViewport();
80
  };
81
 
82
  /**
@@ -89,7 +101,24 @@ tribe.events.views.viewport = {};
89
  * @return {void}
90
  */
91
  obj.bindEvents = function( $container ) {
92
- $window.on( 'resize', obj.handleResize );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  };
94
 
95
  /**
@@ -97,11 +126,17 @@ tribe.events.views.viewport = {};
97
  *
98
  * @since 4.9.7
99
  *
 
 
 
 
 
100
  * @return {void}
101
  */
102
- obj.init = function() {
103
- obj.bindEvents();
104
- obj.setViewport();
 
105
  };
106
 
107
  /**
@@ -112,7 +147,7 @@ tribe.events.views.viewport = {};
112
  * @return {void}
113
  */
114
  obj.ready = function() {
115
- obj.init();
116
  };
117
 
118
  // Configure on document ready
23
  * @since 4.9.7
24
  *
25
  * @param {PlainObject} $ jQuery
26
+ * @param {PlainObject} obj tribe.events.views.viewport
27
  *
28
  * @return {void}
29
  */
40
  * @type {PlainObject}
41
  */
42
  obj.options = {
43
+ MOBILE_BREAKPOINT: tribe.events.views.breakpoints.breakpoints.medium || 768,
44
  };
45
 
46
  /**
47
+ * Set viewport state for container
48
  *
49
  * @since 4.9.7
50
  *
51
+ * @param {jQuery} $container jQuery object of view container
52
+ *
53
+ * @return {void}
54
  */
55
+ obj.setViewport = function( $container ) {
56
+ var state = $container.data( 'tribeEventsState' );
57
+
58
+ if ( ! state ) {
59
+ state = {};
60
+ }
61
+
62
+ state.isMobile = $container.outerWidth() < obj.options.MOBILE_BREAKPOINT;
63
+ $container.data( 'tribeEventsState', state );
64
  };
65
 
66
  /**
67
+ * Handles window resize event
68
  *
69
  * @since 4.9.7
70
  *
71
+ * @param {Event} event event object for 'resize' event
72
+ *
73
  * @return {void}
74
  */
75
+ obj.handleResize = function( event ) {
76
+ var $container = event.data.container;
77
+ obj.setViewport( $container );
78
+ $container.trigger( 'resize.tribeEvents' );
79
  };
80
 
81
  /**
82
+ * Unbind events for window resize
83
  *
84
+ * @since 5.0.0
85
  *
86
+ * @param {jQuery} $container jQuery object of view container
87
  *
88
  * @return {void}
89
  */
90
+ obj.unbindEvents = function( $container ) {
91
+ $window.off( 'resize', obj.handleResize );
92
  };
93
 
94
  /**
101
  * @return {void}
102
  */
103
  obj.bindEvents = function( $container ) {
104
+ $window.on( 'resize', { container: $container }, obj.handleResize );
105
+ };
106
+
107
+ /**
108
+ * Deinitialize viewport JS
109
+ *
110
+ * @since 5.0.0
111
+ *
112
+ * @param {Event} event event object for 'beforeAjaxSuccess.tribeEvents' event
113
+ * @param {jqXHR} jqXHR Request object
114
+ * @param {PlainObject} settings Settings that this request was made with
115
+ *
116
+ * @return {void}
117
+ */
118
+ obj.deinit = function( event, jqXHR, settings ) {
119
+ var $container = event.data.container;
120
+ obj.unbindEvents( $container );
121
+ $container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
122
  };
123
 
124
  /**
126
  *
127
  * @since 4.9.7
128
  *
129
+ * @param {Event} event event object for 'afterSetup.tribeEvents' event
130
+ * @param {integer} index jQuery.each index param from 'afterSetup.tribeEvents' event
131
+ * @param {jQuery} $container jQuery object of view container
132
+ * @param {object} data data object passed from 'afterSetup.tribeEvents' event
133
+ *
134
  * @return {void}
135
  */
136
+ obj.init = function( event, index, $container, data ) {
137
+ obj.bindEvents( $container );
138
+ obj.setViewport( $container );
139
+ $container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
140
  };
141
 
142
  /**
147
  * @return {void}
148
  */
149
  obj.ready = function() {
150
+ $document.on( 'afterSetup.tribeEvents', tribe.events.views.manager.selectors.container, obj.init );
151
  };
152
 
153
  // Configure on document ready
src/resources/postcss/README.md CHANGED
@@ -61,9 +61,9 @@ In this case, the day date is an element of the month day. However, the `--curre
61
 
62
  For overriding styles, it is recommended to only use classes to keep overriding specificity consistent. All elements should have classes and should be targetted using those classes.
63
 
64
- ## Modifiers, pseudo-classes, and media queries
65
 
66
- As you get into building upon these styles and creating new styles, the order of modifiers, pseudo-classes, and media queries comes into question. The general rule is to apply them in the following order: media queries, pseudo-classes, modifiers. See the examples below:
67
 
68
  ```
69
  .tribe-events {
@@ -72,15 +72,15 @@ As you get into building upon these styles and creating new styles, the order of
72
  .tribe-events-c-view-selector__button {
73
  /* view selector button styles */
74
 
75
- @media (--viewport-medium) {
76
- /* viewport medium view selector button styles */
77
  }
78
 
79
  &:before {
80
  /* :before pseudo-class styles */
81
 
82
- @media (--viewport-medium) {
83
- /* viewport medium :before pseudo-class styles */
84
  }
85
  }
86
  }
@@ -88,60 +88,15 @@ As you get into building upon these styles and creating new styles, the order of
88
  .tribe-events-c-view-selector__button--active {
89
  /* active view selector button styles */
90
 
91
- @media (--viewport-medium) {
92
- /* viewport medium active view selector button styles */
93
  }
94
 
95
  &:before {
96
  /* :before pseudo-class styles */
97
 
98
- @media (--viewport-medium) {
99
- /* viewport medium :before pseudo-class styles */
100
- }
101
- }
102
- }
103
-
104
- ...
105
- }
106
- ```
107
-
108
- In the case of an element, we might get the following scenario:
109
-
110
- ```
111
- .tribe-common {
112
- ...
113
-
114
- .tribe-events-c-view-selector__button {
115
- /* view selector button styles */
116
-
117
- @media (--viewport-medium) {
118
- /* viewport medium view selector button styles */
119
- }
120
-
121
- &:before {
122
- /* :before pseudo-class styles */
123
-
124
- @media (--viewport-medium) {
125
- /* viewport medium :before pseudo-class styles */
126
- }
127
- }
128
- }
129
-
130
- .tribe-events-c-view-selector--tabs {
131
-
132
- .tribe-events-c-view-selector__button {
133
- /* tabs view selector button styles */
134
-
135
- @media (--viewport-medium) {
136
- /* viewport medium tabs view selector button styles */
137
- }
138
-
139
- &:before {
140
- /* :before pseudo-class styles */
141
-
142
- @media (--viewport-medium) {
143
- /* viewport medium :before pseudo-class styles */
144
- }
145
  }
146
  }
147
  }
@@ -172,15 +127,19 @@ Components are groups of reusable markup and styles. The component style structu
172
 
173
  The views styles are styles that are specific to each view and the sub-elements of each view. These are generally more layout-focused after applying common styles, though some elements, such as in the month view, require more custom styles.
174
 
175
- ### Media queries
 
 
 
 
176
 
177
- These styles use a mobile-first approach. Given this, there are only `min-width:` breakpoints, never `max-width:` breakpoints. This also lends to using the `--min-medium` modifier.
178
 
179
  ## Theme overrides
180
 
181
  Modern Tribe plugins support a handful of themes. Some themes provide stylesheets that have high specificity for elements and override the plugin styles. To counter this, we've included theme overrides to ensure our plugin styles display as expected with the supported themes.
182
 
183
- The specificity to override the styles are matched to those applied to the theme. This means that if, for example, a theme applied an ID and 2 extra classes to a `button` style, we might see the following theme override:
184
 
185
  ```
186
  .tribe-events {
61
 
62
  For overriding styles, it is recommended to only use classes to keep overriding specificity consistent. All elements should have classes and should be targetted using those classes.
63
 
64
+ ## Modifiers, pseudo-classes, and container query classes
65
 
66
+ As you get into building upon these styles and creating new styles, the order of modifiers, pseudo-classes, and container query classes comes into question. The general rule is to apply them in the following order: container query classes, pseudo-classes, modifiers. See the examples below:
67
 
68
  ```
69
  .tribe-events {
72
  .tribe-events-c-view-selector__button {
73
  /* view selector button styles */
74
 
75
+ .tribe-common--breakpoint-medium& {
76
+ /* container medium view selector button styles */
77
  }
78
 
79
  &:before {
80
  /* :before pseudo-class styles */
81
 
82
+ .tribe-common--breakpoint-medium& {
83
+ /* container medium :before pseudo-class styles */
84
  }
85
  }
86
  }
88
  .tribe-events-c-view-selector__button--active {
89
  /* active view selector button styles */
90
 
91
+ .tribe-common--breakpoint-medium& {
92
+ /* container medium active view selector button styles */
93
  }
94
 
95
  &:before {
96
  /* :before pseudo-class styles */
97
 
98
+ .tribe-common--breakpoint-medium& {
99
+ /* container medium :before pseudo-class styles */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  }
101
  }
102
  }
127
 
128
  The views styles are styles that are specific to each view and the sub-elements of each view. These are generally more layout-focused after applying common styles, though some elements, such as in the month view, require more custom styles.
129
 
130
+ ### Container queries
131
+
132
+ These styles use a mobile-first approach. Given this, styles build on top of each other at various breakpoints. However, they don't use the traditional `min-width:` media queries most of us are used to. Instead, the styles use container queries based on the `.tribe-common` container.
133
+
134
+ The reasoning for this is simple. Many of the views for The Events Calendar and Event Tickets depend on the theme to which they are applied. Some themes have an extremely wide spacing on the left and right while others have none. At our usual 768px breakpoint for the `--min-medium` modifier, the `.tribe-common` container could have very different widths based on the theme used and display the view inconsistently.
135
 
136
+ To counter this, we've applied a type of container media queries. By applying JavaScript that runs as soon as the container is printed, we are able apply classes to the container based on its width rather than the viewport width. We currently use 3 breakpoints: `.tribe-common--breakpoint-xsmall`, `.tribe-common--breakpoint-medium`, and `.tribe-common--breakpoint-full`. These correspond to 500px, 768px, and 960px, respectively. These values can also be filtered to customize the breakpoint values.
137
 
138
  ## Theme overrides
139
 
140
  Modern Tribe plugins support a handful of themes. Some themes provide stylesheets that have high specificity for elements and override the plugin styles. To counter this, we've included theme overrides to ensure our plugin styles display as expected with the supported themes.
141
 
142
+ The specificity to override the styles are matched to those applied to the theme. This means that if, for example, a theme applied an ID and 2 extra classes to a `datepicker` style, we might see the following theme override:
143
 
144
  ```
145
  .tribe-events {
src/resources/postcss/base/skeleton/_layouts.pcss CHANGED
@@ -8,10 +8,12 @@
8
  .tribe-events-l-container {
9
  padding-bottom: var(--spacer-12);
10
  padding-top: var(--spacer-11);
 
11
 
12
- @media (--viewport-medium) {
13
  padding-bottom: var(--spacer-14);
14
  padding-top: var(--spacer-13);
 
15
  }
16
  }
17
  }
8
  .tribe-events-l-container {
9
  padding-bottom: var(--spacer-12);
10
  padding-top: var(--spacer-11);
11
+ min-height: 600px; /* min height on container to show datepicker when no results, as some themes have containers with overflow hidden */
12
 
13
+ .tribe-common--breakpoint-medium& {
14
  padding-bottom: var(--spacer-14);
15
  padding-top: var(--spacer-13);
16
+ min-height: 700px; /* min height on container to show datepicker when no results, as some themes have containers with overflow hidden */
17
  }
18
  }
19
  }
src/resources/postcss/components/full/_breadcrumbs.pcss CHANGED
@@ -11,7 +11,7 @@
11
  font-size: 24px;
12
  line-height: var(--line-height-1);
13
 
14
- @media (--viewport-medium) {
15
  font-size: 42px;
16
  line-height: var(--line-height-0);
17
  }
11
  font-size: 24px;
12
  line-height: var(--line-height-1);
13
 
14
+ .tribe-common--breakpoint-medium& {
15
  font-size: 42px;
16
  line-height: var(--line-height-0);
17
  }
src/resources/postcss/components/full/_datepicker.pcss CHANGED
@@ -103,10 +103,10 @@
103
 
104
  .admin-bar & .datepicker {
105
  margin-top: var(--spacer-1);
 
106
 
107
- @media (--viewport-medium) {
108
- margin-top: var(--spacer-3);
109
- }
110
  }
111
 
112
  /* -----------------------------------------------------------------------------
103
 
104
  .admin-bar & .datepicker {
105
  margin-top: var(--spacer-1);
106
+ }
107
 
108
+ .admin-bar &.tribe-common--breakpoint-medium .datepicker {
109
+ margin-top: var(--spacer-3);
 
110
  }
111
 
112
  /* -----------------------------------------------------------------------------
src/resources/postcss/components/full/_events-bar.pcss CHANGED
@@ -11,13 +11,15 @@
11
  }
12
 
13
  .tribe-events-c-events-bar--border {
14
- @media (--viewport-medium) {
 
15
  border: 1px solid var(--color-border-secondary);
16
  }
17
  }
18
 
19
  .tribe-events-c-events-bar__filters {
20
- @media (--viewport-medium) {
 
21
  border-right: 1px solid var(--color-border-secondary);
22
  }
23
  }
11
  }
12
 
13
  .tribe-events-c-events-bar--border {
14
+
15
+ .tribe-common--breakpoint-medium& {
16
  border: 1px solid var(--color-border-secondary);
17
  }
18
  }
19
 
20
  .tribe-events-c-events-bar__filters {
21
+
22
+ .tribe-common--breakpoint-medium& {
23
  border-right: 1px solid var(--color-border-secondary);
24
  }
25
  }
src/resources/postcss/components/full/_messages.pcss CHANGED
@@ -34,7 +34,8 @@
34
  }
35
 
36
  .tribe-events-c-messages__message-list {
37
- @media (--viewport-medium) {
 
38
  text-align: center;
39
  }
40
  }
34
  }
35
 
36
  .tribe-events-c-messages__message-list {
37
+
38
+ .tribe-common--breakpoint-medium& {
39
  text-align: center;
40
  }
41
  }
src/resources/postcss/components/full/_navigation.pcss CHANGED
@@ -32,9 +32,6 @@
32
  white-space: pre;
33
  }
34
 
35
-
36
- .tribe-events-c-nav__prev,
37
- .tribe-events-c-nav__next,
38
  .tribe-events-c-nav__today {
39
 
40
  &:hover,
@@ -49,10 +46,20 @@
49
 
50
  .tribe-events-c-nav__prev,
51
  .tribe-events-c-nav__next {
52
- @media (--viewport-medium) {
 
53
  color: var(--color-text-secondary);
54
  }
55
 
 
 
 
 
 
 
 
 
 
56
  &:disabled {
57
  background-color: transparent;
58
  color: var(--color-text-disabled);
@@ -70,7 +77,7 @@
70
  margin-right: 8px;
71
  width: 7px;
72
 
73
- @media (--viewport-medium) {
74
  background-image: svg-inline(caret-left);
75
  height: 14px;
76
  margin-right: 15px;
@@ -113,7 +120,7 @@
113
  margin-left: 8px;
114
  width: 7px;
115
 
116
- @media (--viewport-medium) {
117
  background-image: svg-inline(caret-right);
118
  height: 14px;
119
  margin-left: 15px;
32
  white-space: pre;
33
  }
34
 
 
 
 
35
  .tribe-events-c-nav__today {
36
 
37
  &:hover,
46
 
47
  .tribe-events-c-nav__prev,
48
  .tribe-events-c-nav__next {
49
+
50
+ .tribe-common--breakpoint-medium& {
51
  color: var(--color-text-secondary);
52
  }
53
 
54
+ &:hover,
55
+ &:focus {
56
+ color: var(--color-accent-secondary-hover);
57
+ }
58
+
59
+ &:active {
60
+ color: var(--color-text-primary);
61
+ }
62
+
63
  &:disabled {
64
  background-color: transparent;
65
  color: var(--color-text-disabled);
77
  margin-right: 8px;
78
  width: 7px;
79
 
80
+ .tribe-common--breakpoint-medium& {
81
  background-image: svg-inline(caret-left);
82
  height: 14px;
83
  margin-right: 15px;
120
  margin-left: 8px;
121
  width: 7px;
122
 
123
+ .tribe-common--breakpoint-medium& {
124
  background-image: svg-inline(caret-right);
125
  height: 14px;
126
  margin-left: 15px;
src/resources/postcss/components/full/_search.pcss CHANGED
@@ -43,12 +43,14 @@
43
  * ----------------------------------------------------------------------------- */
44
 
45
  .tribe-events-c-search__input-control {
46
- @media (--viewport-medium) {
 
47
  border-right: 1px solid var(--color-border-secondary);
48
  }
49
 
50
  &:last-child {
51
- @media (--viewport-medium) {
 
52
  border-right: 0;
53
  }
54
  }
@@ -58,7 +60,7 @@
58
  background-repeat: no-repeat;
59
  background-position: right center;
60
 
61
- @media (--viewport-medium) {
62
  background-position: 16px center;
63
  }
64
  }
@@ -116,10 +118,10 @@
116
  .tribe-events-c-search__input--icon {
117
  background-repeat: no-repeat;
118
  background-position: right center;
 
119
 
120
- @media (--viewport-medium) {
121
- background-position: 16px center;
122
- }
123
  }
124
 
125
  .tribe-events-c-search__input-control--keyword {
43
  * ----------------------------------------------------------------------------- */
44
 
45
  .tribe-events-c-search__input-control {
46
+
47
+ .tribe-common--breakpoint-medium& {
48
  border-right: 1px solid var(--color-border-secondary);
49
  }
50
 
51
  &:last-child {
52
+
53
+ .tribe-common--breakpoint-medium& {
54
  border-right: 0;
55
  }
56
  }
60
  background-repeat: no-repeat;
61
  background-position: right center;
62
 
63
+ .tribe-common--breakpoint-medium& {
64
  background-position: 16px center;
65
  }
66
  }
118
  .tribe-events-c-search__input--icon {
119
  background-repeat: no-repeat;
120
  background-position: right center;
121
+ }
122
 
123
+ &.tribe-common--breakpoint-medium .tribe-events-c-search__input--icon {
124
+ background-position: 16px center;
 
125
  }
126
 
127
  .tribe-events-c-search__input-control--keyword {
src/resources/postcss/components/full/_top-bar.pcss CHANGED
@@ -28,7 +28,7 @@
28
  height: 6px;
29
  width: 10px;
30
 
31
- @media (--viewport-medium) {
32
  height: 7px;
33
  width: 12px;
34
  }
28
  height: 6px;
29
  width: 10px;
30
 
31
+ .tribe-common--breakpoint-medium& {
32
  height: 7px;
33
  width: 12px;
34
  }
src/resources/postcss/components/full/_view-selector.pcss CHANGED
@@ -54,13 +54,15 @@
54
  .tribe-events-c-view-selector__button {
55
 
56
  &:before {
57
- @media (--viewport-medium) {
 
58
  content: none;
59
  }
60
  }
61
 
62
  &:after {
63
- @media (--viewport-medium) {
 
64
  background-image: svg-inline(caret-down);
65
  background-repeat: no-repeat;
66
  background-size: contain;
@@ -77,20 +79,23 @@
77
  .tribe-events-c-view-selector__button--active {
78
 
79
  &:after {
80
- @media (--viewport-medium) {
 
81
  background-image: svg-inline(caret-up);
82
  }
83
  }
84
  }
85
 
86
  .tribe-events-c-view-selector__button-text {
87
- @media (--viewport-medium) {
 
88
  @mixin desktop-body-2-bold;
89
  }
90
  }
91
 
92
  .tribe-events-c-view-selector__content {
93
- @media (--viewport-medium) {
 
94
  box-shadow: var(--box-shadow-default);
95
  }
96
  }
@@ -99,7 +104,8 @@
99
  .tribe-events-c-view-selector--tabs {
100
 
101
  .tribe-events-c-view-selector__content {
102
- @media (--viewport-medium) {
 
103
  border: 0;
104
  border-radius: 0;
105
  box-shadow: none;
@@ -109,12 +115,14 @@
109
  .tribe-events-c-view-selector__list-item--active {
110
 
111
  .tribe-events-c-view-selector__list-item-link {
112
- @media (--viewport-medium) {
 
113
  background-color: transparent;
114
  }
115
 
116
  &:after {
117
- @media (--viewport-medium) {
 
118
  background-color: var(--color-accent-secondary);
119
  bottom: -1px;
120
  content: '';
@@ -157,7 +165,7 @@
157
  transform: translateY(var(--spacer-0));
158
  width: calc(100% - (2 * var(--spacer-0)));
159
 
160
- @media (--viewport-medium) {
161
  width: calc(100% - (2 * var(--spacer-1)));
162
  transform: none;
163
  }
54
  .tribe-events-c-view-selector__button {
55
 
56
  &:before {
57
+
58
+ .tribe-common--breakpoint-medium& {
59
  content: none;
60
  }
61
  }
62
 
63
  &:after {
64
+
65
+ .tribe-common--breakpoint-medium& {
66
  background-image: svg-inline(caret-down);
67
  background-repeat: no-repeat;
68
  background-size: contain;
79
  .tribe-events-c-view-selector__button--active {
80
 
81
  &:after {
82
+
83
+ .tribe-common--breakpoint-medium& {
84
  background-image: svg-inline(caret-up);
85
  }
86
  }
87
  }
88
 
89
  .tribe-events-c-view-selector__button-text {
90
+
91
+ .tribe-common--breakpoint-medium& {
92
  @mixin desktop-body-2-bold;
93
  }
94
  }
95
 
96
  .tribe-events-c-view-selector__content {
97
+
98
+ .tribe-common--breakpoint-medium& {
99
  box-shadow: var(--box-shadow-default);
100
  }
101
  }
104
  .tribe-events-c-view-selector--tabs {
105
 
106
  .tribe-events-c-view-selector__content {
107
+
108
+ .tribe-common--breakpoint-medium& {
109
  border: 0;
110
  border-radius: 0;
111
  box-shadow: none;
115
  .tribe-events-c-view-selector__list-item--active {
116
 
117
  .tribe-events-c-view-selector__list-item-link {
118
+
119
+ .tribe-common--breakpoint-medium& {
120
  background-color: transparent;
121
  }
122
 
123
  &:after {
124
+
125
+ .tribe-common--breakpoint-medium& {
126
  background-color: var(--color-accent-secondary);
127
  bottom: -1px;
128
  content: '';
165
  transform: translateY(var(--spacer-0));
166
  width: calc(100% - (2 * var(--spacer-0)));
167
 
168
+ .tribe-common--breakpoint-medium& {
169
  width: calc(100% - (2 * var(--spacer-1)));
170
  transform: none;
171
  }
src/resources/postcss/components/skeleton/_breadcrumbs.pcss CHANGED
@@ -10,7 +10,7 @@
10
  margin-bottom: var(--spacer-5);
11
  width: 100%;
12
 
13
- @media (--viewport-medium) {
14
  margin-bottom: var(--spacer-9);
15
  }
16
  }
@@ -36,7 +36,7 @@
36
  width: 6px;
37
  margin: 0 6px;
38
 
39
- @media (--viewport-medium) {
40
  height: 16px;
41
  width: 10px;
42
  margin: 0 10px;
10
  margin-bottom: var(--spacer-5);
11
  width: 100%;
12
 
13
+ .tribe-common--breakpoint-medium& {
14
  margin-bottom: var(--spacer-9);
15
  }
16
  }
36
  width: 6px;
37
  margin: 0 6px;
38
 
39
+ .tribe-common--breakpoint-medium& {
40
  height: 16px;
41
  width: 10px;
42
  margin: 0 10px;
src/resources/postcss/components/skeleton/_datepicker.pcss CHANGED
@@ -10,7 +10,7 @@
10
  margin-top: var(--spacer-1);
11
  padding: 0 var(--spacer-3) var(--spacer-3);
12
 
13
- @media (--viewport-medium) {
14
  margin-top: var(--spacer-3);
15
  }
16
 
@@ -22,6 +22,7 @@
22
  .prev,
23
  .next {
24
  padding: var(--spacer-4) 0;
 
25
  }
26
 
27
  .prev,
@@ -110,10 +111,10 @@
110
 
111
  .admin-bar & .datepicker {
112
  margin-top: var(--spacer-1);
 
113
 
114
- @media (--viewport-medium) {
115
- margin-top: var(--spacer-3);
116
- }
117
  }
118
 
119
  /* -----------------------------------------------------------------------------
10
  margin-top: var(--spacer-1);
11
  padding: 0 var(--spacer-3) var(--spacer-3);
12
 
13
+ .tribe-common--breakpoint-medium& {
14
  margin-top: var(--spacer-3);
15
  }
16
 
22
  .prev,
23
  .next {
24
  padding: var(--spacer-4) 0;
25
+ vertical-align: middle;
26
  }
27
 
28
  .prev,
111
 
112
  .admin-bar & .datepicker {
113
  margin-top: var(--spacer-1);
114
+ }
115
 
116
+ .admin-bar &.tribe-common--breakpoint-medium .datepicker {
117
+ margin-top: var(--spacer-3);
 
118
  }
119
 
120
  /* -----------------------------------------------------------------------------
src/resources/postcss/components/skeleton/_events-bar.pcss CHANGED
@@ -9,7 +9,7 @@
9
  .tribe-events-c-events-bar {
10
  display: flex;
11
 
12
- @media (--viewport-medium) {
13
  flex-direction: row;
14
  }
15
  }
@@ -30,7 +30,7 @@
30
  top: calc(100% - var(--spacer-2));
31
  z-index: var(--z-index-dropdown);
32
 
33
- @media (--viewport-medium) {
34
  align-items: center;
35
  display: flex;
36
  flex: auto;
@@ -41,7 +41,8 @@
41
  }
42
 
43
  .tribe-events-c-events-bar__search {
44
- @media (--viewport-medium) {
 
45
  display: flex;
46
  flex: auto;
47
  }
@@ -57,7 +58,7 @@
57
  justify-content: flex-end;
58
  margin-right: -12px;
59
 
60
- @media (--viewport-medium) {
61
  margin: var(--spacer-2) 0;
62
  }
63
  }
@@ -65,7 +66,7 @@
65
  .tribe-events-c-events-bar__filters-button {
66
  @mixin hidden;
67
 
68
- @media (--viewport-medium) {
69
  align-items: center;
70
  display: flex !important;
71
  margin: calc(var(--spacer-2) * -1) 0;
@@ -76,7 +77,8 @@
76
  &:hover,
77
  &:focus,
78
  &:active {
79
- @media (--viewport-medium) {
 
80
 
81
  &:before {
82
  background-image: svg-inline(filters-active);
@@ -85,7 +87,8 @@
85
  }
86
 
87
  &:before {
88
- @media (--viewport-medium) {
 
89
  background-image: svg-inline(filters);
90
  background-repeat: no-repeat;
91
  background-size: contain;
@@ -107,7 +110,7 @@
107
  position: relative;
108
 
109
 
110
- @media (--viewport-medium) {
111
  @mixin hidden;
112
  }
113
  }
@@ -132,7 +135,7 @@
132
  display: flex;
133
  padding-bottom: var(--spacer-2);
134
 
135
- @media (--viewport-medium) {
136
  @mixin hidden;
137
  }
138
  }
9
  .tribe-events-c-events-bar {
10
  display: flex;
11
 
12
+ .tribe-common--breakpoint-medium& {
13
  flex-direction: row;
14
  }
15
  }
30
  top: calc(100% - var(--spacer-2));
31
  z-index: var(--z-index-dropdown);
32
 
33
+ .tribe-common--breakpoint-medium& {
34
  align-items: center;
35
  display: flex;
36
  flex: auto;
41
  }
42
 
43
  .tribe-events-c-events-bar__search {
44
+
45
+ .tribe-common--breakpoint-medium& {
46
  display: flex;
47
  flex: auto;
48
  }
58
  justify-content: flex-end;
59
  margin-right: -12px;
60
 
61
+ .tribe-common--breakpoint-medium& {
62
  margin: var(--spacer-2) 0;
63
  }
64
  }
66
  .tribe-events-c-events-bar__filters-button {
67
  @mixin hidden;
68
 
69
+ .tribe-common--breakpoint-medium& {
70
  align-items: center;
71
  display: flex !important;
72
  margin: calc(var(--spacer-2) * -1) 0;
77
  &:hover,
78
  &:focus,
79
  &:active {
80
+
81
+ .tribe-common--breakpoint-medium& {
82
 
83
  &:before {
84
  background-image: svg-inline(filters-active);
87
  }
88
 
89
  &:before {
90
+
91
+ .tribe-common--breakpoint-medium& {
92
  background-image: svg-inline(filters);
93
  background-repeat: no-repeat;
94
  background-size: contain;
110
  position: relative;
111
 
112
 
113
+ .tribe-common--breakpoint-medium& {
114
  @mixin hidden;
115
  }
116
  }
135
  display: flex;
136
  padding-bottom: var(--spacer-2);
137
 
138
+ .tribe-common--breakpoint-medium& {
139
  @mixin hidden;
140
  }
141
  }
src/resources/postcss/components/skeleton/_messages.pcss CHANGED
@@ -25,7 +25,7 @@
25
  padding: var(--spacer-2);
26
  width: 100%;
27
 
28
- @media (--viewport-medium) {
29
  justify-content: center;
30
  padding: var(--spacer-3);
31
  }
25
  padding: var(--spacer-2);
26
  width: 100%;
27
 
28
+ .tribe-common--breakpoint-medium& {
29
  justify-content: center;
30
  padding: var(--spacer-3);
31
  }
src/resources/postcss/components/skeleton/_navigation.pcss CHANGED
@@ -22,7 +22,7 @@
22
  .tribe-events-c-nav {
23
  padding-top: var(--spacer-4);
24
 
25
- @media (--viewport-medium) {
26
  padding-top: var(--spacer-6);
27
  }
28
  }
@@ -38,7 +38,7 @@
38
  display: flex;
39
  width: 33.33%;
40
 
41
- @media (--viewport-medium) {
42
  width: 50%;
43
  }
44
  }
@@ -54,7 +54,7 @@
54
  .tribe-events-c-nav__list-item--today {
55
  justify-content: center;
56
 
57
- @media (--viewport-medium) {
58
  @mixin hidden;
59
  }
60
  }
@@ -63,7 +63,7 @@
63
  .tribe-events-c-nav__next-label-plural {
64
  @mixin visually-hide;
65
 
66
- @media (--viewport-medium) {
67
  @mixin visually-show;
68
  }
69
  }
22
  .tribe-events-c-nav {
23
  padding-top: var(--spacer-4);
24
 
25
+ .tribe-common--breakpoint-medium& {
26
  padding-top: var(--spacer-6);
27
  }
28
  }
38
  display: flex;
39
  width: 33.33%;
40
 
41
+ .tribe-common--breakpoint-medium& {
42
  width: 50%;
43
  }
44
  }
54
  .tribe-events-c-nav__list-item--today {
55
  justify-content: center;
56
 
57
+ .tribe-common--breakpoint-medium& {
58
  @mixin hidden;
59
  }
60
  }
63
  .tribe-events-c-nav__next-label-plural {
64
  @mixin visually-hide;
65
 
66
+ .tribe-common--breakpoint-medium& {
67
  @mixin visually-show;
68
  }
69
  }
src/resources/postcss/components/skeleton/_search.pcss CHANGED
@@ -43,14 +43,16 @@
43
  * ----------------------------------------------------------------------------- */
44
 
45
  .tribe-events-c-search {
46
- @media (--viewport-medium) {
 
47
  display: flex;
48
  align-items: center;
49
  }
50
  }
51
 
52
  .tribe-events-c-search__input-group {
53
- @media (--viewport-medium) {
 
54
  align-items: center;
55
  display: flex;
56
  flex: auto;
@@ -58,14 +60,16 @@
58
  }
59
 
60
  .tribe-events-c-search__input-control {
61
- @media (--viewport-medium) {
 
62
  flex: auto;
63
  margin: var(--spacer-2) 0;
64
  }
65
  }
66
 
67
  .tribe-events-c-search__input {
68
- @media (--viewport-medium) {
 
69
  margin: calc(var(--spacer-2) * -1) 0;
70
  }
71
  }
@@ -73,7 +77,7 @@
73
  .tribe-events-c-search__button {
74
  margin-top: var(--spacer-5);
75
 
76
- @media (--viewport-medium) {
77
  flex: none;
78
  margin-top: 0;
79
  }
@@ -91,10 +95,8 @@
91
 
92
  #top.tribe-theme-enfold & {
93
 
94
- .tribe-events-c-search__input {
95
- @media (--viewport-medium) {
96
- margin: calc(var(--spacer-2) * -1) 0;
97
- }
98
  }
99
  }
100
 
@@ -104,10 +106,8 @@
104
 
105
  .tribe-theme-avada & {
106
 
107
- .tribe-events-c-search__input {
108
- @media (--viewport-medium) {
109
- margin: calc(var(--spacer-2) * -1) 0;
110
- }
111
  }
112
  }
113
  }
43
  * ----------------------------------------------------------------------------- */
44
 
45
  .tribe-events-c-search {
46
+
47
+ .tribe-common--breakpoint-medium& {
48
  display: flex;
49
  align-items: center;
50
  }
51
  }
52
 
53
  .tribe-events-c-search__input-group {
54
+
55
+ .tribe-common--breakpoint-medium& {
56
  align-items: center;
57
  display: flex;
58
  flex: auto;
60
  }
61
 
62
  .tribe-events-c-search__input-control {
63
+
64
+ .tribe-common--breakpoint-medium& {
65
  flex: auto;
66
  margin: var(--spacer-2) 0;
67
  }
68
  }
69
 
70
  .tribe-events-c-search__input {
71
+
72
+ .tribe-common--breakpoint-medium& {
73
  margin: calc(var(--spacer-2) * -1) 0;
74
  }
75
  }
77
  .tribe-events-c-search__button {
78
  margin-top: var(--spacer-5);
79
 
80
+ .tribe-common--breakpoint-medium& {
81
  flex: none;
82
  margin-top: 0;
83
  }
95
 
96
  #top.tribe-theme-enfold & {
97
 
98
+ &.tribe-common--breakpoint-medium .tribe-events-c-search__input {
99
+ margin: calc(var(--spacer-2) * -1) 0;
 
 
100
  }
101
  }
102
 
106
 
107
  .tribe-theme-avada & {
108
 
109
+ &.tribe-common--breakpoint-medium .tribe-events-c-search__input {
110
+ margin: calc(var(--spacer-2) * -1) 0;
 
 
111
  }
112
  }
113
  }
src/resources/postcss/components/skeleton/_top-bar.pcss CHANGED
@@ -7,7 +7,8 @@
7
  .tribe-events {
8
 
9
  .tribe-events-c-top-bar {
10
- @media (--viewport-medium) {
 
11
  align-items: center;
12
  display: flex;
13
  flex-direction: row;
@@ -16,7 +17,8 @@
16
  }
17
 
18
  .tribe-events-c-top-bar__nav {
19
- @media (--viewport-medium) {
 
20
  display: block !important;
21
  flex: none;
22
  visibility: visible;
@@ -40,7 +42,8 @@
40
  display: block;
41
 
42
  &:before {
43
- @media (--viewport-medium) {
 
44
  height: 18px;
45
  width: 11px;
46
  }
@@ -48,7 +51,8 @@
48
  }
49
 
50
  .tribe-events-c-top-bar__today-button {
51
- @media (--viewport-medium) {
 
52
  display: block !important;
53
  flex: none;
54
  margin-right: 15px;
@@ -65,20 +69,26 @@
65
  flex: auto;
66
  position: relative;
67
 
68
- @media (--viewport-medium) {
69
  margin: 0;
70
  padding: 0;
71
  }
72
  }
73
 
 
 
 
 
74
  .tribe-events-c-top-bar__datepicker-mobile {
75
- @media (--viewport-full) {
 
76
  @mixin hidden;
77
  }
78
  }
79
 
80
  .tribe-events-c-top-bar__datepicker-desktop {
81
- @media (--viewport-full) {
 
82
  display: block !important;
83
  visibility: visible
84
  }
@@ -97,14 +107,15 @@
97
  position: absolute;
98
  width: 363px;
99
 
100
- @media (--viewport-medium) {
101
  max-width: none;
102
  min-width: 363px;
103
  }
104
  }
105
 
106
  .tribe-events-c-top-bar__datepicker-submit {
107
- @media (--viewport-medium) {
 
108
  display: block !important;
109
  flex: none;
110
  margin-left: 15px;
@@ -113,9 +124,8 @@
113
  }
114
 
115
  .tribe-events-c-top-bar__actions {
116
- @mixin hidden;
117
 
118
- @media (--viewport-medium) {
119
  display: block !important;
120
  flex: none;
121
  margin-left: auto;
7
  .tribe-events {
8
 
9
  .tribe-events-c-top-bar {
10
+
11
+ .tribe-common--breakpoint-medium& {
12
  align-items: center;
13
  display: flex;
14
  flex-direction: row;
17
  }
18
 
19
  .tribe-events-c-top-bar__nav {
20
+
21
+ .tribe-common--breakpoint-medium& {
22
  display: block !important;
23
  flex: none;
24
  visibility: visible;
42
  display: block;
43
 
44
  &:before {
45
+
46
+ .tribe-common--breakpoint-medium& {
47
  height: 18px;
48
  width: 11px;
49
  }
51
  }
52
 
53
  .tribe-events-c-top-bar__today-button {
54
+
55
+ .tribe-common--breakpoint-medium& {
56
  display: block !important;
57
  flex: none;
58
  margin-right: 15px;
69
  flex: auto;
70
  position: relative;
71
 
72
+ .tribe-common--breakpoint-medium& {
73
  margin: 0;
74
  padding: 0;
75
  }
76
  }
77
 
78
+ .tribe-events-c-top-bar__datepicker-separator {
79
+ white-space: pre;
80
+ }
81
+
82
  .tribe-events-c-top-bar__datepicker-mobile {
83
+
84
+ .tribe-common--breakpoint-full& {
85
  @mixin hidden;
86
  }
87
  }
88
 
89
  .tribe-events-c-top-bar__datepicker-desktop {
90
+
91
+ .tribe-common--breakpoint-full& {
92
  display: block !important;
93
  visibility: visible
94
  }
107
  position: absolute;
108
  width: 363px;
109
 
110
+ .tribe-common--breakpoint-medium& {
111
  max-width: none;
112
  min-width: 363px;
113
  }
114
  }
115
 
116
  .tribe-events-c-top-bar__datepicker-submit {
117
+
118
+ .tribe-common--breakpoint-medium& {
119
  display: block !important;
120
  flex: none;
121
  margin-left: 15px;
124
  }
125
 
126
  .tribe-events-c-top-bar__actions {
 
127
 
128
+ .tribe-common--breakpoint-medium& {
129
  display: block !important;
130
  flex: none;
131
  margin-left: auto;
src/resources/postcss/components/skeleton/_view-selector.pcss CHANGED
@@ -53,7 +53,7 @@
53
  position: relative;
54
  width: 29px;
55
 
56
- @media (--viewport-medium) {
57
  width: auto;
58
  }
59
  }
@@ -61,20 +61,23 @@
61
  .tribe-events-c-view-selector--labels {
62
 
63
  .tribe-events-c-view-selector__button {
64
- @media (--viewport-medium) {
 
65
  height: 100%;
66
  padding: var(--spacer-4) var(--spacer-5);
67
  }
68
  }
69
 
70
  .tribe-events-c-view-selector__button-icon {
71
- @media (--viewport-medium) {
 
72
  @mixin hidden;
73
  }
74
  }
75
 
76
  .tribe-events-c-view-selector__button-text {
77
- @media (--viewport-medium) {
 
78
  @mixin visually-show;
79
 
80
  flex: auto;
@@ -82,7 +85,8 @@
82
  }
83
 
84
  .tribe-events-c-view-selector__content {
85
- @media (--viewport-medium) {
 
86
  left: 0;
87
  padding: var(--spacer-1);
88
  right: auto;
@@ -92,31 +96,32 @@
92
  }
93
 
94
  .tribe-events-c-view-selector__list-item-link {
95
- @media (--viewport-medium) {
 
96
  padding: var(--spacer-0) var(--spacer-7) var(--spacer-0) var(--spacer-3);
97
  }
98
  }
99
 
100
  .tribe-events-c-view-selector__list-item-icon {
101
- @media (--viewport-medium) {
 
102
  @mixin hidden;
103
  }
104
  }
105
  }
106
 
107
  .tribe-events-c-view-selector--tabs {
108
- @media (--viewport-medium) {
109
- width: auto;
110
- }
111
 
112
  .tribe-events-c-view-selector__button {
113
- @media (--viewport-medium) {
 
114
  @mixin hidden;
115
  }
116
  }
117
 
118
  .tribe-events-c-view-selector__content {
119
- @media (--viewport-medium) {
 
120
  display: block;
121
  height: 100%;
122
  padding: 0 var(--spacer-2);
@@ -126,20 +131,23 @@
126
  }
127
 
128
  .tribe-events-c-view-selector__list {
129
- @media (--viewport-medium) {
 
130
  display: flex;
131
  height: 100%;
132
  }
133
  }
134
 
135
  .tribe-events-c-view-selector__list-item {
136
- @media (--viewport-medium) {
 
137
  margin: 0 var(--spacer-2);
138
  }
139
  }
140
 
141
  .tribe-events-c-view-selector__list-item-link {
142
- @media (--viewport-medium) {
 
143
  height: 100%;
144
  padding: var(--spacer-4) 0;
145
  position: relative;
@@ -154,7 +162,7 @@
154
  position: relative;
155
  width: 100%;
156
 
157
- @media (--viewport-medium) {
158
  padding: var(--spacer-1);
159
  }
160
  }
@@ -164,7 +172,7 @@
164
  height: 21px;
165
  width: 21px;
166
 
167
- @media (--viewport-medium) {
168
  height: 23px;
169
  width: 23px;
170
  }
@@ -180,7 +188,7 @@
180
  transform: translateY(var(--spacer-3));
181
  z-index: var(--z-index-dropdown);
182
 
183
- @media (--viewport-medium) {
184
  transform: translateY(var(--spacer-2));
185
  }
186
  }
53
  position: relative;
54
  width: 29px;
55
 
56
+ .tribe-common--breakpoint-medium& {
57
  width: auto;
58
  }
59
  }
61
  .tribe-events-c-view-selector--labels {
62
 
63
  .tribe-events-c-view-selector__button {
64
+
65
+ .tribe-common--breakpoint-medium& {
66
  height: 100%;
67
  padding: var(--spacer-4) var(--spacer-5);
68
  }
69
  }
70
 
71
  .tribe-events-c-view-selector__button-icon {
72
+
73
+ .tribe-common--breakpoint-medium& {
74
  @mixin hidden;
75
  }
76
  }
77
 
78
  .tribe-events-c-view-selector__button-text {
79
+
80
+ .tribe-common--breakpoint-medium& {
81
  @mixin visually-show;
82
 
83
  flex: auto;
85
  }
86
 
87
  .tribe-events-c-view-selector__content {
88
+
89
+ .tribe-common--breakpoint-medium& {
90
  left: 0;
91
  padding: var(--spacer-1);
92
  right: auto;
96
  }
97
 
98
  .tribe-events-c-view-selector__list-item-link {
99
+
100
+ .tribe-common--breakpoint-medium& {
101
  padding: var(--spacer-0) var(--spacer-7) var(--spacer-0) var(--spacer-3);
102
  }
103
  }
104
 
105
  .tribe-events-c-view-selector__list-item-icon {
106
+
107
+ .tribe-common--breakpoint-medium& {
108
  @mixin hidden;
109
  }
110
  }
111
  }
112
 
113
  .tribe-events-c-view-selector--tabs {
 
 
 
114
 
115
  .tribe-events-c-view-selector__button {
116
+
117
+ .tribe-common--breakpoint-medium& {
118
  @mixin hidden;
119
  }
120
  }
121
 
122
  .tribe-events-c-view-selector__content {
123
+
124
+ .tribe-common--breakpoint-medium& {
125
  display: block;
126
  height: 100%;
127
  padding: 0 var(--spacer-2);
131
  }
132
 
133
  .tribe-events-c-view-selector__list {
134
+
135
+ .tribe-common--breakpoint-medium& {
136
  display: flex;
137
  height: 100%;
138
  }
139
  }
140
 
141
  .tribe-events-c-view-selector__list-item {
142
+
143
+ .tribe-common--breakpoint-medium& {
144
  margin: 0 var(--spacer-2);
145
  }
146
  }
147
 
148
  .tribe-events-c-view-selector__list-item-link {
149
+
150
+ .tribe-common--breakpoint-medium& {
151
  height: 100%;
152
  padding: var(--spacer-4) 0;
153
  position: relative;
162
  position: relative;
163
  width: 100%;
164
 
165
+ .tribe-common--breakpoint-medium& {
166
  padding: var(--spacer-1);
167
  }
168
  }
172
  height: 21px;
173
  width: 21px;
174
 
175
+ .tribe-common--breakpoint-medium& {
176
  height: 23px;
177
  width: 23px;
178
  }
188
  transform: translateY(var(--spacer-3));
189
  z-index: var(--z-index-dropdown);
190
 
191
+ .tribe-common--breakpoint-medium& {
192
  transform: translateY(var(--spacer-2));
193
  }
194
  }
src/resources/postcss/events-admin.pcss CHANGED
@@ -1,4 +1,6 @@
1
  @custom-media --tablet (max-width: 782px);
 
 
2
 
3
  /* = Post Type Listing
4
  =============================================*/
@@ -337,6 +339,7 @@
337
  /* upgrades */
338
  #modern-tribe-info.tribe-upgrade{
339
  padding: 0;
 
340
 
341
  a, .dashicons {
342
  color: #334AFF;
@@ -344,6 +347,7 @@
344
 
345
  h3 {
346
  font-size: 24px;
 
347
  }
348
 
349
  ul {
@@ -373,6 +377,21 @@
373
  &.hidden {
374
  display: none;
375
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
  }
377
 
378
  #tribe-upgrade-step1 {
1
  @custom-media --tablet (max-width: 782px);
2
+ @custom-media --not-phone (min-width: 480px);
3
+ @custom-media --phone (max-width: 480px);
4
 
5
  /* = Post Type Listing
6
  =============================================*/
339
  /* upgrades */
340
  #modern-tribe-info.tribe-upgrade{
341
  padding: 0;
342
+ position: relative;
343
 
344
  a, .dashicons {
345
  color: #334AFF;
347
 
348
  h3 {
349
  font-size: 24px;
350
+ line-height: 1.4em;
351
  }
352
 
353
  ul {
377
  &.hidden {
378
  display: none;
379
  }
380
+
381
+ @media (--not-phone) {
382
+ .tribe-upgrade-absolute-text {
383
+ position: absolute;
384
+ word-wrap: break-word;
385
+ white-space: nowrap;
386
+ bottom: 80px;
387
+ }
388
+ }
389
+ @media (--phone) {
390
+ .tribe-upgrade-absolute-text {
391
+ display: block;
392
+ margin: 15px 10px;
393
+ }
394
+ }
395
  }
396
 
397
  #tribe-upgrade-step1 {
src/resources/postcss/views/full/day/_event.pcss CHANGED
@@ -15,7 +15,7 @@
15
  position: absolute;
16
  width: 3px;
17
 
18
- @media (--viewport-medium) {
19
  left: calc(var(--grid-width-1-of-9) - var(--grid-gutter-half));
20
  width: 4px;
21
  }
@@ -40,7 +40,8 @@
40
  }
41
 
42
  .tribe-events-calendar-day__event-datetime-featured-text {
43
- @media (--viewport-medium) {
 
44
  color: var(--color-accent-primary);
45
  font-weight: var(--font-weight-bold);
46
  }
15
  position: absolute;
16
  width: 3px;
17
 
18
+ .tribe-common--breakpoint-medium& {
19
  left: calc(var(--grid-width-1-of-9) - var(--grid-gutter-half));
20
  width: 4px;
21
  }
40
  }
41
 
42
  .tribe-events-calendar-day__event-datetime-featured-text {
43
+
44
+ .tribe-common--breakpoint-medium& {
45
  color: var(--color-accent-primary);
46
  font-weight: var(--font-weight-bold);
47
  }
src/resources/postcss/views/full/list/_event.pcss CHANGED
@@ -16,7 +16,7 @@
16
  position: absolute;
17
  width: 3px;
18
 
19
- @media (--viewport-medium) {
20
  right: -1px;
21
  width: 4px;
22
  }
@@ -49,7 +49,8 @@
49
  }
50
 
51
  .tribe-events-calendar-list__event-datetime-featured-text {
52
- @media (--viewport-medium) {
 
53
  color: var(--color-accent-primary);
54
  font-weight: var(--font-weight-bold);
55
  }
16
  position: absolute;
17
  width: 3px;
18
 
19
+ .tribe-common--breakpoint-medium& {
20
  right: -1px;
21
  width: 4px;
22
  }
49
  }
50
 
51
  .tribe-events-calendar-list__event-datetime-featured-text {
52
+
53
+ .tribe-common--breakpoint-medium& {
54
  color: var(--color-accent-primary);
55
  font-weight: var(--font-weight-bold);
56
  }
src/resources/postcss/views/full/month/_calendar-header.pcss CHANGED
@@ -12,7 +12,7 @@
12
  color: var(--color-text-secondary);
13
  text-align: center;
14
 
15
- @media (--viewport-medium) {
16
  text-align: left;
17
  }
18
  }
12
  color: var(--color-text-secondary);
13
  text-align: center;
14
 
15
+ .tribe-common--breakpoint-medium& {
16
  text-align: left;
17
  }
18
  }
src/resources/postcss/views/full/month/_day.pcss CHANGED
@@ -7,12 +7,13 @@
7
  .tribe-events-calendar-month__day {
8
  border-radius: var(--border-radius-default);
9
 
10
- @media (--viewport-medium) {
11
  border-radius: 0;
12
  }
13
 
14
  &:after {
15
- @media (--viewport-medium) {
 
16
  background-color: transparent;
17
  bottom: 0;
18
  content: '';
@@ -28,7 +29,8 @@
28
  &:hover {
29
 
30
  &:after {
31
- @media (--viewport-medium) {
 
32
  background-color: var(--color-border-active);
33
  }
34
  }
7
  .tribe-events-calendar-month__day {
8
  border-radius: var(--border-radius-default);
9
 
10
+ .tribe-common--breakpoint-medium& {
11
  border-radius: 0;
12
  }
13
 
14
  &:after {
15
+
16
+ .tribe-common--breakpoint-medium& {
17
  background-color: transparent;
18
  bottom: 0;
19
  content: '';
29
  &:hover {
30
 
31
  &:after {
32
+
33
+ .tribe-common--breakpoint-medium& {
34
  background-color: var(--color-border-active);
35
  }
36
  }
src/resources/postcss/views/skeleton/_header.pcss CHANGED
@@ -18,27 +18,30 @@
18
  padding: 0 var(--grid-gutter-small-half) var(--spacer-3);
19
  position: relative;
20
 
21
- @media (--viewport-medium) {
22
  margin: 0;
23
  padding: 0;
24
  }
25
  }
26
 
27
  .tribe-events-header--has-event-search {
28
- @media (--viewport-medium) {
 
29
  background-color: transparent;
30
  flex-direction: row;
31
  }
32
 
33
  .tribe-events-header__events-bar {
34
- @media (--viewport-medium) {
 
35
  margin-left: 0;
36
  width: 100%;
37
  }
38
  }
39
 
40
  .tribe-events-header__top-bar {
41
- @media (--viewport-medium) {
 
42
  width: 100%;
43
  }
44
  }
@@ -48,7 +51,7 @@
48
  margin-bottom: var(--spacer-3);
49
  width: 100%;
50
 
51
- @media (--viewport-medium) {
52
  margin-bottom: var(--spacer-7);
53
  order: 1;
54
  }
@@ -57,7 +60,7 @@
57
  .tribe-events-header__events-bar {
58
  flex: none;
59
 
60
- @media (--viewport-medium) {
61
  margin-bottom: var(--spacer-7);
62
  margin-left: var(--spacer-3);
63
  }
@@ -66,7 +69,7 @@
66
  .tribe-events-header__top-bar {
67
  flex: auto;
68
 
69
- @media (--viewport-medium) {
70
  margin-bottom: var(--spacer-7);
71
  }
72
  }
18
  padding: 0 var(--grid-gutter-small-half) var(--spacer-3);
19
  position: relative;
20
 
21
+ .tribe-common--breakpoint-medium& {
22
  margin: 0;
23
  padding: 0;
24
  }
25
  }
26
 
27
  .tribe-events-header--has-event-search {
28
+
29
+ .tribe-common--breakpoint-medium& {
30
  background-color: transparent;
31
  flex-direction: row;
32
  }
33
 
34
  .tribe-events-header__events-bar {
35
+
36
+ .tribe-common--breakpoint-medium& {
37
  margin-left: 0;
38
  width: 100%;
39
  }
40
  }
41
 
42
  .tribe-events-header__top-bar {
43
+
44
+ .tribe-common--breakpoint-medium& {
45
  width: 100%;
46
  }
47
  }
51
  margin-bottom: var(--spacer-3);
52
  width: 100%;
53
 
54
+ .tribe-common--breakpoint-medium& {
55
  margin-bottom: var(--spacer-7);
56
  order: 1;
57
  }
60
  .tribe-events-header__events-bar {
61
  flex: none;
62
 
63
+ .tribe-common--breakpoint-medium& {
64
  margin-bottom: var(--spacer-7);
65
  margin-left: var(--spacer-3);
66
  }
69
  .tribe-events-header__top-bar {
70
  flex: auto;
71
 
72
+ .tribe-common--breakpoint-medium& {
73
  margin-bottom: var(--spacer-7);
74
  }
75
  }
src/resources/postcss/views/skeleton/day/_event.pcss CHANGED
@@ -9,7 +9,7 @@
9
  margin-top: var(--spacer-7);
10
  padding-left: 54px;
11
 
12
- @media (--viewport-medium) {
13
  margin-bottom: var(--spacer-8);
14
  margin-top: var(--spacer-9);
15
  padding-left: 0;
@@ -18,13 +18,14 @@
18
  &:last-child {
19
  margin-bottom: var(--spacer-8);
20
 
21
- @media (--viewport-medium) {
22
  margin-bottom: var(--spacer-11);
23
  }
24
  }
25
 
26
  &:before {
27
- @media (--viewport-medium) {
 
28
  content: '';
29
  min-width: 90px;
30
  width: var(--grid-width-1-of-9);
@@ -36,7 +37,7 @@
36
  .tribe-events-calendar-day__type-separator + .tribe-events-calendar-day__event {
37
  margin-top: var(--spacer-4);
38
 
39
- @media (--viewport-medium) {
40
  margin-top: var(--spacer-8);
41
  }
42
  }
@@ -44,7 +45,7 @@
44
  .tribe-events-calendar-day__event-content {
45
  flex: none;
46
 
47
- @media (--viewport-medium) {
48
  display: flex;
49
  flex-direction: row-reverse;
50
  justify-content: flex-end;
@@ -54,7 +55,8 @@
54
  }
55
 
56
  & > * {
57
- @media (--viewport-medium) {
 
58
  padding-left: var(--grid-gutter-half);
59
  padding-right: var(--grid-gutter-half);
60
  }
@@ -64,7 +66,7 @@
64
  .tribe-events-calendar-day__event-featured-image-wrapper {
65
  margin-bottom: var(--spacer-3);
66
 
67
- @media (--viewport-medium) {
68
  flex: none;
69
  margin-bottom: 0;
70
  width: calc(3 * var(--grid-width-1-of-8));
@@ -79,7 +81,7 @@
79
  .tribe-events-calendar-day__event-details {
80
  position: relative;
81
 
82
- @media (--viewport-medium) {
83
  flex: none;
84
  width: calc(5 * var(--grid-width-1-of-8));
85
  }
@@ -94,10 +96,10 @@
94
 
95
  .tribe-events-calendar-day__event-datetime-wrapper,
96
  .tribe-events-calendar-day__event-title {
97
- margin-bottom: var(--spacer-1);
98
 
99
- @media (--viewport-medium) {
100
- margin-bottom: var(--spacer-3);
101
  }
102
 
103
  &:last-child {
@@ -111,7 +113,8 @@
111
  }
112
 
113
  .tribe-events-calendar-day__event-datetime-featured-text {
114
- @media (--viewport-medium) {
 
115
  @mixin visually-show;
116
 
117
  margin-right: var(--spacer-1);
@@ -126,15 +129,14 @@
126
  .tribe-events-calendar-day__event-venue {
127
  margin-bottom: var(--spacer-1);
128
 
129
- @media (--viewport-medium) {
130
  margin-bottom: var(--spacer-3);
131
  }
132
  }
133
 
134
  .tribe-events-calendar-day__event-description {
135
- @mixin hidden;
136
 
137
- @media (--viewport-medium) {
138
  display: block !important;
139
  margin-top: var(--spacer-3);
140
  visibility: visible;
@@ -144,7 +146,7 @@
144
  .tribe-events-calendar-day__event-cost {
145
  margin-top: var(--spacer-2);
146
 
147
- @media (--viewport-medium) {
148
  margin-top: var(--spacer-3);
149
  }
150
  }
@@ -160,26 +162,30 @@
160
  margin-top: var(--spacer-7);
161
  padding-left: 54px;
162
 
163
- @media (--viewport-medium) {
164
  margin-bottom: var(--spacer-8);
165
- margin-top: var(--spacer-9);
166
- padding-left: 0;
167
  }
 
168
 
169
- &:last-child {
170
- margin-bottom: var(--spacer-8);
 
 
171
 
172
- @media (--viewport-medium) {
173
- margin-bottom: var(--spacer-11);
174
- }
175
  }
176
  }
177
 
178
  .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
179
  .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
180
  margin-top: var(--spacer-4);
 
 
 
181
 
182
- @media (--viewport-medium) {
 
183
  margin-top: var(--spacer-8);
184
  }
185
  }
9
  margin-top: var(--spacer-7);
10
  padding-left: 54px;
11
 
12
+ .tribe-common--breakpoint-medium& {
13
  margin-bottom: var(--spacer-8);
14
  margin-top: var(--spacer-9);
15
  padding-left: 0;
18
  &:last-child {
19
  margin-bottom: var(--spacer-8);
20
 
21
+ .tribe-common--breakpoint-medium& {
22
  margin-bottom: var(--spacer-11);
23
  }
24
  }
25
 
26
  &:before {
27
+
28
+ .tribe-common--breakpoint-medium& {
29
  content: '';
30
  min-width: 90px;
31
  width: var(--grid-width-1-of-9);
37
  .tribe-events-calendar-day__type-separator + .tribe-events-calendar-day__event {
38
  margin-top: var(--spacer-4);
39
 
40
+ .tribe-common--breakpoint-medium& {
41
  margin-top: var(--spacer-8);
42
  }
43
  }
45
  .tribe-events-calendar-day__event-content {
46
  flex: none;
47
 
48
+ .tribe-common--breakpoint-medium& {
49
  display: flex;
50
  flex-direction: row-reverse;
51
  justify-content: flex-end;
55
  }
56
 
57
  & > * {
58
+
59
+ .tribe-common--breakpoint-medium& {
60
  padding-left: var(--grid-gutter-half);
61
  padding-right: var(--grid-gutter-half);
62
  }
66
  .tribe-events-calendar-day__event-featured-image-wrapper {
67
  margin-bottom: var(--spacer-3);
68
 
69
+ .tribe-common--breakpoint-medium& {
70
  flex: none;
71
  margin-bottom: 0;
72
  width: calc(3 * var(--grid-width-1-of-8));
81
  .tribe-events-calendar-day__event-details {
82
  position: relative;
83
 
84
+ .tribe-common--breakpoint-medium& {
85
  flex: none;
86
  width: calc(5 * var(--grid-width-1-of-8));
87
  }
96
 
97
  .tribe-events-calendar-day__event-datetime-wrapper,
98
  .tribe-events-calendar-day__event-title {
99
+ margin: 0 0 var(--spacer-1);
100
 
101
+ .tribe-common--breakpoint-medium& {
102
+ margin: 0 0 var(--spacer-3);
103
  }
104
 
105
  &:last-child {
113
  }
114
 
115
  .tribe-events-calendar-day__event-datetime-featured-text {
116
+
117
+ .tribe-common--breakpoint-medium& {
118
  @mixin visually-show;
119
 
120
  margin-right: var(--spacer-1);
129
  .tribe-events-calendar-day__event-venue {
130
  margin-bottom: var(--spacer-1);
131
 
132
+ .tribe-common--breakpoint-medium& {
133
  margin-bottom: var(--spacer-3);
134
  }
135
  }
136
 
137
  .tribe-events-calendar-day__event-description {
 
138
 
139
+ .tribe-common--breakpoint-medium& {
140
  display: block !important;
141
  margin-top: var(--spacer-3);
142
  visibility: visible;
146
  .tribe-events-calendar-day__event-cost {
147
  margin-top: var(--spacer-2);
148
 
149
+ .tribe-common--breakpoint-medium& {
150
  margin-top: var(--spacer-3);
151
  }
152
  }
162
  margin-top: var(--spacer-7);
163
  padding-left: 54px;
164
 
165
+ &:last-child {
166
  margin-bottom: var(--spacer-8);
 
 
167
  }
168
+ }
169
 
170
+ &.tribe-common--breakpoint-medium .entry.tribe-events-calendar-day__event {
171
+ margin-bottom: var(--spacer-8);
172
+ margin-top: var(--spacer-9);
173
+ padding-left: 0;
174
 
175
+ &:last-child {
176
+ margin-bottom: var(--spacer-11);
 
177
  }
178
  }
179
 
180
  .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
181
  .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
182
  margin-top: var(--spacer-4);
183
+ }
184
+
185
+ &.tribe-common--breakpoint-medium {
186
 
187
+ .tribe-events-calendar-day__time-separator + .entry.tribe-events-calendar-day__event,
188
+ .tribe-events-calendar-day__type-separator + .entry.tribe-events-calendar-day__event {
189
  margin-top: var(--spacer-8);
190
  }
191
  }
src/resources/postcss/views/skeleton/day/_nav.pcss CHANGED
@@ -7,7 +7,7 @@
7
  .tribe-events-calendar-day-nav {
8
  padding-top: var(--spacer-5);
9
 
10
- @media (--viewport-medium) {
11
  padding-top: var(--spacer-7);
12
  }
13
  }
7
  .tribe-events-calendar-day-nav {
8
  padding-top: var(--spacer-5);
9
 
10
+ .tribe-common--breakpoint-medium& {
11
  padding-top: var(--spacer-7);
12
  }
13
  }
src/resources/postcss/views/skeleton/list/_event.pcss CHANGED
@@ -9,7 +9,7 @@
9
  margin-bottom: var(--spacer-5);
10
  margin-top: var(--spacer-7);
11
 
12
- @media (--viewport-medium) {
13
  margin-bottom: var(--spacer-8);
14
  margin-top: var(--spacer-9);
15
  margin-left: var(--grid-gutter-half-negative);
@@ -17,7 +17,8 @@
17
  }
18
 
19
  & > .tribe-common-g-col {
20
- @media (--viewport-medium) {
 
21
  padding-left: var(--grid-gutter-half);
22
  padding-right: var(--grid-gutter-half);
23
  }
@@ -26,7 +27,7 @@
26
  &:last-child {
27
  margin-bottom: var(--spacer-8);
28
 
29
- @media (--viewport-medium) {
30
  margin-bottom: var(--spacer-11);
31
  }
32
  }
@@ -35,7 +36,7 @@
35
  .tribe-events-calendar-list__month-separator + .tribe-events-calendar-list__event-row {
36
  margin-top: var(--spacer-4);
37
 
38
- @media (--viewport-medium) {
39
  margin-top: var(--spacer-8);
40
  }
41
  }
@@ -45,7 +46,7 @@
45
  width: 54px;
46
  position: relative;
47
 
48
- @media (--viewport-medium) {
49
  min-width: 90px;
50
  width: var(--grid-width-1-of-9);
51
  }
@@ -66,7 +67,7 @@
66
  flex: 1;
67
  width: calc((3 * var(--grid-width-1-of-4)) + var(--grid-gutter-small-half));
68
 
69
- @media (--viewport-medium) {
70
  flex: 1 1 calc(8 * var(--grid-width-1-of-9));
71
  }
72
  }
@@ -74,7 +75,7 @@
74
  .tribe-events-calendar-list__event {
75
  flex-direction: column;
76
 
77
- @media (--viewport-medium) {
78
  flex-direction: row-reverse;
79
  justify-content: flex-end;
80
  }
@@ -84,7 +85,7 @@
84
  flex: none;
85
  margin-bottom: var(--spacer-3);
86
 
87
- @media (--viewport-medium) {
88
  margin-bottom: 0;
89
  width: calc(3 * var(--grid-width-1-of-8));
90
  }
@@ -98,7 +99,7 @@
98
  .tribe-events-calendar-list__event-details {
99
  flex: none;
100
 
101
- @media (--viewport-medium) {
102
  width: calc(5 * var(--grid-width-1-of-8));
103
  }
104
  }
@@ -112,10 +113,10 @@
112
 
113
  .tribe-events-calendar-list__event-datetime-wrapper,
114
  .tribe-events-calendar-list__event-title {
115
- margin-bottom: var(--spacer-1);
116
 
117
- @media (--viewport-medium) {
118
- margin-bottom: var(--spacer-3);
119
  }
120
 
121
  &:last-child {
@@ -129,7 +130,8 @@
129
  }
130
 
131
  .tribe-events-calendar-list__event-datetime-featured-text {
132
- @media (--viewport-medium) {
 
133
  @mixin visually-show;
134
 
135
  margin-right: var(--spacer-1);
@@ -144,15 +146,14 @@
144
  .tribe-events-calendar-list__event-venue {
145
  margin-bottom: var(--spacer-1);
146
 
147
- @media (--viewport-medium) {
148
  margin-bottom: var(--spacer-3);
149
  }
150
  }
151
 
152
  .tribe-events-calendar-list__event-description {
153
- @mixin hidden;
154
 
155
- @media (--viewport-medium) {
156
  display: block !important;
157
  margin-top: var(--spacer-3);
158
  visibility: visible;
@@ -162,7 +163,7 @@
162
  .tribe-events-calendar-list__event-cost {
163
  margin-top: var(--spacer-2);
164
 
165
- @media (--viewport-medium) {
166
  margin-top: var(--spacer-3);
167
  }
168
  }
9
  margin-bottom: var(--spacer-5);
10
  margin-top: var(--spacer-7);
11
 
12
+ .tribe-common--breakpoint-medium& {
13
  margin-bottom: var(--spacer-8);
14
  margin-top: var(--spacer-9);
15
  margin-left: var(--grid-gutter-half-negative);
17
  }
18
 
19
  & > .tribe-common-g-col {
20
+
21
+ .tribe-common--breakpoint-medium& {
22
  padding-left: var(--grid-gutter-half);
23
  padding-right: var(--grid-gutter-half);
24
  }
27
  &:last-child {
28
  margin-bottom: var(--spacer-8);
29
 
30
+ .tribe-common--breakpoint-medium& {
31
  margin-bottom: var(--spacer-11);
32
  }
33
  }
36
  .tribe-events-calendar-list__month-separator + .tribe-events-calendar-list__event-row {
37
  margin-top: var(--spacer-4);
38
 
39
+ .tribe-common--breakpoint-medium& {
40
  margin-top: var(--spacer-8);
41
  }
42
  }
46
  width: 54px;
47
  position: relative;
48
 
49
+ .tribe-common--breakpoint-medium& {
50
  min-width: 90px;
51
  width: var(--grid-width-1-of-9);
52
  }
67
  flex: 1;
68
  width: calc((3 * var(--grid-width-1-of-4)) + var(--grid-gutter-small-half));
69
 
70
+ .tribe-common--breakpoint-medium& {
71
  flex: 1 1 calc(8 * var(--grid-width-1-of-9));
72
  }
73
  }
75
  .tribe-events-calendar-list__event {
76
  flex-direction: column;
77
 
78
+ .tribe-common--breakpoint-medium& {
79
  flex-direction: row-reverse;
80
  justify-content: flex-end;
81
  }
85
  flex: none;
86
  margin-bottom: var(--spacer-3);
87
 
88
+ .tribe-common--breakpoint-medium& {
89
  margin-bottom: 0;
90
  width: calc(3 * var(--grid-width-1-of-8));
91
  }
99
  .tribe-events-calendar-list__event-details {
100
  flex: none;
101
 
102
+ .tribe-common--breakpoint-medium& {
103
  width: calc(5 * var(--grid-width-1-of-8));
104
  }
105
  }
113
 
114
  .tribe-events-calendar-list__event-datetime-wrapper,
115
  .tribe-events-calendar-list__event-title {
116
+ margin: 0 0 var(--spacer-1);
117
 
118
+ .tribe-common--breakpoint-medium& {
119
+ margin: 0 0 var(--spacer-3);
120
  }
121
 
122
  &:last-child {
130
  }
131
 
132
  .tribe-events-calendar-list__event-datetime-featured-text {
133
+
134
+ .tribe-common--breakpoint-medium& {
135
  @mixin visually-show;
136
 
137
  margin-right: var(--spacer-1);
146
  .tribe-events-calendar-list__event-venue {
147
  margin-bottom: var(--spacer-1);
148
 
149
+ .tribe-common--breakpoint-medium& {
150
  margin-bottom: var(--spacer-3);
151
  }
152
  }
153
 
154
  .tribe-events-calendar-list__event-description {
 
155
 
156
+ .tribe-common--breakpoint-medium& {
157
  display: block !important;
158
  margin-top: var(--spacer-3);
159
  visibility: visible;
163
  .tribe-events-calendar-list__event-cost {
164
  margin-top: var(--spacer-2);
165
 
166
+ .tribe-common--breakpoint-medium& {
167
  margin-top: var(--spacer-3);
168
  }
169
  }
src/resources/postcss/views/skeleton/list/_nav.pcss CHANGED
@@ -7,7 +7,7 @@
7
  .tribe-events-calendar-list-nav {
8
  padding-top: var(--spacer-5);
9
 
10
- @media (--viewport-medium) {
11
  padding-top: var(--spacer-7);
12
  }
13
  }
7
  .tribe-events-calendar-list-nav {
8
  padding-top: var(--spacer-5);
9
 
10
+ .tribe-common--breakpoint-medium& {
11
  padding-top: var(--spacer-7);
12
  }
13
  }
src/resources/postcss/views/skeleton/month/_calendar-body.pcss CHANGED
@@ -5,7 +5,8 @@
5
  * ----------------------------------------------------------------------------- */
6
 
7
  .tribe-events-calendar-month__body {
8
- @media (--viewport-medium) {
 
9
  border-top: 1px solid var(--color-border-secondary);
10
  }
11
  }
@@ -13,7 +14,7 @@
13
  .tribe-events-calendar-month__week {
14
  display: flex;
15
 
16
- @media (--viewport-medium) {
17
  border-left: 1px solid var(--color-border-secondary);
18
  }
19
  }
5
  * ----------------------------------------------------------------------------- */
6
 
7
  .tribe-events-calendar-month__body {
8
+
9
+ .tribe-common--breakpoint-medium& {
10
  border-top: 1px solid var(--color-border-secondary);
11
  }
12
  }
14
  .tribe-events-calendar-month__week {
15
  display: flex;
16
 
17
+ .tribe-common--breakpoint-medium& {
18
  border-left: 1px solid var(--color-border-secondary);
19
  }
20
  }
src/resources/postcss/views/skeleton/month/_calendar-event.pcss CHANGED
@@ -103,6 +103,10 @@
103
  }
104
  }
105
 
 
 
 
 
106
  .tribe-events-calendar-month__calendar-event-tooltip-cost {
107
  margin-top: var(--spacer-3);
108
  }
103
  }
104
  }
105
 
106
+ .tribe-events-calendar-month__calendar-event-title {
107
+ margin: 0;
108
+ }
109
+
110
  .tribe-events-calendar-month__calendar-event-tooltip-cost {
111
  margin-top: var(--spacer-3);
112
  }
src/resources/postcss/views/skeleton/month/_calendar-header.pcss CHANGED
@@ -13,14 +13,20 @@
13
  padding-bottom: var(--spacer-3);
14
  }
15
 
 
 
 
 
16
  .tribe-events-calendar-month__header-column-title-mobile {
17
- @media (--viewport-medium) {
 
18
  @mixin hidden;
19
  }
20
  }
21
 
22
  .tribe-events-calendar-month__header-column-title-desktop {
23
- @media (--viewport-medium) {
 
24
  display: block !important;
25
  visibility: visible
26
  }
13
  padding-bottom: var(--spacer-3);
14
  }
15
 
16
+ .tribe-events-calendar-month__header-column-title {
17
+ margin: 0;
18
+ }
19
+
20
  .tribe-events-calendar-month__header-column-title-mobile {
21
+
22
+ .tribe-common--breakpoint-medium& {
23
  @mixin hidden;
24
  }
25
  }
26
 
27
  .tribe-events-calendar-month__header-column-title-desktop {
28
+
29
+ .tribe-common--breakpoint-medium& {
30
  display: block !important;
31
  visibility: visible
32
  }
src/resources/postcss/views/skeleton/month/_calendar.pcss CHANGED
@@ -7,7 +7,7 @@
7
  .tribe-events-calendar-month {
8
  margin-bottom: var(--spacer-1);
9
 
10
- @media (--viewport-medium) {
11
  margin: 0;
12
  }
13
  }
7
  .tribe-events-calendar-month {
8
  margin-bottom: var(--spacer-1);
9
 
10
+ .tribe-common--breakpoint-medium& {
11
  margin: 0;
12
  }
13
  }
src/resources/postcss/views/skeleton/month/_day.pcss CHANGED
@@ -10,7 +10,7 @@
10
  position: relative;
11
  width: var(--grid-width-1-of-7);
12
 
13
- @media (--viewport-medium) {
14
  border-color: var(--color-border-secondary);
15
  border-style: solid;
16
  border-width: 0 1px 1px 0;
@@ -31,13 +31,14 @@
31
  flex-direction: column;
32
  text-align: center;
33
 
34
- @media (--viewport-medium) {
35
  @mixin hidden;
36
  }
37
  }
38
 
39
  .tribe-events-calendar-month__day-cell--desktop {
40
- @media (--viewport-medium) {
 
41
  display: flex !important;
42
  flex-direction: column;
43
  visibility: visible;
@@ -45,7 +46,9 @@
45
  }
46
 
47
  .tribe-events-calendar-month__day-date {
48
- @media (--viewport-medium) {
 
 
49
  flex: none;
50
  padding: var(--spacer-1) var(--spacer-3);
51
  }
10
  position: relative;
11
  width: var(--grid-width-1-of-7);
12
 
13
+ .tribe-common--breakpoint-medium& {
14
  border-color: var(--color-border-secondary);
15
  border-style: solid;
16
  border-width: 0 1px 1px 0;
31
  flex-direction: column;
32
  text-align: center;
33
 
34
+ .tribe-common--breakpoint-medium& {
35
  @mixin hidden;
36
  }
37
  }
38
 
39
  .tribe-events-calendar-month__day-cell--desktop {
40
+
41
+ .tribe-common--breakpoint-medium& {
42
  display: flex !important;
43
  flex-direction: column;
44
  visibility: visible;
46
  }
47
 
48
  .tribe-events-calendar-month__day-date {
49
+ margin: 0;
50
+
51
+ .tribe-common--breakpoint-medium& {
52
  flex: none;
53
  padding: var(--spacer-1) var(--spacer-3);
54
  }
src/resources/postcss/views/skeleton/month/_mobile-events.pcss CHANGED
@@ -5,7 +5,8 @@
5
  * ----------------------------------------------------------------------------- */
6
 
7
  .tribe-events-calendar-month-mobile-events {
8
- @media (--viewport-medium) {
 
9
  @mixin hidden;
10
  }
11
  }
@@ -56,6 +57,10 @@
56
  margin-right: var(--spacer-1);
57
  }
58
 
 
 
 
 
59
  .tribe-events-calendar-month-mobile-events__mobile-event-cost {
60
  margin-top: var(--spacer-1);
61
  }
5
  * ----------------------------------------------------------------------------- */
6
 
7
  .tribe-events-calendar-month-mobile-events {
8
+
9
+ .tribe-common--breakpoint-medium& {
10
  @mixin hidden;
11
  }
12
  }
57
  margin-right: var(--spacer-1);
58
  }
59
 
60
+ .tribe-events-calendar-month-mobile-events__mobile-event-title {
61
+ margin: 0;
62
+ }
63
+
64
  .tribe-events-calendar-month-mobile-events__mobile-event-cost {
65
  margin-top: var(--spacer-1);
66
  }
src/resources/postcss/views/skeleton/month/_multiday-event.pcss CHANGED
@@ -5,7 +5,8 @@
5
  * ----------------------------------------------------------------------------- */
6
 
7
  .tribe-events-calendar-month__multiday-event-wrapper {
8
- @media (--viewport-medium) {
 
9
  height: 19px;
10
  margin-bottom: var(--spacer-0);
11
  position: relative;
@@ -63,6 +64,8 @@
63
  }
64
 
65
  .tribe-events-calendar-month__multiday-event-hidden-title {
 
 
66
  white-space: nowrap;
67
  }
68
 
@@ -94,6 +97,7 @@
94
 
95
  .tribe-events-calendar-month__multiday-event-bar-title {
96
  flex: none;
 
97
  max-width: 100%;
98
  overflow: hidden;
99
  white-space: nowrap;
5
  * ----------------------------------------------------------------------------- */
6
 
7
  .tribe-events-calendar-month__multiday-event-wrapper {
8
+
9
+ .tribe-common--breakpoint-medium& {
10
  height: 19px;
11
  margin-bottom: var(--spacer-0);
12
  position: relative;
64
  }
65
 
66
  .tribe-events-calendar-month__multiday-event-hidden-title {
67
+ margin: 0;
68
+ overflow: hidden;
69
  white-space: nowrap;
70
  }
71
 
97
 
98
  .tribe-events-calendar-month__multiday-event-bar-title {
99
  flex: none;
100
+ margin: 0;
101
  max-width: 100%;
102
  overflow: hidden;
103
  white-space: nowrap;
src/resources/postcss/views/skeleton/month/_nav.pcss CHANGED
@@ -7,7 +7,7 @@
7
  .tribe-events-calendar-month-nav {
8
  padding-top: var(--spacer-4);
9
 
10
- @media (--viewport-medium) {
11
  @mixin hidden;
12
  }
13
  }
7
  .tribe-events-calendar-month-nav {
8
  padding-top: var(--spacer-4);
9
 
10
+ .tribe-common--breakpoint-medium& {
11
  @mixin hidden;
12
  }
13
  }
src/views/v2/components/breakpoints.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Breakpoints
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/components/breakpoints.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 5.0.0
13
+ *
14
+ * @var bool $is_initial_load Boolean on whether view is being loaded for the first time.
15
+ */
16
+
17
+ if ( ! $is_initial_load ) {
18
+ return;
19
+ }
20
+ ?>
21
+ <script class="tribe-events-breakpoints">
22
+ if ( 'undefined' !== typeof window.tribe ) {
23
+ var scripts = document.getElementsByTagName( 'script' );
24
+ window.tribe.events.views.breakpoints.setup( scripts[ scripts.length - 1 ] );
25
+ }
26
+ </script>
src/views/v2/components/data.php CHANGED
@@ -9,23 +9,46 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  */
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  /**
16
  * Filters the data that will be printed for the View.
17
  *
18
  * @since 4.9.7
19
  *
20
- * @param array $data The data that will be printed for the current View.
21
- * @param string $view_slug The slug of the view currently being rendered.
22
- * @param Tribe\Events\Views\V2\View_Interface $view The View instance that is being rendered.
23
  */
24
- $data = apply_filters( 'tribe_events_views_v2_view_data', $this->get_values(), $view_slug, $view );
25
  ?>
26
  <script
27
  data-js="tribe-events-view-data"
28
  type="application/json"
29
  >
30
- <?php echo json_encode( $data ); ?>
31
  </script>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  */
14
 
15
+ $data = $this->get_values();
16
+
17
+ /**
18
+ * For very specific performance and security reasons we choose to not expose the full WP_Post object by default.
19
+ * The following filter will allow by passing true, that the full WP_Post object gets exposed.
20
+ *
21
+ * @since 5.0.0
22
+ *
23
+ * @param boolean $should_expose_post_object If we should expose the events object or not.
24
+ * @param array $data Data that will be exposed.
25
+ * @param string $view_slug The slug of the view currently being rendered.
26
+ * @param Tribe\Events\Views\V2\View_Interface $view The View instance that is being rendered.
27
+ */
28
+ $should_expose_post_object = apply_filters( 'tribe_events_views_v2_view_data_should_expose_post_object', false, $data, $view_slug, $view );
29
+
30
+ if ( ! $should_expose_post_object ) {
31
+ array_walk_recursive( $data, function ( &$value, $key ) {
32
+ if ( $value instanceof WP_Post ) {
33
+ $value = $value->ID;
34
+ }
35
+ } );
36
+ }
37
+
38
  /**
39
  * Filters the data that will be printed for the View.
40
  *
41
  * @since 4.9.7
42
  *
43
+ * @param array $data The data that will be printed for the current View.
44
+ * @param string $view_slug The slug of the view currently being rendered.
45
+ * @param Tribe\Events\Views\V2\View_Interface $view The View instance that is being rendered.
46
  */
47
+ $data = apply_filters( 'tribe_events_views_v2_view_data', $data, $view_slug, $view );
48
  ?>
49
  <script
50
  data-js="tribe-events-view-data"
51
  type="application/json"
52
  >
53
+ <?php echo wp_json_encode( $data ); ?>
54
  </script>
src/views/v2/components/events-bar/views.php CHANGED
@@ -9,20 +9,14 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
- * @var bool $disable_event_search Boolean on whether to disable the event search.
 
 
 
15
  */
16
 
17
- /**
18
- * @todo: @bordoni can we move this to context?
19
- */
20
- use Tribe\Events\Views\V2\Manager;
21
-
22
- $public_views = tribe( Manager::class )->get_publicly_visible_views();
23
- $view_slug = $this->get( 'view' )->get_slug();
24
- $view_label = $this->get( 'view' )->get_label();
25
-
26
  $is_tabs_style = empty( $disable_event_search ) && 3 >= count( $public_views );
27
  $view_selector_classes = [
28
  'tribe-events-c-view-selector' => true,
@@ -44,6 +38,6 @@ $view_selector_classes = [
44
  <?php echo esc_html( $view_label ); ?>
45
  </span>
46
  </button>
47
- <?php $this->template( 'components/events-bar/views/list', [ 'views' => $public_views ] ); ?>
48
  </div>
49
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
+ * @var string $view_slug Slug of the current view.
15
+ * @var string $view_label Label of the current view.
16
+ * @var array $public_views Array of data of the public views, with the slug as the key.
17
+ * @var bool $disable_event_search Boolean on whether to disable the event search.
18
  */
19
 
 
 
 
 
 
 
 
 
 
20
  $is_tabs_style = empty( $disable_event_search ) && 3 >= count( $public_views );
21
  $view_selector_classes = [
22
  'tribe-events-c-view-selector' => true,
38
  <?php echo esc_html( $view_label ); ?>
39
  </span>
40
  </button>
41
+ <?php $this->template( 'components/events-bar/views/list' ); ?>
42
  </div>
43
  </div>
src/views/v2/components/events-bar/views/list.php CHANGED
@@ -9,8 +9,9 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  *
 
14
  */
15
  ?>
16
  <div
@@ -19,8 +20,11 @@
19
  data-js="tribe-events-view-selector-list-container"
20
  >
21
  <ul class="tribe-events-c-view-selector__list">
22
- <?php foreach ( $this->get( 'views' ) as $view => $view_class_name ) : ?>
23
- <?php $this->template( 'components/events-bar/views/list/item', [ 'view_class_name' => $view_class_name ] ); ?>
 
 
 
24
  <?php endforeach; ?>
25
  </ul>
26
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
+ * @var array $public_views Array of data of the public views, with the slug as the key.
15
  */
16
  ?>
17
  <div
20
  data-js="tribe-events-view-selector-list-container"
21
  >
22
  <ul class="tribe-events-c-view-selector__list">
23
+ <?php foreach ( $public_views as $public_view_slug => $public_view_data ) : ?>
24
+ <?php $this->template(
25
+ 'components/events-bar/views/list/item',
26
+ [ 'public_view_slug' => $public_view_slug, 'public_view_data' => $public_view_data ]
27
+ ); ?>
28
  <?php endforeach; ?>
29
  </ul>
30
  </div>
src/views/v2/components/events-bar/views/list/item.php CHANGED
@@ -9,47 +9,27 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @var View_Interface $view The View that is currently rendering.
13
- * @var string $url_event_date The value, `Y-m-d` format, of the `eventDate` request variable to append to the
14
- * view URL, if any.
15
  *
16
- * @version 4.9.10
17
  */
18
 
19
- use Tribe\Events\Views\V2\View;
20
- use Tribe\Events\Views\V2\View_Interface;
21
-
22
- // Bail on invalid name of class
23
- if ( ! $this->get( 'view_class_name' ) ) {
24
- return;
25
- }
26
-
27
- $view_instance = View::make( $this->get( 'view_class_name' ) );
28
- $view_slug = $view_instance->get_slug();
29
- $is_current_view = $view->get_slug() === $view_instance->get_slug();
30
-
31
- if ( ! empty( $url_event_date ) ) {
32
- // Each View expects the event date in a specific format, here we account for it.
33
- $query_args = wp_parse_url( $view->get_url( false ), PHP_URL_QUERY );
34
- $view_url = $view_instance->url_for_query_args( $url_event_date, $query_args );
35
- } else {
36
- $view_url = tribe_events_get_url( array_filter( [ 'eventDisplay' => $view_slug ] ) );
37
- }
38
-
39
- $list_item_classes = [ 'tribe-events-c-view-selector__list-item', "tribe-events-c-view-selector__list-item--$view_slug" ];
40
- if ( $is_current_view ) {
41
  $list_item_classes[] = 'tribe-events-c-view-selector__list-item--active';
42
  }
43
  ?>
44
  <li class="<?php echo esc_attr( implode( ' ', $list_item_classes ) ); ?>">
45
  <a
46
- href="<?php echo esc_url( $view_url ); ?>"
47
  class="tribe-events-c-view-selector__list-item-link"
48
  data-js="tribe-events-view-link"
49
  >
50
- <span class="tribe-events-c-view-selector__list-item-icon tribe-common-svgicon tribe-common-svgicon--<?php echo esc_attr( $view_slug ); ?>"></span>
51
  <span class="tribe-events-c-view-selector__list-item-text">
52
- <?php echo esc_html( $view_instance->get_label() ); ?>
53
  </span>
54
  </a>
55
  </li>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @var string $view_slug Slug of the current view.
13
+ * @var string $public_view_slug Slug of the view currently being listed.
14
+ * @var object $public_view_data Data of the view currently being listed.
15
  *
16
+ * @version 5.0.0
17
  */
18
 
19
+ $list_item_classes = [ 'tribe-events-c-view-selector__list-item', "tribe-events-c-view-selector__list-item--$public_view_slug" ];
20
+ if ( $view_slug === $public_view_slug ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  $list_item_classes[] = 'tribe-events-c-view-selector__list-item--active';
22
  }
23
  ?>
24
  <li class="<?php echo esc_attr( implode( ' ', $list_item_classes ) ); ?>">
25
  <a
26
+ href="<?php echo esc_url( $public_view_data->view_url ); ?>"
27
  class="tribe-events-c-view-selector__list-item-link"
28
  data-js="tribe-events-view-link"
29
  >
30
+ <span class="tribe-events-c-view-selector__list-item-icon tribe-common-svgicon tribe-common-svgicon--<?php echo esc_attr( $public_view_slug ); ?>"></span>
31
  <span class="tribe-events-c-view-selector__list-item-text">
32
+ <?php echo esc_html( $public_view_data->view_label ); ?>
33
  </span>
34
  </a>
35
  </li>
src/views/v2/components/top-bar/actions.php CHANGED
@@ -9,10 +9,10 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  *
14
  */
15
  ?>
16
- <div class="tribe-events-c-top-bar__actions">
17
  <?php $this->template( 'components/top-bar/actions/content' ); ?>
18
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  */
15
  ?>
16
+ <div class="tribe-events-c-top-bar__actions tribe-common-a11y-hidden">
17
  <?php $this->template( 'components/top-bar/actions/content' ); ?>
18
  </div>
src/views/v2/day.php CHANGED
@@ -9,13 +9,15 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
16
  * @var string $rest_nonce The REST nonce.
17
  * @var bool $disable_event_search Boolean on whether to disable the event search.
18
  * @var string[] $container_classes Classes used for the container of the view.
 
 
19
  */
20
 
21
  $header_classes = [ 'tribe-events-header' ];
@@ -30,6 +32,9 @@ if ( empty( $disable_event_search ) ) {
30
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
31
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
32
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
 
 
 
33
  >
34
  <div class="tribe-common-l-container tribe-events-l-container">
35
  <?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
@@ -72,3 +77,5 @@ if ( empty( $disable_event_search ) ) {
72
  </div>
73
 
74
  </div>
 
 
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
16
  * @var string $rest_nonce The REST nonce.
17
  * @var bool $disable_event_search Boolean on whether to disable the event search.
18
  * @var string[] $container_classes Classes used for the container of the view.
19
+ * @var bool $should_manage_url Whether the view should manage the URL or not.
20
+ * @var array $container_data An additional set of container `data` attributes.
21
  */
22
 
23
  $header_classes = [ 'tribe-events-header' ];
32
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
33
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
34
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
35
+ <?php foreach ( $container_data as $key => $value ) : ?>
36
+ data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
37
+ <?php endforeach; ?>
38
  >
39
  <div class="tribe-common-l-container tribe-events-l-container">
40
  <?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
77
  </div>
78
 
79
  </div>
80
+
81
+ <?php $this->template( 'components/breakpoints' ); ?>
src/views/v2/day/event.php CHANGED
@@ -9,14 +9,14 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
16
  * @see tribe_get_event() For the format of the event object.
17
  */
18
 
19
- $classes = get_post_class( [ 'tribe-common-g-row', 'tribe-common-g-row--gutters', 'tribe-events-calendar-day__event' ], $event->ID );
20
 
21
  if ( $event->featured ) {
22
  $classes[] = 'tribe-events-calendar-day__event--featured';
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
16
  * @see tribe_get_event() For the format of the event object.
17
  */
18
 
19
+ $classes = tribe_get_post_class( [ 'tribe-common-g-row', 'tribe-common-g-row--gutters', 'tribe-events-calendar-day__event' ], $event->ID );
20
 
21
  if ( $event->featured ) {
22
  $classes[] = 'tribe-events-calendar-day__event--featured';
src/views/v2/day/event/description.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -20,6 +20,6 @@ if ( empty( (string) $event->excerpt ) ) {
20
  return;
21
  }
22
  ?>
23
- <div class="tribe-events-calendar-day__event-description tribe-common-b2">
24
  <?php echo (string) $event->excerpt; ?>
25
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
20
  return;
21
  }
22
  ?>
23
+ <div class="tribe-events-calendar-day__event-description tribe-common-b2 tribe-common-a11y-hidden">
24
  <?php echo (string) $event->excerpt; ?>
25
  </div>
src/views/v2/day/event/featured-image.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -24,7 +24,7 @@ if ( ! $event->thumbnail->exists ) {
24
  <div class="tribe-events-calendar-day__event-featured-image-wrapper">
25
  <a
26
  href="<?php echo esc_url( $event->permalink ); ?>"
27
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
28
  rel="bookmark"
29
  class="tribe-events-calendar-day__event-featured-image-link"
30
  >
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
24
  <div class="tribe-events-calendar-day__event-featured-image-wrapper">
25
  <a
26
  href="<?php echo esc_url( $event->permalink ); ?>"
27
+ title="<?php echo esc_attr( $event->title ); ?>"
28
  rel="bookmark"
29
  class="tribe-events-calendar-day__event-featured-image-link"
30
  >
src/views/v2/day/event/title.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -19,10 +19,13 @@
19
  <h3 class="tribe-events-calendar-day__event-title tribe-common-h6 tribe-common-h4--min-medium">
20
  <a
21
  href="<?php echo esc_url( $event->permalink ); ?>"
22
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
23
  rel="bookmark"
24
  class="tribe-events-calendar-day__event-title-link tribe-common-anchor-thin"
25
  >
26
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
27
  </a>
28
  </h3>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
19
  <h3 class="tribe-events-calendar-day__event-title tribe-common-h6 tribe-common-h4--min-medium">
20
  <a
21
  href="<?php echo esc_url( $event->permalink ); ?>"
22
+ title="<?php echo esc_attr( $event->title ); ?>"
23
  rel="bookmark"
24
  class="tribe-events-calendar-day__event-title-link tribe-common-anchor-thin"
25
  >
26
+ <?php
27
+ // phpcs:ignore
28
+ echo $event->title;
29
+ ?>
30
  </a>
31
  </h3>
src/views/v2/day/top-bar/datepicker.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var string $now The current date and time in the `Y-m-d H:i:s` format.
15
  * @var object $date_formats Object containing the date formats.
@@ -48,7 +48,12 @@ $datepicker_date = Dates::build_date_object( $selected_date_value )->format( $da
48
  datetime="<?php echo esc_attr( date( 'Y-m-d', $selected_datetime ) ); ?>"
49
  class="tribe-events-c-top-bar__datepicker-time"
50
  >
51
- <?php echo esc_html( $selected_date_label ); ?>
 
 
 
 
 
52
  </time>
53
  </button>
54
  <label
@@ -66,6 +71,7 @@ $datepicker_date = Dates::build_date_object( $selected_date_value )->format( $da
66
  value="<?php echo esc_attr( $datepicker_date ); ?>"
67
  tabindex="-1"
68
  autocomplete="off"
 
69
  />
70
  <div class="tribe-events-c-top-bar__datepicker-container" data-js="tribe-events-top-bar-datepicker-container"></div>
71
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var string $now The current date and time in the `Y-m-d H:i:s` format.
15
  * @var object $date_formats Object containing the date formats.
48
  datetime="<?php echo esc_attr( date( 'Y-m-d', $selected_datetime ) ); ?>"
49
  class="tribe-events-c-top-bar__datepicker-time"
50
  >
51
+ <span class="tribe-events-c-top-bar__datepicker-mobile">
52
+ <?php echo esc_html( $datepicker_date ); ?>
53
+ </span>
54
+ <span class="tribe-events-c-top-bar__datepicker-desktop tribe-common-a11y-hidden">
55
+ <?php echo esc_html( $selected_date_label ); ?>
56
+ </span>
57
  </time>
58
  </button>
59
  <label
71
  value="<?php echo esc_attr( $datepicker_date ); ?>"
72
  tabindex="-1"
73
  autocomplete="off"
74
+ readonly="readonly"
75
  />
76
  <div class="tribe-events-c-top-bar__datepicker-container" data-js="tribe-events-top-bar-datepicker-container"></div>
77
  </div>
src/views/v2/default-template.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * View: Default Template for Events
4
+ *
5
+ * Override this template in your own theme by creating a file at:
6
+ * [your-theme]/tribe/events/v2/default-template.php
7
+ *
8
+ * See more documentation about our views templating system.
9
+ *
10
+ * @link {INSERT_ARTCILE_LINK_HERE}
11
+ *
12
+ * @version 5.0.0
13
+ */
14
+
15
+ use Tribe\Events\Views\V2\Template_Bootstrap;
16
+
17
+ get_header();
18
+ echo tribe( Template_Bootstrap::class )->get_view_html();
19
+ get_footer();
src/views/v2/index.php DELETED
@@ -1,5 +0,0 @@
1
- <?php
2
- use Tribe\Events\Views\V2\Template_Bootstrap;
3
- get_header();
4
- echo tribe( Template_Bootstrap::class )->get_view_html();
5
- get_footer();
 
 
 
 
 
src/views/v2/list.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
@@ -17,6 +17,7 @@
17
  * @var int $should_manage_url int containing if it should manage the URL.
18
  * @var bool $disable_event_search Boolean on whether to disable the event search.
19
  * @var string[] $container_classes Classes used for the container of the view.
 
20
  */
21
 
22
  $header_classes = [ 'tribe-events-header' ];
@@ -30,6 +31,9 @@ if ( empty( $disable_event_search ) ) {
30
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
31
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
32
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
 
 
 
33
  >
34
  <div class="tribe-common-l-container tribe-events-l-container">
35
  <?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
@@ -71,3 +75,5 @@ if ( empty( $disable_event_search ) ) {
71
 
72
  </div>
73
  </div>
 
 
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var array $events The array containing the events.
15
  * @var string $rest_url The REST URL.
17
  * @var int $should_manage_url int containing if it should manage the URL.
18
  * @var bool $disable_event_search Boolean on whether to disable the event search.
19
  * @var string[] $container_classes Classes used for the container of the view.
20
+ * @var array $container_data An additional set of container `data` attributes.
21
  */
22
 
23
  $header_classes = [ 'tribe-events-header' ];
31
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
32
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
33
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
34
+ <?php foreach ( $container_data as $key => $value ) : ?>
35
+ data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
36
+ <?php endforeach; ?>
37
  >
38
  <div class="tribe-common-l-container tribe-events-l-container">
39
  <?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
75
 
76
  </div>
77
  </div>
78
+
79
+ <?php $this->template( 'components/breakpoints' ); ?>
src/views/v2/list/event.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.9
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -19,7 +19,7 @@
19
  $container_classes = [ 'tribe-common-g-row', 'tribe-events-calendar-list__event-row' ];
20
  $container_classes['tribe-events-calendar-list__event-row--featured'] = $event->featured;
21
 
22
- $event_classes = get_post_class( [ 'tribe-events-calendar-list__event', 'tribe-common-g-row', 'tribe-common-g-row--gutters' ], $event->ID );
23
  ?>
24
  <div <?php tribe_classes( $container_classes ); ?>>
25
 
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
19
  $container_classes = [ 'tribe-common-g-row', 'tribe-events-calendar-list__event-row' ];
20
  $container_classes['tribe-events-calendar-list__event-row--featured'] = $event->featured;
21
 
22
+ $event_classes = tribe_get_post_class( [ 'tribe-events-calendar-list__event', 'tribe-common-g-row', 'tribe-common-g-row--gutters' ], $event->ID );
23
  ?>
24
  <div <?php tribe_classes( $container_classes ); ?>>
25
 
src/views/v2/list/event/date-tag.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  * @var \DateTimeInterface $request_date The request date object. This will be "today" if the user did not input any
@@ -29,8 +29,8 @@ $display_date = empty( $is_past ) && ! empty( $request_date )
29
  ? max( $event->dates->start_display, $request_date )
30
  : $event->dates->start_display;
31
 
32
- $event_week_day = $display_date->format( 'D' );
33
- $event_day_num = $display_date->format( 'j' );
34
  $event_date_attr = $display_date->format( Dates::DBDATEFORMAT );
35
  ?>
36
  <div class="tribe-events-calendar-list__event-date-tag tribe-common-g-col">
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  * @var \DateTimeInterface $request_date The request date object. This will be "today" if the user did not input any
29
  ? max( $event->dates->start_display, $request_date )
30
  : $event->dates->start_display;
31
 
32
+ $event_week_day = $display_date->format_i18n( 'D' );
33
+ $event_day_num = $display_date->format_i18n( 'j' );
34
  $event_date_attr = $display_date->format( Dates::DBDATEFORMAT );
35
  ?>
36
  <div class="tribe-events-calendar-list__event-date-tag tribe-common-g-col">
src/views/v2/list/event/description.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -20,6 +20,6 @@ if ( empty( (string) $event->excerpt ) ) {
20
  return;
21
  }
22
  ?>
23
- <div class="tribe-events-calendar-list__event-description tribe-common-b2">
24
  <?php echo (string) $event->excerpt; ?>
25
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
20
  return;
21
  }
22
  ?>
23
+ <div class="tribe-events-calendar-list__event-description tribe-common-b2 tribe-common-a11y-hidden">
24
  <?php echo (string) $event->excerpt; ?>
25
  </div>
src/views/v2/list/event/featured-image.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -24,7 +24,7 @@ if ( ! $event->thumbnail->exists ) {
24
  <div class="tribe-events-calendar-list__event-featured-image-wrapper tribe-common-g-col">
25
  <a
26
  href="<?php echo esc_url( $event->permalink ); ?>"
27
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
28
  rel="bookmark"
29
  class="tribe-events-calendar-list__event-featured-image-link"
30
  >
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
24
  <div class="tribe-events-calendar-list__event-featured-image-wrapper tribe-common-g-col">
25
  <a
26
  href="<?php echo esc_url( $event->permalink ); ?>"
27
+ title="<?php echo esc_attr( $event->title ); ?>"
28
  rel="bookmark"
29
  class="tribe-events-calendar-list__event-featured-image-link"
30
  >
src/views/v2/list/event/title.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -19,10 +19,13 @@
19
  <h3 class="tribe-events-calendar-list__event-title tribe-common-h6 tribe-common-h4--min-medium">
20
  <a
21
  href="<?php echo esc_url( $event->permalink ); ?>"
22
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
23
  rel="bookmark"
24
  class="tribe-events-calendar-list__event-title-link tribe-common-anchor-thin"
25
  >
26
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
27
  </a>
28
  </h3>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
19
  <h3 class="tribe-events-calendar-list__event-title tribe-common-h6 tribe-common-h4--min-medium">
20
  <a
21
  href="<?php echo esc_url( $event->permalink ); ?>"
22
+ title="<?php echo esc_attr( $event->title ); ?>"
23
  rel="bookmark"
24
  class="tribe-events-calendar-list__event-title-link tribe-common-anchor-thin"
25
  >
26
+ <?php
27
+ // phpcs:ignore
28
+ echo $event->title;
29
+ ?>
30
  </a>
31
  </h3>
src/views/v2/list/month-separator.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  * @var \DateTimeInterface $request_date The request date object. This will be "today" if the user did not input any
@@ -46,6 +46,6 @@ $sep_date = empty( $is_past ) && ! empty( $request_date )
46
  datetime="<?php
47
  echo esc_attr( $sep_date->format( 'Y-m' ) ); ?>"
48
  >
49
- <?php echo esc_html( $sep_date->format( 'F Y' ) ); ?>
50
  </time>
51
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  * @var \DateTimeInterface $request_date The request date object. This will be "today" if the user did not input any
46
  datetime="<?php
47
  echo esc_attr( $sep_date->format( 'Y-m' ) ); ?>"
48
  >
49
+ <?php echo esc_html( $sep_date->format_i18n( 'F Y' ) ); ?>
50
  </time>
51
  </div>
src/views/v2/list/nav/next-disabled.php CHANGED
@@ -9,19 +9,21 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  *
14
  */
15
  ?>
16
  <li class="tribe-events-c-nav__list-item tribe-events-c-nav__list-item--next">
17
  <button class="tribe-events-c-nav__next tribe-common-b2 tribe-common-b1--min-medium" disabled>
18
- <?php
19
- $events_label = '<span class="tribe-events-c-nav__next-label-plural"> ' . tribe_get_event_label_plural() . '</span>';
20
- echo wp_kses(
21
- /* translators: %s: Event (plural or singular). */
22
- sprintf( __( 'Next %1$s', 'the-events-calendar' ), $events_label ),
23
- [ 'span' => [ 'class' => [] ] ]
24
- );
25
- ?>
 
 
26
  </button>
27
  </li>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  */
15
  ?>
16
  <li class="tribe-events-c-nav__list-item tribe-events-c-nav__list-item--next">
17
  <button class="tribe-events-c-nav__next tribe-common-b2 tribe-common-b1--min-medium" disabled>
18
+ <span class="tribe-events-c-nav__next-label">
19
+ <?php
20
+ $events_label = '<span class="tribe-events-c-nav__next-label-plural">' . tribe_get_event_label_plural() . '</span>';
21
+ echo wp_kses(
22
+ /* translators: %s: Event (plural or singular). */
23
+ sprintf( __( 'Next %1$s', 'the-events-calendar' ), $events_label ),
24
+ [ 'span' => [ 'class' => [] ] ]
25
+ );
26
+ ?>
27
+ </span>
28
  </button>
29
  </li>
src/views/v2/list/nav/next.php CHANGED
@@ -11,7 +11,7 @@
11
  *
12
  * @var string $link The URL to the next page.
13
  *
14
- * @version 4.9.8
15
  *
16
  */
17
  ?>
@@ -22,13 +22,15 @@
22
  class="tribe-events-c-nav__next tribe-common-b2 tribe-common-b1--min-medium"
23
  data-js="tribe-events-view-link"
24
  >
25
- <?php
26
- $events_label = '<span class="tribe-events-c-nav__next-label-plural"> ' . tribe_get_event_label_plural() . '</span>';
27
- echo wp_kses(
28
- /* translators: %s: Event (plural or singular). */
29
- sprintf( __( 'Next %1$s', 'the-events-calendar' ), $events_label ),
30
- [ 'span' => [ 'class' => [] ] ]
31
- );
32
- ?>
 
 
33
  </a>
34
  </li>
11
  *
12
  * @var string $link The URL to the next page.
13
  *
14
+ * @version 5.0.0
15
  *
16
  */
17
  ?>
22
  class="tribe-events-c-nav__next tribe-common-b2 tribe-common-b1--min-medium"
23
  data-js="tribe-events-view-link"
24
  >
25
+ <span class="tribe-events-c-nav__next-label">
26
+ <?php
27
+ $events_label = '<span class="tribe-events-c-nav__next-label-plural">' . tribe_get_event_label_plural() . '</span>';
28
+ echo wp_kses(
29
+ /* translators: %s: Event (plural or singular). */
30
+ sprintf( __( 'Next %1$s', 'the-events-calendar' ), $events_label ),
31
+ [ 'span' => [ 'class' => [] ] ]
32
+ );
33
+ ?>
34
+ </span>
35
  </a>
36
  </li>
src/views/v2/list/nav/prev-disabled.php CHANGED
@@ -9,19 +9,21 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.10
13
  *
14
  */
15
  ?>
16
  <li class="tribe-events-c-nav__list-item tribe-events-c-nav__list-item--prev">
17
  <button class="tribe-events-c-nav__prev tribe-common-b2 tribe-common-b1--min-medium" disabled>
18
- <?php
19
- $events_label = '<span class="tribe-events-c-nav__prev-label-plural"> ' . tribe_get_event_label_plural() . '</span>';
20
- echo wp_kses(
21
- /* translators: %s: Event (plural or singular). */
22
- sprintf( __( 'Previous %1$s', 'the-events-calendar' ), $events_label ),
23
- [ 'span' => [ 'class' => [] ] ]
24
- );
25
- ?>
 
 
26
  </button>
27
  </li>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  */
15
  ?>
16
  <li class="tribe-events-c-nav__list-item tribe-events-c-nav__list-item--prev">
17
  <button class="tribe-events-c-nav__prev tribe-common-b2 tribe-common-b1--min-medium" disabled>
18
+ <span class="tribe-events-c-nav__prev-label">
19
+ <?php
20
+ $events_label = '<span class="tribe-events-c-nav__prev-label-plural">' . tribe_get_event_label_plural() . '</span>';
21
+ echo wp_kses(
22
+ /* translators: %s: Event (plural or singular). */
23
+ sprintf( __( 'Previous %1$s', 'the-events-calendar' ), $events_label ),
24
+ [ 'span' => [ 'class' => [] ] ]
25
+ );
26
+ ?>
27
+ </span>
28
  </button>
29
  </li>
src/views/v2/list/nav/prev.php CHANGED
@@ -11,7 +11,7 @@
11
  *
12
  * @var string $link The URL to the previous page.
13
  *
14
- * @version 4.9.8
15
  *
16
  */
17
  ?>
@@ -22,13 +22,15 @@
22
  class="tribe-events-c-nav__prev tribe-common-b2 tribe-common-b1--min-medium"
23
  data-js="tribe-events-view-link"
24
  >
25
- <?php
26
- $events_label = '<span class="tribe-events-c-nav__prev-label-plural"> ' . tribe_get_event_label_plural() . '</span>';
27
- echo wp_kses(
28
- /* translators: %s: Event (plural or singular). */
29
- sprintf( __( 'Previous %1$s', 'the-events-calendar' ), $events_label ),
30
- [ 'span' => [ 'class' => [] ] ]
31
- );
32
- ?>
 
 
33
  </a>
34
  </li>
11
  *
12
  * @var string $link The URL to the previous page.
13
  *
14
+ * @version 5.0.0
15
  *
16
  */
17
  ?>
22
  class="tribe-events-c-nav__prev tribe-common-b2 tribe-common-b1--min-medium"
23
  data-js="tribe-events-view-link"
24
  >
25
+ <span class="tribe-events-c-nav__prev-label">
26
+ <?php
27
+ $events_label = '<span class="tribe-events-c-nav__prev-label-plural">' . tribe_get_event_label_plural() . '</span>';
28
+ echo wp_kses(
29
+ /* translators: %s: Event (plural or singular). */
30
+ sprintf( __( 'Previous %1$s', 'the-events-calendar' ), $events_label ),
31
+ [ 'span' => [ 'class' => [] ] ]
32
+ );
33
+ ?>
34
+ </span>
35
  </a>
36
  </li>
src/views/v2/list/top-bar/datepicker.php CHANGED
@@ -9,11 +9,12 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var bool $is_now Whether the date selected in the datepicker is "now" or not.
15
  * @var bool $show_now Whether to show the "Now" label as range start or not.
16
  * @var string $now_label The "Now" text label.
 
17
  * @var bool $show_end Whether to show the end part of the range or not.
18
  * @var string $selected_start_datetime The selected start date and time in the localized `Y-m-d` format.
19
  * @var string $selected_start_date_mobile The formatted date that will show in the datepicker mobile version.
@@ -42,21 +43,26 @@
42
  data-js="tribe-events-top-bar-datepicker-button"
43
  type="button"
44
  >
45
- <?php if ( $show_now ) : ?>
46
- <?php echo esc_html( $now_label ); ?>
47
- <?php else : ?>
48
- <time
49
- datetime="<?php echo esc_attr( $selected_start_datetime ); ?>"
50
- class="tribe-events-c-top-bar__datepicker-time"
51
- >
 
 
 
 
 
52
  <span class="tribe-events-c-top-bar__datepicker-mobile">
53
  <?php echo esc_html( $selected_start_date_mobile ); ?>
54
  </span>
55
  <span class="tribe-events-c-top-bar__datepicker-desktop tribe-common-a11y-hidden">
56
  <?php echo esc_html( $selected_start_date_label ); ?>
57
  </span>
58
- </time>
59
- <?php endif; ?>
60
  <?php if ( $show_end ) : ?>
61
  <span class="tribe-events-c-top-bar__datepicker-separator"> - </span>
62
  <time
@@ -87,6 +93,7 @@
87
  value="<?php echo esc_attr( $datepicker_date ); ?>"
88
  tabindex="-1"
89
  autocomplete="off"
 
90
  />
91
  <div class="tribe-events-c-top-bar__datepicker-container" data-js="tribe-events-top-bar-datepicker-container"></div>
92
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var bool $is_now Whether the date selected in the datepicker is "now" or not.
15
  * @var bool $show_now Whether to show the "Now" label as range start or not.
16
  * @var string $now_label The "Now" text label.
17
+ * @var string $now_label_mobile The "Now" text label for mobile.
18
  * @var bool $show_end Whether to show the end part of the range or not.
19
  * @var string $selected_start_datetime The selected start date and time in the localized `Y-m-d` format.
20
  * @var string $selected_start_date_mobile The formatted date that will show in the datepicker mobile version.
43
  data-js="tribe-events-top-bar-datepicker-button"
44
  type="button"
45
  >
46
+ <time
47
+ datetime="<?php echo esc_attr( $selected_start_datetime ); ?>"
48
+ class="tribe-events-c-top-bar__datepicker-time"
49
+ >
50
+ <?php if ( $show_now ) : ?>
51
+ <span class="tribe-events-c-top-bar__datepicker-mobile">
52
+ <?php echo esc_html( $now_label_mobile ); ?>
53
+ </span>
54
+ <span class="tribe-events-c-top-bar__datepicker-desktop tribe-common-a11y-hidden">
55
+ <?php echo esc_html( $now_label ); ?>
56
+ </span>
57
+ <?php else : ?>
58
  <span class="tribe-events-c-top-bar__datepicker-mobile">
59
  <?php echo esc_html( $selected_start_date_mobile ); ?>
60
  </span>
61
  <span class="tribe-events-c-top-bar__datepicker-desktop tribe-common-a11y-hidden">
62
  <?php echo esc_html( $selected_start_date_label ); ?>
63
  </span>
64
+ <?php endif; ?>
65
+ </time>
66
  <?php if ( $show_end ) : ?>
67
  <span class="tribe-events-c-top-bar__datepicker-separator"> - </span>
68
  <time
93
  value="<?php echo esc_attr( $datepicker_date ); ?>"
94
  tabindex="-1"
95
  autocomplete="off"
96
+ readonly="readonly"
97
  />
98
  <div class="tribe-events-c-top-bar__datepicker-container" data-js="tribe-events-top-bar-datepicker-container"></div>
99
  </div>
src/views/v2/month.php CHANGED
@@ -9,13 +9,14 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var string $rest_url The REST URL.
15
  * @var string $rest_nonce The REST nonce.
16
  * @var int $should_manage_url int containing if it should manage the URL.
17
  * @var bool $disable_event_search Boolean on whether to disable the event search.
18
  * @var string[] $container_classes Classes used for the container of the view.
 
19
  */
20
 
21
  $header_classes = [ 'tribe-events-header' ];
@@ -29,6 +30,9 @@ if ( empty( $disable_event_search ) ) {
29
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
30
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
31
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
 
 
 
32
  >
33
  <div class="tribe-common-l-container tribe-events-l-container">
34
  <?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
@@ -72,3 +76,5 @@ if ( empty( $disable_event_search ) ) {
72
  </div>
73
 
74
  </div>
 
 
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var string $rest_url The REST URL.
15
  * @var string $rest_nonce The REST nonce.
16
  * @var int $should_manage_url int containing if it should manage the URL.
17
  * @var bool $disable_event_search Boolean on whether to disable the event search.
18
  * @var string[] $container_classes Classes used for the container of the view.
19
+ * @var array $container_data An additional set of container `data` attributes.
20
  */
21
 
22
  $header_classes = [ 'tribe-events-header' ];
30
  data-view-rest-nonce="<?php echo esc_attr( $rest_nonce ); ?>"
31
  data-view-rest-url="<?php echo esc_url( $rest_url ); ?>"
32
  data-view-manage-url="<?php echo esc_attr( $should_manage_url ); ?>"
33
+ <?php foreach ( $container_data as $key => $value ) : ?>
34
+ data-view-<?php echo esc_attr( $key ) ?>="<?php echo esc_attr( $value ) ?>"
35
+ <?php endforeach; ?>
36
  >
37
  <div class="tribe-common-l-container tribe-events-l-container">
38
  <?php $this->template( 'components/loader', [ 'text' => __( 'Loading...', 'the-events-calendar' ) ] ); ?>
76
  </div>
77
 
78
  </div>
79
+
80
+ <?php $this->template( 'components/breakpoints' ); ?>
src/views/v2/month/calendar-body/day/calendar-events/calendar-event.php CHANGED
@@ -9,14 +9,14 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.9
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
16
  * @see tribe_get_event() For the format of the event object.
17
  */
18
 
19
- $classes = get_post_class( [ 'tribe-events-calendar-month__calendar-event' ], $event->ID );
20
 
21
  if ( $event->featured ) {
22
  $classes[] = 'tribe-events-calendar-month__calendar-event--featured';
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
16
  * @see tribe_get_event() For the format of the event object.
17
  */
18
 
19
+ $classes = tribe_get_post_class( [ 'tribe-events-calendar-month__calendar-event' ], $event->ID );
20
 
21
  if ( $event->featured ) {
22
  $classes[] = 'tribe-events-calendar-month__calendar-event--featured';
src/views/v2/month/calendar-body/day/calendar-events/calendar-event/featured-image.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -25,7 +25,7 @@ if ( ! $event->featured || ! $event->thumbnail->exists ) {
25
  <div class="tribe-events-calendar-month__calendar-event-featured-image-wrapper">
26
  <a
27
  href="<?php echo esc_url( $event->permalink ); ?>"
28
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
29
  rel="bookmark"
30
  class="tribe-events-calendar-month__calendar-event-featured-image-link"
31
  >
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
25
  <div class="tribe-events-calendar-month__calendar-event-featured-image-wrapper">
26
  <a
27
  href="<?php echo esc_url( $event->permalink ); ?>"
28
+ title="<?php echo esc_attr( $event->title ); ?>"
29
  rel="bookmark"
30
  class="tribe-events-calendar-month__calendar-event-featured-image-link"
31
  >
src/views/v2/month/calendar-body/day/calendar-events/calendar-event/title.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTICLE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -20,13 +20,16 @@
20
  <h3 class="tribe-events-calendar-month__calendar-event-title tribe-common-h8 tribe-common-h--alt">
21
  <a
22
  href="<?php echo esc_url( $event->permalink ) ?>"
23
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
24
  rel="bookmark"
25
  class="tribe-events-calendar-month__calendar-event-title-link tribe-common-anchor-thin"
26
  data-js="tribe-events-tooltip"
27
  data-tooltip-content="#tribe-events-tooltip-content-<?php echo esc_attr( $event->ID ); ?>"
28
  aria-describedby="tribe-events-tooltip-content-<?php echo esc_attr( $event->ID ); ?>"
29
  >
30
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
31
  </a>
32
  </h3>
9
  *
10
  * @link {INSERT_ARTICLE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
20
  <h3 class="tribe-events-calendar-month__calendar-event-title tribe-common-h8 tribe-common-h--alt">
21
  <a
22
  href="<?php echo esc_url( $event->permalink ) ?>"
23
+ title="<?php echo esc_attr( $event->title ); ?>"
24
  rel="bookmark"
25
  class="tribe-events-calendar-month__calendar-event-title-link tribe-common-anchor-thin"
26
  data-js="tribe-events-tooltip"
27
  data-tooltip-content="#tribe-events-tooltip-content-<?php echo esc_attr( $event->ID ); ?>"
28
  aria-describedby="tribe-events-tooltip-content-<?php echo esc_attr( $event->ID ); ?>"
29
  >
30
+ <?php
31
+ // phpcs:ignore
32
+ echo $event->title;
33
+ ?>
34
  </a>
35
  </h3>
src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/featured-image.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.11
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -23,7 +23,7 @@ if ( ! $event->thumbnail->exists ) {
23
  <div class="tribe-events-calendar-month__calendar-event-tooltip-featured-image-wrapper">
24
  <a
25
  href="<?php echo esc_url( $event->permalink ); ?>"
26
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
27
  rel="bookmark"
28
  class="tribe-events-calendar-month__calendar-event-tooltip-featured-image-link"
29
  >
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
23
  <div class="tribe-events-calendar-month__calendar-event-tooltip-featured-image-wrapper">
24
  <a
25
  href="<?php echo esc_url( $event->permalink ); ?>"
26
+ title="<?php echo esc_attr( $event->title ); ?>"
27
  rel="bookmark"
28
  class="tribe-events-calendar-month__calendar-event-tooltip-featured-image-link"
29
  >
src/views/v2/month/calendar-body/day/calendar-events/calendar-event/tooltip/title.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTICLE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -20,10 +20,13 @@
20
  <h3 class="tribe-events-calendar-month__calendar-event-tooltip-title tribe-common-h7">
21
  <a
22
  href="<?php echo esc_url( $event->permalink ) ?>"
23
- title="<?php echo esc_attr( get_the_title( $event->ID ) ); ?>"
24
  rel="bookmark"
25
  class="tribe-events-calendar-month__calendar-event-tooltip-title-link tribe-common-anchor-thin"
26
  >
27
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
28
  </a>
29
  </h3>
9
  *
10
  * @link {INSERT_ARTICLE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
20
  <h3 class="tribe-events-calendar-month__calendar-event-tooltip-title tribe-common-h7">
21
  <a
22
  href="<?php echo esc_url( $event->permalink ) ?>"
23
+ title="<?php echo esc_attr( $event->title ); ?>"
24
  rel="bookmark"
25
  class="tribe-events-calendar-month__calendar-event-tooltip-title-link tribe-common-anchor-thin"
26
  >
27
+ <?php
28
+ // phpcs:ignore
29
+ echo $event->title;
30
+ ?>
31
  </a>
32
  </h3>
src/views/v2/month/calendar-body/day/multiday-events/multiday-event.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var string $day_date The `Y-m-d` date of the day currently being displayed.
15
  * @var string $today_date Today's date in the `Y-m-d` format.
@@ -31,7 +31,7 @@ use Tribe__Date_Utils as Dates;
31
  $should_display = $event->dates->start_display->format( 'Y-m-d' ) === $day_date
32
  || $is_start_of_week;
33
 
34
- $classes = get_post_class( [ 'tribe-events-calendar-month__multiday-event' ], $event->ID );
35
 
36
  // @todo @fe move class configuration to template tag
37
 
@@ -68,8 +68,6 @@ if ( $should_display ) {
68
  $classes[] = 'tribe-events-calendar-month__multiday-event--past';
69
  }
70
  }
71
-
72
- $classes = get_post_class( $classes, $event->ID );
73
  ?>
74
  <div class="tribe-events-calendar-month__multiday-event-wrapper">
75
  <article <?php tribe_classes( $classes ); ?> data-event-id="<?php echo esc_attr( $event->ID ); ?>">
@@ -95,7 +93,10 @@ $classes = get_post_class( $classes, $event->ID );
95
  ></em>
96
  <?php endif; ?>
97
  <h3 class="tribe-events-calendar-month__multiday-event-hidden-title tribe-common-h8">
98
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
99
  </h3>
100
  </a>
101
  </div>
@@ -110,7 +111,10 @@ $classes = get_post_class( $classes, $event->ID );
110
  ></em>
111
  <?php endif; ?>
112
  <h3 class="tribe-events-calendar-month__multiday-event-bar-title tribe-common-h8">
113
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
114
  </h3>
115
  </div>
116
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var string $day_date The `Y-m-d` date of the day currently being displayed.
15
  * @var string $today_date Today's date in the `Y-m-d` format.
31
  $should_display = $event->dates->start_display->format( 'Y-m-d' ) === $day_date
32
  || $is_start_of_week;
33
 
34
+ $classes = tribe_get_post_class( [ 'tribe-events-calendar-month__multiday-event' ], $event->ID );
35
 
36
  // @todo @fe move class configuration to template tag
37
 
68
  $classes[] = 'tribe-events-calendar-month__multiday-event--past';
69
  }
70
  }
 
 
71
  ?>
72
  <div class="tribe-events-calendar-month__multiday-event-wrapper">
73
  <article <?php tribe_classes( $classes ); ?> data-event-id="<?php echo esc_attr( $event->ID ); ?>">
93
  ></em>
94
  <?php endif; ?>
95
  <h3 class="tribe-events-calendar-month__multiday-event-hidden-title tribe-common-h8">
96
+ <?php
97
+ // phpcs:ignore
98
+ echo $event->title;
99
+ ?>
100
  </h3>
101
  </a>
102
  </div>
111
  ></em>
112
  <?php endif; ?>
113
  <h3 class="tribe-events-calendar-month__multiday-event-bar-title tribe-common-h8">
114
+ <?php
115
+ // phpcs:ignore
116
+ echo $event->title;
117
+ ?>
118
  </h3>
119
  </div>
120
  </div>
src/views/v2/month/mobile-events/mobile-day/mobile-event.php CHANGED
@@ -9,13 +9,13 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.9
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
16
  * @see tribe_get_event() For the format of the event object.
17
  */
18
- $classes = get_post_class( [ 'tribe-events-calendar-month-mobile-events__mobile-event' ], $event->ID );
19
  $classes['tribe-events-calendar-month-mobile-events__mobile-event--featured'] = $event->featured;
20
  ?>
21
 
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
16
  * @see tribe_get_event() For the format of the event object.
17
  */
18
+ $classes = tribe_get_post_class( [ 'tribe-events-calendar-month-mobile-events__mobile-event' ], $event->ID );
19
  $classes['tribe-events-calendar-month-mobile-events__mobile-event--featured'] = $event->featured;
20
  ?>
21
 
src/views/v2/month/mobile-events/mobile-day/mobile-event/title.php CHANGED
@@ -9,7 +9,7 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
@@ -22,10 +22,13 @@ $classes = [ 'tribe-events-calendar-month-mobile-events__mobile-event-title', 't
22
  <h3 <?php tribe_classes( $classes ); ?>>
23
  <a
24
  href="<?php echo esc_url( $event->permalink ) ?>"
25
- title="<?php echo esc_attr( get_the_title( $event->ID ) ) ?>"
26
  rel="bookmark"
27
  class="tribe-events-calendar-month-mobile-events__mobile-event-title-link tribe-common-anchor"
28
  >
29
- <?php echo wp_kses_post( get_the_title( $event->ID ) ); ?>
 
 
 
30
  </a>
31
  </h3>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
  * @var WP_Post $event The event post object with properties added by the `tribe_get_event` function.
15
  *
22
  <h3 <?php tribe_classes( $classes ); ?>>
23
  <a
24
  href="<?php echo esc_url( $event->permalink ) ?>"
25
+ title="<?php echo esc_attr( $event->title ) ?>"
26
  rel="bookmark"
27
  class="tribe-events-calendar-month-mobile-events__mobile-event-title-link tribe-common-anchor"
28
  >
29
+ <?php
30
+ // phpcs:ignore
31
+ echo $event->title;
32
+ ?>
33
  </a>
34
  </h3>
src/views/v2/month/top-bar/datepicker.php CHANGED
@@ -9,15 +9,17 @@
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
- * @version 4.9.13
13
  *
14
- * @var string $now The current date and time in the `Y-m-d H:i:s` format.
15
- * @var string $grid_date The current calendar grid date in the `Y-m-d` format.
16
- * @var string $formatted_grid_date The current calendar grid date in the format specified by the "Month and year
17
- * format" option.
18
- * @var object $date_formats Object containing the date formats.
19
- * @var \DateTime $the_date The Month current date object.
20
- * @var bool $show_datepicker_submit Boolean on whether to show the datepicker submit button.
 
 
21
  */
22
  use Tribe__Date_Utils as Dates;
23
 
@@ -45,7 +47,12 @@ $datepicker_date = Dates::build_date_object( $selected_date_value )->format(
45
  datetime="<?php echo esc_attr( $the_date->format( 'Y-m' ) ); ?>"
46
  class="tribe-events-c-top-bar__datepicker-time"
47
  >
48
- <?php echo esc_html( $formatted_grid_date ); ?>
 
 
 
 
 
49
  </time>
50
  </button>
51
  <label
@@ -63,6 +70,7 @@ $datepicker_date = Dates::build_date_object( $selected_date_value )->format(
63
  value="<?php echo esc_attr( $datepicker_date ); ?>"
64
  tabindex="-1"
65
  autocomplete="off"
 
66
  />
67
  <div class="tribe-events-c-top-bar__datepicker-container" data-js="tribe-events-top-bar-datepicker-container"></div>
68
  </div>
9
  *
10
  * @link {INSERT_ARTCILE_LINK_HERE}
11
  *
12
+ * @version 5.0.0
13
  *
14
+ * @var string $now The current date and time in the `Y-m-d H:i:s` format.
15
+ * @var string $grid_date The current calendar grid date in the `Y-m-d` format.
16
+ * @var string $formatted_grid_date The current calendar grid date in the format specified by the "Month and
17
+ * year format" option.
18
+ * @var string $formatted_grid_date_mobile The current calendar grid date in the format specified by the "Compact
19
+ * Date Format" option.
20
+ * @var object $date_formats Object containing the date formats.
21
+ * @var \DateTime $the_date The Month current date object.
22
+ * @var bool $show_datepicker_submit Boolean on whether to show the datepicker submit button.
23
  */
24
  use Tribe__Date_Utils as Dates;
25
 
47
  datetime="<?php echo esc_attr( $the_date->format( 'Y-m' ) ); ?>"
48
  class="tribe-events-c-top-bar__datepicker-time"
49
  >
50
+ <span class="tribe-events-c-top-bar__datepicker-mobile">
51
+ <?php echo esc_html( $formatted_grid_date_mobile ); ?>
52
+ </span>
53
+ <span class="tribe-events-c-top-bar__datepicker-desktop tribe-common-a11y-hidden">
54
+ <?php echo esc_html( $formatted_grid_date ); ?>
55
+ </span>
56
  </time>
57
  </button>
58
  <label
70
  value="<?php echo esc_attr( $datepicker_date ); ?>"
71
  tabindex="-1"
72
  autocomplete="off"
73
+ readonly="readonly"
74
  />
75
  <div class="tribe-events-c-top-bar__datepicker-container" data-js="tribe-events-top-bar-datepicker-container"></div>
76
  </div>
the-events-calendar.php CHANGED
@@ -2,7 +2,7 @@
2
  /**
3
  * Plugin Name: The Events Calendar
4
  * Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
- * Version: 4.9.14
6
  * Author: Modern Tribe, Inc.
7
  * Author URI: http://m.tri.be/1x
8
  * Text Domain: the-events-calendar
2
  /**
3
  * Plugin Name: The Events Calendar
4
  * Description: The Events Calendar is a carefully crafted, extensible plugin that lets you easily share your events. Beautiful. Solid. Awesome.
5
+ * Version: 5.0.0
6
  * Author: Modern Tribe, Inc.
7
  * Author URI: http://m.tri.be/1x
8
  * Text Domain: the-events-calendar
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit21045e0b9799edab4f7e2ed6cf686fe6::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit90b2d40d30293114448f01fa5aadf76f::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
10
  'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
11
  'Tribe\\Events\\Service_Providers\\Context' => $baseDir . '/src/Tribe/Service_Providers/Context.php',
@@ -27,6 +28,7 @@ return array(
27
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\BreadcrumbTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/BreadcrumbTest.php',
28
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\Linked_BreadcrumbTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/Linked_BreadcrumbTest.php',
29
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\BreadcrumbsTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/BreadcrumbsTest.php',
 
30
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\DataTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/DataTest.php',
31
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_BarTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_BarTest.php',
32
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_Bar\\FiltersTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_Bar/FiltersTest.php',
@@ -136,6 +138,7 @@ return array(
136
  'Tribe\\Events\\Views\\V2\\Repository\\Events_Result_Set' => $baseDir . '/src/Tribe/Views/V2/Repository/Events_Result_Set.php',
137
  'Tribe\\Events\\Views\\V2\\Rest_Endpoint' => $baseDir . '/src/Tribe/Views/V2/Rest_Endpoint.php',
138
  'Tribe\\Events\\Views\\V2\\Rest_EndpointTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Rest_EndpointTest.php',
 
139
  'Tribe\\Events\\Views\\V2\\Service_Provider' => $baseDir . '/src/Tribe/Views/V2/Service_Provider.php',
140
  'Tribe\\Events\\Views\\V2\\Template' => $baseDir . '/src/Tribe/Views/V2/Template.php',
141
  'Tribe\\Events\\Views\\V2\\TemplateBootstrapTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/TemplateBootstrapTest.php',
@@ -189,11 +192,13 @@ return array(
189
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthDayTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthDayTest.php',
190
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthEventMultidayTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthEventMultidayTest.php',
191
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\Tooltip\\MonthTooltipCostTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/Tooltip/MonthTooltipCostTest.php',
192
- 'Tribe\\Events\\Views\\V2\\Views\\List_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/List_Behavior.php',
193
- 'Tribe\\Events\\Views\\V2\\Views\\List_BehaviorTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/List_BehaviorTest.php',
194
  'Tribe\\Events\\Views\\V2\\Views\\List_View' => $baseDir . '/src/Tribe/Views/V2/Views/List_View.php',
195
  'Tribe\\Events\\Views\\V2\\Views\\List_ViewTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/List_ViewTest.php',
196
  'Tribe\\Events\\Views\\V2\\Views\\Month_View' => $baseDir . '/src/Tribe/Views/V2/Views/Month_View.php',
197
  'Tribe\\Events\\Views\\V2\\Views\\Month_ViewTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Month_ViewTest.php',
198
  'Tribe\\Events\\Views\\V2\\Views\\Reflector_View' => $baseDir . '/src/Tribe/Views/V2/Views/Reflector_View.php',
 
 
 
 
199
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Tribe\\Events\\Collections\\Lazy_Post_Collection' => $baseDir . '/src/Tribe/Collections/Lazy_Post_Collection.php',
10
  'Tribe\\Events\\Models\\Post_Types\\Event' => $baseDir . '/src/Tribe/Models/Post_Types/Event.php',
11
  'Tribe\\Events\\Models\\Post_Types\\Venue' => $baseDir . '/src/Tribe/Models/Post_Types/Venue.php',
12
  'Tribe\\Events\\Service_Providers\\Context' => $baseDir . '/src/Tribe/Service_Providers/Context.php',
28
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\BreadcrumbTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/BreadcrumbTest.php',
29
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\Linked_BreadcrumbTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/Linked_BreadcrumbTest.php',
30
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\BreadcrumbsTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/BreadcrumbsTest.php',
31
+ 'Tribe\\Events\\Views\\V2\\Partials\\Components\\BreakpointsTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/BreakpointsTest.php',
32
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\DataTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/DataTest.php',
33
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_BarTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_BarTest.php',
34
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_Bar\\FiltersTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_Bar/FiltersTest.php',
138
  'Tribe\\Events\\Views\\V2\\Repository\\Events_Result_Set' => $baseDir . '/src/Tribe/Views/V2/Repository/Events_Result_Set.php',
139
  'Tribe\\Events\\Views\\V2\\Rest_Endpoint' => $baseDir . '/src/Tribe/Views/V2/Rest_Endpoint.php',
140
  'Tribe\\Events\\Views\\V2\\Rest_EndpointTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Rest_EndpointTest.php',
141
+ 'Tribe\\Events\\Views\\V2\\Rewrite' => $baseDir . '/src/Tribe/Views/V2/Rewrite.php',
142
  'Tribe\\Events\\Views\\V2\\Service_Provider' => $baseDir . '/src/Tribe/Views/V2/Service_Provider.php',
143
  'Tribe\\Events\\Views\\V2\\Template' => $baseDir . '/src/Tribe/Views/V2/Template.php',
144
  'Tribe\\Events\\Views\\V2\\TemplateBootstrapTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/TemplateBootstrapTest.php',
192
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthDayTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthDayTest.php',
193
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthEventMultidayTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthEventMultidayTest.php',
194
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\Tooltip\\MonthTooltipCostTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/Tooltip/MonthTooltipCostTest.php',
 
 
195
  'Tribe\\Events\\Views\\V2\\Views\\List_View' => $baseDir . '/src/Tribe/Views/V2/Views/List_View.php',
196
  'Tribe\\Events\\Views\\V2\\Views\\List_ViewTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/List_ViewTest.php',
197
  'Tribe\\Events\\Views\\V2\\Views\\Month_View' => $baseDir . '/src/Tribe/Views/V2/Views/Month_View.php',
198
  'Tribe\\Events\\Views\\V2\\Views\\Month_ViewTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Month_ViewTest.php',
199
  'Tribe\\Events\\Views\\V2\\Views\\Reflector_View' => $baseDir . '/src/Tribe/Views/V2/Views/Reflector_View.php',
200
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\Breakpoint_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php',
201
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_Cache' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/HTML_Cache.php',
202
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => $baseDir . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
203
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_BehaviorTest' => $baseDir . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/List_BehaviorTest.php',
204
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit21045e0b9799edab4f7e2ed6cf686fe6
6
  {
7
  private static $loader;
8
 
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit21045e0b9799edab4f7e2ed6cf686fe6
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInit21045e0b9799edab4f7e2ed6cf686fe6', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInit21045e0b9799edab4f7e2ed6cf686fe6', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
- call_user_func(\Composer\Autoload\ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit90b2d40d30293114448f01fa5aadf76f
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit90b2d40d30293114448f01fa5aadf76f', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit90b2d40d30293114448f01fa5aadf76f', 'loadClassLoader'));
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
  require_once __DIR__ . '/autoload_static.php';
29
 
30
+ call_user_func(\Composer\Autoload\ComposerStaticInit90b2d40d30293114448f01fa5aadf76f::getInitializer($loader));
31
  } else {
32
  $map = require __DIR__ . '/autoload_namespaces.php';
33
  foreach ($map as $namespace => $path) {
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
@@ -31,6 +31,7 @@ class ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6
31
  );
32
 
33
  public static $classMap = array (
 
34
  'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
35
  'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
36
  'Tribe\\Events\\Service_Providers\\Context' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Context.php',
@@ -52,6 +53,7 @@ class ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6
52
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\BreadcrumbTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/BreadcrumbTest.php',
53
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\Linked_BreadcrumbTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/Linked_BreadcrumbTest.php',
54
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\BreadcrumbsTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/BreadcrumbsTest.php',
 
55
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\DataTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/DataTest.php',
56
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_BarTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_BarTest.php',
57
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_Bar\\FiltersTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_Bar/FiltersTest.php',
@@ -161,6 +163,7 @@ class ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6
161
  'Tribe\\Events\\Views\\V2\\Repository\\Events_Result_Set' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Repository/Events_Result_Set.php',
162
  'Tribe\\Events\\Views\\V2\\Rest_Endpoint' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Rest_Endpoint.php',
163
  'Tribe\\Events\\Views\\V2\\Rest_EndpointTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Rest_EndpointTest.php',
 
164
  'Tribe\\Events\\Views\\V2\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Service_Provider.php',
165
  'Tribe\\Events\\Views\\V2\\Template' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Template.php',
166
  'Tribe\\Events\\Views\\V2\\TemplateBootstrapTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/TemplateBootstrapTest.php',
@@ -214,21 +217,23 @@ class ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6
214
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthDayTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthDayTest.php',
215
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthEventMultidayTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthEventMultidayTest.php',
216
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\Tooltip\\MonthTooltipCostTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/Tooltip/MonthTooltipCostTest.php',
217
- 'Tribe\\Events\\Views\\V2\\Views\\List_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/List_Behavior.php',
218
- 'Tribe\\Events\\Views\\V2\\Views\\List_BehaviorTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/List_BehaviorTest.php',
219
  'Tribe\\Events\\Views\\V2\\Views\\List_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/List_View.php',
220
  'Tribe\\Events\\Views\\V2\\Views\\List_ViewTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/List_ViewTest.php',
221
  'Tribe\\Events\\Views\\V2\\Views\\Month_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Month_View.php',
222
  'Tribe\\Events\\Views\\V2\\Views\\Month_ViewTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Month_ViewTest.php',
223
  'Tribe\\Events\\Views\\V2\\Views\\Reflector_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Reflector_View.php',
 
 
 
 
224
  );
225
 
226
  public static function getInitializer(ClassLoader $loader)
227
  {
228
  return \Closure::bind(function () use ($loader) {
229
- $loader->prefixLengthsPsr4 = ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6::$prefixLengthsPsr4;
230
- $loader->prefixDirsPsr4 = ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6::$prefixDirsPsr4;
231
- $loader->classMap = ComposerStaticInit21045e0b9799edab4f7e2ed6cf686fe6::$classMap;
232
 
233
  }, null, ClassLoader::class);
234
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit90b2d40d30293114448f01fa5aadf76f
8
  {
9
  public static $prefixLengthsPsr4 = array (
10
  'T' =>
31
  );
32
 
33
  public static $classMap = array (
34
+ 'Tribe\\Events\\Collections\\Lazy_Post_Collection' => __DIR__ . '/../..' . '/src/Tribe/Collections/Lazy_Post_Collection.php',
35
  'Tribe\\Events\\Models\\Post_Types\\Event' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Event.php',
36
  'Tribe\\Events\\Models\\Post_Types\\Venue' => __DIR__ . '/../..' . '/src/Tribe/Models/Post_Types/Venue.php',
37
  'Tribe\\Events\\Service_Providers\\Context' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/Context.php',
53
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\BreadcrumbTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/BreadcrumbTest.php',
54
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Breadcrumb\\Linked_BreadcrumbTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Breadcrumbs/Linked_BreadcrumbTest.php',
55
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\BreadcrumbsTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/BreadcrumbsTest.php',
56
+ 'Tribe\\Events\\Views\\V2\\Partials\\Components\\BreakpointsTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/BreakpointsTest.php',
57
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\DataTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/DataTest.php',
58
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_BarTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_BarTest.php',
59
  'Tribe\\Events\\Views\\V2\\Partials\\Components\\Events_Bar\\FiltersTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Partials/Components/Events_Bar/FiltersTest.php',
163
  'Tribe\\Events\\Views\\V2\\Repository\\Events_Result_Set' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Repository/Events_Result_Set.php',
164
  'Tribe\\Events\\Views\\V2\\Rest_Endpoint' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Rest_Endpoint.php',
165
  'Tribe\\Events\\Views\\V2\\Rest_EndpointTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Rest_EndpointTest.php',
166
+ 'Tribe\\Events\\Views\\V2\\Rewrite' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Rewrite.php',
167
  'Tribe\\Events\\Views\\V2\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Service_Provider.php',
168
  'Tribe\\Events\\Views\\V2\\Template' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Template.php',
169
  'Tribe\\Events\\Views\\V2\\TemplateBootstrapTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/TemplateBootstrapTest.php',
217
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthDayTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthDayTest.php',
218
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\MonthEventMultidayTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/MonthEventMultidayTest.php',
219
  'Tribe\\Events\\Views\\V2\\Views\\HTML\\Month\\Tooltip\\MonthTooltipCostTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/HTML/Month/Tooltip/MonthTooltipCostTest.php',
 
 
220
  'Tribe\\Events\\Views\\V2\\Views\\List_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/List_View.php',
221
  'Tribe\\Events\\Views\\V2\\Views\\List_ViewTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/List_ViewTest.php',
222
  'Tribe\\Events\\Views\\V2\\Views\\Month_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Month_View.php',
223
  'Tribe\\Events\\Views\\V2\\Views\\Month_ViewTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Month_ViewTest.php',
224
  'Tribe\\Events\\Views\\V2\\Views\\Reflector_View' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Reflector_View.php',
225
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\Breakpoint_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/Breakpoint_Behavior.php',
226
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\HTML_Cache' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/HTML_Cache.php',
227
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_Behavior' => __DIR__ . '/../..' . '/src/Tribe/Views/V2/Views/Traits/List_Behavior.php',
228
+ 'Tribe\\Events\\Views\\V2\\Views\\Traits\\List_BehaviorTest' => __DIR__ . '/../..' . '/tests/views_integration/Tribe/Events/Views/V2/Views/Traits/List_BehaviorTest.php',
229
  );
230
 
231
  public static function getInitializer(ClassLoader $loader)
232
  {
233
  return \Closure::bind(function () use ($loader) {
234
+ $loader->prefixLengthsPsr4 = ComposerStaticInit90b2d40d30293114448f01fa5aadf76f::$prefixLengthsPsr4;
235
+ $loader->prefixDirsPsr4 = ComposerStaticInit90b2d40d30293114448f01fa5aadf76f::$prefixDirsPsr4;
236
+ $loader->classMap = ComposerStaticInit90b2d40d30293114448f01fa5aadf76f::$classMap;
237
 
238
  }, null, ClassLoader::class);
239
  }